This commit is contained in:
2026-05-07 16:02:30 +08:00
commit 42d1d8adfc
351 changed files with 54282 additions and 0 deletions

14
.editorconfig Normal file
View File

@@ -0,0 +1,14 @@
root = true
[*]
indent_style = space
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
[*.{ts,js,vue,css}]
indent_size = 2

3
.env Normal file
View File

@@ -0,0 +1,3 @@
VITE_SOME_KEY=123
# 打包路径 根据项目不同按需配置
VITE_BASE_URL = ./

3
.env.development Normal file
View File

@@ -0,0 +1,3 @@
VITE_SOME_KEY=456
# 打包路径
VITE_BASE_URL = ./

3
.env.test Normal file
View File

@@ -0,0 +1,3 @@
VITE_SOME_KEY=789
# 打包路径
VITE_BASE_URL = ./

14
.eslintignore Normal file
View File

@@ -0,0 +1,14 @@
snapshot*
dist
lib
es
esm
node_modules
src/_common
static
cypress
script/test/cypress
_site
temp*
static/
!.prettierrc.js

117
.eslintrc Normal file
View File

@@ -0,0 +1,117 @@
{
"extends": [
"plugin:@typescript-eslint/recommended",
"eslint-config-airbnb-base",
"@vue/typescript/recommended",
"plugin:vue/vue3-recommended",
"plugin:vue-scoped-css/base",
"plugin:prettier/recommended"
],
"env": {
// 浏览器全局变量
"browser": true,
"node": true,
"jest": true,
// 启用 ES6 语法支持以及新的 ES6 全局变量或类型
"es6": true
},
"globals": {
"defineProps": "readonly",
"defineEmits": "readonly"
},
"plugins": ["vue", "@typescript-eslint"],
"parserOptions": {
// parser指定解析器默认的为espree。babel-eslint是一个Babel parser的包装器这个包装器使得 Babel parser 可以和 ESLint 协调工作
"parser": "@typescript-eslint/parser",
// 指定来源的类型,'script' (默认) 或 'module'(如果你的代码是 ECMAScript 模块)
"sourceType": "module"
// "allowImportExportEverywhere": true,
// "ecmaFeatures": {
// "jsx": true
// }
},
"settings": {
"import/extensions": [".js", ".jsx", ".ts", ".tsx"]
},
"rules": {
"no-console": "off",
"no-continue": "off",
"no-restricted-syntax": "off",
"no-plusplus": "off",
"no-param-reassign": "off",
"no-shadow": "off",
"guard-for-in": "off",
"import/extensions": "off",
"import/no-unresolved": "off",
"import/no-extraneous-dependencies": "off",
"import/prefer-default-export": "off",
"import/first": "off", // https://github.com/vuejs/vue-eslint-parser/issues/58
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/explicit-module-boundary-types": "off",
"vue/first-attribute-linebreak": 0,
"@typescript-eslint/no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"no-unused-vars": [
"error",
{
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_"
}
],
"no-use-before-define": "off",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/ban-ts-comment": "off",
"@typescript-eslint/ban-types": "off",
"class-methods-use-this": "off" // 因为AxiosCancel必须实例化而能静态化所以加的规则如果有办法解决可以取消
},
"overrides": [
{
"files": ["*.vue"],
"rules": {
// "vue/component-name-in-template-casing": [2, "kebab-case"],//模板中是否将组件名称强制转化成横杠连接的命名
"vue/require-default-prop": 0,
"vue/multi-word-component-names": 0,
"vue/no-reserved-props": 0,
"vue/no-v-html": 0,
"vue-scoped-css/enforce-style-type": ["error", { "allows": ["scoped"] }],
}
},
{
"files": ["*.ts", "*.tsx"], // https://github.com/typescript-eslint eslint-recommended
"rules": {
"constructor-super": "off", // ts(2335) & ts(2377)
"getter-return": "off", // ts(2378)
"no-const-assign": "off", // ts(2588)
// 禁止function定义中出现重名参数
"no-dupe-args": "off", // ts(2300)
"no-dupe-class-members": "off", // ts(2393) & ts(2300)
"no-dupe-keys": "off", // ts(1117)
"no-func-assign": "off", // ts(2539)
"no-import-assign": "off", // ts(2539) & ts(2540)
"no-new-symbol": "off", // ts(2588)
"no-obj-calls": "off", // ts(2349)
"no-redeclare": "off", // ts(2451)
"no-setter-return": "off", // ts(2408)
"no-this-before-super": "off", // ts(2376)
"no-undef": "off", // ts(2304)
//禁止在return、throw、continue、break语句之后出现不可达代码
"no-unreachable": "off", // ts(7027)
"no-unsafe-negation": "off", // ts(2365) & ts(2360) & ts(2358)
"no-var": "error", // ts transpiles let/const to var, so no need for vars any more
"prefer-const": "error", // ts provides better types with const
"prefer-rest-params": "error", // ts provides better types with rest args over arguments
"prefer-spread": "error", // ts transpiles spread to apply, so no need for manual apply
"valid-typeof": "off", // ts(2367)
"vue/v-on-event-hyphenation":"off", // 事件名中横线
"vue/no-dupe-keys":"true" // 禁止出现重复的属性
}
}
]
}

24
.gitignore vendored Normal file
View File

@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

29
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,29 @@
stages:
- build
- docs
build:
stage: build
tags:
- aliyun-kubernetes
script:
- node -v
- npm -v
- npm install --registry=http://registry.npm.taobao.org
# - sudo rm -rf /data/nginx/html/${CI_PROJECT_NAME}/*
# - sudo cp -rf ./dist/* /data/nginx/html/${CI_PROJECT_NAME}/
# - sudo chown nginx.nginx -R /data/nginx/html/${CI_PROJECT_NAME}
only:
- master
# docs:
# stage: docs
# tags:
# - aliyun-kubernetes
# script:
# - sudo rm -rf /data/nginx/html/${CI_PROJECT_NAME}-docs/*
# - sudo cp -rf ./docs/* /data/nginx/html/${CI_PROJECT_NAME}-docs/
# - sudo chown nginx.nginx -R /data/nginx/html/${CI_PROJECT_NAME}-docs
# only:
# - master

10
.prettierrc Normal file
View File

@@ -0,0 +1,10 @@
{
"spaceBeforeFunctionParen": true,
"tabWidth": 2,
"useTabs": false,
"trailingComma": "none",
"eslintIntegration": true,
"singleQuote": true,
"semi": false,
"endOfLine": "auto"
}

8
.stylelintignore Normal file
View File

@@ -0,0 +1,8 @@
# .stylelintignore
# 旧的不需打包的样式库
*.min.css
# 其他类型文件
*.js
*.jpg
*.woff

10
Dockerfile Normal file
View File

@@ -0,0 +1,10 @@
FROM nginx
LABEL maintainer="信息中心研发组 <user@itcast.cn>"
COPY ./dist/ /usr/share/nginx/html/
RUN chmod -R 777 /usr/share/nginx/html/
RUN chmod -R 777 /etc/nginx/conf.d/default.conf
COPY ./default.conf /etc/nginx/conf.d/
CMD ["nginx", "-g", "daemon off;"]

186
README.md Normal file
View File

@@ -0,0 +1,186 @@
# 云岚到家-机构端
#### 项目简介
> 当代人们的生活节奏越来越快,很多人因为工作和其他事情没有时间去处理家务事,因此需要家政服务来帮助他们解决日常生活中的问题。云岚到家家政项目是一种在线服务,将家政服务与互联网技术相结合,为用户提供更加便捷的家政服务。
项目迭代日志:
23年3月30 - 合并更新 处理无法合并问题
#### 研发规范遵循:
- 主体使用驼峰命名
- 公共样式使用 - 连接命名
- 内部样式 驼峰命名
- 页面命名 使用小写开头的驼峰命名
- 组件使用大写开头命名
#### 产品原型及设计
- 设计稿: https://codesign.qq.com/app/design/P4VlZMr6dzjq6wL/board?team_id=6dqN292MdajaBXe
- 产品原型: https://codesign.qq.com/app/prototype/a4Jd0NaP739AMkb/detail
#### 运行环境 - 初始开发环境及工具
- 项目开发环境: win10 + node: v16.19.0 + npm: 8.12.1 || pnpm: 6.32.8
#### 访问地址
#### 技术栈应用
Vue 3 + TypeScript +Tdesign + Vite + pinia
#### 项目结构
```html
├── commitlint.config.js - commintlint 规范
├── docker - docker 部署配置文件
│ └── nginx.conf - 若开启 browerhistroy 可参考配置
├── docs - 项目展示图 - 首页截图
├── globals.d.ts - 通用声明文件
├── index.html - 主 html 文件
├── mock - mock 目录
│ └── index.ts
├── node_modules - 项目依赖
├── package-lock.json
├── package.json
├── public - 公用资源文件
│ └── favicon.ico
├── shims-vue.d.ts
├── src - 页面代码
│ ├── api 请求相关
│ ├── assets 公共资源
│ │ ├── images 图片资源
│ ├── api - 接口
│ ├── components - 公用组件
│ │ ├── Delete - 删除弹层:只需从父组件传删除的内容提示
│ │ ├── Confirm - 确认弹层:只需从父组件传确认的内容提示
│ │ ├── expBall - 展示版本更新内容的小球球
│ │ ├── ImageMagnify - 查看图片弹层
│ │ ├── NoData - 无数据的空页面形式
│ │ ├── product-card - 产品卡片
│ │ ├── result - 结果
│ │ ├── editDialog - 编辑弹窗
│ │ ├── thumbnail - 缩略图
│ │ ├── trend - 趋势图
│ │ ├── Message - 提示弹层
│ │ │ ├──Success - 成功通知弹窗
│ │ │ ├──ProdDisabled - 禁用提示弹窗
│ │ ├── switchBar - tab切换
│ │ │ ├──switchBar - tab切换
│ │ │ ├──switchBarindex - 首页tab切换
│ │ │ ├──switchBartop - 线条tab
│ ├── czriComponents - 组件包:常用,但是原有组件库实现不了,因此进行了二次开发
│ │ ├──index.less - 组件包样式
│ ├── layouts - 页面架构
│ │ ├──components - 页面架构公共组件
│ │ │ ├──Breadcrumb - 面包屑
│ │ │ ├──Content - 内置组件避免重复渲染DOM
│ │ │ ├──Footer - 底部公司名称
│ │ │ ├──LayoutContentSide - 侧边栏
│ │ │ ├──LayoutHeader - 侧边栏头部
│ │ │ ├──Loginfo - 侧边栏退出区域
│ │ │ ├──Notice - 通知中心,弃用
│ │ │ ├──Search - 搜索功能
│ │ ├──simpleComponents - 框架公用内容
│ │ │ ├──MenuContent - 简版布局
│ │ │ ├──SideNav - 列表菜单
│ │──index.vue - 框架布局
│ │──setting.vue = 设置框架风格
│ ├── config - 项目配置
│ │ ├──configuration - 配置项目地址和api
│ │ ├──global - 配重全局内容
│ │ ├──proxy.ts - 代理样式
│ │ ├──style.ts - 配置全局样式风格
│ ├── pages - 页面展示目录
│ │ ├──dashboard - 首页,工作台
│ │ ├──coupon - 优惠券管理页
│ │ │ ├──addCoupon - 新增,编辑优惠券
│ │ │ ├──index - 列表页
│ │ ├──coupon - 客户管理页
│ │ ├──default - 公共缺省页
│ │ ├──institution - 企业管理
│ │ │ ├──authentication - 企业认证管理
│ │ │ ├──information - 企业信息管理
│ │ ├──personnel - 服务人员管理
│ │ │ ├──authentication - 服务人员认证管理
│ │ │ ├──information - 服务人员信息管理
│ │ ├──order - 订单管理
│ │ │ ├──dispatchList - 派单列表(已废弃)
│ │ │ ├──historyList - 历史订单列表
│ │ │ │ ├──orderDetail - 历史订单详情
│ │ │ │ ├──index - 列表页
│ │ │ ├──refundList - 退款订单列表(已废弃)
│ │ │ ├──orderList - 订单列表
│ │ │ │ ├──orderDetail - 历史订单详情
│ │ │ │ ├──index - 列表页
│ │ ├──reply - 原评价页面,现修改解决方案,已废弃
│ │ ├──service - 服务管理
│ │ │ ├──serviceType - 服务类型管理
│ │ │ ├──service - 服务项管理
│ │ │ │ ├──index - 服务项列表
│ │ │ │ ├──addService - 新增,编辑服务项
│ │ │ ├──region - 区域管理
│ │ │ │ ├──editRegion - 设置服务
│ │ │ │ ├──index - 区域列表
│ │ │ │ ├──setBusiness - 调度配置
│ │ ├──login - 登录页
│ │ ├──user - 个人中心
│ ├── router - 定义路由页面
│ ├── style - 样式
│ │ ├──componentsReast - 组件重置、全局样式
│ │ ├──theme - 全局颜色值、公用样式
│ │ index.less - 样式总入口
│ │ normal.less - 普通框架样式
│ │ noSecondMenu.less - 普通框架简化版样式
│ │ top.less - 上左右布局
│ ├── utils 封装工具目录
│ ├── main.ts - 项目入口文件
│ ├── permission.ts - 路有权限控制
├── tsconfig.json - ts配置文件
├── README.md - 说明文档
└── vite.config.js - vite 配置文件
```
#### 安装运行
``` bash
## 安装依赖
npm install || yarn
##或
cnpm install || yarn
## 启动项目
# 启动
npm run dev
# 启动链接测试环境
npm run start
## 构建正式环境 - 打包
npm run build
```
#### 插件
nprogress 进度条
viteMockServe vite 的数据模拟插件
vueJsx
> 使用jsx 语法 jsx语法可以更好地跟Typescript结合 在阅读UI框架源码时发现在知名UI组件库Ant Design Vue跟Naive UI皆使用tsx语法开发
vite-svg-loader
#### 参考
vite
vue3
pinia 中文文档 :类vuex
vue-router
Tdesign
Tdesign-cli
tsconfig.json配置
#### 文档
tsconfig.json 配置整理
vite.config.js vite配置文件
src/config/proxy.ts 后端地址配置,
release生成环境下的后端地址使用npm run build有效
vite.config.ts配置npm run dev的代理地址

View File

@@ -0,0 +1,66 @@
<svg width="122" height="32" viewBox="0 0 122 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_16025_26913)">
<path
d="M42.1876 8.78706H37.2302L34.1354 26.2045H30.52L33.5916 8.78706H28.6111L29.1491 5.79641H42.7256L42.1876 8.78706Z"
fill="currentColor"
></path>
<path
d="M58.4307 10.9505C58.4187 12.1155 58.3026 13.277 58.0837 14.4213L57.5052 17.8458C56.2789 24.8278 54.3815 26.2045 48.9787 26.2045H40.6777L44.2642 5.80798H51.3504C56.4929 5.80798 58.4307 7.09795 58.4307 10.9505ZM54.8211 11.4943C54.8211 9.18041 53.7163 8.79863 50.8066 8.79863H47.3358L44.8253 23.2139H48.2498C52.299 23.2139 53.1262 22.4041 53.9072 17.8516L54.4856 14.4271C54.6807 13.4608 54.793 12.4796 54.8211 11.4943Z"
fill="currentColor"
></path>
<path
d="M72.2269 13.756C72.2256 14.1538 72.1889 14.5507 72.117 14.9419L71.7352 17.0706C71.3071 19.4655 70.4163 20.3042 68.1777 20.3042H62.26L62.1212 21.1372C62.047 21.5188 62.0025 21.9056 61.9881 22.2941C61.9881 23.237 62.474 23.4511 64.0359 23.4511H69.4503L68.3454 26.1756H63.388C59.9172 26.1756 58.6504 25.2848 58.6504 23.104C58.664 22.4716 58.7259 21.8412 58.8355 21.2182L59.8883 15.1791C60.5362 11.4653 62.098 10.7076 66.0547 10.7076H67.8884C70.7171 10.7365 72.2269 11.4943 72.2269 13.756ZM68.8602 14.242C68.8602 13.5941 68.4553 13.4321 67.2174 13.4321H65.3027C64.0648 13.4321 63.469 13.5941 63.174 15.208L62.7459 17.6896H67.3215C67.4654 17.7123 67.6125 17.7034 67.7526 17.6634C67.8927 17.6234 68.0223 17.5533 68.1325 17.458C68.2427 17.3627 68.3307 17.2445 68.3905 17.1116C68.4502 16.9788 68.4803 16.8345 68.4785 16.6888L68.7735 14.9535C68.8153 14.7185 68.8386 14.4806 68.8429 14.242H68.8602Z"
fill="currentColor"
></path>
<path
d="M72.4121 23.48H78.7752C79.828 23.48 80.0189 23.318 80.204 22.271L80.4469 20.8422C80.4911 20.6385 80.5182 20.4315 80.5279 20.2233C80.5279 19.8704 80.337 19.8183 79.7181 19.8183H76.6233C74.2516 19.8183 73.4707 19.3613 73.4707 17.8226C73.496 17.0722 73.585 16.3252 73.7368 15.5898L73.9566 14.375C74.4946 11.2744 75.2986 10.9042 78.3471 10.9042H85.1614L84.0045 13.623H78.324C77.2712 13.623 77.0803 13.785 76.8952 14.8378L76.6812 16.0468C76.6341 16.25 76.607 16.4573 76.6002 16.6657C76.6002 17.0186 76.7853 17.0706 77.4042 17.0706H80.6378C83.0095 17.0706 83.7905 17.5276 83.7905 19.0663C83.7648 19.8187 83.6758 20.5676 83.5244 21.305L83.2236 22.9999C82.7434 25.7996 81.9336 26.1814 78.7521 26.1814H72.8922L72.4121 23.48Z"
fill="currentColor"
></path>
<path
d="M87.9843 10.9274H91.3278L88.6611 26.2045H85.3176L87.9843 10.9274ZM88.9851 4.97499H92.4559L91.8369 8.44576H88.3661L88.9851 4.97499Z"
fill="currentColor"
></path>
<path
d="M105.986 14.2651C105.946 15.2371 105.828 16.2043 105.633 17.1574L103.961 26.6037C103.313 30.2711 101.729 31 98.6279 31H92.8086L92.3227 28.2465H97.8759C99.9758 28.2465 100.381 28.0903 100.768 25.7186L100.953 24.6658H97.0777C93.6532 24.6658 92.2244 23.7229 92.2244 21.1372C92.2638 20.1652 92.3818 19.1979 92.5772 18.2449L92.9821 16.0063C93.7631 11.6967 94.758 10.7249 99.2585 10.7249H101.115C104.557 10.7365 105.986 11.6794 105.986 14.2651ZM101.457 21.9471L102.29 17.1227C102.462 16.3618 102.571 15.5878 102.614 14.8088C102.614 13.6519 102.035 13.4379 100.3 13.4379H99.0907C97.043 13.4379 96.719 14.0568 96.3662 16.0236L95.9612 18.2623C95.7993 19.025 95.691 19.7982 95.6373 20.5761C95.6373 21.733 96.2158 21.9529 97.9859 21.9529L101.457 21.9471Z"
fill="currentColor"
></path>
<path
d="M121.367 13.6751C121.306 14.7796 121.161 15.878 120.934 16.9607L119.32 26.2161H115.976L117.619 16.9607C117.766 16.2594 117.857 15.5476 117.891 14.832C117.891 13.8891 117.486 13.6751 116.219 13.6751H112.286L110.105 26.1814H106.767L109.434 10.9042H116.855C120.286 10.9274 121.367 11.7314 121.367 13.6751Z"
fill="currentColor"
></path>
<path
d="M7.97158 26.1814H3.28026C3.20254 26.1813 3.12575 26.1646 3.05505 26.1323C2.98435 26.1001 2.92139 26.053 2.87041 25.9944C2.81943 25.9357 2.78162 25.8668 2.75952 25.7923C2.73741 25.7178 2.73154 25.6394 2.74229 25.5625L3.65626 20.4026H9.44088L8.49798 25.7476C8.47291 25.8691 8.40703 25.9784 8.31127 26.0573C8.21552 26.1362 8.09566 26.18 7.97158 26.1814V26.1814Z"
fill="#009BFF"
></path>
<path
d="M21.1779 8.78706H5.69824L6.71634 3.00244H21.9877C22.0714 2.99445 22.1557 3.00616 22.234 3.03663C22.3123 3.06709 22.3823 3.11547 22.4386 3.17789C22.4948 3.2403 22.5356 3.31502 22.5578 3.39605C22.58 3.47709 22.5828 3.56219 22.5662 3.64453L21.7101 8.35321C21.6869 8.47672 21.6207 8.58803 21.5233 8.66744C21.4259 8.74684 21.3035 8.78922 21.1779 8.78706Z"
fill="url(#paint0_linear_16025_26913)"
></path>
<path
d="M5.69814 8.78706H0.549824C0.471061 8.78794 0.393048 8.77169 0.321181 8.73945C0.249315 8.70721 0.185311 8.65974 0.133598 8.60033C0.081885 8.54091 0.0436979 8.47097 0.0216786 8.39534C-0.000340748 8.31972 -0.00566652 8.24021 0.00606973 8.16232L0.84484 3.44785C0.867754 3.32323 0.933469 3.21053 1.03064 3.12921C1.1278 3.04788 1.25032 3.00304 1.37702 3.00244H6.71623L5.69814 8.78706Z"
fill="#0064FF"
></path>
<path d="M9.44658 20.3852H3.65039L5.69815 8.79863H11.4943L9.44658 20.3852Z" fill="url(#paint1_linear_16025_26913)"></path>
</g>
<defs>
<linearGradient id="paint0_linear_16025_26913" x1="6.19468" y1="5.90053" x2="21.6312" y2="8.6791" gradientUnits="userSpaceOnUse">
<stop offset="0.03" stop-color="#E9FFFF"></stop>
<stop offset="0.17" stop-color="#C4FAC9"></stop>
<stop offset="0.33" stop-color="#A0F694"></stop>
<stop offset="0.48" stop-color="#82F269"></stop>
<stop offset="0.63" stop-color="#6AEF47"></stop>
<stop offset="0.76" stop-color="#5AED2F"></stop>
<stop offset="0.89" stop-color="#4FEB20"></stop>
<stop offset="1" stop-color="#4CEB1B"></stop>
</linearGradient>
<linearGradient id="paint1_linear_16025_26913" x1="8.58918" y1="8.37635" x2="8.69869" y2="19.278" gradientUnits="userSpaceOnUse">
<stop stop-color="#009BFF"></stop>
<stop offset="0.35" stop-color="#0081FE"></stop>
<stop offset="0.75" stop-color="#006AFD"></stop>
<stop offset="1" stop-color="#0062FD"></stop>
</linearGradient>
<clipPath id="clip0_16025_26913">
<rect width="121.367" height="32" fill="white"></rect>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1673592571082" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M428.520238 1022.464034c-31.231313 0-62.769819-23.756277-62.769819-76.798311v-453.62202L24.561126 115.527186A97.789849 97.789849 0 0 1 3.569587 81.326339 59.493091 59.493091 0 0 1 4.900758 37.704898 59.595489 59.595489 0 0 1 36.439264 7.395165 97.789849 97.789849 0 0 1 75.759999 0.022528H948.291204c15.052469 0 28.261778 2.457546 39.320734 7.372637 14.642878 6.34866 25.599437 16.895628 31.538507 30.309733 5.939069 13.311707 6.34866 28.466574 1.33117 43.621441a97.789849 97.789849 0 0 1-20.991538 34.09845L658.505579 492.146101V764.933699c0 51.506067-30.00254 115.197466-69.835264 147.862347l-106.493657 87.75487c-17.612413 14.438082-35.634416 21.81072-53.554022 21.81072z" fill="#000000" fill-opacity=".25" p-id="2053"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

7
assets/svg/img_logo.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

2
commitlint.config.js Normal file
View File

@@ -0,0 +1,2 @@
// commit-lint config
module.exports = { extends: ['@commitlint/config-conventional'] };

52
default.conf Normal file
View File

@@ -0,0 +1,52 @@
server {
listen 80;
listen [::]:80;
server_name jzo2o-operation-test.itheima.net;
client_body_timeout 10m;
client_max_body_size 30m;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /api/ {
proxy_pass https://jzo2o-api-test.itheima.net/;
client_body_timeout 10m;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

BIN
docs/_media/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

155
docs/_media/icon.svg Normal file
View File

@@ -0,0 +1,155 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="220px" x="0px" y="0px" viewBox="0 0 418 62" enable-background="new 0 0 418 62" xml:space="preserve"> <image id="image0" width="418" height="62" x="0" y="0"
href="data:image/png;base64,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
MzowME1vDFUAAAAASUVORK5CYII=" />
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 202 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 KiB

10
docs/cover.md Normal file
View File

@@ -0,0 +1,10 @@
![logo](_media/icon.png)
> czri-admin 是由传智研究院研发的基于vue3.x+vite的一套后台基础架构
- 使用vue最新技术栈Vue3.x + TypeScript + Vite + pinia
- Prettier 统一代码格式
- ESlint 检查代码质量和风格问题。
[Git](http://git.itcast.cn/development/czri-admin)
[预览](https://czri-admin.itheima.net/)
[快速开始](/zh-cn/)

36
docs/index.html Normal file
View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>CZRI-ADMIN</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="//cdn.jsdelivr.net/npm/docsify@4/lib/themes/vue.css">
</head>
<body>
<nav>
<a href="#/zh-cn/">中文文档</a>
<!-- <a href="#/en/">EN</a>-->
<a href="#/">Home</a>
</nav>
<div id="app"></div>
<script>
window.$docsify = {
name: 'CZRI-ADMIN',
nameLink: {
'/zh-cn/': '#/zh-cn/',
'/': '#/',
},
logo: '/_media/icon.svg',
// multiple covers and custom file name
coverpage: {
'/': 'cover.md',
},
homepage: 'zh-cn/README.md'
}
</script>
<!-- Docsify v4 -->
<script src="//cdn.jsdelivr.net/npm/docsify@4"></script>
</body>
</html>

234
docs/zh-cn/README.md Normal file
View File

@@ -0,0 +1,234 @@
# RDesign
#### 链条式组件库
- 平时项目开发中,遇到已有组件库中没有涉及的组件但又经常用到,每次都得重新开发很浪费时间,针对这个问题我们进行了二次组件封装或者是重新开发,用的时候直接引入
#### 技术栈
- Vue 3 + TypeScript +Tdesign + Vite + pinia
#### 运行环境 - 初始开发环境及工具
- Mac
- node v17.8.0
- pnpm 6.32.8
- npm v8.12.1
#### 文件架构
```
├── commitlint.config.js - commintlint 规范
├── docker - docker 部署配置文件
│ └── nginx.conf - 若开启 browerhistroy 可参考配置
├── docs - 项目展示图 - 首页截图
├── globals.d.ts - 通用声明文件
├── index.html - 主 html 文件
├── mock - mock 目录
│ └── index.ts
├── node_modules - 项目依赖
├── package-lock.json
├── package.json
├── public - 公用资源文件
│ └── favicon.ico
├── shims-vue.d.ts
├── src - 页面代码
│ ├── api 请求相关
│ ├── assets 公共资源
│ │ ├── images 图片资源
│ ├── api - 接口
│ ├── co nponents - 公用组件
│ │ ├── Delete - 删除弹层:只需从父组件传删除的内容提示
│ │ ├── ImageMagnify - 查看图片弹层
│ │ ├── Message - 提示弹层
│ │ │ ├──Success - 成功通知弹窗
│ │ │ ├──ProdDisabled - 禁用提示弹窗
│ │ ├── switchBar - tab切换
│ │ │ ├──switchBar - tab切换
│ │ │ ├──switchBarindex - 首页tab切换
│ │ │ ├──switchBartop - 线条tab
│ ├── czriComponents - 组件包:常用,但是原有组件库实现不了,因此进行了二次开发
│ │ ├──AddInput - 动态添加input组件
│ │ ├──CardListCollapse - 折叠列表
│ │ ├──CardListSort - 带排序的列表
│ │ ├──dropList - 可下拉展开的列表
│ │ ├──ListDialog - 常用弹窗5带列表的弹窗
│ │ ├──ListScrollDialog - 常用弹窗5带列表的弹窗、滚动分页
│ │ ├──TabDialog - 常用弹窗6带tab的弹窗
│ │ ├──tabList - 带tab的列表
│ │ ├──Transfer - 穿梭框(标题有hover状态)
│ │ ├──treeList - 树形列表
│ │ ├──UnitDialog - 常用弹窗2带单位和数显
│ │ ├──index.less - 组件包样式
│ ├── layouts - 页面架构
│ │ ├──components - 页面架构公共组件
│ │ │ ├──Breadcrumb - 面包屑
│ │ │ ├──Content - 内置组件避免重复渲染DOM
│ │ │ ├──Footer - 底部公司名称
│ │ │ ├──LayoutContentSide - 侧边栏
│ │ │ ├──LayoutHeader - 侧边栏头部
│ │ │ ├──Loginfo - 侧边栏退出区域
│ │ │ ├──Notice - 通知中心,弃用
│ │ │ ├──Search - 搜索功能
│ │ ├──frame - 页面架构框架
│ │ ├──simple2Components - 框架二公用内容
│ │ │ ├──Header - 框架顶部
│ │ ├──simpleComponents - 框架公用内容
│ │ │ ├──MenuContent - 简版布局
│ │ │ ├──SideNav - 列表菜单
│ │──index.vue - 框架布局
│ │──setting.vue = 设置框架风格
│ ├── pages - 页面展示目录
│ │ ├──dashboard - 首页
│ │ ├──detail - 详情页
│ │ │ ├──advanced - 多卡片详情页
│ │ │ ├──base - 基础详情页
│ │ │ ├──deploy - 数据详情页
│ │ │ ├──secondary - 二级详情页
│ │ ├──form - 表单页
│ │ │ ├──base - 基础表单页
│ │ │ ├──step - 分步表单页
│ │ ├──login - 普通tab登录页
│ │ ├──login2 - 左右布局登录页
│ │ ├──module - 组件包调用入口页,调用的组件都在(czriComponents文件加中)
│ │ ├──user - 个人中心
│ │ ├──list - 列表页
│ │ │ ├──base - 基础列表页
│ │ │ ├──upBase - 基础列表页(带图)
│ │ │ ├──noSearch - 基础列表页(不带搜索)
│ │ │ ├──card - 卡片列表页
│ │ │ ├──noData - 列表无数据页
│ │ │ ├──statistics - 统计数据列表页
│ │ │ ├──tab - tab切换
│ │ │ ├──topTab - 标签列表页(顶部)
│ │ │ ├──tree - 树状筛选列表页
│ ├── router - 定义路由页面
│ ├── style - 样式
│ │ ├──componentsReast - 组件重置、全局样式
│ │ ├──theme - 全局颜色值、公用样式
│ │ index.less - 样式总入口
│ │ normal.less - 普通框架样式
│ │ noSecondMenu.less - 普通框架简化版样式
│ │ top.less - 上左右布局
│ ├── utils 封装工具目录
│ ├── main.ts - 项目入口文件
│ ├── permission.ts - 路有权限控制
├── tsconfig.json - ts配置文件
├── README.md - 说明文档
└── vite.config.js - vite 配置文件
```
#### 运行
``` bash
## 安装依赖
npm install || yarn
## 启动项目
## 启动链接mock
npm run dev
## 启动链接测试环境
npm run start
```
### 构建
```bash
## 构建正式环境 - 打包
npm run build
```
#### 插件
- [nprogress 进度条 ](https://madewith.cn/23)
- [viteMockServe vite 的数据模拟插件](https://www.csdn.net/tags/MtTaMg1sODE4ODA3LWJsb2cO0O0O.html)
- [vueJsx ](https://zhuanlan.zhihu.com/p/460328418)
> 使用jsx 语法 jsx语法可以更好地跟Typescript结合 在阅读UI框架源码时发现在知名UI组件库Ant Design Vue跟Naive UI皆使用tsx语法开发
- [vite-svg-loader](https://www.jianshu.com/p/bd3835d17ad1)
#### 参考
- [vite](https://vitejs.cn/guide/#index-html-and-project-root)
- [vue3](https://v3.cn.vuejs.org/guide/introduction.html)
- [pinia 中文文档 :类vuex](https://pinia.web3doc.top/introduction.html#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%BD%BF%E7%94%A8-pinia%EF%BC%9F)
- [vue-router](https://router.vuejs.org/zh/guide/)
- [Tdesign](https://tdesign.tencent.com/vue-next/getting-started)
- [Tdesign-cli](https://tdesign.tencent.com/starter/docs/vue-next/get-started)
- [pnpm](https://zhuanlan.zhihu.com/p/404784010)
#### 配置文件
- [.prettierrc vscode自动格式化插件配置](https://github.com/prettier/prettier)
- [.eslintrc eslint配置文件](https://cn.eslint.org/docs/rules/)
- [tsconfig.json 配置整理](https://wenku.baidu.com/view/1fc27fe29dc3d5bbfd0a79563c1ec5da50e2d6bd.html)
- [vite.config.js vite配置文件](https://vitejs.cn/config/)
#### 兼容性
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br> IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Edge >=84 | Firefox >=83 | Chrome >=84 | Safari >=14.1 |
### 组件概览
框架上,当前此组件库共包含
三套框架
六套主题
两种模式
页面上,当前共包含
列表页9个包含列表基础、列表带图、列表无搜索、列表Tab切换列表、列表Tab切换页面、列表关键数据、列表卡片式、列表树状筛选、列表无数据等九个列表位于page下面的list文件夹
表单页1个分布表单页位于page下的form文件夹下的step文件夹
个人页1个位于page下的user文件夹
缺省页共5个包含服务器出错页、网络异常页、网络断开页、访问页面不存在、无权限页位于page下的default文件夹
组件共11个包含列表可排序、列表可展开1、列表可展开2、列表带Tab、列表树状、弹窗带列表、弹窗带Tab、弹窗带表单、禁用提示、动态增加数据、穿梭框。展示位于page文件夹下的module文件夹具体每个组件源代码位于src下的czriComponents文件夹下。
### 关于如何使用框架进行修改使用
#### 如何增加和修改主题颜色
原理该组件库的主题颜色的修改主要是通过更改全局应用的less文件来达成换肤的目的及点击换色时当前应用的样式文件发生了改变正因如此全局使用的色调应尽可能的使用定义好的颜色而不是直接的色值
因此当需要添加或者修改全局的主题色时需要首先在theme文件夹下定义新的基本样式文件然后再添加对应的触发方式
1、新建样式文件
![](../_media/image-20230310155201062.png)
2、在layout下的setting文件中添加对应的触发方式
![](../_media/image-20230310155305993.png)
#### 关于如何修改全局框架导航样式
首先整体框架有三套风格列表导航风格一共有两套即为简版的无二级导航菜单风格和正常风格这两种路由配置不同因此需要动态进行路由配置的切换使用map语法对路由进行动态的渲染和挂载
![](../_media/image-20230313092444215.png)
其次,当点击对应的切换布局时,将通过传参的不同,切换不同的配置文件,
![](../_media/image-20230313104231264.png)
根据判断传入的参数内容判断需要切换的内容是什么,进行相应的切换
![](../_media/image-20230313104443270.png)
#### 整体切换的原理
##### 1、设置全局中需要切换内容的判断将对应的判断利用vuex或者pinia存储于全局
![](../_media/image-20230315102553195.png)
##### 2、在pinia或者vuex中存储并定义相应的方法来使之触发能够修改全局的变量达成将框架内容对应的变量调节成所需要的值的目的
![](../_media/image-20230315102835351.png)
##### 3、在页面的整体布局layout中定义对于所需要展示的内容设置相应的判断让他在需要显示的时候能够正常的进行显示例如下图
通过判断settingStore.isSidebarCompact的值确定显示内容
![](../_media/image-20230315103016408.png)

9
docs/相关命令.txt Normal file
View File

@@ -0,0 +1,9 @@
#框架文档https://docsify.js.org/#/zh-cn/quickstart
#全局安装 docsify-cli 工具
npm i docsify-cli -g
#初始化项目
docsify init ./docs
#本地预览
docsify serve docs

15
globals.d.ts vendored Normal file
View File

@@ -0,0 +1,15 @@
// 通用声明
declare type ClassName = { [className: string]: any } | ClassName[] | string;
declare interface ImportMeta {
env: {
MODE: 'mock' | 'development' | 'test' | 'release';
};
// eslint-disable-next-line no-unused-vars
glob: (url: string) => { url };
}
declare module '*.svg' {
const CONTENT: string;
export default CONTENT;
}

14
index.html Normal file
View File

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="./src/assets/test-img/logo.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>云岚到家</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

592
mock/index.ts Normal file
View File

@@ -0,0 +1,592 @@
import { MockMethod } from 'vite-plugin-mock'
import Mock from 'mockjs'
import { List } from 'tdesign-vue-next'
const BaseTag = '/api'
export default [
// 登录
{
url: `${BaseTag}/accounts/login`,
method: 'post',
response: () => ({
code: 200,
msg: 'ok',
data: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1c2VyIjp7InVzZXJJZCI6MTU2OTg1Mjg2NzIwOTUyMzIwMiwicm9sZUlkIjoyfSwiZXhwIjoxNjczMzM0MDYzfQ.PvsLpM47UHuIO9imEtkKNRCP16d84KielSrwkl0OzJfyDMfkxbT3hzGgPJbUTszpRc2B1spcOjloAI1lkj_YgUBOS8k64AuW33Gb9oe0HzhAKjqG8ztRj0VGyxS29Y4Ozy90ERqltg69hvIXTlc3OHqwPWDjaiB2VawlAOMi8bQGYBKek4f9ubIuuhEavH9kGzma48A_Tkp4TfV3NMWgiByKE-extIPkMK24Ei9niQMCpf5d865heB7FTCJR8jee5Uu2vKN94AnCb5DyIbvvN5AzTHz0M6KTNywngCbnkf5oEPdcfPO-DGsKNi8avGo2mTsV6WUm2MWxIa3zx8V1Xw',
requestId: 'ee052dcfeb4a4af3938e155dcfd3821e'
})
},
// 获取用户信息
{
url: `${BaseTag}/users/me`,
method: 'get',
response: () => ({
code: 200,
data: {
icon: 'https://yjy-oss-videos.oss-accelerate.aliyuncs.com/grzxhz.jpg',
id: '1569852867209523202',
name: 'admin',
roleName: '管理员',
type: 0,
msg: 'OK',
requestId: 'd2701c0a7a7b4703a4b070aa71491e07'
}
})
},
// 下面是原始数据 暂时不要动 等页面替换的差不多了 直接删掉
{
url: `${BaseTag}/get-list`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-1000': [
{
'index|+1': 1, // 规则编号
// 描述
'description|1': [
'测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务',
'测试服务1',
'测试服务2',
'测试服务3',
'测试服务4',
'测试服务5'
],
'name|1': '@cname', // 服务名称
'phoneNumber|1': '@natural(10000000000, 19999999999)', // 服务电话
// 头像
'headPortrait|1': [
'https://yjy-oss-videos.oss-accelerate.aliyuncs.com/grzxhz.jpg'
],
'serviceErrorNumber|1': '@natural(100, 1000)', // 服务调用次数
'serviceCallNumber|1': '@natural(100, 1000)', // 服务调用次数
'status|1': '@natural(0, 3)', // 状态
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')", // 更新时间。时间戳
'list|1-10': [
{
'index|1': '@natural(1000, 10000)', // 规则编号
// 描述
'description|1': [
'测试服务测试',
'测试服务1',
'测试服务2',
'测试服务3',
'测试服务4',
'测试服务5'
],
'name|1': '@cname', // 服务名称
'phoneNumber|1': '@natural(10000000000, 19999999999)', // 服务电话
// 头像
'headPortrait|1': ['@/assets/test-img/pic-touxiang.png'],
'serviceCallNumber|1': '@natural(100, 1000)', // 服务调用次数
'status|1': '@natural(0, 3)', // 状态
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')" // 更新时间。时间戳
}
]
}
]
})
}
})
},
// 获取下拉列表数据
{
url: `${BaseTag}/get-select`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|10': [
{
'index|+1': 1, // 规则编号
'total|1': '@natural(100, 999)',
// 描述
'description|1': [
'测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务',
'测试服务1',
'测试服务2',
'测试服务3',
'测试服务4',
'测试服务5'
],
'name|1': '@cname', // 服务名称
'phoneNumber|1': '@natural(10000000000, 19999999999)', // 服务电话
// 头像
'headPortrait|1': ['@/assets/test-img/pic-touxiang.png'],
'serviceCallNumber|1': '@natural(100, 1000)', // 服务调用次数
'status|1': '@natural(0, 3)', // 状态
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')", // 更新时间。时间戳
'list|1-10': [
{
'index|+1': 1000, // 规则编号
// 描述
'description|1': [
'测试服务测试',
'测试服务1',
'测试服务2',
'测试服务3',
'测试服务4',
'测试服务5'
],
'name|1': '@cname', // 服务名称
'phoneNumber|1': '@natural(10000000000, 19999999999)', // 服务电话
// 头像
'headPortrait|1': ['@/assets/test-img/pic-touxiang.png'],
'serviceCallNumber|1': '@natural(100, 1000)', // 服务调用次数
'status|1': '@natural(0, 3)', // 状态
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')" // 更新时间。时间戳
}
]
}
]
})
}
})
},
// 带tab的列表
{
url: `${BaseTag}/get-tab-list`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-1000': [
{
'index|+1': 1, // 规则编号
// 描述
'description|1': [
'测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务测试服务',
'测试服务1',
'测试服务2',
'测试服务3',
'测试服务4',
'测试服务5'
],
'name|1': '@cname', // 服务名称
'phoneNumber|1': '@natural(10000000000, 19999999999)', // 服务电话
// 头像
'headPortrait|1': [
'https://yjy-oss-videos.oss-accelerate.aliyuncs.com/grzxhz.jpg'
],
'serviceCallNumber|1': '@natural(100, 1000)', // 服务调用次数
'status|1': '@natural(0, 3)', // 状态
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')", // 更新时间。时间戳
'list|1-10': [
{
'index|1': '@natural(1000, 10000)', // 规则编号
// 描述
'description|1': [
'测试服务测试',
'测试服务1',
'测试服务2',
'测试服务3',
'测试服务4',
'测试服务5'
],
'name|1': '@cname', // 服务名称
'phoneNumber|1': '@natural(10000000000, 19999999999)', // 服务电话
// 头像
'headPortrait|1': ['@/assets/test-img/pic-touxiang.png'],
'serviceCallNumber|1': '@natural(100, 1000)', // 服务调用次数
'status|1': '@natural(0, 3)', // 状态
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')" // 更新时间。时间戳
}
]
}
]
})
}
})
},
// 个人信息数据
{
url: `${BaseTag}/get-personal`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
account: 'admin',
nickname: 'admin',
description: '这是一个管理员',
region: '110114',
address: '西三旗三旗百汇',
phone: '123456789',
headPortrait:
'https://yjy-oss-videos.oss-accelerate.aliyuncs.com/grzxhz.jpg'
})
}
})
},
// 修改个人信息
{
url: `${BaseTag}/update-personal`,
method: 'post',
response: ({ body }) => {
const {
account,
nickname,
description,
region,
address,
phone,
headPortrait
} = body
return {
code: 200,
data: {
account,
nickname,
description,
region,
address,
phone,
headPortrait
}
}
}
},
// 新建和编辑基础列表弹窗,发送的数据
{
url: `${BaseTag}list-basic/add`,
method: 'post',
// 接收的数据类型
response: ({ body }) => {
const { index, description, serviceCallNumber, status, updateTime } = body
return {
code: 200,
data: {
index,
description,
serviceCallNumber,
status,
updateTime
}
}
}
},
// 删除基础列表的数据
{
url: `${BaseTag}list-basic/delete`,
method: 'post',
// 接收的数据类型
response: ({ body }) => {
const { index } = body
return {
code: 200,
data: {
index
}
}
}
},
{
url: `${BaseTag}/detail-basic`,
method: 'get',
response: () => ({
code: 0,
data: {
...Mock.mock({
name: 'td_20023747',
loginType: 'Web',
currentRole: 'Admin',
rightsList: '通用权限',
userStatus: '启用',
language: '简体中文',
timeZone: '(GMT+08:00)中国时区—北京Asia/Beijing'
})
}
})
},
// 树形列表的数据
{
url: `${BaseTag}/get-tree-list`,
method: 'get',
response: () => {
return {
code: 200,
data: {
...Mock.mock({
'list|1': [
{
// 取货单号
'index|+1': '@natural(100000000, 999999999)',
// 状态
'status|1': '@natural(0, 3)',
// 销售单号
'saleOrderNumber|1': '@natural(10000000000, 19999999999)',
// 子订单
'subOrderchildrenNumber|1': '@natural(10000000, 99999999)',
// 用户姓名
'userName|1': '@cname',
// 用户手机号
'userPhone|1': '@natural(10000000000, 19999999999)',
// 常用仓库
'commonWarehouse|1': '菜鸟仓储',
// 取货地址
'address|1': '@county(true)'
}
]
})
}
}
}
},
{
url: `${BaseTag}/get-card-list`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|48-50': [
{
'index|+1': 1,
'type|1': '@natural(1, 3)',
'modelNumber|1': 'DXQM_@natural(100000, 999999)',
'name|1': ['验证码', 'SSL证书', 'CVM', '云数据库', '云防火墙'],
'createTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')" // 更新时间。时间戳
}
]
})
}
})
},
{
url: `${BaseTag}/get-project-list`,
method: 'get',
response: () => ({
code: 0,
data: {
...Mock.mock({
'list|1-50': [
{
'index|+1': 1,
adminPhone: '+86 13587609955',
updateTime: '2020-05-30 @date("HH:mm:ss")',
'adminName|1': ['顾娟 ', '常刚', '郑洋'],
'name|1': [
'沧州市办公用品采购项目',
'红河哈尼族彝族自治州办公用品采购项目 ',
'铜川市办公用品采购项目',
'陇南市办公用品采购项目 ',
'六安市办公用品采购项目 '
]
}
]
})
}
})
},
{
url: `${BaseTag}/post`,
method: 'post',
timeout: 2000,
response: {
code: 0,
data: {
name: 'vben'
}
}
},
// 验证密码
{
url: `${BaseTag}/validate-password`,
method: 'post',
response: ({ body }) => {
const { password } = body
if (password === '123456') {
return {
code: 200,
data: {
name: 'vben'
}
}
}
return {
code: 200,
msg: '密码错误'
}
}
},
// 分布表单页接受的数据
{
url: `${BaseTag}/form/step`,
method: 'post',
// 接收的数据类型
response: ({ body }) => {
const { name, type, account, payAccount, amount } = body
return {
code: 200,
data: {
name,
type,
account,
payAccount,
amount
}
}
}
},
// 折叠列表
{
url: '/api/get-collapse-list',
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-3': [
{
'index|+1': 1, // 规则编号
canUpdate: true,
'name|1': ['第一章 ', '第二章', '第三章'],
maxIndexOnShelf: 0,
maxSectionIndexOnShelf: 0,
'id|+1': 1, // 规则编号
sections: [
{
'id|+1': 1,
'index|+1': 1, // 规则编号
'subId|+1': 1,
canUpdate: true,
maxIndexOnShelf: 0,
maxSectionIndexOnShelf: 0,
'name|1': ['第一小节', '第二小节', '第三小节'],
sort: 1
}
]
}
]
})
}
})
},
// 穿梭框列表
{
url: '/api/get-transfer-list',
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-5': [
{
'name|1': [
'沧州市办公用品采购项目沧州市办公用品采购项目沧州市办公用品采购项目沧州市办公用品采购项目',
'红河哈尼族彝族自治州办公用品采购项目 ',
'铜川市办公用品采购项目',
'陇南市办公用品采购项目 ',
'六安市办公用品采购项目 '
],
'id|+1': 1 // 规则编号
}
]
})
}
})
},
// 卡片列表
{
url: `${BaseTag}/get-cardsort-list`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-3': [
{
'index|+1': 1,
isShow: false,
'name|1': ['顾娟 ', '常刚', '郑洋'],
'photo|1': [
'https://tdesign.gtimg.com/starter/cloud-db.jpg',
'https://tdesign.gtimg.com/starter/cloud-server.jpg',
'https://tdesign.gtimg.com/starter/ssl.jpg',
'https://tdesign.gtimg.com/starter/t-sec.jpg',
'https://tdesign.gtimg.com/starter/face-recognition.jpg'
],
'num|1': ['2 ', '3', '8'],
'phone|1': '@natural(10000000000, 19999999999)',
'introduce|1': [
'沧州市办公用品采购项目',
'红河哈尼族彝族自治州办公用品采购项目红河哈尼族彝族自治州办公用品采购项目红河哈尼族彝族自治州办公用品采购项目红河哈尼族彝族自治州办公用品采购项目 ',
'铜川市办公用品采购项目',
'陇南市办公用品采购项目 ',
'六安市办公用品采购项目 '
]
}
]
})
}
})
},
// 列表弹层例表数据
{
url: `${BaseTag}/get-dialog-list`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-65': [
{
'id|+1': 1,
isShow: false,
'name|1': ['顾娟 ', '常刚', '郑洋'],
'photo|1': [
'https://tdesign.gtimg.com/starter/cloud-db.jpg',
'https://tdesign.gtimg.com/starter/cloud-server.jpg',
'https://tdesign.gtimg.com/starter/ssl.jpg',
'https://tdesign.gtimg.com/starter/t-sec.jpg',
'https://tdesign.gtimg.com/starter/face-recognition.jpg'
],
'num|1': ['2 ', '3', '8'],
'phone|1': '@natural(10000000000, 19999999999)',
'introduce|1': [
'沧州市办公用品采购项目',
'红河哈尼族彝族自治州办公用品采购项目红河哈尼族彝族自治州办公用品采购项目红河哈尼族彝族自治州办公用品采购项目红河哈尼族彝族自治州办公用品采购项目 ',
'铜川市办公用品采购项目',
'陇南市办公用品采购项目 ',
'六安市办公用品采购项目 '
]
}
]
})
}
})
},
// 数据详情页例表数据
{
url: `${BaseTag}/get-detail-list`,
method: 'get',
response: () => ({
code: 200,
data: {
...Mock.mock({
'list|1-65': [
{
'id|+1': 1,
'index|+1': 1,
'name|1': [
'沧州市办公用品采购项目',
'红河哈尼族彝族自治州办购项目红河哈尼族彝族自目 ',
'铜川市办公用品采购项目',
'陇南市办公用品采购项目 ',
'六安市办公用品采购项目 '
],
'pdName|1': ['产品1', '产品2', '产品3'],
'adminName|1': ['admin1', 'admin2', 'admin3'],
'purchaseNum|1': ['2 ', '3', '8'],
'pdNum|1': ['2 ', '3', '8'],
'updateTime|1': "@datetime('yyyy-MM-dd HH:mm:ss')" // 更新时间。时间戳
}
]
})
}
})
}
] as MockMethod[]

8
mockProdServer.ts Normal file
View File

@@ -0,0 +1,8 @@
// mockProdServer.ts
import { createProdMockServer } from 'vite-plugin-mock/es/createProdMockServer';
import mockModule from './mock/index';
export function setupProdMockServer() {
createProdMockServer([...mockModule]);
}

7415
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

98
package.json Normal file
View File

@@ -0,0 +1,98 @@
{
"name": "Object-admin-pure",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev:mock": "vite --mode mock",
"dev": "vite --open --mode mock",
"dev:linux": "vite --mode release",
"dev:pro": "vite --mode development",
"build:test": "vite build --mode test",
"build:mock": "vite build --mode mock",
"build:dev": "vite build --mode development",
"build": "vue-tsc --noEmit && vite build --mode release",
"preview": "vite preview",
"lint": "eslint --ext .vue,.js,.jsx,.ts,.tsx ./ --max-warnings 0",
"lint:fix": "eslint --ext .vue,.js,jsx,.ts,.tsx ./ --max-warnings 0 --fix",
"stylelint": "stylelint src/**/*.{html,vue,sass,less}",
"stylelint:fix": "stylelint --fix src/**/*.{html,vue,vss,sass,less}",
"prepare": "node -e \"if(require('fs').existsSync('.git')){process.exit(1)}\" || is-ci || husky install",
"site:preview": "npm run build && cp -r dist _site",
"test": "echo \"no test specified,work in process\"",
"test:coverage": "echo \"no test:coverage specified,work in process\""
},
"dependencies": {
"axios": "^1.1.3",
"dayjs": "^1.10.6",
"default-passive-events": "^2.0.0",
"echarts": "^5.4.1",
"lodash": "^4.17.21",
"moment": "^2.29.4",
"nprogress": "^0.2.0",
"pinia": "^2.0.11",
"pinia-plugin-persistedstate": "^3.0.1",
"qrcode.vue": "^3.2.2",
"qs": "^6.10.5",
"tdesign-icons-vue-next": "^0.1.1",
"tdesign-vue-next": "^0.25.0",
"tvision-color": "^1.3.1",
"vue": "^3.2.31",
"vue-clipboard3": "^2.0.0",
"vue-router": "~4.1.5"
},
"devDependencies": {
"@commitlint/cli": "^17.0.3",
"@commitlint/config-conventional": "^17.0.3",
"@types/echarts": "^4.9.10",
"@types/lodash": "^4.14.182",
"@types/qs": "^6.9.7",
"@types/ws": "^8.2.2",
"@typescript-eslint/eslint-plugin": "^4.29.3",
"@typescript-eslint/parser": "^4.29.3",
"@vitejs/plugin-vue": "^2.3.1",
"@vitejs/plugin-vue-jsx": "^1.1.7",
"@vue/compiler-sfc": "^3.0.5",
"@vue/eslint-config-typescript": "^11.0.0",
"commitizen": "^4.2.4",
"cz-conventional-changelog": "^3.3.0",
"eslint": "^7.32.0",
"eslint-config-airbnb-base": "^14.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.24.1",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-vue": "^9.2.0",
"eslint-plugin-vue-scoped-css": "^2.2.0",
"husky": "^7.0.4",
"less": "^4.1.1",
"lint-staged": "^12.1.2",
"mockjs": "^1.1.0",
"prettier": "^2.4.1",
"stylelint": "~13.13.1",
"stylelint-config-prettier": "~9.0.3",
"stylelint-less": "^1.0.6",
"stylelint-order": "~4.1.0",
"typescript": "~4.8.4",
"vite": "^2.7.1",
"vite-plugin-mock": "^2.9.6",
"vite-svg-loader": "^3.1.0",
"vue-tsc": "^1.0.8"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
},
"lint-staged": {
"*.{js,jsx,vue,ts,tsx}": [
"prettier --write",
"npm run lint:fix",
"git add ."
],
"*.{html,vue,vss,sass,less}": [
"npm run stylelint:fix",
"git add ."
]
},
"description": "yldj"
}

5928
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
public/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

33
src/App.vue Normal file
View File

@@ -0,0 +1,33 @@
<template>
<router-view :class="[mode]" />
</template>
<script setup lang="ts">
import { computed, watch} from 'vue'
import { useRoute } from 'vue-router'
import { useSettingStore } from '@/store'
const route = useRoute()
const store = useSettingStore()
const mode = computed(() => {
return store.displayMode
})
// 监听路由变化
watch(
() => route.path,
() => {
const { back } = window.history.state
if (!back) return
// 其中从登录页跳转之后的api也需要保留
if (back.indexOf('/login?') === -1) {
store.clearRequestList()
}
}
)
</script>
<style lang="less" scoped>
#nprogress .bar {
background: var(--td-brand-color) !important;
}
</style>

34
src/api/coupon.ts Normal file
View File

@@ -0,0 +1,34 @@
import { request } from '@/utils/request'
// 运营端分页查询活动优惠券
export function getCouponList(data) {
return request.get({
url: '/market/operation/activity/page',
params: data
})
}
// 根据活动id查询活动优惠券领取记录
export function getCouponRecordList(data) {
return request.get({
url: '/market/operation/coupon/page',
params: data
})
}
// 活动保存
export function saveCoupon(data) {
return request.post({
url: '/market/operation/activity/save',
data
})
}
// 查询活动详情
export function getCouponDetail(id) {
return request.get({
url: '/market/operation/activity/' + id,
})
}
// 活动撤销,即删除优惠券
export function deleteCoupon(id) {
return request.post({
url: '/market/operation/activity/revoke/' + id,
})
}

17
src/api/custom.ts Normal file
View File

@@ -0,0 +1,17 @@
import { request } from '@/utils/request'
import type { customListRequest, customFreezeRequest } from '@/api/model/customModel'
// 普通用户分页查询
export function getCustomList(data: customListRequest) {
return request.get({
url: '/customer/operation/common-user/page',
params: data
})
}
// 冻结/解冻
export function customFreeze(data: customFreezeRequest) {
return request.put({
url: '/customer/operation/common-user/updateStatus',
data: data
})
}

23
src/api/detail.ts Normal file
View File

@@ -0,0 +1,23 @@
import { request } from '@/utils/request'
import type { ListResult } from '@/api/model/listModel'
export function getProjectList() {
return request.get<ListResult>({
url: '/get-detail-list'
})
}
// 首页数据
export function getDashBoardData(params) {
return request.get({
url: '/orders-history/operation/orders-statistics/homePage',
params
})
}
// 导出统计数据
export function exportStatisticsData(params) {
return request.get({
url: '/orders-history/operation/orders-statistics/downloadStatistics',
params,
responseType: 'blob'
})
}

16
src/api/form.ts Normal file
View File

@@ -0,0 +1,16 @@
import { request } from '@/utils/request'
import type { FormStep, FormSteppassword } from '@/api/model/formModel'
// 分布式表单提交
export function addList(params: FormStep) {
return request.post<FormStep>({
url: '/form/step',
data: params
})
}
// 密码验证
export function validatePassword(params: FormSteppassword) {
return request.post<FormSteppassword>({
url: '/validate-password',
data: params
})
}

79
src/api/list.ts Normal file
View File

@@ -0,0 +1,79 @@
import { request } from '@/utils/request'
import type {
CardListResult,
ListResult,
addListParams,
deleteListParams,
ListCollapseResult,
ListTransferModel,
ListCardsortResult
} from '@/api/model/listModel'
export function getList() {
return request.get<ListResult>({
url: '/get-list'
})
}
export function getCardList() {
return request.get<CardListResult>({
url: '/get-card-list'
})
}
// 新增和编辑基础列表的数据
export function addList(params: addListParams) {
return request.post<addListParams>({
url: '/list-basic/add',
data: params
})
}
// 删除基础列表的数据
export function deleteList(params: deleteListParams) {
return request.post<deleteListParams>({
url: '/list-basic/delete',
data: params
})
}
// 折叠列表数据
export function getCollapseList() {
return request.get<ListCollapseResult>({
url: '/get-collapse-list'
})
}
// 穿梭框数据
export function getTransferList() {
return request.get<ListTransferModel>({
url: '/get-transfer-list'
})
}
// 卡片数据
export function getcardSortList() {
return request.get<ListCardsortResult>({
url: '/get-cardsort-list'
})
}
// 列表弹层例表数据
export function getDialogList() {
return request.get<ListCardsortResult>({
url: '/get-dialog-list'
})
}
// 树形列表数据
export function getTreeList() {
return request.get<ListCardsortResult>({
url: '/get-tree-list'
})
}
// 下拉列表数据
export function getSelectList() {
return request.get<ListCardsortResult>({
url: '/get-select'
})
}
// 带tab的列表
export function getTabList() {
return request.get<ListCardsortResult>({
url: '/get-tab-list'
})
}

View File

@@ -0,0 +1,14 @@
export interface customListRequest {
page: number
pageSize: number
orderBy1: string
isAsc1: boolean
nickName?: string
phone?: string
}
// 冻结/解冻
export interface customFreezeRequest {
id: string
status: number
accountLockReason?: string
}

View File

@@ -0,0 +1,23 @@
export interface PurchaseListResult {
list: Array<PurchaseInfo>
}
export interface PurchaseInfo {
adminName: string
index: string
pdName: string
pdNum: string
pdType: string
purchaseNum: number
updateTime: Date
}
export interface ProjectListResult {
list: Array<ProjectInfo>
}
export interface ProjectInfo {
adminName: string
adminPhone: string
index: number
name: string
updateTime: Date
}

View File

@@ -0,0 +1,12 @@
// 提交分布式表单的数据
export interface FormStep {
name: string
type: string
account: string
payAccount: string
amount: string
}
// 密码验证
export interface FormSteppassword {
password: string
}

View File

@@ -0,0 +1,86 @@
export interface ListResult {
data: any[]
list: Array<ListModel>
}
export interface ListModel {
adminName: string
amount: string
contractType: number
index: number
name: string
no: string
paymentType: number
status: number
updateTime: Date
}
export interface CardListResult {
data: any
[x: string]: any
list: Array<CardList>
}
export interface CardList {
banner: string
description: string
index: number
isSetup: boolean
name: string
type: number
}
// 新增和编辑基础列表的数据
export interface addListParams {
index: number
description: string
serviceCallNumber: number
status: number
updateTime: Date
}
// 删除基础列表的数据
export interface deleteListParams {
index: number
}
// 折叠树列表
export interface ListCollapseResult {
data: any[]
list: Array<ListCollapseModel>
}
export interface ListCollapseModel {
index: number
canUpdate: boolean
name: string
maxIndexOnShelf: number
maxSectionIndexOnShelf: number
id: string
sections: [
{
index: number
maxIndexOnShelf: number
maxSectionIndexOnShelf: number
name: string
sort: number
}
]
}
// 穿梭框
export interface ListTransferResult {
data: any[]
list: Array<ListTransferModel>
}
export interface ListTransferModel {
name: string
id: string
}
// 卡片带排序
export interface ListCardsortResult {
data: any[]
list: Array<ListCardsortModel>
}
export interface ListCardsortModel {
name: string
id: string
isShow: boolean
introduce: string
num: number
phone: string
}

View File

@@ -0,0 +1,58 @@
export interface serviceTypeResult {
isAsc1: string
isAsc2: string
orderBy1: string
orderBy2: string
pageNo: number
pageSize: number
}
export interface serviceTypeStatus {
id: string
flag: number
}
export interface serviceTypeAdd {
img: string
serveTypeIcon: string
name: string
sortNum: number
}
export interface serviceTypeItemList {
isAsc1: string
isAsc2: string
orderBy1: string
orderBy2: string
pageNo: number
pageSize: number
name: string
serveTypeId: string
}
export interface serviceItemTypeAdd {
serveTypeId: string
img: string
description: string
referencePrice: string
unit: string
serveItemIcon: string
detailImg: string
name: string
sortNum: string
}
export interface regionTypeAdd {
cityCode: string
name: string
managerName: string
managerPhone: string
}
export interface regionTypeEdit {
managerName: string
managerPhone: string
}
export interface serviceListType {
isAsc1: string
isAsc2: string
orderBy1: string
orderBy2: string
pageNo: number
pageSize: number
regionId: string
}

View File

@@ -0,0 +1,19 @@
export interface loginResult {
code: number
msg: string
data: string
requestId: string
}
export interface userInfoResult {
code: number
msg: string
data: {
icon: string
id: string
name: string
roleName: string
type: number
requestId: string
}
}

35
src/api/order.ts Normal file
View File

@@ -0,0 +1,35 @@
import { request } from '@/utils/request'
// 根据订单id查询
export function getOrderById(id) {
return request.get({
url: '/orders-manager/operation/orders/aggregation/' + id
})
}
// 订单分页查询
export function getOrderList(value :any) {
return request.get({
url: '/orders-manager/operation/orders/page',
params: value
})
}
// 订单退款
export function refundOrder(value :any) {
return request.put({
url: '/orders-manager/operation/orders/cancel',
data: value
})
}
// 历史订单分页查询
export function getHistoryOrderList(value :any) {
return request.get({
url: '/orders-history/operation/orders/page',
params: value
})
}
// 查询历史订单详情
export function getHistoryOrderById(id) {
return request.get({
url: '/orders-history/operation/orders/' + id
})
}

318
src/api/service.ts Normal file
View File

@@ -0,0 +1,318 @@
import { request } from '@/utils/request'
import type {
serviceTypeResult,
serviceTypeStatus,
serviceTypeAdd,
serviceTypeItemList,
serviceItemTypeAdd,
regionTypeAdd,
regionTypeEdit,
serviceListType
} from '@/api/model/serviceModel'
// 获取服务类型列表数据
export function getServiceTypeList(value :serviceTypeResult) {
return request.get({
url: '/foundations/operation/serve-type/page',
params: value
})
}
// 服务类型启用
export function serviceTypeActiveStatus(id) {
return request.put({
url: `/foundations/operation/serve-type/activate/${id}`,
})
}
// 服务类型禁用
export function serviceTypeInactiveStatus(id) {
return request.put({
url: `/foundations/operation/serve-type/deactivate/${id}`,
})
}
// 服务类型新增
export function serviceTypeAdd(value :serviceTypeAdd) {
return request.post({
url: '/foundations/operation/serve-type',
data: value
})
}
// 服务类型编辑
export function serviceTypeEdit(value :serviceTypeAdd, id :string) {
return request.put({
url: '/foundations/operation/serve-type/' + id,
data: value
})
}
// 服务类型删除
export function serviceTypeDelete(id :string) {
return request.delete({
url: '/foundations/operation/serve-type/' + id
})
}
// 服务类型简略列表,用于下拉框
export function serviceTypeSimpleList(val?) {
return request.get({
url: '/foundations/operation/serve-type/queryServeTypeListByActiveStatus',
params: val
})
}
// 分页查询服务项
export function serviceItemList(value :serviceTypeItemList) {
return request.get({
url: '/foundations/operation/serve-item/page',
params: value
})
}
// 服务项启用
export function serviceItemActivateStatus(id) {
return request.put({
url: `/foundations/operation/serve-item/activate/${id}`,
})
}
// 服务项禁用
export function serviceItemDeactivateStatus(id) {
return request.put({
url: `/foundations/operation/serve-item/deactivate/${id}`,
})
}
// 服务项新增
export function serviceItemAdd(value :serviceItemTypeAdd) {
return request.post({
url: '/foundations/operation/serve-item',
data: value
})
}
// 服务项删除
export function serviceItemDelete(id :string) {
return request.delete({
url: '/foundations/operation/serve-item/' + id
})
}
// 根据id查询服务项
export function serviceItemById(id :string) {
return request.get({
url: '/foundations/operation/serve-item/' + id
})
}
// 服务项编辑
export function serviceItemEdit(value :serviceItemTypeAdd, id) {
return request.put({
url: '/foundations/operation/serve-item/' + id,
data: value
})
}
// 区域分页查询
export function regionList(value :serviceTypeResult) {
return request.get({
url: '/foundations/operation/region/page',
params: value
})
}
// 区域新增
export function regionAdd(value :regionTypeAdd) {
return request.post({
url: '/foundations/operation/region',
data: value
})
}
// 区域编辑
export function regionEdit(value :regionTypeEdit, id :string) {
return request.put({
url: '/foundations/operation/region/' + id + '?' + 'managerName=' + value.managerName + '&' + 'managerPhone=' + value.managerPhone,
data: value
})
}
// 区域删除
export function regionDelete(id :string) {
return request.delete({
url: '/foundations/operation/region/' + id
})
}
// 根据id查询区域
export function regionById(id) {
return request.get({
url: '/foundations/operation/region/' + id
})
}
// 服务分页查询
export function serviceList(value :serviceListType) {
return request.get({
url: '/foundations/operation/serve/page',
params: value
})
}
// 服务批量新增
export function serviceAdd(value) {
return request.post({
url: '/foundations/operation/serve/batch',
data: value
})
}
// 服务编辑(只有价格)
export function serviceEdit(value) {
return request.put({
url: '/foundations/operation/serve/' + value.id + '?' + 'price=' + value.price,
})
}
// 区域服务设置热门
export function serviceOnHot(id) {
return request.put({
url: '/foundations/operation/serve/onHot/' + id,
})
}
// 区域服务取消热门
export function serviceOffHot(id) {
return request.put({
url: '/foundations/operation/serve/offHot/' + id,
})
}
// 服务启用
export function serviceActiveStatus(id) {
return request.put({
url: `/foundations/operation/serve/onSale/${id}`,
})
}
// 服务禁用
export function serviceInactiveStatus(id) {
return request.put({
url: `/foundations/operation/serve/offSale/${id}`,
})
}
// 服务删除
export function serviceDelete(id) {
return request.delete({
url: '/foundations/operation/serve/' + id
})
}
// 接口名称:机构分页查询
export function serviceInstitutionList(value) {
return request.get({
url: '/customer/operation/serve-provider/pageQueryAgency',
params: value
})
}
// 服务人员分页查询
export function servicePersonList(value) {
return request.get({
url: '/customer/operation/serve-provider/pageQueryWorker',
params: value
})
}
// 服务人员、机构详情
export function servicePersonDetail(id) {
return request.get({
url: '/customer/operation/serve-provider/basicInformation/' + id
})
}
// 服务人员、机构冻结/解冻
export function servicePersonStatus(value) {
return request.put({
url: '/customer/operation/serve-provider/updateStatus',
data: value
})
}
// 机构下属服务人员相关接口分页查询
export function servicePersonItemList(value) {
return request.get({
url: '/customer/operation/institution-staff/page',
params: value
})
}
// 根据id查询调度配置
export function servicePersonItemById(id) {
return request.get({
url: '/foundations/operation/config-region/' + id
})
}
// 更新调度配置
export function servicePersonItemEdit(value) {
return request.put({
url: `/foundations/operation/config-region/${value.id}`,
data: value
})
}
// 区域启用
export function regionActiveStatus(id) {
return request.put({
url: `/foundations/operation/region/activate/${id}`,
})
}
// 区域禁用
export function regionInactiveStatus(id) {
return request.put({
url: `/foundations/operation/region/deactivate/${id}`,
})
}
// 已开通服务区域列表
export function regionOpenList() {
return request.get({
url: '/foundations/operation/region/activeRegionList',
})
}
// 刷新区域相关缓存
export function regionRefreshCache(id) {
return request.put({
url: `/foundations/operation/region/refreshRegionRelateCaches/${id}`,
})
}
// 机构认真审核信息分页查询
export function serviceInstitutionAuditList(value) {
return request.get({
url: '/customer/operation/agency-certification-audit/page',
params: value
})
}
// 服务人员认证审核信息分页查询
export function servicePersonAuditList(value) {
return request.get({
url: '/customer/operation/worker-certification-audit/page',
params: value
})
}
// 审核机构认证信息
export function serviceInstitutionAudit(value, id) {
return request.put({
url: '/customer/operation/agency-certification-audit/audit/' + id + '?' + 'rejectReason='+ value.rejectReason + '&' + 'certificationStatus=' + value.certificationStatus,
data: value
})
}
// 审核服务人员认证信息
export function servicePersonAudit(value, id) {
return request.put({
url: '/customer/operation/worker-certification-audit/audit/' + id + '?' + 'rejectReason='+ value.rejectReason + '&' + 'certificationStatus=' + value.certificationStatus,
data: value
})
}
// 根据机构id查询认证信息
export function serviceInstitutionAuditDetail(id) {
return request.get({
url: '/customer/operation/agency-certification/' + id
})
}
// 根据服务人员id查询认证信息
export function servicePersonAuditDetail(id) {
return request.get({
url: '/customer/operation/worker-certification/' + id
})
}
// 根据服务人员/机构id查询银行账户信息
export function servicePersonBankDetail(id) {
return request.get({
url: '/customer/operation/bank-account/' + id
})
}
// 获取评价系统token
export function serviceToken() {
return request.get({
url: '/customer/operation/evaluation/token'
})
}
// 查询服务人员/机构服务数据
export function servicePersonData(value) {
return request.get({
url: '/orders-manager/operation/ordersServe/pageQueryByServeProvider',
params: value
})
}

38
src/api/user.ts Normal file
View File

@@ -0,0 +1,38 @@
import { request } from '@/utils/request'
import type { loginResult, userInfoResult } from '@/api/model/userModel'
// 登录
// 账号登录
export const userLogins = (params) =>
request.post<loginResult>({
url: `/foundations/open/login`,
data: params
})
// 获取用户信息
export const getUserInfo = () =>
request.get<userInfoResult>({
url: `/users/me`
})
// 注册
export function register() {
return request.post<any>({
url: '/login'
})
}
// 个人中心
export function getpersonal() {
return request.get<any>({
url: '/get-personal?test=1&name=2',
params: {
c: 3
}
})
}
// 修改个人信息
export function updatepersonal(params) {
return request.post<any>({
url: '/update-personal',
data: params
})
}

View File

@@ -0,0 +1,13 @@
<svg width="88" height="48" viewBox="0 0 88 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0H88V48H0V0Z" fill="var(--td-component-border)"/>
<path d="M42.8627 14.0518V16.7601H44.4877V14.0518H42.8627Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.3488 23.9824C38.3488 21.0407 40.7335 18.656 43.6752 18.656C46.6168 18.656 49.0015 21.0407 49.0015 23.9824C49.0015 26.9241 46.6168 29.3088 43.6752 29.3088C40.7335 29.3088 38.3488 26.9241 38.3488 23.9824ZM43.6752 20.281C41.6309 20.281 39.9738 21.9382 39.9738 23.9824C39.9738 26.0266 41.6309 27.6838 43.6752 27.6838C45.7194 27.6838 47.3766 26.0266 47.3766 23.9824C47.3766 21.9382 45.7194 20.281 43.6752 20.281Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M52.208 26.781H49.5867L47.5262 33.48L49.0794 33.9577L49.5903 32.2968H52.2045L52.7154 33.9577L54.2686 33.48L52.208 26.781ZM51.7047 30.6718L51.0077 28.406H50.787L50.0901 30.6718H51.7047Z" fill="var(--td-text-color-primary)"/>
<path d="M48.2077 18.3009L50.1225 16.3861L51.2715 17.5351L49.3567 19.4499L48.2077 18.3009Z" fill="var(--td-text-color-primary)"/>
<path d="M53.6057 23.1699H50.8974V24.7949H53.6057V23.1699Z" fill="var(--td-text-color-primary)"/>
<path d="M44.4877 31.2045V33.9129H42.8627V31.2045H44.4877Z" fill="var(--td-text-color-primary)"/>
<path d="M37.2279 31.5786L39.1427 29.6638L37.9936 28.5147L36.0788 30.4295L37.2279 31.5786Z" fill="var(--td-text-color-primary)"/>
<path d="M36.453 24.7949H33.7446V23.1699H36.453V24.7949Z" fill="var(--td-text-color-primary)"/>
<path d="M36.0788 17.5351L37.9936 19.4499L39.1427 18.3009L37.2279 16.3861L36.0788 17.5351Z" fill="var(--td-text-color-primary)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -0,0 +1,5 @@
<svg width="88" height="48" viewBox="0 0 88 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0H88V48H0V0Z" fill="#13161B"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M52.5327 26.8699C52.0346 26.9554 51.5225 26.9999 51 26.9999C46.0294 26.9999 42 22.9705 42 17.9999C42 16.9964 42.1642 16.0313 42.4673 15.1299C38.2268 15.8574 35 19.5518 35 23.9999C35 28.9705 39.0294 32.9999 44 32.9999C47.9671 32.9999 51.3346 30.4332 52.5327 26.8699Z" fill="#949EAA"/>
</svg>

After

Width:  |  Height:  |  Size: 495 B

View File

@@ -0,0 +1,13 @@
<svg width="88" height="48" viewBox="0 0 88 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="88" height="48" fill="var(--td-component-border)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.9999 20.583C42.1129 20.583 40.5832 22.1127 40.5832 23.9997C40.5832 25.8867 42.1129 27.4163 43.9999 27.4163C45.8869 27.4163 47.4166 25.8867 47.4166 23.9997C47.4166 22.1127 45.8869 20.583 43.9999 20.583ZM39.0832 23.9997C39.0832 21.2843 41.2845 19.083 43.9999 19.083C46.7153 19.083 48.9166 21.2843 48.9166 23.9997C48.9166 26.7151 46.7153 28.9163 43.9999 28.9163C41.2845 28.9163 39.0832 26.7151 39.0832 23.9997Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M43.2499 17.333V14.833H44.7499V17.333H43.2499Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M48.1838 18.7552L49.9513 16.9877L51.0119 18.0483L49.2444 19.8158L48.1838 18.7552Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M50.6666 23.2497H53.1666V24.7497H50.6666V23.2497Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.2444 28.1835L51.0119 29.951L49.9513 31.0117L48.1838 29.2442L49.2444 28.1835Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M44.7499 30.6663V33.1663H43.2499V30.6663H44.7499Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M39.8162 29.2442L38.0487 31.0117L36.988 29.951L38.7555 28.1835L39.8162 29.2442Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M37.3333 24.7497H34.8333V23.2497H37.3333V24.7497Z" fill="var(--td-text-color-primary)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M38.7555 19.8158L36.988 18.0483L38.0487 16.9877L39.8162 18.7552L38.7555 19.8158Z" fill="var(--td-text-color-primary)"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
src/assets/btn_clean.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 847 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 746 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

BIN
src/assets/goBack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 748 B

BIN
src/assets/head@3x.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 21" class="design-iconfont">
<path d="M13.2971372,12.785904 L11.4470136,10.9342883 C11.8677675,10.4374406 12.2094436,9.88389559 12.4645816,9.28111339 C12.8002895,8.48585865 12.9718735,7.64136675 12.9718735,6.77151026 C12.9718735,5.90165376 12.8017815,5.05716186 12.4645816,4.26190712 C12.1393179,3.49350902 11.675295,2.80568081 11.082957,2.21334285 C10.4906191,1.6210049 9.80279086,1.15698196 9.03439275,0.8317183 C8.23913802,0.497502425 7.39464612,0.327410417 6.52478962,0.327410417 C5.65493313,0.327410417 4.81044123,0.497502425 4.01518649,0.83470237 C3.24678838,1.15996603 2.55896018,1.62398897 1.96662222,2.21632692 C1.37428426,2.80866488 0.910261329,3.49649309 0.584997664,4.26489119 C0.249289754,5.0586539 0.0791977464,5.9031458 0.0791977464,6.77300229 C0.0791977464,7.64285879 0.249289754,8.48735069 0.5864897,9.28260542 C0.911753364,10.0510035 1.3757763,10.7388317 1.96811425,11.3311697 C2.56045221,11.9235077 3.24828042,12.3875306 4.01667852,12.7127942 C4.81193326,13.0485022 5.65642516,13.2200862 6.52628166,13.2200862 C7.39613815,13.2200862 8.24063005,13.0499942 9.03588479,12.7127942 C9.63866699,12.4576562 10.192212,12.1159802 10.6890597,11.6952263 L12.5376913,13.5453499 C12.7465762,13.7542348 13.0882523,13.7542348 13.2971372,13.5453499 C13.5060221,13.3364649 13.5060221,12.9947889 13.2971372,12.785904 Z M6.52478962,12.1443289 C3.55862373,12.1443289 1.15346306,9.73916818 1.15346306,6.77300229 C1.15346306,3.8068364 3.55862373,1.40167573 6.52478962,1.40167573 C9.49095551,1.40167573 11.8961162,3.8068364 11.8961162,6.77300229 C11.8961162,9.73916818 9.49095551,12.1443289 6.52478962,12.1443289 Z M8.73300165,6.23586964 L7.06192228,6.23586964 L7.06192228,4.56479026 C7.06192228,4.2693673 6.82021258,4.0276576 6.52478962,4.0276576 C6.22936666,4.0276576 5.98765697,4.2693673 5.98765697,4.56479026 L5.98765697,6.23586964 L4.31657759,6.23586964 C4.02115463,6.23586964 3.77944493,6.47757933 3.77944493,6.77300229 C3.77944493,7.06842525 4.02115463,7.31013495 4.31657759,7.31013495 L5.98765697,7.31013495 L5.98765697,8.98121432 C5.98765697,9.27663728 6.22936666,9.51834698 6.52478962,9.51834698 C6.82021258,9.51834698 7.06192228,9.27663728 7.06192228,8.98121432 L7.06192228,7.31013495 L8.73300165,7.31013495 C9.02842461,7.31013495 9.27013431,7.06842525 9.27013431,6.77300229 C9.27013431,6.47757933 9.02842461,6.23586964 8.73300165,6.23586964 Z" transform="translate(3.5 3.713007)" fill="#FFF" fill-rule="nonzero"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1676535511802" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1408" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M428.520238 1022.464034c-31.231313 0-62.769819-23.756277-62.769819-76.798311v-453.62202L24.561126 115.527186A97.789849 97.789849 0 0 1 3.569587 81.326339 59.493091 59.493091 0 0 1 4.900758 37.704898 59.595489 59.595489 0 0 1 36.439264 7.395165 97.789849 97.789849 0 0 1 75.759999 0.022528H948.291204c15.052469 0 28.261778 2.457546 39.320734 7.372637 14.642878 6.34866 25.599437 16.895628 31.538507 30.309733 5.939069 13.311707 6.34866 28.466574 1.33117 43.621441a97.789849 97.789849 0 0 1-20.991538 34.09845L658.505579 492.146101V764.933699c0 51.506067-30.00254 115.197466-69.835264 147.862347l-106.493657 87.75487c-17.612413 14.438082-35.634416 21.81072-53.554022 21.81072z" fill="#0061fd" p-id="1409"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

1
src/assets/icon-ztsx.svg Normal file
View File

@@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1674975302863" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1499" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M428.520238 1022.464034c-31.231313 0-62.769819-23.756277-62.769819-76.798311v-453.62202L24.561126 115.527186A97.789849 97.789849 0 0 1 3.569587 81.326339 59.493091 59.493091 0 0 1 4.900758 37.704898 59.595489 59.595489 0 0 1 36.439264 7.395165 97.789849 97.789849 0 0 1 75.759999 0.022528H948.291204c15.052469 0 28.261778 2.457546 39.320734 7.372637 14.642878 6.34866 25.599437 16.895628 31.538507 30.309733 5.939069 13.311707 6.34866 28.466574 1.33117 43.621441a97.789849 97.789849 0 0 1-20.991538 34.09845L658.505579 492.146101V764.933699c0 51.506067-30.00254 115.197466-69.835264 147.862347l-106.493657 87.75487c-17.612413 14.438082-35.634416 21.81072-53.554022 21.81072z" fill="#000000" fill-opacity=".25" p-id="1500"></path></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 19" class="design-iconfont">
<g transform="translate(.75 .5)" stroke="#191919" fill="none" fill-rule="evenodd">
<rect x="2.61764706" y="1.68764706" width="12.7647059" height="14.6247059" rx="2"/>
<path stroke-linecap="square" d="M5.80882353 6.15294347L12.1911765 6.15294347"/>
<path stroke-linecap="square" d="M5.80882353 9L12.1911765 9"/>
<path stroke-linecap="square" d="M5.80882353 11.8470565L9.94025735 11.8470565"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 509 B

8
src/assets/icon_fuwu.svg Normal file
View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 18" class="design-iconfont">
<g stroke="#F74346" stroke-linejoin="round" fill="none" fill-rule="evenodd">
<path d="M2.9170943 2.9170943H8V8H2.9170943z" transform="translate(.75)"/>
<path d="M2.9170943 10H8V15.082905700000001H2.9170943z" transform="translate(.75)"/>
<path d="M10 2.9170943H15.082905700000001V8H10z" transform="translate(.75)"/>
<path d="M10 10H15.082905700000001V15.082905700000001H10z" transform="translate(.75)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 520 B

9
src/assets/icon_kehu.svg Normal file
View File

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 19" class="design-iconfont">
<g stroke="#191919" fill="none" fill-rule="evenodd">
<path d="M4.87669884 0A3 3 0 1 0 4.87669884 6A3 3 0 1 0 4.87669884 0Z" transform="translate(2.878418 4.541453)"/>
<path d="M9.75339769,10.8766988 C9.75339769,8.18337244 7.57002524,6 4.87669884,6 C2.18337244,6 0,8.18337244 0,10.8766988" stroke-linecap="round" transform="translate(2.878418 4.541453)"/>
<path stroke-linecap="round" d="M10.9413209 6.75634766L13.3364122 6.75634766" transform="translate(2.878418 4.541453)"/>
<path stroke-linecap="round" d="M9.75339769 4.46606445L13.3364122 4.46606445" transform="translate(2.878418 4.541453)"/>
<path stroke-linecap="round" d="M12.1388665 9.04663086L13.3364122 9.04663086" transform="translate(2.878418 4.541453)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

7
src/assets/icon_qiye.svg Normal file
View File

@@ -0,0 +1,7 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 19" class="design-iconfont">
<g stroke="#191919" fill="none" fill-rule="evenodd">
<path d="M9 2.64374075A3.03254732 3.03254732 0 1 0 9 8.70883539A3.03254732 3.03254732 0 1 0 9 2.64374075Z" transform="translate(.75 .703487)"/>
<path stroke-linejoin="round" d="M8.09838387 8.70883538L9.90161613 8.70883538 10.9670817 12.0325473 7.03291828 12.0325473z" transform="translate(.75 .703487)"/>
<path stroke-linejoin="round" d="M4.03451715 12.0325473L13.9654828 12.0325473 14.7636586 15.3562592 3.23634141 15.3562592z" transform="translate(.75 .703487)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 632 B

6
src/assets/icon_quyu.svg Normal file
View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 19" class="design-iconfont">
<g stroke="#191919" fill="none" fill-rule="evenodd">
<path d="M9.00001153,2.08413535 C6.58053924,2.08413535 4.61252664,4.04292528 4.61252664,6.45037915 L4.61252664,6.45036984 C4.61044084,7.33670611 4.88123193,8.2022034 5.38812468,8.92928805 C5.4136003,8.97245506 5.43907593,9.01420689 5.46879748,9.05525112 L8.67165181,13.2573138 L8.67165183,13.2573138 C8.75463598,13.3518562 8.87420967,13.4062305 9.00000475,13.4066288 C9.12384493,13.4066288 9.24131523,13.3528469 9.34321798,13.2396222 L12.5305059,9.05453567 C12.5623505,9.01349156 12.5892414,8.96749393 12.6033946,8.94131059 L12.6033947,8.94131052 C13.114814,8.21170589 13.3886318,7.34206265 13.3874817,6.45106705 C13.3874817,4.04290829 11.4194893,2.08482325 9.00000527,2.08482325 L9.00001153,2.08413535 Z M9.00001153,8.01288367 L9.00001147,8.01288367 C8.13660301,8.01405392 7.43527982,7.31590112 7.43255424,6.45249383 C7.43255424,5.59269089 8.13596508,4.89281391 9.00001147,4.89281391 C9.86406021,4.89281391 10.5674687,5.59339343 10.5674687,6.45249383 L10.5674687,6.45249625 C10.5647356,7.31617844 9.86298407,8.01444357 8.99929482,8.01288367 L9.00001153,8.01288367 Z" transform="translate(.25 .042467)"/>
<path d="M5.57741177,12.0752551 C3.83417,12.4466907 2.68010129,13.0935989 2.68010129,13.829492 C2.68010129,14.9817638 5.50961632,15.9158647 9,15.9158647 C12.4903837,15.9158647 15.3198987,14.9817638 15.3198987,13.829492 C15.3198987,13.0861286 14.1422804,12.4335659 12.369318,12.0640287" stroke-linecap="round" transform="translate(.25 .042467)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,8 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 19" class="design-iconfont">
<g fill="#191919" fill-rule="nonzero">
<path d="M6.11504464,10.2855341 L6.11504463,10.2855341 C5.9880934,10.2855341 5.8662929,10.2353036 5.77625713,10.1458054 L3.63626453,8.0039145 L3.63626449,8.00391445 C3.45237872,7.81409755 3.4571852,7.51115208 3.64700146,7.3272663 C3.83256863,7.14749627 4.12733208,7.14749148 4.31290403,7.32725802 L6.45288067,9.46822372 L6.45288067,9.46822372 C6.63998885,9.65486608 6.64036533,9.95784984 6.45372328,10.1449564 C6.36397577,10.2349277 6.24212646,10.2855341 6.11504586,10.2855341 L6.11504464,10.2855341 Z" transform="translate(2.25 1.5)"/>
<path d="M6.11504464,10.2855242 L6.11504464,10.2855242 C5.85076318,10.2854364 5.63657887,10.0711372 5.63664904,9.80685571 C5.63664904,9.68025623 5.68688309,9.55882823 5.7762573,9.46916415 L9.79585025,5.4495712 L9.79585024,5.44957121 C9.9859495,5.26597737 10.288887,5.27124966 10.4724824,5.46134791 C10.6515777,5.64678745 10.6515745,5.94077561 10.4724741,6.12621196 L6.45288116,10.145789 L6.45288116,10.145789 C6.36307957,10.2350713 6.24166082,10.28529 6.11502848,10.2855242 L6.11504464,10.2855242 Z" transform="translate(2.25 1.5)"/>
<path d="M7.05293849,15.4535979 L7.0529385,15.4535979 C6.78815135,15.4503172 6.57615891,15.2330055 6.57940119,14.9682183 C6.58223841,14.7422531 6.74243634,14.5489171 6.96394443,14.5041752 C9.60824262,14.001744 12.5875587,10.7286392 12.7990407,8.74274747 L12.796165,3.356506 C9.67236731,2.94019266 6.90840961,1.10170344 6.7868677,1.02034581 L6.7868677,1.02034581 C6.57176772,0.866798934 6.52186997,0.567951173 6.67541669,0.352852787 C6.82272407,0.146493167 7.10541884,0.0908509351 7.31994453,0.225989614 C7.34960337,0.246102494 10.2686159,2.18316685 13.3167989,2.45112057 L13.3167989,2.45112057 C13.5637767,2.47294164 13.7532075,2.6797977 13.7532075,2.92773745 L13.7532075,8.79347841 C13.4746901,11.4425783 10.0168667,14.8965603 7.14384197,15.4440014 L7.14384202,15.4440014 C7.11389428,15.4499717 7.08346063,15.4531729 7.052926,15.4535979 L7.05293849,15.4535979 Z" transform="translate(2.25 1.5)"/>
<path d="M7.05485279,15.4497667 L7.05485281,15.4497667 C7.02431562,15.4493098 6.99388101,15.4461091 6.96391955,15.4401904 C4.09091073,14.8946589 0.633100137,11.4378102 0.356516127,8.83846608 L0.354576306,2.92391055 C0.354576306,2.67508544 0.544066184,2.46835891 0.790984971,2.44729367 C3.84588391,2.17840673 6.75721057,0.241305683 6.78688218,0.221237469 L6.78688214,0.221237488 C7.01318395,0.0837218905 7.3081165,0.155697224 7.44563162,0.381998554 C7.57442041,0.593938349 7.52033451,0.869116945 7.32091166,1.01654653 C7.19936656,1.09788293 4.43541205,2.93543782 1.31161438,3.35173361 L1.31161438,8.78776276 C1.52022968,10.7238668 4.499541,13.9969637 7.14383919,14.50036 L7.1438392,14.50036 C7.40339554,14.5528342 7.57126821,14.8057844 7.51879414,15.0653408 C7.47402544,15.2867819 7.28074972,15.4469304 7.05484513,15.4497667 L7.05485279,15.4497667 Z" transform="translate(2.25 1.5)"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 460 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 MiB

BIN
src/assets/logBlackTem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Some files were not shown because too many files have changed in this diff Show More