diff --git a/.env.development b/.env.development index e4ba8ca..89869c5 100644 --- a/.env.development +++ b/.env.development @@ -1,2 +1,3 @@ -VITE_PROXY_URL="http://wofbi001.local:8080" +VITE_PROXY_URL="http://101.133.164.151:30090" VITE_BASE_URL="/api" +VITE_OSS_BASE_URL="https://sichiao-dev.oss-cn-hangzhou.aliyuncs.com/" diff --git a/.env.production b/.env.production index 16b792e..ef49606 100644 --- a/.env.production +++ b/.env.production @@ -1,2 +1,3 @@ -VITE_PROXY_URL=None -VITE_BASE_URL="http://wofbi001.local" +VITE_PROXY_URL="http://101.133.164.151:30090" +VITE_BASE_URL="/api" +VITE_OSS_BASE_URL="https://sichiao-dev.oss-cn-hangzhou.aliyuncs.com/" \ No newline at end of file diff --git a/.gitignore b/.gitignore index 74db5bc..c162c8a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,9 +5,6 @@ unpackage/ src/pages.json /stats.html -yarn.lock -package-lock.json - # 本地环境文件 .env.local .env.*.local diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json index 4bbcf3c..4436417 100644 --- a/.hbuilderx/launch.json +++ b/.hbuilderx/launch.json @@ -1,24 +1,26 @@ -{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ - // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 - "version": "0.0", - "configurations": [{ - "app-plus" : - { - "launchtype" : "local" - }, - "default" : - { - "launchtype" : "local" - }, - "h5" : - { - "launchtype" : "local" - }, - "mp-weixin" : - { - "launchtype" : "local" - }, - "type" : "uniCloud" - } +{ + // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version" : "0.0", + "configurations" : [ + { + "app-plus" : { + "launchtype" : "local" + }, + "default" : { + "launchtype" : "local" + }, + "h5" : { + "launchtype" : "local" + }, + "mp-weixin" : { + "launchtype" : "local" + }, + "type" : "uniCloud" + }, + { + "playground" : "standard", + "type" : "uni-app:app-android" + } ] } diff --git a/.husky/post-merge b/.husky/post-merge new file mode 100755 index 0000000..fe82e24 --- /dev/null +++ b/.husky/post-merge @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +yarn trans:token diff --git a/.husky/pre-commit b/.husky/pre-commit index 9c1aa48..33e1bfb 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -npx lint-staged --allow-empty "$1" +npx lint-staged "$1" diff --git a/@types/api/index.d.ts b/@types/api/index.d.ts index 274c688..cc3297a 100644 --- a/@types/api/index.d.ts +++ b/@types/api/index.d.ts @@ -1,368 +1,137 @@ /* tslint:disable */ /* eslint-disable */ -// Generated using typescript-generator version 2.36.1070 on 2022-05-04 22:47:24. - -interface CreateReportDto { - reason: string -} - -interface EchoDto { - id: number - uuid: string - content: string - createdTime: Date - updatedTime: Date -} - -interface Email { - to: string - subject: string - content: string -} - -interface EnumDataDto { - description: string - value: string -} - -interface InitDto {} - -interface PageDto { - current: number - total: number - desire_size: number - current_size: number - data: M[] -} - -interface Converter {} - -interface ResponseDto { - code: string - message: string - data: T - is_failure: boolean - attachments: string[] - _failure: boolean -} - -interface UpvoteDto { - id: number - uuid: string - type: UpvoteType - upvote_num: number -} - -interface CommentDto { - id: number - uuid: string - user: UserBriefInfoDto - project_id: number - paragraph: ParagraphDto - content: string - topic: CommentTopicDto - eldest_sub_comment: SubCommentDto - second_sub_comment: SubCommentDto - comment_num: number - coin_num: number - upvote_num: number - status: Status - created_time: Date - updated_time: Date -} - -interface CommentTopicDto { - id: number - uuid: string - user_id: number - project_id: number - top_id: number - content: string - status: Status - created_time: Date - updated_time: Date -} - -interface CreateCommentDto { - paragraph_id: number - topic_id: number - content: string -} - -interface CreateSubCommentDto { - paragraph_id: number - content: string -} - -interface SubCommentDto { - id: number - uuid: string - user: UserBriefInfoDto - replyUser: UserBriefInfoDto - project_id: number - paragraph: ParagraphDto - root_comment_id: number - content: string - comment_num: number - coin_num: number - upvote_num: number - status: Status - created_time: Date - updated_time: Date -} - -interface ComponentDto {} - -interface CreateParagraphDto { - position: number - content: string - type: ComponentType -} - -interface CreateReferenceDto { - project_id: number - position: number - target_type: string - target_id: string -} - -interface CreateTextComponentDto { - content: string -} - -interface CreateTextModificationDto { - content: string -} - -interface ParagraphDto { - id: number - uuid: string - user_id: number - project_id: number - position: number - component: ComponentDto - component_type: ComponentType - component_uuid: string - status: ParagraphStatus - created_time: Date - updated_time: Date -} - -interface TextDto extends ComponentDto { - id: number - uuid: string - user_id: number - content: string - status: Status - created_time: Date - updated_time: Date -} - -interface TextModificationDto { - id: number - uuid: string - user_id: number - text_id: number - content: string - status: ModificationStatus - created_time: Date - updated_time: Date -} - -interface CreateProjectDto { - title: string - description: string - tagIds: number[] - visibility: Visibility -} - -interface CreateProjectTagDto { - name: string -} - -interface ProjectDto { - id: number - title: string - description: string - cover: string; - user: UserBriefInfoDto - contributors: UserBriefInfoDto[] - tags: ProjectTagDto[] - coin_num: number - participant_num: number - upvote_num: number - visibility: Visibility - status: Status - createdTime: Date - updatedTime: Date -} - -interface ProjectTagDto { - id: number - description: string - uuid: string - name: string -} - -interface CreateUserDto {} +// Generated using typescript-generator version 2.36.1070 on 2022-11-19 15:15:40. +// 登录接口参数 interface LoginDto { account: string password: string - auth_type: AuthType - code: string -} - -interface LoginSystemUserDto { - id: number - nickname: string - token: string - roles: string[] - status: Status + authType: AuthType } +// 登录返回用户信息接口 interface LoginUserDto { - id: number uuid: string email: string phone: string username: string - gender: Gender - avatar: string - signature: string - nickname: string - project_num: number - comment_num: number - coin_num: number - upvote_num: number - experience_point: number - setting_json: string - token: string - roles: Role[] - status: Status - created_time: Date + gender: string + token: any } +// 注册接口请求参数 interface RegisterDto { account: string password: string code: number - username: string -} - -interface SystemLoginDto { - account: string - password: string -} - -interface TokenDto { - token: string -} - -interface UpdateUserAuthDto { - password: string -} - -interface UpdateUserDto { - nickname: string - gender: Gender - avatar: string - signature: string } -interface UpdateUserRoleDto { - roles: string[] +// 创建内容请求参数 +interface CreateContentDto { + uuid?: string + createContentType: string + contentText: string + contentStruct?: string + isWork: boolean } -interface UserAuthInfoDto { - id: number - uuid: string - email: string - phone: string - username: string - gender: string - avatar: string - signature: string - nickname: string - project_num: string - comment_num: string - coin_num: string - upvote_num: string - experience_point: string - setting_json: string - token: string - roles: string[] - status: string - created_time: string +// 同时创建标题加内容请求参数 +interface CreateTitleContentDto { + titleText: string + labels: string[] + contentText: string + contentStruct: string + isWork: boolean } -interface UserBriefInfoDto { - id: number +interface RecommendationDto { + titleUuid: string + titleText: string + contentUuid: string + contentText: string + userUuid: string username: string - gender: Gender - avatar: string - signature: string - nickname: string - experience_point: number + isWork: boolean } -interface UserDto { - id: number +// 兄弟节点子节点返回参数限制 +interface NodeDto { + contentText: string + userUuid: string username: string - gender: Gender - avatar: string - signature: string - nickname: string - experience_point: number -} - -interface VerificationCodeDto { - code: number - account: string -} - -interface EnumDataInterface { - value: string - description: string -} - -type EnumData = - | 'AUTHENTICATION_STATUS' - | 'MODIFICATION_STATUS' - | 'PARAGRAPH_STATUS' - | 'STATUS' - | 'VISIBILITY' - | 'ACCOUNT_TYPE' - | 'AUTH_TYPE' - | 'COMPONENT_TYPE' - | 'CONTACT_TYPE' - | 'GENDER' - | 'REPORT_TYPE' - | 'ROLE' - | 'UPVOTE_TYPE' - -type AuthenticationStatus = 'NORMAL' | 'EXPIRED' | 'INVALID' | 'NEED_REFRESH' - -type ModificationStatus = 'NORMAL' | 'BANNED' | 'DELETED' | 'PEND_REVIEW' | 'REVIEW_FAILED' - -type ParagraphStatus = 'NORMAL' | 'BANNED' | 'DELETED' | 'PEND_REVIEW' | 'REVIEW_FAILED' - -type Status = 'NORMAL' | 'BANNED' | 'DELETED' - -type Visibility = 'PUBLIC' | 'PRIVATE' - -type AccountType = 'EMAIL' | 'PHONE' | 'USERNAME' + titleUuid: string + contentUuid: string + contentStruct: string + upvoteCount: number + downvoteCount: number + createTime: string + isWork: boolean +} + +// 前端数据结构接口 +// 渲染内容item +interface Iitem { + id: string + type: string + textValue?: string + list?: string[] +} + +// 节点接口 +interface INode { + index: number + userUuid: string + httpFlag: boolean + contentUuid: string + contentList: Iitem[] + // 前面节点的 index, 没有设为-1 + beforeNode: number + // 下一个子节点的 index, 没有设为-1 + nextChild: number + // 下一个兄弟节点的 index, 没有设为-1 + nextBrother: number + topFlag: boolean + bottomFlag: boolean +} +// 节点渲染树接口 +interface ITree { + titleText: string + labels: string[] + contentUuid: string + contentList: Iitem[] + brothers: INode[] + children: INode[] +} + +type Status = 'NORMAL' | 'HIDDEN' | 'BANNED' | 'DELETED' + +type UpvoteType = 'COMMENT' | 'COMMENT_TOPIC' | 'PROJECT' | 'TAG' | 'USER' | 'TEXT_MODIFICATION' | 'SUB_COMMENT' | 'REFERENCE' + +type BusinessStatus = 'NORMAL' + +type ComponentType = 'TEXT' | 'IMAGE' | 'PROJECT' | 'PARAGRAPH' | 'USER' | 'COMMENT' | 'MDH_PARAGRAPH' | 'PARAGRAPH_GROUP' + +type ParagraphStatus = 'PEND_REVIEW' | 'REVIEW_PASS' | 'REVIEW_FAILED' + +type ModificationStatus = 'PEND_REVIEW' | 'REVIEW_PASS' | 'REVIEW_FAILED' + +type ProjectStatus = 'UNPUBLISHED' | 'PUBLISHED' + +type RecommendType = + | 'COMMENT' + | 'COMMENT_TOPIC' + | 'PROJECT' + | 'TAG' + | 'USER' + | 'TEXT_MODIFICATION' + | 'SUB_COMMENT' + | 'REFERENCE' + | 'MDH_PARAGRAPH' + | 'PARAGRAPH_GROUP' + | 'UNKNOWN' type AuthType = 'PASSWORD' | 'TOKEN' | 'CODE' | 'WECHAT' | 'QQ' -type ComponentType = 'TEXT' | 'IMAGE' | 'PROJECT' | 'PARAGRAPH' | 'USER' | 'COMMENT' - -type ContactType = 'EMAIL' | 'PHONE' | 'UNKNOWN' - type Gender = 'MALE' | 'FEMALE' | 'UNKNOWN' -type ReportType = 'COMMENT' | 'COMMENT_TOPIC' | 'PROJECT' | 'PROJECT_TAG' | 'USER' | 'TEXT_MODIFICATION' | 'SUB_COMMENT' | 'REFERENCE' - -type Role = 'ANONYMOUS' | 'USER' | 'MANAGER' | 'SYSTEM' - -type UpvoteType = 'COMMENT' | 'COMMENT_TOPIC' | 'PROJECT' | 'PROJECT_TAG' | 'USER' | 'TEXT_MODIFICATION' | 'SUB_COMMENT' | 'REFERENCE' +type Role = 'NONE' | 'ANONYMOUS' | 'USER' | 'STAFF' | 'DEVELOPER' | 'MANAGER' | 'SYSTEM' diff --git a/build/getRules.ts b/build/getRules.ts new file mode 100644 index 0000000..cff560d --- /dev/null +++ b/build/getRules.ts @@ -0,0 +1,32 @@ +// import tokens from '../declare/tokens.d.json' +// import { set, forIn } from 'lodash' + +// const PREFIX = 'sc' +// const rawData = deepFirstSearch(tokens) + +// // rules: [ +// // ['m-1', { margin: '0.25rem' }], +// // ] +// const rules = [] as any + +// // colors: { +// // 'veryCool': '#0000ff', // class="text-very-cool" +// // 'brand': { +// // 'primary': 'hsla(var(--hue, 217), 78%, 51%)', //class="bg-brand-primary" +// // } +// // } +// const colors = {} +// rawData.filter(e => e.type === 'color').forEach(e => set(colors, e.key, e.value)) + +// function deepFirstSearch(node, nodeList = [], keys = []) { +// if (node.type) { +// nodeList.push({ ...node, key: keys.join('.') }) +// } else { +// forIn(node, (node, key) => { +// deepFirstSearch(node, nodeList, [...keys, key]) +// }) +// } +// return nodeList +// } + +// export { rules, colors } diff --git a/build/imports.config.ts b/build/imports.config.ts index 43f6f1e..2bedf09 100644 --- a/build/imports.config.ts +++ b/build/imports.config.ts @@ -1,7 +1,8 @@ import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' import * as Hooks from '../src/hooks' -const Config: Parameters[0] = { +export const ImportsConfig: Parameters[0] = { imports: [ 'vue', 'uni-app', @@ -17,4 +18,7 @@ function getImports(path: string, o: Record) { return { [path]: Object.keys(o) } } -export default Config +export const ComponentsConfig: Parameters[0] = { + dts: 'declare/components.d.ts', + dirs: ['src/components', 'src/modules', 'node_modules/@dcloudio/uni-ui/lib'], +} diff --git a/build/tokens.json b/build/tokens.json new file mode 100644 index 0000000..dc46a95 --- /dev/null +++ b/build/tokens.json @@ -0,0 +1,275 @@ +{ + "global": { + "brand": { + "pri": { + "value": "#619df7", + "type": "color" + }, + "prii": { + "value": "#c6f1fe", + "type": "color" + }, + "aux": { + "value": "#3b7155", + "type": "color" + }, + "auxx": { + "value": "#c4e0d4", + "type": "color" + } + }, + "std": { + "view": { + "value": "#f7fafa", + "type": "color" + }, + "bg": { + "value": "#ffffff", + "type": "color" + }, + "place": { + "value": "#f7f7f7", + "type": "color" + }, + "文本框": { + "value": "#f5f5f5", + "type": "color" + }, + "line": { + "value": "#e8e8e8", + "type": "color" + }, + "醒目": { + "value": "#a4a4a4", + "type": "color" + } + }, + "func": { + "success": { + "value": "#3cd926", + "type": "color" + }, + "error": { + "value": "#fa5042", + "type": "color" + } + }, + "大组件阴影": { + "value": { + "color": "#0000001a", + "type": "dropShadow", + "x": 0, + "y": 0, + "blur": 20, + "spread": 1 + }, + "type": "boxShadow" + }, + "小组件阴影": { + "value": { + "color": "#00000026", + "type": "dropShadow", + "x": 0, + "y": 2, + "blur": 10, + "spread": 1 + }, + "type": "boxShadow" + }, + "fontFamilies": { + "misans": { + "value": "MiSans", + "type": "fontFamilies" + } + }, + "lineHeights": { + "0": { + "value": "AUTO", + "type": "lineHeights" + } + }, + "fontWeights": { + "misans-0": { + "value": "Regular", + "type": "fontWeights" + }, + "misans-1": { + "value": "Bold", + "type": "fontWeights" + } + }, + "fontSize": { + "0": { + "value": "10", + "type": "fontSizes" + }, + "1": { + "value": "12", + "type": "fontSizes" + }, + "2": { + "value": "16", + "type": "fontSizes" + }, + "3": { + "value": "18", + "type": "fontSizes" + }, + "4": { + "value": "22", + "type": "fontSizes" + }, + "5": { + "value": "28", + "type": "fontSizes" + }, + "6": { + "value": "34", + "type": "fontSizes" + } + }, + "letterSpacing": { + "0": { + "value": "0", + "type": "letterSpacing" + } + }, + "paragraphSpacing": { + "0": { + "value": "0", + "type": "paragraphSpacing" + } + }, + "duang": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-0}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.6}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "para": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-0}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.2}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "notice": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-0}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.3}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "helper": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-0}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.1}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "verbose": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-0}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.0}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "subtitle": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-1}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.4}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "title": { + "value": { + "fontFamily": "{fontFamilies.misans}", + "fontWeight": "{fontWeights.misans-1}", + "lineHeight": "{lineHeights.0}", + "fontSize": "{fontSize.5}", + "letterSpacing": "{letterSpacing.0}", + "paragraphSpacing": "{paragraphSpacing.0}", + "textCase": "{textCase.none}", + "textDecoration": "{textDecoration.none}" + }, + "type": "typography" + }, + "textCase": { + "none": { + "value": "none", + "type": "textCase" + } + }, + "textDecoration": { + "none": { + "value": "none", + "type": "textDecoration" + } + }, + "字体色": { + "普通字体颜色": { + "value": "#333333", + "type": "color" + }, + "强调字体颜色": { + "value": "#111111", + "type": "color" + }, + "辅助字体颜色": { + "value": "#999999", + "type": "color" + } + }, + "浅字体色": { + "浅蓝": { + "value": "#e7ebf0", + "type": "color" + }, + "普通": { + "value": "#f2f2f2", + "type": "color" + } + } + }, + "$themes": [], + "$metadata": { + "tokenSetOrder": ["global"] + } +} diff --git a/package.json b/package.json index 32c3fc4..cc2508c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "4chao", "version": "1.0.0", + "private": true, "scripts": { "bootstrap": "yarn install && node ./scripts/bootstrap.js", "dev:h5": "uni", @@ -9,36 +10,39 @@ "test": "vitest", "commit": "cz", "upgrade:template": "echo '将模板合并到当前分支...' ; git remote add template https://github.com/4chao/preset.git ; git fetch template && git merge template/master -m '🥝 upgrade: template'", - "upgrade:api": "export http_proxy=''; curl http://wofbi001.local:8080/apidoc/api.ts -o src/api/index.ts && sed -i '' '1s/.*/\\/\\/\\/ /' src/api/index.ts && curl http://wofbi001.local/apidoc/data_type.d.ts -o @types/api/index.d.ts", + "upgrade:api": "set -a; source .env.development; set +a;export http_proxy=''; curl ${VITE_PROXY_URL}/apidoc/api.ts -o src/api/index.ts && sed -i '' '1s/.*/\\/\\/\\/ /' src/api/index.ts && curl ${VITE_PROXY_URL}/apidoc/data_type.d.ts -o @types/api/index.d.ts", + "trans:token": "yarn token-transformer build/tokens.json declare/tokens.d.json >/dev/null", "tsc": "npx vue-tsc --noEmit --skipLibCheck", "prepare": "husky install", "preinstall": "node ./scripts/preinstall.js", - "postinstall": "patch-package && yarn upgrade:api" + "postinstall": "patch-package" }, "dependencies": { - "@dcloudio/uni-app": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-app-plus": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-components": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-h5": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-alipay": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-baidu": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-lark": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-qq": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3040820220424004", - "@vueuse/core": "^8.4.2", + "@dcloudio/uni-app": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-app-plus": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-components": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-h5": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-alipay": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-baidu": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-lark": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-qq": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3060120220907002", "@dcloudio/uni-ui": "^1.4.15", + "@vueuse/core": "^8.4.2", "dayjs": "^1.10.8", + "hammerjs": "^2.0.8", "js-base64": "^3.7.2", "lodash-es": "^4.17.21", "logdown": "^3.3.1", "mescroll-uni": "^1.3.7", + "motion": "^10.14.2", "pinia": "^2.0.14", "pinia-class-component": "^0.9.2", - "pinia-plugin-persist": "^1.0.0", - "usid": "^1.0.21", + "pinia-plugin-persist-uni": "^1.1.5", + "text-encoding": "^0.7.0", "vue": "^3.2.29", "vue-i18n": "^9.1.9", "vuex": "^4.0.2", @@ -47,10 +51,12 @@ }, "devDependencies": { "@dcloudio/types": "^2.5.16", - "@dcloudio/uni-automator": "3.0.0-alpha-3040820220424004", - "@dcloudio/uni-cli-shared": "3.0.0-alpha-3040820220424004", - "@dcloudio/vite-plugin-uni": "3.0.0-alpha-3040820220424004", + "@dcloudio/uni-automator": "3.0.0-alpha-3060120220907002", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3060120220907002", + "@dcloudio/vite-plugin-uni": "3.0.0-alpha-3060120220907002", + "@iconify-json/fluent": "^1.1.16", "@iconify-json/ri": "^1.1.0", + "@types/hammerjs": "^2.0.41", "@types/lodash": "^4.14.179", "@types/power-assert": "^1.5.8", "@types/rollup-plugin-visualizer": "^4.2.1", @@ -62,6 +68,7 @@ "@unocss/transformer-directives": "^0.28.0", "autoprefixer": "^10.4.2", "commitizen": "^4.2.4", + "consola": "^2.15.3", "cz-customizable": "^6.3.0", "deep-list-dir": "^1.4.4", "eslint": "^8.7.0", @@ -81,9 +88,12 @@ "rimraf": "^3.0.2", "rollup-plugin-visualizer": "^5.6.0", "sass": "^1.49.9", + "token-transformer": "^0.0.25", "typescript": "^4.6.3", - "unocss": "^0.30.11", - "unplugin-auto-import": "^0.6.6", + "unocss": "^0.45.18", + "unocss-applet": "^0.2.8", + "unplugin-auto-import": "^0.11.2", + "unplugin-vue-components": "^0.22.8", "vite": "^2.7.13", "vite-plugin-inspect": "^0.3.15", "vite-plugin-mkcert": "^1.6.0", diff --git a/patches/@dcloudio+types+2.5.19.patch b/patches/@dcloudio+types+2.6.12.patch similarity index 96% rename from patches/@dcloudio+types+2.5.19.patch rename to patches/@dcloudio+types+2.6.12.patch index 813406c..caba789 100644 --- a/patches/@dcloudio+types+2.5.19.patch +++ b/patches/@dcloudio+types+2.6.12.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/@dcloudio/types/uni-app/uni.d.ts b/node_modules/@dcloudio/types/uni-app/uni.d.ts -index f94d195..dae1146 100644 +index 510632b..5bf6852 100644 --- a/node_modules/@dcloudio/types/uni-app/uni.d.ts +++ b/node_modules/@dcloudio/types/uni-app/uni.d.ts @@ -1,5 +1,15 @@ diff --git a/patches/@dcloudio+uni-mp-compiler+3.0.0-alpha-3040420220402003.patch b/patches/@dcloudio+uni-mp-compiler+3.0.0-alpha-3040420220402003.patch deleted file mode 100644 index d9f37b3..0000000 --- a/patches/@dcloudio+uni-mp-compiler+3.0.0-alpha-3040420220402003.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/node_modules/@dcloudio/uni-mp-compiler/dist/transforms/transformAttr.js b/node_modules/@dcloudio/uni-mp-compiler/dist/transforms/transformAttr.js -index d762953..203baf2 100644 ---- a/node_modules/@dcloudio/uni-mp-compiler/dist/transforms/transformAttr.js -+++ b/node_modules/@dcloudio/uni-mp-compiler/dist/transforms/transformAttr.js -@@ -3,18 +3,32 @@ Object.defineProperty(exports, "__esModule", { value: true }); - exports.transformAttr = void 0; - const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared"); - const shared_1 = require("@vue/shared"); -+ - const transformAttr = (node, _) => { - if (!(0, uni_cli_shared_1.isElementNode)(node)) { - return; - } -+ let Attrs = []; -+ let clazz = null; - node.props.forEach((prop) => { -- if ((0, uni_cli_shared_1.isAttributeNode)(prop) && prop.value) { -+ if ((0, uni_cli_shared_1.isAttributeNode)(prop)) { -+ if (!prop.value) return Attrs.push(prop.name) - switch (prop.name) { - case 'style': - prop.value.content = (0, shared_1.stringifyStyle)((0, shared_1.parseStringStyle)(prop.value.content)).slice(0, -1); // 移除最后一个分号,省点大小吧 - break; -+ case 'class': -+ clazz = prop; -+ break; - } -+ - } - }); -+ if (!Attrs.length) return -+ if (!clazz?.value) { -+ clazz = { type: 6, name: 'class', value: { type: 2, content: '' } } -+ node.props.push(clazz) -+ } -+ clazz.value.content += ' ' + Attrs.join(' '); - }; - exports.transformAttr = transformAttr; diff --git a/patches/@dcloudio+uni-ui+1.4.15.patch b/patches/@dcloudio+uni-ui+1.4.22.patch similarity index 96% rename from patches/@dcloudio+uni-ui+1.4.15.patch rename to patches/@dcloudio+uni-ui+1.4.22.patch index b0af5a8..6fee613 100644 --- a/patches/@dcloudio+uni-ui+1.4.15.patch +++ b/patches/@dcloudio+uni-ui+1.4.22.patch @@ -1,21 +1,5 @@ -diff --git a/node_modules/@dcloudio/uni-ui/lib/.DS_Store b/node_modules/@dcloudio/uni-ui/lib/.DS_Store -new file mode 100644 -index 0000000..0d53e2b -Binary files /dev/null and b/node_modules/@dcloudio/uni-ui/lib/.DS_Store differ -diff --git a/node_modules/@dcloudio/uni-ui/lib/uni-easyinput/uni-easyinput.vue b/node_modules/@dcloudio/uni-ui/lib/uni-easyinput/uni-easyinput.vue -index fc52882..6930df9 100644 ---- a/node_modules/@dcloudio/uni-ui/lib/uni-easyinput/uni-easyinput.vue -+++ b/node_modules/@dcloudio/uni-ui/lib/uni-easyinput/uni-easyinput.vue -@@ -209,6 +209,7 @@ - if(!this.modelValue && this.modelValue !== 0){ - this.val = this.value - } -+ this.val = this.val || "" - this.form = this.getForm('uniForms') - this.formItem = this.getForm('uniFormsItem') - if (this.form && this.formItem) { diff --git a/node_modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue b/node_modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue -index a87f68e..abf902e 100644 +index a87f68e..dd909d1 100644 --- a/node_modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue +++ b/node_modules/@dcloudio/uni-ui/lib/uni-icons/uni-icons.vue @@ -83,7 +83,7 @@ @@ -26,4 +10,4 @@ index a87f68e..abf902e 100644 + src: url('data:font/woff2;charset=utf-8;base64,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') format('woff2'); } - /* #endif */ + /* #endif */ diff --git a/patches/@unocss+preset-mini+0.30.11.patch b/patches/@unocss+preset-mini+0.30.11.patch deleted file mode 100644 index e82164a..0000000 --- a/patches/@unocss+preset-mini+0.30.11.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/node_modules/@unocss/preset-mini/dist/chunks/utilities.cjs b/node_modules/@unocss/preset-mini/dist/chunks/utilities.cjs -index 5852751..9b969c4 100644 ---- a/node_modules/@unocss/preset-mini/dist/chunks/utilities.cjs -+++ b/node_modules/@unocss/preset-mini/dist/chunks/utilities.cjs -@@ -389,7 +389,7 @@ function rem(str) { - const [, n, unit] = match; - const num = parseFloat(n); - if (!Number.isNaN(num)) -- return unit ? `${round(num)}${unit}` : `${round(num / 4)}rem`; -+ return unit ? `${round(num)}${unit}` : process.env.UNI_PLATFORM?.startsWith('mp') ? `${round(num)}rpx` : `${round(num / 32)}rem`; - } - function px(str) { - if (str.match(unitOnlyRE)) -diff --git a/node_modules/@unocss/preset-mini/dist/chunks/utilities.mjs b/node_modules/@unocss/preset-mini/dist/chunks/utilities.mjs -index 770ce9f..d0f32f4 100644 ---- a/node_modules/@unocss/preset-mini/dist/chunks/utilities.mjs -+++ b/node_modules/@unocss/preset-mini/dist/chunks/utilities.mjs -@@ -387,7 +387,7 @@ function rem(str) { - const [, n, unit] = match; - const num = parseFloat(n); - if (!Number.isNaN(num)) -- return unit ? `${round(num)}${unit}` : `${round(num / 4)}rem`; -+ return unit ? `${round(num)}${unit}` : process.env.UNI_PLATFORM?.startsWith('mp') ? `${round(num)}rpx` : `${round(num / 32)}rem`; - } - function px(str) { - if (str.match(unitOnlyRE)) diff --git a/patches/@unocss+preset-mini+0.45.29.patch b/patches/@unocss+preset-mini+0.45.29.patch new file mode 100644 index 0000000..edab54d --- /dev/null +++ b/patches/@unocss+preset-mini+0.45.29.patch @@ -0,0 +1,52 @@ +diff --git a/node_modules/@unocss/preset-mini/dist/index.cjs b/node_modules/@unocss/preset-mini/dist/index.cjs +index bd20243..0a57187 100644 +--- a/node_modules/@unocss/preset-mini/dist/index.cjs ++++ b/node_modules/@unocss/preset-mini/dist/index.cjs +@@ -17,7 +17,7 @@ const preflights = [ + getCSS(ctx) { + if (ctx.theme.preflightBase) { + const css = core.entriesToCss(Object.entries(ctx.theme.preflightBase)); +- return `*,::before,::after{${css}}::backdrop{${css}}`; ++ return `:not(not),::before,::after{${css}}::backdrop{${css}}`; + } + } + } +diff --git a/node_modules/@unocss/preset-mini/dist/index.mjs b/node_modules/@unocss/preset-mini/dist/index.mjs +index 1095e1d..9e685b9 100644 +--- a/node_modules/@unocss/preset-mini/dist/index.mjs ++++ b/node_modules/@unocss/preset-mini/dist/index.mjs +@@ -14,7 +14,7 @@ const preflights = [ + getCSS(ctx) { + if (ctx.theme.preflightBase) { + const css = entriesToCss(Object.entries(ctx.theme.preflightBase)); +- return `*,::before,::after{${css}}::backdrop{${css}}`; ++ return `:not(not),::before,::after{${css}}::backdrop{${css}}`; + } + } + } +diff --git a/node_modules/@unocss/preset-mini/dist/shared/preset-mini.42e5e280.mjs b/node_modules/@unocss/preset-mini/dist/shared/preset-mini.42e5e280.mjs +index cfc1ca2..2872774 100644 +--- a/node_modules/@unocss/preset-mini/dist/shared/preset-mini.42e5e280.mjs ++++ b/node_modules/@unocss/preset-mini/dist/shared/preset-mini.42e5e280.mjs +@@ -180,7 +180,7 @@ function rem(str) { + const [, n, unit] = match; + const num = parseFloat(n); + if (!Number.isNaN(num)) +- return unit ? `${round(num)}${unit}` : `${round(num / 4)}rem`; ++ return unit ? `${round(num)}${unit}` : process.env.UNI_PLATFORM?.startsWith('mp') ? `${round(num)}rpx` : `${round(num / 32)}rem`; + } + function px(str) { + if (str.match(unitOnlyRE)) +diff --git a/node_modules/@unocss/preset-mini/dist/shared/preset-mini.7346cef1.cjs b/node_modules/@unocss/preset-mini/dist/shared/preset-mini.7346cef1.cjs +index 03b2df7..004a886 100644 +--- a/node_modules/@unocss/preset-mini/dist/shared/preset-mini.7346cef1.cjs ++++ b/node_modules/@unocss/preset-mini/dist/shared/preset-mini.7346cef1.cjs +@@ -182,7 +182,7 @@ function rem(str) { + const [, n, unit] = match; + const num = parseFloat(n); + if (!Number.isNaN(num)) +- return unit ? `${round(num)}${unit}` : `${round(num / 4)}rem`; ++ return unit ? `${round(num)}${unit}` : process.env.UNI_PLATFORM?.startsWith('mp') ? `${round(num)}rpx` : `${round(num / 32)}rem`; + } + function px(str) { + if (str.match(unitOnlyRE)) diff --git a/patches/@unocss+vite+0.30.11.patch b/patches/@unocss+vite+0.30.11.patch deleted file mode 100644 index 481f38f..0000000 --- a/patches/@unocss+vite+0.30.11.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/node_modules/@unocss/vite/dist/index.cjs b/node_modules/@unocss/vite/dist/index.cjs -index 3e25f99..6860752 100644 ---- a/node_modules/@unocss/vite/dist/index.cjs -+++ b/node_modules/@unocss/vite/dist/index.cjs -@@ -162,6 +162,7 @@ function GlobalModeBuildPlugin({ uno, ready, extract, tokens, modules, filter }) - enforce: "pre", - buildStart() { - tasks = []; -+ if(!process.env.UNI_PLATFORM?.startsWith('app')) - vfsLayerMap.clear(); - }, - transform(code, id) { -diff --git a/node_modules/@unocss/vite/dist/index.mjs b/node_modules/@unocss/vite/dist/index.mjs -index f93fefc..32bf7e6 100644 ---- a/node_modules/@unocss/vite/dist/index.mjs -+++ b/node_modules/@unocss/vite/dist/index.mjs -@@ -153,6 +153,7 @@ function GlobalModeBuildPlugin({ uno, ready, extract, tokens, modules, filter }) - enforce: "pre", - buildStart() { - tasks = []; -+ if(!process.env.UNI_PLATFORM?.startsWith('app')) - vfsLayerMap.clear(); - }, - transform(code, id) { diff --git a/patches/pinia-plugin-persist+1.0.0.patch b/patches/pinia-plugin-persist+1.0.0.patch deleted file mode 100644 index cbaaaec..0000000 --- a/patches/pinia-plugin-persist+1.0.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/pinia-plugin-persist/dist/pinia-persist.es.js b/node_modules/pinia-plugin-persist/dist/pinia-persist.es.js -index 1625b71..ee7c6e4 100644 ---- a/node_modules/pinia-plugin-persist/dist/pinia-persist.es.js -+++ b/node_modules/pinia-plugin-persist/dist/pinia-persist.es.js -@@ -16,7 +16,7 @@ var index = ({ options, store }) => { - if ((_a = options.persist) == null ? void 0 : _a.enabled) { - const defaultStrat = [{ - key: store.$id, -- storage: sessionStorage -+ storage: {} - }]; - const strategies = ((_c = (_b = options.persist) == null ? void 0 : _b.strategies) == null ? void 0 : _c.length) ? (_d = options.persist) == null ? void 0 : _d.strategies : defaultStrat; - strategies.forEach((strategy) => { diff --git a/src/api/index.ts b/src/api/index.ts index 5305406..66e555a 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -12,40 +12,34 @@ const put = factory("PUT"); type Page = { page?: number; size?: number; last_time?: number }; export const map = { - paramEcho: get<{ content: string }, EchoDto>()("/echo"), - pathEcho: get<{ content: string }, EchoDto>()("/echo/{content}"), - // 登录 + // 获取注册验证码接口 + getCode: post<{ account: string }, {}>()("/send_verify_code"), + // 注册接口 + register: post()("/register"), + // 登录接口 login: post()("/login"), - // 注册 - register: post()("/register"), - // 获取验证码 - getVerificationCode: get<{ account: string }, VerificationCodeDto>()("/verification_code"), - // 更新本人的信息 - updateSelfInfo: put()("/self"), - // 获取其他人的信息 - getUserInfo: get<{ id: number }, UserDto>()("/user/{id}"), - // 创建项目的标签 - createProjectTag: post()("/project_tag"), - // 创建项目 - createProject: post()("/project"), - // 获取项目详情 - getProject: get<{}, ProjectDto>()("/project/{id}"), - // 获取项目页 - getProjectPage: get>()("/project/page/"), - // 创建项目段落 - createProjectParagraph: post()("/project/{project_id}/paragraph"), - // 获取项目的段落 - getProjectParagraph: get>()("/project/{project_id}/paragraph/page"), - // 创建项目评论 - createProjectComment: post()("/project/{project_id}/comment"), - // 创建项目子评论 - createProjectSubComment: post()("/project/{project_id}/comment/{comment_id}/sub_comment"), - // 获取项目评论页 - getProjectCommentPage: get>()("/project/{project_id}/comment/page/"), - // 获取项目子评论页 - getProjectSubCommentPage: get>()("/project/{project_id}/comment/{comment_id}/sub_comment/page/"), - // 点赞 - upvote: post<{ upvote_type: UpvoteType }, UpvoteDto>()("/upvote/{upvote_type}/{upvote_id}"), - // 举报 - report: post<{}, {}>()("/report/{report_type}/{report_id}"), + + // 工具组接口 + // 创建内容标题 + createContentTitle: post<{ titleText: string; labels: string[] }, {}>()("/create_title"), + // 创建文章内容 + createContent: post()("/create_content"), + // 同时创建标题和内容 + createTitleAndContent: post()("/create_title_and_content"), + + // 信息流接口 + // 获取发现推荐list + getPecommendation: post<{}, { recommendation: RecommendationDto[] }>()("/get_recommendation"), + // 获取节点标题 + getTitle: post<{ uuid: string }, { titleText: string; labels: string[] }>()("/get_title_info"), + // 获取作品内容 + getContent: post<{ uuid: string }, { contentText: string; userUuid: string; username: string }>()("/get_content_text"), + // 获得兄弟节点、子节点 + getOtherNode: post<{ uuid: string }, { brothers: NodeDto[]; children: NodeDto[] }>()("/get_preview"), + + // 用户作品、创想管理相关接口 + // 查询用户创想list接口 + getUserCreatives: post<{}, { owns: object[]; collaborations: object[] }>()("/get_creatives/self"), }; + +export const manage_map = {}; diff --git a/src/app.config.ts b/src/app.config.ts index a7bd6bd..e135152 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -12,6 +12,22 @@ export default { '^uni-(.*)': '@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue', }, }, + tabBar: { + color: '#7A7E83', + selectedColor: '#3cc51f', + borderStyle: 'black', + backgroundColor: '#ffffff', + list: [ + { + pagePath: 'pages/index/index', + text: '', + }, + { + pagePath: 'pages/userCenter/userCenter', + text: '', + }, + ], + }, }, preset: { hide: { diff --git a/src/app/store/index.ts b/src/app/store/index.ts index f3521c1..39316a8 100755 --- a/src/app/store/index.ts +++ b/src/app/store/index.ts @@ -1,5 +1,5 @@ import { createPinia } from 'pinia' -import piniaPersist from 'pinia-plugin-persist' +import piniaPersist from 'pinia-plugin-persist-uni' import * as Module from './modules' diff --git a/src/app/store/modules/data.ts b/src/app/store/modules/data.ts index cf38998..add23af 100755 --- a/src/app/store/modules/data.ts +++ b/src/app/store/modules/data.ts @@ -3,5 +3,5 @@ import { Store, Pinia, Persist } from '../utils' @Store export class Data extends Pinia { @Persist - indexList = [] as AwaitedReturnUnwarpPage[] + indexList: AwaitedReturnUnwarpPage[] = [] } diff --git a/src/app/store/modules/user.ts b/src/app/store/modules/user.ts index 952beb7..2149000 100644 --- a/src/app/store/modules/user.ts +++ b/src/app/store/modules/user.ts @@ -3,7 +3,15 @@ import { Store, Pinia, Persist } from '../utils' @Store export class User extends Pinia { baseUrl = import.meta.env.VITE_BASE_URL - userInfo = { token: '12345' } as Awaited> + @Persist + userInfo: LoginUserDto = { + uuid: '', + email: '', + phone: '', + username: '', + gender: '', + token: null, + } get token() { return this.userInfo.token } @@ -12,11 +20,13 @@ export class User extends Pinia { } async login(options: Parameters[0]) { - this.userInfo = await api.login(options) + let data = await api.login(options) + this.userInfo = data as LoginUserDto uni.$emit('$reload') } async register(options: Parameters[0]) { - this.userInfo = await api.register(options) + let data = await api.register(options) + this.userInfo = data as LoginUserDto uni.$emit('$reload') } } diff --git a/src/app/utils/addon.ts b/src/app/utils/addon.ts index dd397a4..8f35046 100644 --- a/src/app/utils/addon.ts +++ b/src/app/utils/addon.ts @@ -14,7 +14,6 @@ Promise.prototype.go = function () { Promise.wait = ms => new Promise(r => setTimeout(r, ms)) Promise.do = async fn => await fn() - interface Promise { wait(ms: number): Promise go(): Promise<[T?, any?]> @@ -24,6 +23,14 @@ interface PromiseConstructor { do any>(fn: T): Promise>> } +String.rand = function () { + return new Date().getTime() + Math.random().toString(36).substring(2) +} + +interface StringConstructor { + rand(): string +} + // 小程序Global补全 // #ifdef MP Object.assign(global, { diff --git a/src/app/utils/number.ts b/src/app/utils/number.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/app/utils/pages.ts b/src/app/utils/pages.ts index b39111f..f6987c7 100644 --- a/src/app/utils/pages.ts +++ b/src/app/utils/pages.ts @@ -1,6 +1,5 @@ import { debounce, DebouncedFuncLeading } from 'lodash' -import USID from 'usid' -const usid = new USID() +import { definePage, ParamsType, ReturnType } from '@/types' export function getPath(p: string, currentGroup: string) { let [group, path] = Array.from(p.match(/^(?:#(.*?)(?:\/|$))?(.*)$/)).slice(1) @@ -12,20 +11,30 @@ let to = debounce( (path: string, obj?: any) => { const currentPath = getCurrentPages().pop()['route'] const currentGroup = currentPath.split('/')[1] - const id = usid.uuid() + const id = String.rand() - const pkg = { data: obj, from: currentPath, id } + const pkg = { params: obj || {}, from: currentPath, id } uni.$on(id + '_query', cb => cb(pkg)) let url = getPath(path, currentGroup) + console.log(url) + if ( + !app.User.isLogin && + url != 'pages/index/index' && + url != '/pages/nodeDetails/nodeDetails' && + url != '/pages/worksDetails/worksDetails' && + url != '/pages/user/login' + ) { + url = '/pages/user/login' + } uni .navigateTo({ url: url + '?id=' + id }) - .then(() => app.info('页面切换', obj || '', '=>', path == url ? path : `${path} (${url})`)) + .then(() => app.info('页面切换', obj || {}, '=>', path == url ? path : `${path} (${url})`)) .catch(err => app.error('页面切换失败', '=>' + path, err)) return new Promise((r, e) => (uni.$once(id + '_resolve', r), uni.$once(id + '_reject', e))) }, 50, { leading: true, trailing: false }, -) +) as (path: string, obj?: U[typeof ParamsType]) => Promise const back = debounce( (data?: any, type: 'resolve' | 'reject' = 'resolve') => { diff --git a/src/app/utils/request.ts b/src/app/utils/request.ts index c6a0452..6c67c9e 100644 --- a/src/app/utils/request.ts +++ b/src/app/utils/request.ts @@ -19,15 +19,16 @@ function request(ins) { app.debug('发起请求', type, url, data) return new Promise((resolve, reject) => { uni.request({ - url: app.User.baseUrl + url, + url: import.meta.env.VITE_PROXY_URL + app.User.baseUrl + url, method: type, data: data, timeout: 10000, - // header: { - // 'Sichiao-User-Token': app.User.token, - // }, + sslVerify: false, + header: { + 'MiaoA-User-Token': app.User.token, + }, success: ({ data: res }: any) => { - if (res.code != '31458') { + if (res.code != '200') { uni.showToast({ title: res.message, icon: 'none' }) app.error('请求失败', res.message) return reject(res.message) diff --git a/src/components/ContentTemplate/ContentTemplate.vue b/src/components/ContentTemplate/ContentTemplate.vue new file mode 100644 index 0000000..0e72003 --- /dev/null +++ b/src/components/ContentTemplate/ContentTemplate.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/components/Contenteditable/index.vue b/src/components/Contenteditable/index.vue new file mode 100644 index 0000000..6e37966 --- /dev/null +++ b/src/components/Contenteditable/index.vue @@ -0,0 +1,50 @@ + + + + + + + + + diff --git a/src/components/DragManager/DragManager.ts b/src/components/DragManager/DragManager.ts new file mode 100644 index 0000000..54cf39c --- /dev/null +++ b/src/components/DragManager/DragManager.ts @@ -0,0 +1,144 @@ +import Hammer from 'hammerjs' +import { debounce } from 'lodash' +import { animate, spring } from 'motion' + +declare global { + interface Window { + dropIns: Set + } +} + +window.dropIns = new Set() +interface Options { + distance: number +} +class DragManager { + pageX = -1000 + pageY = -1000 + onTouch = false + + options: Options + constructor(public $el: HTMLElement, public name = String.rand(), options: Partial = {}) { + this.options = { + distance: 100, + ...options, + } + $el.addEventListener('touchstart', () => (this.onTouch = true)) + $el.addEventListener('touchend', () => (this.onTouch = false)) + $el.addEventListener('touchmove', ev => { + this.pageX = ev.touches[0].pageX + this.pageY = ev.touches[0].pageY + this.update() + }) + } + + static registerDropIns(ins: Droppable) { + window.dropIns.add(ins) + } + target?: Droppable + update = debounce(() => { + if (!this.onTouch) return + let tempD = Infinity + let target: Droppable = null + this.target = null + + Array.from(window.dropIns) + .filter(e => !(e.name && e.name !== this.name)) + .forEach(e => { + e.update() + e.$el.dataset.active = 'false' + const d = distance(e.rect, { x: this.pageX, y: this.pageY }) + if (d < tempD) { + tempD = d + target = e + } + }) + if (target && tempD < this.options.distance) { + target.$el.dataset.active = 'true' + this.target = target + } + }, 0) +} + +export class Draggable extends DragManager { + hammer: HammerManager + onPanend = (id: string) => {} + + constructor($el: HTMLElement, name: string = null, options: Partial = {}) { + super($el, name, options) + this.init() + this.bind() + } + init() { + this.hammer = new Hammer(this.$el) + } + bind() { + const { hammer, $el } = this + + // 处理拖动事件 + hammer.get('pan').set({ direction: Hammer.DIRECTION_ALL }) + hammer.on('panstart', ev => { + this.to(0, 0) + }) + hammer.on('panmove', ev => { + this.to(ev.deltaX, ev.deltaY) + }) + hammer.on('panend', ev => { + console.log('panend:', this.target?.$el.dataset.id) + if (this.target) { + const dataset = this.target.$el.dataset + dataset.active = 'false' + this.onPanend(dataset.id) + } + this.to(0, 0, true) + this.size.normal() + }) + + // 按住放大 + $el.addEventListener('touchstart', ev => this.size.big()) + $el.addEventListener('touchmove', ev => (ev.stopPropagation(), ev.preventDefault())) + $el.addEventListener('touchend', ev => this.size.normal()) + $el.addEventListener('touchcancel', ev => this.size.normal()) + } + + to(x: number, y: number, withAnimate = false) { + const style = { x, y } + if (withAnimate) animate(this.$el, style, { easing: spring({ stiffness: 500, damping: 23 }) }) + else animate(this.$el, style, { easing: spring({ stiffness: 100000, damping: 10000 }) }) + } + + size = { + normal: () => animate(this.$el, { scale: 1 }, { easing: spring({ stiffness: 1000, damping: 20 }) }), + big: () => animate(this.$el, { scale: 1.2 }, { easing: spring({ stiffness: 1000, damping: 20 }) }), + } + + hide() { + // TODO + } +} + +export class Droppable { + constructor(public $el: HTMLElement, public name?: 'string') { + this.init() + this.bind() + } + + init() {} + + bind() { + const { $el } = this + DragManager.registerDropIns(this) + } + + rect: DOMRect + update() { + const { $el } = this + this.rect = $el.getBoundingClientRect() + } +} + +function distance(rect: DOMRect, p: Record<'x' | 'y', number>) { + var dx = Math.max(rect.left - p.x, 0, p.x - rect.right) + var dy = Math.max(rect.top - p.y, 0, p.y - rect.bottom) + return Math.sqrt(dx * dx + dy * dy) +} diff --git a/src/components/DragManager/Draggable.vue b/src/components/DragManager/Draggable.vue new file mode 100644 index 0000000..d608d5d --- /dev/null +++ b/src/components/DragManager/Draggable.vue @@ -0,0 +1,51 @@ + + + + + + + + + diff --git a/src/components/DragManager/Droppable.vue b/src/components/DragManager/Droppable.vue new file mode 100644 index 0000000..e850d82 --- /dev/null +++ b/src/components/DragManager/Droppable.vue @@ -0,0 +1,52 @@ + + + + + + + diff --git a/src/components/Tabbar/Tabbar.vue b/src/components/Tabbar/Tabbar.vue new file mode 100644 index 0000000..7cbec31 --- /dev/null +++ b/src/components/Tabbar/Tabbar.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/WorksTemplate/WorksTemplate.vue b/src/components/WorksTemplate/WorksTemplate.vue new file mode 100644 index 0000000..6d63f64 --- /dev/null +++ b/src/components/WorksTemplate/WorksTemplate.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/env.d.ts b/src/env.d.ts index 377e03d..b31be2a 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -24,3 +24,4 @@ type Intersect = (U extends any ? (arg: U) => void : never) extends (arg: inf type AObjectHasAnyKeys = { [key in any]: any } type AwaitedReturn any> = Partial>> type AwaitedReturnUnwarpPage any> = Partial>['data'][0]> +type RecordAny = Record diff --git a/src/hooks/pages.ts b/src/hooks/pages.ts index 014d732..6e476cb 100644 --- a/src/hooks/pages.ts +++ b/src/hooks/pages.ts @@ -1,18 +1,18 @@ import { ToRefs } from 'vue' -import { PageParams } from '@/types' +import { PageParams, definePage, ParamsType } from '@/types' -type QueryDefaultData = Omit & { data: T & AObjectHasAnyKeys } +type QueryDefaultData = Omit & { params: T & AObjectHasAnyKeys } /** * 获得当前页面跳转携带的参数和信息 * (依赖 app.to ) * @param fn 函数时为回调函数,其他为默认返回值 */ -export function useQuery(fn: T): ToRefs> -export function useQuery(fn?: (data: any) => void): ToRefs -export function useQuery(fn?: (data: any) => void | T) { +export function useQuery(fn?: T[typeof ParamsType]): ToRefs> +export function useQuery(fn?: (params: T[typeof ParamsType]) => void): ToRefs +export function useQuery(fn?: (params: T) => void | T) { let isF = typeof fn === 'function' - const query = reactive<{ data?: any; id?: string; from?: string }>({ - data: isF ? {} : fn, + const query = reactive<{ params?: any; id?: string; from?: string }>({ + params: isF ? {} : fn || {}, id: null, from: null, }) @@ -21,17 +21,17 @@ export function useQuery(fn?: (data: any) => void | T) { if (!getCurrentPages().pop()?.['$page']?.fullPath) await new Promise(r => onLoad(r)) let id = getCurrentPages().pop()['$page'].fullPath.split('?id=')[1] uni.$emit(id + '_query', pkg => Object.assign(query, pkg)) - isF && fn(query.data) + isF && fn(query.params) }).catch(err => app.error('参数获取失败', err)) return toRefs(query) } import { Mescroll } from '@/types' -import { throttle } from 'lodash' +import { RefValue } from 'vue/macros' export const ScrollSymbol = Symbol('mescroll') export interface ScrollOptions { - mescroll?: Mescroll + mescroll?: RefValue enable: 'none' | 'up' | 'down' | 'all' fetch: (mescroll: Mescroll) => void } diff --git a/src/hooks/utils.ts b/src/hooks/utils.ts index 27b6e3e..180d2b1 100644 --- a/src/hooks/utils.ts +++ b/src/hooks/utils.ts @@ -1,5 +1,9 @@ import { WritableComputedRef } from 'vue' +export function use(fn: () => T) { + return new Promise(r => watchEffect(() => fn() && r(fn()))) +} + export function useSwitch(defaultValue: T = null): WritableComputedRef & T { let a = $ref(defaultValue) as any return computed({ diff --git a/src/manifest.json b/src/manifest.json index ac60ee8..122b548 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -1,9 +1,9 @@ { "name" : "思潮", - "appid" : "__UNI__A8AFA30", + "appid" : "__UNI__80666F4", "description" : "", "versionName" : "1.0.0", - "versionCode" : "100", + "versionCode" : 100, "transformPx" : false, /* 5+App特有相关 */ "app-plus" : { @@ -16,6 +16,9 @@ "autoclose" : true, "delay" : 0 }, + "compatible" : { + "ignoreVersion" : true //true表示忽略版本检查提示框,HBuilderX1.9.0及以上版本支持 + }, /* 模块配置 */ "modules" : {}, /* 应用发布信息 */ @@ -41,7 +44,9 @@ ] }, /* ios打包配置 */ - "ios" : {}, + "ios" : { + "dSYMs" : false + }, /* SDK配置 */ "sdkConfigs" : { "ad" : {} diff --git a/src/components/ArticleCard.vue b/src/modules/ArticleCard.vue similarity index 60% rename from src/components/ArticleCard.vue rename to src/modules/ArticleCard.vue index da07858..1c218f1 100644 --- a/src/components/ArticleCard.vue +++ b/src/modules/ArticleCard.vue @@ -2,29 +2,22 @@
- -
PentaTea
+ +
{{ data.user.nickname }}
关注的人
-
+
- +
-
创业
-
售楼处当托
-
物联网
+
{{ tag.name }}
@@ -34,20 +27,20 @@
{{ data.title }}
-
3 天前更新
+
{{ date }} 更新
-
238
+
{{ numfix(data.favorite_num) }}
-
1.5k+
+
{{ numfix(data.upvote_num) }}
-
24
+
{{ numfix(data.contributors.length) }}
- 根据现场情况,消防员立即对水泥盖板周围杂物及缝隙里的小石块及泥土进行清理,随后用撬棍等工具撬动水泥盖板。经过3分钟救助,被困人员成功脱困。 + {{ data.description }}
@@ -55,7 +48,20 @@ diff --git a/src/pages/article/components/Group.vue b/src/pages/article/components/Group.vue new file mode 100644 index 0000000..99bcd45 --- /dev/null +++ b/src/pages/article/components/Group.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/pages/article/components/Paragraph.ts b/src/pages/article/components/Paragraph.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/pages/article/components/Paragraph.vue b/src/pages/article/components/Paragraph.vue new file mode 100644 index 0000000..42775ef --- /dev/null +++ b/src/pages/article/components/Paragraph.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/pages/article/components/Toolbar.vue b/src/pages/article/components/Toolbar.vue index e31751e..54de747 100644 --- a/src/pages/article/components/Toolbar.vue +++ b/src/pages/article/components/Toolbar.vue @@ -1,10 +1,116 @@ - - + diff --git a/src/pages/article/index.vue b/src/pages/article/index.vue index 4481650..a67ac70 100644 --- a/src/pages/article/index.vue +++ b/src/pages/article/index.vue @@ -1,68 +1,110 @@