feat: 初始化项目基础架构与核心功能
添加项目基础文件结构、路由配置、API接口和核心组件 实现登录认证、权限控制、WebSocket通信等基础功能 引入antd-mobile UI组件库和Vite构建工具 配置TypeScript、ESLint、Prettier等开发环境 添加移动端适配方案和全局样式 完成首页、工作台、个人中心等基础页面框架
6
Touchkebao/.env.development
Normal file
@@ -0,0 +1,6 @@
|
||||
# 基础环境变量示例
|
||||
VITE_API_BASE_URL=http://www.yishi.com
|
||||
VITE_API_BASE_URL2=https://kf.quwanzhi.com:9991
|
||||
VITE_API_WS_URL=wss://kf.quwanzhi.com:9993
|
||||
# VITE_API_BASE_URL=https://ckbapi.quwanzhi.com
|
||||
VITE_APP_TITLE=存客宝
|
||||
6
Touchkebao/.env.production
Normal file
@@ -0,0 +1,6 @@
|
||||
# 基础环境变量示例
|
||||
VITE_API_BASE_URL=https://ckbapi.quwanzhi.com
|
||||
VITE_API_BASE_URL2=https://kf.quwanzhi.com:9991
|
||||
VITE_API_WS_URL=wss://kf.quwanzhi.com:9993
|
||||
# VITE_API_BASE_URL=http://www.yishi.com
|
||||
VITE_APP_TITLE=存客宝
|
||||
64
Touchkebao/.eslintrc.js
Normal file
@@ -0,0 +1,64 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
browser: true,
|
||||
es2021: true,
|
||||
node: true,
|
||||
},
|
||||
extends: [
|
||||
"eslint:recommended",
|
||||
"plugin:react/recommended",
|
||||
"plugin:react-hooks/recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
"plugin:prettier/recommended", // 这个配置会自动处理大部分冲突
|
||||
],
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
ecmaVersion: 12,
|
||||
sourceType: "module",
|
||||
},
|
||||
plugins: ["react", "react-hooks", "@typescript-eslint", "prettier"],
|
||||
rules: {
|
||||
"prettier/prettier": "error",
|
||||
"react/react-in-jsx-scope": "off",
|
||||
"@typescript-eslint/no-unused-vars": "warn",
|
||||
"@typescript-eslint/no-explicit-any": "off",
|
||||
"@typescript-eslint/no-unnecessary-type-constraint": "warn",
|
||||
"react/prop-types": "off",
|
||||
"linebreak-style": "off",
|
||||
"eol-last": "off",
|
||||
"no-empty": "warn",
|
||||
"prefer-const": "warn",
|
||||
// 确保与 Prettier 完全兼容
|
||||
"comma-dangle": "off",
|
||||
"comma-spacing": "off",
|
||||
"comma-style": "off",
|
||||
"object-curly-spacing": "off",
|
||||
"array-bracket-spacing": "off",
|
||||
indent: "off",
|
||||
quotes: "off",
|
||||
semi: "off",
|
||||
"arrow-parens": "off",
|
||||
"no-multiple-empty-lines": "off",
|
||||
"max-len": "off",
|
||||
"space-before-function-paren": "off",
|
||||
"space-before-blocks": "off",
|
||||
"keyword-spacing": "off",
|
||||
"space-infix-ops": "off",
|
||||
"space-in-parens": "off",
|
||||
"space-in-brackets": "off",
|
||||
"object-property-newline": "off",
|
||||
"array-element-newline": "off",
|
||||
"function-paren-newline": "off",
|
||||
"object-curly-newline": "off",
|
||||
"array-bracket-newline": "off",
|
||||
},
|
||||
settings: {
|
||||
react: {
|
||||
version: "detect",
|
||||
},
|
||||
},
|
||||
};
|
||||
27
Touchkebao/.gitattributes
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
# 设置默认行为,如果core.autocrlf没有设置,Git会自动处理行尾符
|
||||
* text=auto
|
||||
|
||||
# 明确指定文本文件使用LF
|
||||
*.js text eol=lf
|
||||
*.jsx text eol=lf
|
||||
*.ts text eol=lf
|
||||
*.tsx text eol=lf
|
||||
*.json text eol=lf
|
||||
*.css text eol=lf
|
||||
*.scss text eol=lf
|
||||
*.html text eol=lf
|
||||
*.md text eol=lf
|
||||
*.yml text eol=lf
|
||||
*.yaml text eol=lf
|
||||
|
||||
# 二进制文件
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
*.jpeg binary
|
||||
*.gif binary
|
||||
*.ico binary
|
||||
*.svg binary
|
||||
*.woff binary
|
||||
*.woff2 binary
|
||||
*.ttf binary
|
||||
*.eot binary
|
||||
6
Touchkebao/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
node_modules/
|
||||
dist/
|
||||
build/
|
||||
yarn.lock
|
||||
.env
|
||||
.DS_Store
|
||||
13
Touchkebao/.prettierrc
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"semi": true,
|
||||
"trailingComma": "all",
|
||||
"singleQuote": false,
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"endOfLine": "lf",
|
||||
"bracketSpacing": true,
|
||||
"arrowParens": "avoid",
|
||||
"jsxSingleQuote": false,
|
||||
"quoteProps": "as-needed"
|
||||
}
|
||||
8
Touchkebao/.vite/deps/_metadata.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"hash": "efe0acf4",
|
||||
"configHash": "2bed34b3",
|
||||
"lockfileHash": "ef01d341",
|
||||
"browserHash": "91bd3b2c",
|
||||
"optimized": {},
|
||||
"chunks": {}
|
||||
}
|
||||
3
Touchkebao/.vite/deps/package.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"type": "module"
|
||||
}
|
||||
11
Touchkebao/.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"esbenp.prettier-vscode",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"bradlc.vscode-tailwindcss",
|
||||
"ms-vscode.vscode-typescript-next",
|
||||
"formulahendry.auto-rename-tag",
|
||||
"christian-kohler.path-intellisense",
|
||||
"ms-vscode.vscode-json"
|
||||
]
|
||||
}
|
||||
45
Touchkebao/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
{
|
||||
"files.eol": "\n",
|
||||
"files.insertFinalNewline": true,
|
||||
"files.trimFinalNewlines": true,
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"editor.formatOnSave": true,
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit",
|
||||
"source.organizeImports": "never"
|
||||
},
|
||||
"eslint.validate": [
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"typescript",
|
||||
"typescriptreact"
|
||||
],
|
||||
"eslint.format.enable": false,
|
||||
"[javascript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescript]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[javascriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[typescriptreact]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[json]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[scss]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"[css]": {
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||
},
|
||||
"typescript.preferences.importModuleSpecifier": "relative",
|
||||
"typescript.suggest.autoImports": true,
|
||||
"editor.tabSize": 2,
|
||||
"editor.insertSpaces": true,
|
||||
"editor.detectIndentation": false
|
||||
}
|
||||
95
Touchkebao/devlop.py
Normal file
@@ -0,0 +1,95 @@
|
||||
import os
|
||||
import zipfile
|
||||
import paramiko
|
||||
|
||||
# 配置
|
||||
local_dir = './dist' # 本地要打包的目录
|
||||
zip_name = 'dist.zip'
|
||||
# 上传到服务器的 zip 路径
|
||||
remote_path = '/www/wwwroot/auto-devlop/ckb-operation/dist.zip' # 服务器上的临时zip路径
|
||||
server_ip = '42.194.245.239'
|
||||
server_port = 6523
|
||||
server_user = 'yongpxu'
|
||||
server_pwd = 'Aa123456789.'
|
||||
# 服务器 dist 相关目录
|
||||
remote_base_dir = '/www/wwwroot/auto-devlop/ckb-operation'
|
||||
dist_dir = f'{remote_base_dir}/dist'
|
||||
dist1_dir = f'{remote_base_dir}/dist1'
|
||||
dist2_dir = f'{remote_base_dir}/dist2'
|
||||
|
||||
# 美化输出用的函数
|
||||
from datetime import datetime
|
||||
|
||||
def info(msg):
|
||||
print(f"\033[36m[INFO {datetime.now().strftime('%H:%M:%S')}] {msg}\033[0m")
|
||||
|
||||
def success(msg):
|
||||
print(f"\033[32m[SUCCESS] {msg}\033[0m")
|
||||
|
||||
def error(msg):
|
||||
print(f"\033[31m[ERROR] {msg}\033[0m")
|
||||
|
||||
def step(msg):
|
||||
print(f"\n\033[35m==== {msg} ====" + "\033[0m")
|
||||
|
||||
# 1. 先运行 pnpm build
|
||||
step('Step 1: 构建项目 (pnpm build)')
|
||||
info('开始执行 pnpm build...')
|
||||
ret = os.system('pnpm build')
|
||||
if ret != 0:
|
||||
error('pnpm build 失败,终止部署!')
|
||||
exit(1)
|
||||
success('pnpm build 完成')
|
||||
|
||||
# 2. 打包
|
||||
step('Step 2: 打包 dist 目录为 zip')
|
||||
info('开始打包 dist 目录...')
|
||||
with zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED) as zipf:
|
||||
for root, dirs, files in os.walk(local_dir):
|
||||
for file in files:
|
||||
filepath = os.path.join(root, file)
|
||||
arcname = os.path.relpath(filepath, local_dir)
|
||||
zipf.write(filepath, arcname)
|
||||
success('本地打包完成')
|
||||
|
||||
# 3. 上传
|
||||
step('Step 3: 上传 zip 包到服务器')
|
||||
info('开始上传 zip 包...')
|
||||
transport = paramiko.Transport((server_ip, server_port))
|
||||
transport.connect(username=server_user, password=server_pwd)
|
||||
sftp = paramiko.SFTPClient.from_transport(transport)
|
||||
sftp.put(zip_name, remote_path)
|
||||
sftp.close()
|
||||
transport.close()
|
||||
success('上传到服务器完成')
|
||||
|
||||
# 删除本地 dist.zip
|
||||
try:
|
||||
os.remove(zip_name)
|
||||
success('本地 dist.zip 已删除')
|
||||
except Exception as e:
|
||||
error(f'本地 dist.zip 删除失败: {e}')
|
||||
|
||||
# 4. 远程解压并覆盖
|
||||
step('Step 4: 服务器端解压、切换目录')
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
ssh.connect(server_ip, server_port, server_user, server_pwd)
|
||||
commands = [
|
||||
f'unzip -oq {remote_path} -d {dist2_dir}', # 静默解压
|
||||
f'rm {remote_path}',
|
||||
f'if [ -d {dist_dir} ]; then mv {dist_dir} {dist1_dir}; fi',
|
||||
f'mv {dist2_dir} {dist_dir}',
|
||||
f'rm -rf {dist1_dir}'
|
||||
]
|
||||
for i, cmd in enumerate(commands, 1):
|
||||
info(f'执行第{i}步: {cmd}')
|
||||
stdin, stdout, stderr = ssh.exec_command(cmd)
|
||||
out, err = stdout.read().decode(), stderr.read().decode()
|
||||
# 只打印非 unzip 命令的输出
|
||||
if i != 1 and out.strip():
|
||||
print(out.strip())
|
||||
if err.strip():
|
||||
error(err.strip())
|
||||
ssh.close()
|
||||
success('服务器解压并覆盖完成,部署成功!')
|
||||
BIN
Touchkebao/favicon.ico
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
19
Touchkebao/index.html
Normal file
@@ -0,0 +1,19 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>存客宝</title>
|
||||
<style>
|
||||
html {
|
||||
font-size: 16px;
|
||||
}
|
||||
</style>
|
||||
<!-- 引入 uni-app web-view SDK(必须) -->
|
||||
<script type="text/javascript" src="/websdk.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
53
Touchkebao/package.json
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"name": "cunkebao",
|
||||
"version": "3.0.0",
|
||||
"license": "MIT",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "^5.6.1",
|
||||
"antd": "^5.13.1",
|
||||
"antd-mobile": "^5.39.1",
|
||||
"antd-mobile-icons": "^0.3.0",
|
||||
"axios": "^1.6.7",
|
||||
"dayjs": "^1.11.13",
|
||||
"dexie": "^4.2.0",
|
||||
"echarts": "^5.6.0",
|
||||
"echarts-for-react": "^3.0.2",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-router-dom": "^6.20.0",
|
||||
"react-window": "^1.8.11",
|
||||
"vconsole": "^3.15.1",
|
||||
"xmldom": "^0.6.0",
|
||||
"zustand": "^5.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.0.14",
|
||||
"@types/react": "^19.1.8",
|
||||
"@types/react-dom": "^19.1.6",
|
||||
"@typescript-eslint/eslint-plugin": "^7.7.0",
|
||||
"@typescript-eslint/parser": "^7.7.0",
|
||||
"@vitejs/plugin-react": "^4.6.0",
|
||||
"eslint": "^8.57.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-react": "^7.34.1",
|
||||
"eslint-plugin-react-hooks": "^5.2.0",
|
||||
"postcss": "^8.4.38",
|
||||
"postcss-pxtorem": "^6.0.0",
|
||||
"prettier": "^3.2.5",
|
||||
"sass": "^1.75.0",
|
||||
"typescript": "^5.4.5",
|
||||
"vite": "^7.0.5"
|
||||
},
|
||||
"scripts": {
|
||||
"dev": "pnpm vite",
|
||||
"build": "pnpm vite build",
|
||||
"build:check": "tsc && pnpm vite build",
|
||||
"preview": "pnpm vite preview",
|
||||
"lint": "eslint src --ext .js,.jsx,.ts,.tsx --fix",
|
||||
"format": "prettier --write \"src/**/*.{js,jsx,ts,tsx,json,scss,css}\"",
|
||||
"lint:check": "eslint src --ext .js,.jsx,.ts,.tsx",
|
||||
"format:check": "prettier --check \"src/**/*.{js,jsx,ts,tsx,json,scss,css}\""
|
||||
}
|
||||
}
|
||||
4998
Touchkebao/pnpm-lock.yaml
generated
Normal file
8
Touchkebao/postcss.config.js
Normal file
@@ -0,0 +1,8 @@
|
||||
module.exports = {
|
||||
plugins: {
|
||||
'postcss-pxtorem': {
|
||||
rootValue: 16,
|
||||
propList: ['*'],
|
||||
},
|
||||
},
|
||||
};
|
||||
BIN
Touchkebao/public/assets/animal/发抖.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Touchkebao/public/assets/animal/猪头.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
Touchkebao/public/assets/animal/跳跳.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
Touchkebao/public/assets/animal/转圈.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
Touchkebao/public/assets/blessing/庆祝.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
Touchkebao/public/assets/blessing/烟花.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
Touchkebao/public/assets/blessing/爆竹.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
Touchkebao/public/assets/blessing/發.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/blessing/礼物.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/blessing/福.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
Touchkebao/public/assets/blessing/红包.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
Touchkebao/public/assets/face/666.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Touchkebao/public/assets/face/Emm.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Touchkebao/public/assets/face/亲亲.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/偷笑.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/傲慢.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/再见.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Touchkebao/public/assets/face/加油.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Touchkebao/public/assets/face/发呆.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/发怒.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/可怜.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Touchkebao/public/assets/face/右哼哼.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/叹气.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/吃瓜.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Touchkebao/public/assets/face/吐.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/呲牙.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Touchkebao/public/assets/face/咒骂.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/哇.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/嘘.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Touchkebao/public/assets/face/嘿哈.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
Touchkebao/public/assets/face/囧.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/困.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Touchkebao/public/assets/face/坏笑.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/大哭.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Touchkebao/public/assets/face/天啊.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/失望.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/奸笑.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
Touchkebao/public/assets/face/好的.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/委屈.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/害羞.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/尴尬.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/得意.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
Touchkebao/public/assets/face/微笑.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/快哭了.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/恐惧.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/悠闲.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Touchkebao/public/assets/face/惊恐.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Touchkebao/public/assets/face/惊讶.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Touchkebao/public/assets/face/愉快.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/憨笑.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Touchkebao/public/assets/face/打脸.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/抓狂.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/抠鼻.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/捂脸.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/撇嘴.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Touchkebao/public/assets/face/擦汗.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/敲打.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/无语.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/旺柴.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/晕.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Touchkebao/public/assets/face/机智.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
Touchkebao/public/assets/face/汗.png
Normal file
|
After Width: | Height: | Size: 4.5 KiB |
BIN
Touchkebao/public/assets/face/流泪.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
Touchkebao/public/assets/face/生病.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Touchkebao/public/assets/face/疑问.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/白眼.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/皱眉.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/睡.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/破涕为笑.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/社会社会.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/笑脸.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/翻白眼.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
Touchkebao/public/assets/face/耶.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
Touchkebao/public/assets/face/脸红.png
Normal file
|
After Width: | Height: | Size: 5.2 KiB |
BIN
Touchkebao/public/assets/face/色.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/苦涩.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
Touchkebao/public/assets/face/衰.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/裂开.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
Touchkebao/public/assets/face/让我看看.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
BIN
Touchkebao/public/assets/face/调皮.png
Normal file
|
After Width: | Height: | Size: 5.0 KiB |
BIN
Touchkebao/public/assets/face/鄙视.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Touchkebao/public/assets/face/闭嘴.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
Touchkebao/public/assets/face/阴险.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
Touchkebao/public/assets/face/难过.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |