将 web-admin 从子模块改为仓库内普通目录,便于单仓克隆与维护。
Co-authored-by: Cursor <cursoragent@cursor.com>
No files matched your search
@@ -0,0 +1,153 @@
|
||||
<template>
|
||||
<ElConfigProvider
|
||||
size="default"
|
||||
:locale="locales[language]"
|
||||
:z-index="3000"
|
||||
:card="{
|
||||
shadow: 'never'
|
||||
}"
|
||||
:dialog="{ alignCenter: true }"
|
||||
>
|
||||
<RouterView></RouterView>
|
||||
</ElConfigProvider>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onBeforeMount, onMounted, onBeforeUnmount } from 'vue'
|
||||
import { storeToRefs } from 'pinia'
|
||||
import { useUserStore } from './store/modules/user'
|
||||
import zh from 'element-plus/es/locale/lang/zh-cn'
|
||||
import en from 'element-plus/es/locale/lang/en'
|
||||
import { systemUpgrade } from './utils/sys'
|
||||
import { toggleTransition } from './utils/ui/animation'
|
||||
import { checkStorageCompatibility } from './utils/storage'
|
||||
import { initializeTheme } from './hooks/core/useTheme'
|
||||
|
||||
const userStore = useUserStore()
|
||||
const { language } = storeToRefs(userStore)
|
||||
|
||||
const locales = {
|
||||
zh: zh,
|
||||
en: en
|
||||
}
|
||||
|
||||
let buttonIconObserver: MutationObserver | null = null
|
||||
let panelTitleObserver: MutationObserver | null = null
|
||||
|
||||
const iconClassByText: Array<[RegExp, string]> = [
|
||||
[/(新增|新建|创建|添加)/, 'auto-icon-plus'],
|
||||
[/(删除|移除|清空|关闭)/, 'auto-icon-delete'],
|
||||
[/(导入|上传)/, 'auto-icon-upload'],
|
||||
[/(导出|下载)/, 'auto-icon-download'],
|
||||
[/(搜索|查询|筛选)/, 'auto-icon-search'],
|
||||
[/(重置|刷新)/, 'auto-icon-refresh'],
|
||||
[/(编辑|修改|配置|设置)/, 'auto-icon-edit'],
|
||||
[/(查看|详情)/, 'auto-icon-view'],
|
||||
[/(保存|提交|确定|确认)/, 'auto-icon-check']
|
||||
]
|
||||
|
||||
const autoIconClassList = iconClassByText.map(([, cls]) => cls)
|
||||
|
||||
const refreshButtonAutoIcons = () => {
|
||||
const selectors = [
|
||||
'.page-container .el-button:not(.is-circle):not(.el-button--text):not(:has(.el-icon))',
|
||||
'.console-container .el-button:not(.is-circle):not(.el-button--text):not(:has(.el-icon))'
|
||||
]
|
||||
const buttons = document.querySelectorAll<HTMLElement>(selectors.join(','))
|
||||
buttons.forEach((button) => {
|
||||
autoIconClassList.forEach((className) => button.classList.remove(className))
|
||||
const text = (button.textContent || '').replace(/\s+/g, '')
|
||||
const matched = iconClassByText.find(([rule]) => rule.test(text))
|
||||
if (matched) button.classList.add(matched[1])
|
||||
})
|
||||
}
|
||||
|
||||
const panelTitleIconByText: Array<[RegExp, string]> = [
|
||||
[/(任务|调度)/, 'auto-title-operation'],
|
||||
[/(区域)/, 'auto-title-location'],
|
||||
[/(用户|账号)/, 'auto-title-user'],
|
||||
[/(参数|配置)/, 'auto-title-settings'],
|
||||
[/(分类)/, 'auto-title-category'],
|
||||
[/(商品|产品)/, 'auto-title-box'],
|
||||
[/(订单)/, 'auto-title-receipt'],
|
||||
[/(发票)/, 'auto-title-file'],
|
||||
[/(询价|报价)/, 'auto-title-quote'],
|
||||
[/(结算)/, 'auto-title-calc']
|
||||
]
|
||||
|
||||
const panelTitleClassList = panelTitleIconByText.map(([, cls]) => cls)
|
||||
const panelTitleBarClass = 'title-bar-heading'
|
||||
const panelTitleBarTextRules: RegExp[] = [
|
||||
/(数据概览|快捷菜单|分类列表|单位列表|商品列表|参数列表|用户列表|区域列表|区域与询报价概览|报价管理|订单列表|最新订单|待结算订单|结算单记录|配送任务列表|预警列表|订单设置|客服设置|请求列表|近30日趋势|今日各区域)/
|
||||
]
|
||||
|
||||
const refreshPanelTitleIcons = () => {
|
||||
const headings = document.querySelectorAll<HTMLHeadingElement>(
|
||||
'.page-container .panel-top h2, .console-container .panel-top h2'
|
||||
)
|
||||
|
||||
headings.forEach((h2) => {
|
||||
const text = (h2.textContent || '').replace(/\s+/g, '')
|
||||
const useBar = panelTitleBarTextRules.some((rule) => rule.test(text))
|
||||
|
||||
if (useBar) {
|
||||
h2.querySelector('.title-ic')?.remove()
|
||||
panelTitleClassList.forEach((className) => h2.classList.remove(className))
|
||||
h2.classList.add(panelTitleBarClass)
|
||||
return
|
||||
}
|
||||
|
||||
h2.classList.remove(panelTitleBarClass)
|
||||
|
||||
// 已手写 title-ic(例如 delivery-demo)则不干预
|
||||
if (h2.querySelector('.title-ic')) return
|
||||
|
||||
// 确保存在容器
|
||||
const span = document.createElement('span')
|
||||
span.className = 'title-ic'
|
||||
span.setAttribute('aria-hidden', 'true')
|
||||
h2.prepend(span)
|
||||
|
||||
// 根据标题文本匹配图标类型
|
||||
panelTitleClassList.forEach((className) => h2.classList.remove(className))
|
||||
const matched = panelTitleIconByText.find(([rule]) => rule.test(text))
|
||||
if (matched) h2.classList.add(matched[1])
|
||||
})
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
toggleTransition(true)
|
||||
initializeTheme()
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
checkStorageCompatibility()
|
||||
toggleTransition(false)
|
||||
systemUpgrade()
|
||||
refreshButtonAutoIcons()
|
||||
refreshPanelTitleIcons()
|
||||
|
||||
buttonIconObserver = new MutationObserver(() => {
|
||||
refreshButtonAutoIcons()
|
||||
})
|
||||
buttonIconObserver.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
})
|
||||
|
||||
panelTitleObserver = new MutationObserver(() => {
|
||||
refreshPanelTitleIcons()
|
||||
})
|
||||
panelTitleObserver.observe(document.body, {
|
||||
childList: true,
|
||||
subtree: true
|
||||
})
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
buttonIconObserver?.disconnect()
|
||||
buttonIconObserver = null
|
||||
panelTitleObserver?.disconnect()
|
||||
panelTitleObserver = null
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,825 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
/**
|
||||
* 获取用户列表
|
||||
*/
|
||||
export function fetchUserList(params: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
role?: string
|
||||
roleIn?: string
|
||||
regionId?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.User.UserItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/users',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户详情
|
||||
*/
|
||||
export function fetchUserDetail(id: string) {
|
||||
return request.get<Api.User.UserDetail>({
|
||||
url: `/web/admin/users/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建用户
|
||||
*/
|
||||
export function fetchCreateUser(data: {
|
||||
username: string
|
||||
password: string
|
||||
realName: string
|
||||
phone?: string
|
||||
role: string
|
||||
regionId?: string
|
||||
regionIds?: string[]
|
||||
avatarUrl?: string | null
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/users',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户
|
||||
*/
|
||||
export function fetchUpdateUser(id: string, data: Partial<{
|
||||
realName: string
|
||||
phone?: string
|
||||
role: string
|
||||
regionId?: string
|
||||
regionIds?: string[]
|
||||
isActive: boolean
|
||||
avatarUrl?: string | null
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/users/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 可授权菜单 code 列表
|
||||
*/
|
||||
export function fetchAssignableMenuCodes() {
|
||||
return request.get<{
|
||||
list: Array<{
|
||||
id: string
|
||||
code: string
|
||||
name: string
|
||||
parentId?: string
|
||||
sortOrder?: number
|
||||
}>
|
||||
}>({
|
||||
url: '/web/admin/menus/assignable-codes'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户菜单授权
|
||||
*/
|
||||
export function fetchUserMenuScopes(userId: string) {
|
||||
return request.get<{
|
||||
userId: string
|
||||
menuCodes: string[]
|
||||
}>({
|
||||
url: `/web/admin/users/${userId}/menu-scopes`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户菜单授权(全量覆盖)
|
||||
*/
|
||||
export function fetchUpdateUserMenuScopes(userId: string, menuCodes: string[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/users/${userId}/menu-scopes`,
|
||||
data: { menuCodes }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
*/
|
||||
export function fetchDeleteUser(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/users/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置用户密码
|
||||
*/
|
||||
export function fetchResetPassword(id: string) {
|
||||
return request.post({
|
||||
url: `/web/admin/users/${id}/reset-password`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改用户密码
|
||||
*/
|
||||
export function fetchChangePassword(data: {
|
||||
oldPassword: string
|
||||
newPassword: string
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/users/change-password',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取区域列表
|
||||
*/
|
||||
export function fetchRegionList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Region.RegionItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/regions',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取启用的区域列表
|
||||
*/
|
||||
export function fetchActiveRegions() {
|
||||
// 简单缓存:区域列表变化频率低,避免页面间重复请求导致“区域加载慢”
|
||||
// 5 分钟 TTL;需要实时刷新时可在调用方自行绕过(后续可升级为 Pinia store)
|
||||
const now = Date.now()
|
||||
const anyFn = fetchActiveRegions as any
|
||||
const cache = anyFn.__cache as undefined | { ts: number; data: Api.Region.RegionItem[] }
|
||||
if (cache && now - cache.ts < 5 * 60 * 1000) return Promise.resolve(cache.data)
|
||||
|
||||
return request.get<Api.Region.RegionItem[]>({
|
||||
url: '/web/admin/regions/active'
|
||||
}).then((data) => {
|
||||
anyFn.__cache = { ts: now, data: data || [] }
|
||||
return data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有未删除的区域(包含禁用态 isActive=0)
|
||||
* 用于后台各模块“区域 tab”展示全量范围。
|
||||
*/
|
||||
export async function fetchNotDeletedRegions() {
|
||||
const now = Date.now()
|
||||
const anyFn = fetchNotDeletedRegions as any
|
||||
const cache = anyFn.__cache as undefined | { ts: number; data: Api.Region.RegionItem[] }
|
||||
if (cache && now - cache.ts < 5 * 60 * 1000) return cache.data
|
||||
|
||||
// 注意:后端 `GET /web/admin/regions` 的 pageSize 有上限(<=100),不能一次性拉太大。
|
||||
const pageSize = 100
|
||||
const all: Api.Region.RegionItem[] = []
|
||||
let page = 1
|
||||
|
||||
while (true) {
|
||||
const res: any = await fetchRegionList({ page, pageSize })
|
||||
const list: Api.Region.RegionItem[] = Array.isArray(res?.list) ? res.list : []
|
||||
all.push(...list)
|
||||
|
||||
const total = Number(res?.total ?? 0)
|
||||
// 没有更多数据:直接退出(避免死循环)
|
||||
if (!total || all.length >= total || list.length < pageSize) break
|
||||
page++
|
||||
}
|
||||
|
||||
anyFn.__cache = { ts: now, data: all }
|
||||
return all
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取区域详情
|
||||
*/
|
||||
export function fetchRegionDetail(id: string) {
|
||||
return request.get<Api.Region.RegionDetail>({
|
||||
url: `/web/admin/regions/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建区域
|
||||
*/
|
||||
export function fetchCreateRegion(data: {
|
||||
name: string
|
||||
code: string
|
||||
description?: string
|
||||
sortOrder?: number
|
||||
/** 预计配送时长(分钟) */
|
||||
expectedDeliveryMinutes?: number | null
|
||||
/** 计划到货前未送达时预警提前时间(分钟) */
|
||||
deliveryWarnAdvanceMinutes?: number | null
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/regions',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新区域
|
||||
*/
|
||||
export function fetchUpdateRegion(id: string, data: Partial<{
|
||||
name: string
|
||||
code: string
|
||||
description?: string
|
||||
sortOrder?: number
|
||||
isActive?: boolean
|
||||
expectedDeliveryMinutes?: number | null
|
||||
deliveryWarnAdvanceMinutes?: number | null
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/regions/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除区域
|
||||
*/
|
||||
export function fetchDeleteRegion(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/regions/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类列表
|
||||
*/
|
||||
export function fetchCategoryList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Category.CategoryItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/categories',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品分类树
|
||||
*/
|
||||
export function fetchCategoryTree() {
|
||||
return request.get<any[]>({
|
||||
url: '/web/admin/categories/tree'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品分类
|
||||
*/
|
||||
export function fetchCreateCategory(data: {
|
||||
name: string
|
||||
parentId?: string
|
||||
sortOrder?: number
|
||||
imageUrl?: string
|
||||
/** 价格系数,百分比点数(如 5 表示 5%) */
|
||||
priceCoefficient?: number
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/categories',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品分类
|
||||
*/
|
||||
export function fetchUpdateCategory(id: string, data: Partial<{
|
||||
name: string
|
||||
parentId?: string
|
||||
sortOrder?: number
|
||||
isActive?: boolean
|
||||
imageUrl?: string
|
||||
priceCoefficient?: number
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/categories/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品分类
|
||||
*/
|
||||
export function fetchDeleteCategory(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/categories/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传商品分类图片(MinIO)并返回图片URL
|
||||
*/
|
||||
export function fetchUploadCategoryImage(data: FormData) {
|
||||
return request.post({
|
||||
url: '/web/admin/categories/upload-image',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/** 上传用户头像,返回 MinIO 等存储后的 URL,供写入 avatarUrl */
|
||||
export function fetchUploadUserAvatar(data: FormData) {
|
||||
return request.post<{ url: string }>({
|
||||
url: '/web/admin/users/upload-avatar',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品单位列表
|
||||
*/
|
||||
export function fetchUnitList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Unit.UnitItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/units',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品单位
|
||||
*/
|
||||
export function fetchCreateUnit(data: {
|
||||
name: string
|
||||
code: string
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/units',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品单位
|
||||
*/
|
||||
export function fetchUpdateUnit(id: string, data: Partial<{
|
||||
name: string
|
||||
code: string
|
||||
isActive?: boolean
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/units/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品单位
|
||||
*/
|
||||
export function fetchDeleteUnit(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/units/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品列表
|
||||
*/
|
||||
export function fetchProductList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
categoryId?: string
|
||||
isActive?: boolean
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
totalPages: number
|
||||
}>({
|
||||
url: '/web/admin/products',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取商品详情
|
||||
*/
|
||||
export function fetchProductDetail(id: string) {
|
||||
return request.get<Api.Product.ProductDetail>({
|
||||
url: `/web/admin/products/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 商品在各启用区域的当前生效价(来自该区域生效中的价格清单)
|
||||
*/
|
||||
export function fetchProductRegionPrices(productId: string) {
|
||||
return request.get<{
|
||||
list: Array<{
|
||||
regionId: string
|
||||
regionName: string
|
||||
price: number | null
|
||||
unitId?: string | null
|
||||
unitName?: string | null
|
||||
}>
|
||||
}>({
|
||||
url: `/web/admin/products/${productId}/region-prices`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建商品
|
||||
*/
|
||||
export function fetchCreateProduct(data: {
|
||||
name: string
|
||||
skuCode?: string
|
||||
categoryId?: string
|
||||
unitId?: string
|
||||
measureValue?: number | null
|
||||
description?: string
|
||||
imageUrl?: string
|
||||
/** 调价系数(%):百分比点数,5 表示 5% */
|
||||
priceCoefficient?: number
|
||||
isActive?: boolean
|
||||
detailContent?: string
|
||||
}) {
|
||||
return request.post({
|
||||
url: '/web/admin/products',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商品
|
||||
*/
|
||||
export function fetchUpdateProduct(id: string, data: Partial<{
|
||||
name: string
|
||||
skuCode?: string
|
||||
categoryId?: string
|
||||
unitId?: string
|
||||
measureValue?: number | null
|
||||
description?: string
|
||||
imageUrl?: string
|
||||
priceCoefficient?: number
|
||||
isActive?: boolean
|
||||
detailContent?: string
|
||||
}>) {
|
||||
return request.put({
|
||||
url: `/web/admin/products/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除商品
|
||||
*/
|
||||
export function fetchDeleteProduct(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/products/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品轮播图 ==========
|
||||
|
||||
/**
|
||||
* 获取商品轮播图列表
|
||||
*/
|
||||
export function fetchProductBannerList(productId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductBanner[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/product-banners/product/${productId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量添加商品轮播图
|
||||
*/
|
||||
export function fetchCreateProductBanners(productId: string, items: Api.Product.ProductBannerCreate[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/product-banners/product/${productId}`,
|
||||
params: items
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新轮播图
|
||||
*/
|
||||
export function fetchUpdateProductBanner(id: string, data: Partial<Api.Product.ProductBannerUpdate>) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-banners/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新轮播图排序
|
||||
*/
|
||||
export function fetchUpdateProductBannerSort(productId: string, items: { id: string; sortOrder: number }[]) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-banners/product/${productId}/sort`,
|
||||
params: { items }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除轮播图
|
||||
*/
|
||||
export function fetchDeleteProductBanner(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/product-banners/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品详情媒体 ==========
|
||||
|
||||
/**
|
||||
* 获取商品详情媒体列表
|
||||
*/
|
||||
export function fetchProductDetailMediaList(productId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductDetailMedia[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/product-detail-media/product/${productId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量添加商品详情媒体
|
||||
*/
|
||||
export function fetchCreateProductDetailMedia(productId: string, items: Api.Product.ProductDetailMediaCreate[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/product-detail-media/product/${productId}`,
|
||||
params: items
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新详情媒体
|
||||
*/
|
||||
export function fetchUpdateProductDetailMedia(id: string, data: Partial<Api.Product.ProductDetailMediaUpdate>) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-detail-media/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新详情媒体排序
|
||||
*/
|
||||
export function fetchUpdateProductDetailMediaSort(productId: string, items: { id: string; sortOrder: number }[]) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-detail-media/product/${productId}/sort`,
|
||||
params: { items }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除详情媒体
|
||||
*/
|
||||
export function fetchDeleteProductDetailMedia(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/product-detail-media/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品参数模板 ==========
|
||||
|
||||
/**
|
||||
* 获取参数模板列表
|
||||
*/
|
||||
export function fetchProductParameterList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
keyword?: string
|
||||
isActive?: number
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductParameter[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}>({
|
||||
url: '/web/admin/product-parameters',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参数模板简洁列表
|
||||
*/
|
||||
export function fetchProductParameterSimple() {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductParameterSimple[]
|
||||
total: number
|
||||
}>({
|
||||
url: '/web/admin/product-parameters/simple'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取参数模板详情
|
||||
*/
|
||||
export function fetchProductParameterDetail(id: string) {
|
||||
return request.get<Api.Product.ProductParameter>({
|
||||
url: `/web/admin/product-parameters/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建参数模板
|
||||
*/
|
||||
export function fetchCreateProductParameter(data: Api.Product.ProductParameterCreate) {
|
||||
return request.post({
|
||||
url: '/web/admin/product-parameters',
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新参数模板
|
||||
*/
|
||||
export function fetchUpdateProductParameter(id: string, data: Partial<Api.Product.ProductParameterUpdate>) {
|
||||
return request.put({
|
||||
url: `/web/admin/product-parameters/${id}`,
|
||||
params: data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除参数模板
|
||||
*/
|
||||
export function fetchDeleteProductParameter(id: string) {
|
||||
return request.del({
|
||||
url: `/web/admin/product-parameters/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 分类参数关联 ==========
|
||||
|
||||
/**
|
||||
* 获取分类关联的参数列表
|
||||
*/
|
||||
export function fetchCategoryParameters(categoryId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.CategoryParameter[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/categories/${categoryId}/parameters`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新分类关联的参数
|
||||
*/
|
||||
export function fetchUpdateCategoryParameters(categoryId: string, items: Api.Product.CategoryParameterCreate[]) {
|
||||
return request.put({
|
||||
url: `/web/admin/categories/${categoryId}/parameters`,
|
||||
params: { items }
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 商品参数值 ==========
|
||||
|
||||
/**
|
||||
* 获取商品参数值列表
|
||||
*/
|
||||
export function fetchProductParameterValues(productId: string) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductParameterValue[]
|
||||
total: number
|
||||
}>({
|
||||
url: `/web/admin/product-parameter-values/product/${productId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存商品参数值
|
||||
*/
|
||||
export function fetchSaveProductParameterValues(productId: string, values: Api.Product.ProductParameterValueCreate[]) {
|
||||
return request.post({
|
||||
url: `/web/admin/product-parameter-values/product/${productId}`,
|
||||
params: { productId, values }
|
||||
})
|
||||
}
|
||||
|
||||
// ========== 售后评价 ==========
|
||||
|
||||
/**
|
||||
* 获取评价列表
|
||||
*/
|
||||
export function fetchReviewList(params?: {
|
||||
page?: number
|
||||
pageSize?: number
|
||||
productId?: string
|
||||
productName?: string
|
||||
userName?: string
|
||||
status?: string
|
||||
rating?: number
|
||||
startDate?: string
|
||||
endDate?: string
|
||||
}) {
|
||||
return request.get<{
|
||||
list: Api.Product.ProductReview[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}>({
|
||||
url: '/web/admin/reviews',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取评价统计
|
||||
*/
|
||||
export function fetchReviewStatistics(productId?: string) {
|
||||
return request.get<Api.Product.ProductReviewStatistics>({
|
||||
url: '/web/admin/reviews/statistics',
|
||||
params: { productId }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取评价详情
|
||||
*/
|
||||
export function fetchReviewDetail(id: string) {
|
||||
return request.get<Api.Product.ProductReview>({
|
||||
url: `/web/admin/reviews/${id}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 审核通过评价
|
||||
*/
|
||||
export function fetchApproveReview(id: string) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/approve`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 拒绝评价
|
||||
*/
|
||||
export function fetchRejectReview(id: string, rejectReason: string) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/reject`,
|
||||
params: { rejectReason }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 回复评价
|
||||
*/
|
||||
export function fetchReplyReview(id: string, replyContent: string) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/reply`,
|
||||
params: { replyContent }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 置顶/取消置顶评价
|
||||
*/
|
||||
export function fetchToggleReviewTop(id: string, isTop: number) {
|
||||
return request.put({
|
||||
url: `/web/admin/reviews/${id}/top`,
|
||||
params: { isTop }
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
import request from '@/utils/http'
|
||||
import { buildWebEncryptedLoginBody } from '@/utils/loginRsa'
|
||||
|
||||
/**
|
||||
* Web端登录(RSA 加密传输账号密码)
|
||||
* @param params 登录参数 { username, password }
|
||||
* @returns 登录响应
|
||||
*/
|
||||
export async function fetchLogin(params: { username: string; password: string }) {
|
||||
const body = await buildWebEncryptedLoginBody(params.username, params.password)
|
||||
return request.post<{
|
||||
token: string
|
||||
refreshToken: string
|
||||
expiresIn: number
|
||||
userInfo: {
|
||||
id: string
|
||||
username: string
|
||||
realName: string
|
||||
phone: string
|
||||
role: string
|
||||
regionId: string
|
||||
regionName: string
|
||||
avatarUrl?: string | null
|
||||
}
|
||||
}>({
|
||||
url: '/web/auth/login',
|
||||
data: body
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户信息
|
||||
* @returns 用户信息
|
||||
*/
|
||||
export function fetchGetUserInfo() {
|
||||
return request.get<{
|
||||
id: string
|
||||
username: string
|
||||
realName: string
|
||||
phone: string
|
||||
role: string
|
||||
regionId: string
|
||||
regionName: string
|
||||
regionIds?: string[]
|
||||
isSuperAdmin?: boolean
|
||||
isActive: boolean
|
||||
avatarUrl?: string | null
|
||||
}>({
|
||||
url: '/web/auth/current-user'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户菜单 code 权限
|
||||
*/
|
||||
export function fetchGetMenuCodes() {
|
||||
return request.get<{
|
||||
isSuperAdmin: boolean
|
||||
all: boolean
|
||||
menuCodes: string[]
|
||||
}>({
|
||||
url: '/web/auth/menu-codes'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新Token
|
||||
* @param refreshToken 刷新令牌
|
||||
* @returns 新令牌
|
||||
*/
|
||||
export function fetchRefreshToken(refreshToken: string) {
|
||||
return request.post<{
|
||||
token: string
|
||||
refreshToken: string
|
||||
expiresIn: number
|
||||
}>({
|
||||
url: '/web/auth/refresh-token',
|
||||
params: { refreshToken }
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 登出
|
||||
*/
|
||||
export function fetchLogout() {
|
||||
return request.post({
|
||||
url: '/web/auth/logout'
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
/** 与小程序端一致:value=区划代码,label=名称,children=下级 */
|
||||
export interface ChinaRegionTreeNode {
|
||||
value: string
|
||||
label: string
|
||||
children?: ChinaRegionTreeNode[]
|
||||
}
|
||||
|
||||
/** 运营端:数据源 bas_china_region */
|
||||
export function fetchChinaRegionTree() {
|
||||
return request.get<{ tree: ChinaRegionTreeNode[] }>({
|
||||
url: '/web/admin/china-region-tree'
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
import request from '@/utils/http'
|
||||
import type { AppRouteRecord } from '@/types/router'
|
||||
|
||||
/**
|
||||
* 获取菜单列表
|
||||
* 从后端获取运营端菜单
|
||||
*/
|
||||
export async function fetchGetMenuList() {
|
||||
const res = await request.get<AppRouteRecord[] | { menuList?: AppRouteRecord[] }>({
|
||||
url: '/web/menu/list'
|
||||
})
|
||||
if (Array.isArray(res)) return res
|
||||
return res?.menuList || []
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取角色列表
|
||||
*/
|
||||
export function fetchGetRoleList() {
|
||||
return request.get<Array<{ label: string; value: string }>>({
|
||||
url: '/web/admin/roles'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 示例表格用户列表(兼容旧示例页调用)
|
||||
*/
|
||||
export function fetchGetUserList(params?: Record<string, any>) {
|
||||
return request.get<{
|
||||
list: any[]
|
||||
total: number
|
||||
page?: number
|
||||
pageSize?: number
|
||||
}>({
|
||||
url: '/web/admin/users',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,206 @@
|
||||
import request from '@/utils/http'
|
||||
|
||||
/**
|
||||
* 更新日志相关 API
|
||||
*/
|
||||
|
||||
/**
|
||||
* 获取更新日志列表
|
||||
*/
|
||||
export function fetchGetUpgradeLogs(params: { page?: number; pageSize?: number }) {
|
||||
return request.get<{
|
||||
list: Array<{
|
||||
id: string
|
||||
version: string
|
||||
title: string
|
||||
date: string
|
||||
detail: string[]
|
||||
requireReLogin: boolean
|
||||
remark?: string
|
||||
createAt: string
|
||||
}>
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}>({
|
||||
url: '/web/system/upgrade-logs',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有更新日志(用于变更日志页面展示)
|
||||
*/
|
||||
export function fetchGetAllUpgradeLogs() {
|
||||
return request.get<Array<{
|
||||
version: string
|
||||
title: string
|
||||
date: string
|
||||
detail: string[]
|
||||
requireReLogin: boolean
|
||||
remark?: string
|
||||
}>>({
|
||||
url: '/web/system/upgrade-logs/all'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最新一条更新日志(用于升级检测)
|
||||
*/
|
||||
export function fetchGetLatestUpgradeLog() {
|
||||
return request.get<{
|
||||
version: string
|
||||
title: string
|
||||
date: string
|
||||
detail: string[]
|
||||
requireReLogin: boolean
|
||||
remark?: string
|
||||
} | null>({
|
||||
url: '/web/system/upgrade-logs/latest'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建更新日志
|
||||
*/
|
||||
export function fetchCreateUpgradeLog(data: {
|
||||
version: string
|
||||
title: string
|
||||
date: string
|
||||
detail?: string
|
||||
require_re_login?: boolean
|
||||
remark?: string
|
||||
}) {
|
||||
return request.post<{ id: string }>({
|
||||
url: '/web/system/upgrade-logs',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新更新日志
|
||||
*/
|
||||
export function fetchUpdateUpgradeLog(
|
||||
logId: string,
|
||||
data: {
|
||||
version?: string
|
||||
title?: string
|
||||
date?: string
|
||||
detail?: string
|
||||
require_re_login?: boolean
|
||||
remark?: string
|
||||
}
|
||||
) {
|
||||
return request.put<{ id: string }>({
|
||||
url: `/web/system/upgrade-logs/${logId}`,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除更新日志
|
||||
*/
|
||||
export function fetchDeleteUpgradeLog(logId: string) {
|
||||
return request.delete<{ id: string }>({
|
||||
url: `/web/system/upgrade-logs/${logId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 评论相关 API
|
||||
*/
|
||||
|
||||
/**
|
||||
* 获取评论列表
|
||||
*/
|
||||
export function fetchGetComments(params: {
|
||||
target_type?: string
|
||||
target_id?: string
|
||||
page?: number
|
||||
pageSize?: number
|
||||
}) {
|
||||
return request.get<{
|
||||
list: CommentItem[]
|
||||
total: number
|
||||
page: number
|
||||
pageSize: number
|
||||
}>({
|
||||
url: '/web/system/comments',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export interface CommentItem {
|
||||
id: string
|
||||
parentId?: string
|
||||
author: string
|
||||
authorId?: string
|
||||
content: string
|
||||
targetType?: string
|
||||
targetId?: string
|
||||
timestamp: string
|
||||
replies: CommentItem[]
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建评论
|
||||
*/
|
||||
export function fetchCreateComment(data: {
|
||||
author: string
|
||||
content: string
|
||||
parent_id?: string
|
||||
author_id?: string
|
||||
target_type?: string
|
||||
target_id?: string
|
||||
}) {
|
||||
return request.post<CommentItem>({
|
||||
url: '/web/system/comments',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除评论
|
||||
*/
|
||||
export function fetchDeleteComment(commentId: string) {
|
||||
return request.delete<{ id: string }>({
|
||||
url: `/web/system/comments/${commentId}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 系统配置相关 API
|
||||
*/
|
||||
|
||||
/**
|
||||
* 获取中国地图GeoJSON数据
|
||||
*/
|
||||
export function fetchGetChinaMapData() {
|
||||
return request.get<any>({
|
||||
url: '/web/system/china-map'
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取系统配置
|
||||
*/
|
||||
export function fetchGetSystemConfig(configKey: string) {
|
||||
return request.get<{
|
||||
key: string
|
||||
value: unknown
|
||||
name: string
|
||||
type: string
|
||||
description?: string
|
||||
} | null>({
|
||||
url: `/web/system/config/${configKey}`
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前系统版本号
|
||||
*/
|
||||
export function fetchGetCurrentVersion() {
|
||||
return request.get<{ version: string }>({
|
||||
url: '/web/system/version'
|
||||
})
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
[{"value":"110000","label":"北京市","children":[{"value":"110100","label":"北京市辖区","children":[{"value":"110101","label":"东城区"},{"value":"110102","label":"西城区"},{"value":"110105","label":"北京市朝阳区"},{"value":"110106","label":"丰台区"},{"value":"110107","label":"石景山区"},{"value":"110108","label":"海淀区"},{"value":"110109","label":"门头沟区"},{"value":"110111","label":"房山区"},{"value":"110112","label":"北京市通州区"},{"value":"110113","label":"顺义区"},{"value":"110114","label":"昌平区"},{"value":"110115","label":"大兴区"},{"value":"110116","label":"怀柔区"},{"value":"110117","label":"平谷区"}]},{"value":"110200","label":"北京市县","children":[{"value":"110228","label":"密云县"},{"value":"110229","label":"延庆县"}]}]},{"value":"120000","label":"天津市","children":[{"value":"120100","label":"天津市辖区","children":[{"value":"120101","label":"天津市和平区"},{"value":"120102","label":"天津市河东区"},{"value":"120103","label":"河西区"},{"value":"120104","label":"南开区"},{"value":"120105","label":"河北区"},{"value":"120106","label":"红桥区"},{"value":"120110","label":"东丽区"},{"value":"120111","label":"西青区"},{"value":"120112","label":"津南区"},{"value":"120113","label":"北辰区"},{"value":"120114","label":"武清区"},{"value":"120115","label":"宝坻区"},{"value":"120116","label":"滨海新区"}]},{"value":"120200","label":"天津市县","children":[{"value":"120221","label":"宁河县"},{"value":"120223","label":"静海县"},{"value":"120225","label":"蓟县"}]}]},{"value":"130000","label":"河北省","children":[{"value":"130100","label":"石家庄市","children":[{"value":"130101","label":"石家庄市辖区"},{"value":"130102","label":"石家庄市长安区"},{"value":"130103","label":"石家庄市桥东区"},{"value":"130104","label":"石家庄市桥西区"},{"value":"130105","label":"石家庄市新华区"},{"value":"130107","label":"井陉矿区"},{"value":"130108","label":"裕华区"},{"value":"130121","label":"井陉县"},{"value":"130123","label":"正定县"},{"value":"130124","label":"栾城县"},{"value":"130125","label":"行唐县"},{"value":"130126","label":"灵寿县"},{"value":"130127","label":"高邑县"},{"value":"130128","label":"深泽县"},{"value":"130129","label":"赞皇县"},{"value":"130130","label":"无极县"},{"value":"130131","label":"平山县"},{"value":"130132","label":"元氏县"},{"value":"130133","label":"赵县"},{"value":"130181","label":"辛集市"},{"value":"130182","label":"藁城市"},{"value":"130183","label":"晋州市"},{"value":"130184","label":"新乐市"},{"value":"130185","label":"鹿泉市"}]},{"value":"130200","label":"唐山市","children":[{"value":"130201","label":"唐山市辖区"},{"value":"130202","label":"路南区"},{"value":"130203","label":"路北区"},{"value":"130204","label":"古冶区"},{"value":"130205","label":"开平区"},{"value":"130207","label":"丰南区"},{"value":"130208","label":"丰润区"},{"value":"130223","label":"滦县"},{"value":"130224","label":"滦南县"},{"value":"130225","label":"乐亭县"},{"value":"130227","label":"迁西县"},{"value":"130229","label":"玉田县"},{"value":"130230","label":"唐海县"},{"value":"130281","label":"遵化市"},{"value":"130283","label":"迁安市"}]},{"value":"130300","label":"秦皇岛市","children":[{"value":"130301","label":"秦皇岛市辖区"},{"value":"130302","label":"海港区"},{"value":"130303","label":"山海关区"},{"value":"130304","label":"北戴河区"},{"value":"130321","label":"青龙满族自治县"},{"value":"130322","label":"昌黎县"},{"value":"130323","label":"抚宁县"},{"value":"130324","label":"卢龙县"}]},{"value":"130400","label":"邯郸市","children":[{"value":"130401","label":"邯郸市辖区"},{"value":"130402","label":"邯山区"},{"value":"130403","label":"丛台区"},{"value":"130404","label":"复兴区"},{"value":"130406","label":"峰峰矿区"},{"value":"130421","label":"邯郸县"},{"value":"130423","label":"临漳县"},{"value":"130424","label":"成安县"},{"value":"130425","label":"大名县"},{"value":"130426","label":"涉县"},{"value":"130427","label":"磁县"},{"value":"130428","label":"肥乡县"},{"value":"130429","label":"永年县"},{"value":"130430","label":"邱县"},{"value":"130431","label":"鸡泽县"},{"value":"130432","label":"广平县"},{"value":"130433","label":"馆陶县"},{"value":"130434","label":"魏县"},{"value":"130435","label":"曲周县"},{"value":"130481","label":"武安市"}]},{"value":"130500","label":"邢台市","children":[{"value":"130501","label":"邢台市辖区"},{"value":"130502","label":"邢台市桥东区"},{"value":"130503","label":"邢台市桥西区"},{"value":"130521","label":"邢台县"},{"value":"130522","label":"临城县"},{"value":"130523","label":"内丘县"},{"value":"130524","label":"柏乡县"},{"value":"130525","label":"隆尧县"},{"value":"130526","label":"任Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
[{"code":"110000","parentCode":null,"name":"北京市","level":1,"sort":1},{"code":"110100","parentCode":"110000","name":"北京市辖区","level":2,"sort":2},{"code":"110101","parentCode":"110100","name":"东城区","level":3,"sort":3},{"code":"110102","parentCode":"110100","name":"西城区","level":3,"sort":4},{"code":"110105","parentCode":"110100","name":"北京市朝阳区","level":3,"sort":5},{"code":"110106","parentCode":"110100","name":"丰台区","level":3,"sort":6},{"code":"110107","parentCode":"110100","name":"石景山区","level":3,"sort":7},{"code":"110108","parentCode":"110100","name":"海淀区","level":3,"sort":8},{"code":"110109","parentCode":"110100","name":"门头沟区","level":3,"sort":9},{"code":"110111","parentCode":"110100","name":"房山区","level":3,"sort":10},{"code":"110112","parentCode":"110100","name":"北京市通州区","level":3,"sort":11},{"code":"110113","parentCode":"110100","name":"顺义区","level":3,"sort":12},{"code":"110114","parentCode":"110100","name":"昌平区","level":3,"sort":13},{"code":"110115","parentCode":"110100","name":"大兴区","level":3,"sort":14},{"code":"110116","parentCode":"110100","name":"怀柔区","level":3,"sort":15},{"code":"110117","parentCode":"110100","name":"平谷区","level":3,"sort":16},{"code":"110200","parentCode":"110000","name":"北京市县","level":2,"sort":17},{"code":"110228","parentCode":"110200","name":"密云县","level":3,"sort":18},{"code":"110229","parentCode":"110200","name":"延庆县","level":3,"sort":19},{"code":"120000","parentCode":null,"name":"天津市","level":1,"sort":20},{"code":"120100","parentCode":"120000","name":"天津市辖区","level":2,"sort":21},{"code":"120101","parentCode":"120100","name":"天津市和平区","level":3,"sort":22},{"code":"120102","parentCode":"120100","name":"天津市河东区","level":3,"sort":23},{"code":"120103","parentCode":"120100","name":"河西区","level":3,"sort":24},{"code":"120104","parentCode":"120100","name":"南开区","level":3,"sort":25},{"code":"120105","parentCode":"120100","name":"河北区","level":3,"sort":26},{"code":"120106","parentCode":"120100","name":"红桥区","level":3,"sort":27},{"code":"120110","parentCode":"120100","name":"东丽区","level":3,"sort":28},{"code":"120111","parentCode":"120100","name":"西青区","level":3,"sort":29},{"code":"120112","parentCode":"120100","name":"津南区","level":3,"sort":30},{"code":"120113","parentCode":"120100","name":"北辰区","level":3,"sort":31},{"code":"120114","parentCode":"120100","name":"武清区","level":3,"sort":32},{"code":"120115","parentCode":"120100","name":"宝坻区","level":3,"sort":33},{"code":"120116","parentCode":"120100","name":"滨海新区","level":3,"sort":34},{"code":"120200","parentCode":"120000","name":"天津市县","level":2,"sort":35},{"code":"120221","parentCode":"120200","name":"宁河县","level":3,"sort":36},{"code":"120223","parentCode":"120200","name":"静海县","level":3,"sort":37},{"code":"120225","parentCode":"120200","name":"蓟县","level":3,"sort":38},{"code":"130000","parentCode":null,"name":"河北省","level":1,"sort":39},{"code":"130100","parentCode":"130000","name":"石家庄市","level":2,"sort":40},{"code":"130101","parentCode":"130100","name":"石家庄市辖区","level":3,"sort":41},{"code":"130102","parentCode":"130100","name":"石家庄市长安区","level":3,"sort":42},{"code":"130103","parentCode":"130100","name":"石家庄市桥东区","level":3,"sort":43},{"code":"130104","parentCode":"130100","name":"石家庄市桥西区","level":3,"sort":44},{"code":"130105","parentCode":"130100","name":"石家庄市新华区","level":3,"sort":45},{"code":"130107","parentCode":"130100","name":"井陉矿区","level":3,"sort":46},{"code":"130108","parentCode":"130100","name":"裕华区","level":3,"sort":47},{"code":"130121","parentCode":"130100","name":"井陉县","level":3,"sort":48},{"code":"130123","parentCode":"130100","name":"正定县","level":3,"sort":49},{"code":"130124","parentCode":"130100","name":"栾城县","level":3,"sort":50},{"code":"130125","parentCode":"130100","name":"行唐县","level":3,"sort":51},{"code":"130126","parentCode":"130100","name":"灵寿县","level":3,"sort":52},{"code":"130127","parentCode":"130100","name":"高邑县","level":3,"sort":53},{"code":"130128","parentCode":"130100","name":"深泽县","level":3,"sort":54},{"code":"130129","parentCode":"130100","name":"赞皇县","level":3,"sort":55},{"code":"130130","parentCode":"130100","name":"无极县","level":3,"sort":56},{"code":"130131","parentCode":"130100","name":"平山县","level":3,"sort":57},{"code":"130132","parentCode":"130100","name":"元氏县","level":3,"sort":58},{"code":"130133","parentCode":"130100","name":"赵县","level":3,"sort":59},{"code":"130181","parentCode":"130100","name":"辛集市","level":3,"sort":60},{"code":"130182","parentCode":"130100","name":"藁城市","level":3,"sort":61},{"code":"130183","parentCode":"130100","name":"晋州市","level":3,"sort":62},{Line truncated
|
||||
|
After Width: | Height: | Size: 9.8 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 954 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 726 B |
|
After Width: | Height: | Size: 944 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 810 B |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 4.5 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 9.0 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 514 B |
|
After Width: | Height: | Size: 409 B |
|
After Width: | Height: | Size: 431 B |
|
After Width: | Height: | Size: 439 B |
|
After Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 286 B |
|
After Width: | Height: | Size: 293 B |
|
After Width: | Height: | Size: 448 B |
|
After Width: | Height: | Size: 416 B |
|
After Width: | Height: | Size: 509 B |
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 400 300" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="94" y="34" width="212" height="233"><path d="M306 34H94v233h212V34Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M234.427 155.64h38.36V69.6h-38.36v86.04ZM113.326 155.64h121.1V69.6h-121.1v86.04Z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M130.126 155.354h104.2v-72.95h-104.2v72.95ZM236.369 71.05s0 3.3 1.65 5.05c2.33 2.52 7.38-.2 7.38-.2s-1.75 5.15-1.55 10.19c.29 8.24 6.99 9.51 10 4.75 4.56 4.85 8.94-.29 9.52-2.62 4.27 4.76 9.32-.87 9.32-.87v-6.3l-23.99-12.13-12.33 2.13Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M234.429 155.641h-121.1l-15.93 32.11h121.1l15.93-32.11Z" fill="#fff"/><path d="M234.427 69.6h38.46v86.04M113.326 146.52V69.6h121.1M234.429 155.641l-15.93 32.11h-121.1l15.93-32.11h111.39" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M226.37 159.715H116.82l-12.04 23.86H215l11.37-23.86Z" fill="#006EFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="m288.807 187.751-15.92-32.11h-38.46l16.02 32.11h38.36Z" fill="#fff"/><path d="m238.607 163.981 11.84 23.77h38.36l-15.92-32.11h-38.46" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M207.336 223.734c-3.69-13.77-15.44-23.86-29.33-23.86h-8.65s-27.09 14.94-27.09 33.27c0 18.34 25.44 33.18 25.44 33.18h10.4c13.79-.1 25.44-10.19 29.13-23.87 1.75-12.51 0-18.62.1-18.72Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M243.459 240.421c3.98 0 7.28-3.3 7.28-7.27 0-3.98-3.3-7.28-7.28-7.28h-31.08c-3.98 0-7.28 3.3-7.28 7.28 0 3.97 3.3 7.27 7.28 7.27h31.08Z" fill="#C7DEFF"/><path d="M210.342 223.737c-4.08-13.87-16.9-23.96-32.05-23.96H168.972s-29.62 14.94-29.62 33.37 27.87 33.37 27.87 33.37h11.27c15.05-.1 27.77-10.19 31.75-23.96" stroke="#071F4D"/><path d="M212.379 240.421c-3.98 0-7.28-3.3-7.28-7.27m0 0c0-3.98 3.3-7.28 7.28-7.28" stroke="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M168.781 199.777c-18.45 0-33.41 14.94-33.41 33.37s14.96 33.37 33.41 33.37c18.45 0 33.4-14.94 33.4-33.37s-14.95-33.37-33.4-33.37Z" fill="#006EFF"/><path d="M168.781 199.777c-18.45 0-33.41 14.94-33.41 33.37s14.96 33.37 33.41 33.37c18.45 0 33.4-14.94 33.4-33.37s-14.95-33.37-33.4-33.37Z" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M168.775 209.38c-13.14 0-23.79 10.64-23.79 23.77 0 13.12 10.65 23.76 23.79 23.76 13.14 0 23.8-10.64 23.8-23.76 0-13.13-10.66-23.77-23.8-23.77Z" fill="#00E4E5"/><path d="M162.174 223.736a17.48 17.48 0 0 1 14.76-8.05M159.455 231.982c.1-1.36.29-2.62.68-3.88" stroke="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M173.535 209.87c-1.55-.3-3.11-.49-4.76-.49-13.11 0-23.79 10.67-23.79 23.77 0 13.09 10.68 23.76 23.79 23.76 1.65 0 3.21-.19 4.76-.48-10.88-2.23-19.03-11.84-19.03-23.28 0-11.45 8.15-21.05 19.03-23.28Z" fill="#071F4D"/><path d="M219.957 225.774h23.6c4.08 0 7.38 3.3 7.38 7.37m0 0c0 4.08-3.3 7.37-7.38 7.37h-20.1M212.091 225.774h3.3" stroke="#071F4D"/><path d="m248.894 34.485-.19 18.24c0 4.07-.39 5.23-2.14 6.79-8.15 6.88-10.97 9.02-9.22 12.9 1.45 3.2 6.79 2.23 9.61-1.55-.39 4.56-5.24 15.32-.58 18.04 4.37 2.52 6.89-3.49 6.89-3.49s.49 3.49 4.47 3.49c3.69 0 5.24-4.75 5.24-4.75s2.14 3.49 6.22 1.35c3.11-1.55 5.44-7.08 5.44-26.67v-24.35" fill="#fff"/><path d="m248.894 34.485-.19 18.24c0 4.07-.39 5.23-2.14 6.79-8.15 6.88-10.97 9.02-9.22 12.9 1.45 3.2 6.79 2.23 9.61-1.55-.39 4.56-5.24 15.32-.58 18.04 4.37 2.52 6.89-3.49 6.89-3.49s.49 3.49 4.47 3.49c3.69 0 5.24-4.75 5.24-4.75s2.14 3.49 6.22 1.35c3.11-1.55 5.44-7.08 5.44-26.67v-24.35" stroke="#071F4D"/><path d="M255.307 75.71s-.39 5.43-2.04 9.6l2.04-9.6Z" fill="#fff"/><path d="M255.307 75.71s-.39 5.43-2.04 9.6" stroke="#071F4D"/><path d="M264.921 75.323s-.68 5.24-2.04 8.63l2.04-8.63Z" fill="#fff"/><path d="M264.921 75.323s-.68 5.24-2.04 8.63M147.801 34.485v34.92M121.775 34.485v34.92M102.546 204.724v13.97M102.546 222.379v.87M102.546 197.934v3.49M115.268 206.955v26.29M115.268 239.451v5.34M244.43 197.643v11.93M244.43 213.939v3.49M270.359 201.232v33.76M115.369 47.774h-13.6M94.486 47.774h3.4M241.516 47.774h-84.1M280.168 47.774h25.35" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m282.497 183.575-12.04-23.86h-27.29l11.36 23.86h27.97Z" fill="#00E4E5"/><path d="M234.427 134.88V69.6M234.427 140.412v7.66" stroke="#071F4D"/><path d="M220.831 228.684h16.99M240.934 228.684h2.43" stroke="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="m223.842 187.462 21.46-.2-10.97-20.66-10.49 20.86Z" fill="#071F4D"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 400 300" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M290.7 38.4h-50.3v63.5h50.3V38.4Zm-16 47.5V54.4h-18.3v31.5h18.3ZM199 71.3V38.7h-16v48.6h32v14.6h16V38.7h-16v32.6h-16ZM331.7 87.3v14.6h16V38.7h-16v32.6h-16V38.7h-16v48.6h32Z" fill="#DEEBFC"/><path d="M324.3 119.5h24.1v-17.4h-24.1" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M218.5 120H69.4v11.5h130.5l18.6-11.5ZM231.5 131.5h117.2V120H231.5v11.5Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M348.4 119.5v-17.4h-24.1v17.4h24.1Z" fill="#071F4D"/><path d="M159.6 119.5h164.9V102H169.2M114.8 102H57.9v17.5h39.6" stroke="#071F4D"/><path d="M242.5 223.2V98.7c0-3.6 2.9-6.6 6.6-6.6m0 0c3.6 0 6.6 2.9 6.6 6.6v2.8M243.1 153.9h53.1M243.1 193.9h53.1M296.5 219.1V98.8c0-3.6 2.9-6.6 6.6-6.6 3.6 0 6.6 2.9 6.6 6.6v2.8" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m140.5 96.4 15.9 12.9 6.6-9.4-12.2-11.2-8.2 5.8-2.1 1.9Z" fill="#C7DEFF"/><path d="m170.2 93.5-4.2 4-3-2.4" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M150.2 87.1s3.7-5.3 8.1-3.9c2.7.8 1.7-1.6 1.7-1.6l-9.2-5.6-3.9 8.5 3.3 2.6Z" fill="#C7DEFF"/><path d="m148 85.5 13 12.1" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M179.202 87.001c.9-.1 1.7-.6 2.3-1.4.6-.6.9-1.4.8-1.9-.2-1.1-38.4-36-39.6-37.1-.7-.6-2-.7-3.3 0-.7.3-1.3 1-1.8 1.9 0 0-3 .4 1.3 11.1 4.3 10.6 6.6 19.1 6.6 19.1s-1.8 4.1-2.8 6.6c-.9 1.7 5.8 2.1 8.4-4.4 4.4.8 13.6 3.4 19 12.6v.1c1.1 1.9 1.9 1.2 2.4.9 3.2-2.4 7.2-5.8 6.7-7.5Z" fill="#00E4E5"/><path fill-rule="evenodd" clip-rule="evenodd" d="M182.3 83.802c-.2-1.1-38.4-36-39.6-37.1-.7-.6-2-.7-3.3 0l42.2 39c.5-.7.8-1.4.7-1.9Z" fill="#071F4D"/><path d="M137.8 48.4 179.2 87M140.4 63.2l5.2-3.9M143.6 72.4s3.2-2.1 6.8-2.3M144.8 75.903c.6-.2 5.4-1.8 7.7-1.5M142.3 91.6l4.2-3.8M159.9 103.9l5-6.5" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m206.1 129.6 11.7 16.7 9-7.2-8.7-14.1-9.5 3.3-2.5 1.3Z" fill="#C7DEFF"/><path d="m235.4 134.9-5.2 2.7-2.2-3.2" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M217.9 123.3s4.9-4.1 8.8-1.6c2.4 1.5 2.1-1.1 2.1-1.1l-7.3-7.9-6.1 7.2 2.5 3.4Z" fill="#C7DEFF"/><path d="m216.2 121.1 9.2 15.2" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M237.397 136.399c3.7-1.4 8.5-3.7 8.5-5.4.8.2 1.8-.1 2.6-.7.7-.4 1.3-1 1.3-1.6.1-1.2-27.2-45.1-28.1-46.5-.5-.7-1.8-1.1-3.2-.8-.8.2-1.6.6-2.3 1.4 0 0-3-.4-1.8 11 1.3 11.4 1.2 20.2 1.2 20.2s-2.8 3.5-4.4 5.6c-1.3 1.4 5 3.5 9.3-2 4.1 1.9 12.2 6.9 14.9 17.2v.1c.5 2.1 1.5 1.7 2 1.5Z" fill="#00E4E5"/><path fill-rule="evenodd" clip-rule="evenodd" d="M249.8 128.699c.1-1.2-27.2-45.1-28.1-46.5-.5-.7-1.8-1.1-3.2-.8l30 49c.6-.5 1.2-1.1 1.3-1.7Z" fill="#071F4D"/><path d="m216.5 82.6 29.4 48.4M214.9 97.6l6.1-2.3M215.5 107.395s3.7-1.2 7.2-.4M215.7 111.098c.6 0 5.7-.3 7.8.7M209.1 125.5l5-2.5M222.7 142.1l6.5-4.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M208.2 122c-2.5 1-29.9 15.6-47.1 28.8-17.2 13.2-27 23.3-30.3 30.3-1.8 3.6-2.4 4.4-2.4 4.4-1.3-3.4-3.6-10.1-3.9-12.4-.4-4.1 0-9 3.3-14.3 3.3-5.3 27.4-43.9 32.4-51.9-2.4-1.9-8.2-6.8-19.8-16.9-3.4 2.8-35.6 29.9-44.6 38.5-9 8.6-10.8 15.7-10.8 29.3v63.6s25.2 3.9 44.3 2.1c19.1-1.8 44.1-4.1 44.1-4.1s-2.6-29.6 2.9-36.1c5.4-6.5 41.6-34.2 45.5-37.5-3.8-7.5-9-15.8-13.6-23.8Z" fill="#006EFF"/><path d="M154.103 116.7c-9 14.4-23.8 38.1-26.3 42.1-3.3 5.3-3.7 10.2-3.3 14.3M85.1 215.7v-57.9c0-13.6 1.8-20.8 10.8-29.3 1.8-1.7 4.5-4.2 7.8-7.1M197.402 165.1c-9.5 7.6-18.6 15.2-21.1 18.2-5.4 6.5-2.9 36.1-2.9 36.1M123.4 218.3s4.2-30.3 7.5-37.2c3.3-6.9 13-17.1 30.3-30.3 10.5-8.1 24.9-16.6 35-22.3" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M173.1 256.4v-8h-68V264s14.2-5.5 31.1-3.8c29.1 2.9 36.8-3.8 36.8-3.8h.1ZM271.5 255.1h-31.1v9.2s6.5-5.5 14.2-3.8c13.4 2.9 16.9-3.8 16.9-3.8v-1.6Z" fill="#C7DEFF"/><path d="M105.2 245h51.9M240.7 251.7h30.6M165.6 245h7.2M56.7 219.6c10.4 0 17.4.5 23.2 1.1 11.4 1.3 18.4 3.1 39 3.1 31.1 0 31.1-4.3 62.2-4.3s31.2 4.3 51.5 4.3 27.7-5.8 51.5-5.8c15.1 0 20.4 5.8 51.5 5.8" stroke="#071F4D"/><path d="M284.1 218c16.2 0 21.5 5.8 51.5 5.8" stroke="#071F4D"/><path d="M159.5 203.5v6.2M202.4 146.7l-31.6 25.9c-7.1 5.9-11.3 14.7-11.3 23.9M206.7 143.2l2.7-2.3M138.098 118.6l-19.2 24c-7.5 9.4-11.3 21.3-10.6 33.3l2.4 38.5M143.6 111.7l3.2-4" stroke="#DEEBFC"/><path d="m141.8 178.4 6-1.1M94.5 140.6l5.4-4" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M135.2 236.099c7.395-.581 13.632-1.202 19.262-1.762 19.569-1.948 31.803-3.166 59.838.562 24.429 3.262 31.821 1.804 43.661-.53 3.766-.743 7.982-1.574 13.339-2.37 14.976-2.226 25.902.28 35.11 2.393 4.442 1.019 8.485 1.946 12.39 2.207 12 .7 16.8-.3 16.8-.3v-9.6c-.1.04-4.95.99-16.8.3-3.972-.232-8.097-1.176-12.641-2.215-9.183-2.101-20.074-4.593-34.859-2.385-5.305.792-9.493 1.619-13.239 2.358-11.858 2.342-19.291 3.809-43.761.542-28.035-3.728-40.269-2.51-59.838-.562-5.63.56-11.867 1.181-19.262 1.Line truncated
|
||||
|
After Width: | Height: | Size: 5.0 KiB |
@@ -0,0 +1,5 @@
|
||||
<svg
|
||||
viewBox="0 0 400 300"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
><mask id="a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="47" y="38" width="307" height="224"><path d="M353.3 38H47.5v223.8h305.8V38Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M299.2 200.6H61.6v5.1h240.3l-2.7-5.1Z" fill="#C7DEFF"/><path d="m308.9 185.8-6.5 20H183.7M332.3 127.6h10.6l-5 16.7-14.8-.1-7.2 21.1M328.8 127.4l13.6-39.6M307.6 166 337 84.7H180.6l-9.8 26.9h-10.5M296.6 196l4.3-11.8M157.2 149.2l6.4-17.7" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M324.8 93.1H188.5l-34.8 95.8h136.4l34.7-95.8ZM169.9 166.2l5-13.6-5 13.6Z" fill="#fff"/><path d="m169.9 166.2 5-13.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M324.8 93.1H188.5l-4 11.7h135.8l4.5-11.7Z" fill="#006EFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M102.6 159.5h38.3l2.7 36.6h-38.4c-10.1 0-20.9-8.2-20.9-18.3 0-10.1 8.2-18.3 18.3-18.3Z" fill="#DEEBFC"/><path fill-rule="evenodd" clip-rule="evenodd" d="M84.3 174.102c2.5 3.4 10 5 17.9 2.8 16.6-6.5 23.8-3.9 23.8-3.9s.5-3.4 1.3-5c-5.8-3-15.4.3-26.1 3.1-10.7 2.8-15.8-2.5-15.8-2.5-.4 0-1.1 2.8-1.1 5.5Z" fill="#fff"/><path d="M96.5 194.2c-7.2-3.3-12.2-10.5-12.2-19m0 0c0-11.5 9.3-20.8 20.8-20.8h29.4" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M140.3 195.1c-8.4-2.7-14.5-10.6-14.5-19.8l14.5 19.8Zm-14.5-19.8c0-11.5 9.3-20.8 20.8-20.8l-20.8 20.8Zm20.8-20.8c11.5 0 20.8 9.3 20.8 20.8l-20.8-20.8Zm20.8 20.8c0 8.4-5 15.6-12.1 18.9l12.1-18.9Z" fill="#fff"/><path d="M140.3 195.1c-8.4-2.7-14.5-10.6-14.5-19.8m0 0c0-11.5 9.3-20.8 20.8-20.8m0 0c11.5 0 20.8 9.3 20.8 20.8m0 0c0 8.4-5 15.6-12.1 18.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M161.5 177.2c0-7.7-6.3-14-14-14s-14 6.3-14 14c0 5.8 3.5 10.8 8.6 12.9.1 0 5.8 1.6 10.7 0 5.3-1.7 8.7-7.1 8.7-12.9Z" fill="#00E4E5"/><path d="M140.5 190.1c-5.8-2.4-9.9-8.2-9.9-14.9 0-8.9 7.2-16.1 16.1-16.1 8.9 0 16.1 7.2 16.1 16.1 0 6.8-4.2 12.5-10.1 14.9M88.4 170.604c2.9 1.3 7.7 2.6 13.6.3 14.7-5.7 22.3-4.3 24.6-3.5M84.5 174.599s5.9 6.5 19 1.7c9.2-3.4 15.3-3.9 18.8-3.8" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M340.6 112.3h-55.2l-2.7 6.2H338l2.6-6.2Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M236.8 117.9c-16.13 0-29.2 13.07-29.2 29.2s13.07 29.2 29.2 29.2 29.2-13.07 29.2-29.2-13.07-29.2-29.2-29.2Z" fill="#00E4E5"/><path d="M265 123.3c13.1 13.1 13.1 34.4 0 47.6M306 205.9h19.2M61.7 205.9h32.9M181.2 196.2h115.2M47.5 205.9h10v-9.7h73.8" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M146.7 179.2c-2.49 0-4.5 2.01-4.5 4.5s2.01 4.5 4.5 4.5 4.5-2.01 4.5-4.5-2.01-4.5-4.5-4.5Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M169.5 196.2c3.9 0 7.1 3.2 7.1 7.1 0 3.9-3.2 7.1-7.1 7.1H144c-2.1 0-3.9 1.7-3.9 3.9v1c0 2.1 1.7 3.9 3.9 3.9h48c5.1 0 9.2 4.1 9.2 9.2s-4.1 9.3-9.2 9.2h-33.8c-2.3 0-4.1 1.8-4.1 4.1s1.8 4.1 4.1 4.1h4.2c4.4 0 8 3.6 8 8s-3.6 8-8 8H111c-3.7 0-6.8-3-6.8-6.8 0-3.7 3-6.8 6.8-6.8h.3c2.3 0 4.1-1.8 4.1-4.1s-1.8-4.1-4.1-4.1H79c-4.5 0-8.1-3.6-8.1-8.1s3.6-8.1 8.1-8.1h37.7c2.1 0 3.9-1.7 3.9-3.9 0-2.1-1.7-3.9-3.9-3.9h-7.9c-4.4 0-7.9-3.5-7.9-7.9s3.5-7.9 7.9-7.9h30.4c2.2 0 3.9-1.8 3.9-3.9V187c0-1.9 1.6-3.5 3.5-3.5s3.5 1.6 3.5 3.5v5.3c0 2.2 1.8 3.9 3.9 3.9h15.5Z" fill="#006EFF"/><path d="m227.8 138.5 18.7 18.7M227.8 157.2l18.7-18.7" stroke="#fff" stroke-width="6"/><path fill-rule="evenodd" clip-rule="evenodd" d="M194.8 96.9c-.99 0-1.8.81-1.8 1.8s.81 1.8 1.8 1.8 1.8-.81 1.8-1.8-.81-1.8-1.8-1.8ZM202.9 96.9c-.99 0-1.8.81-1.8 1.8s.81 1.8 1.8 1.8 1.8-.81 1.8-1.8-.81-1.8-1.8-1.8Z" fill="#fff"/><path d="m291.7 184.3-1.6 4.6h-121M298.1 166.7l22.5-61.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m193 134.1 2.2-5.1h-19.4l-2.3 5.1H193ZM313.2 123.5l2.2-5.1h-24.5l-2.3 5.1h24.6Z" fill="#DEEBFC"/><path d="m164.5 159.2 19.8-54.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M199.6 119.8h-53.2l-4.4 9.3h53.2l4.4-9.3Z" fill="#00E4E5"/><path d="M151.3 129.1H142l4.4-9.3h16.9" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M353.3 169.4h-67.4l-4.8 12.2h67.3l4.9-12.2Z" fill="#006EFF"/><path d="M332.4 169.4h20.9l-4.9 12.2h-39.7M242.7 235.5v-4.8c0-3.8 3.1-7 7-7h20.2c3.8 0 7 3.1 7 7" stroke="#071F4D"/><path d="M261.1 235.5v-4.8c0-3.8 3.1-7 7-7h13.7c3.8 0 7 3.1 7 7v4.8M242.6 230.7h13.7M235.2 237.7h63.3M224 237.7h6.7" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M324.1 141.3H335l3.3-10.7h-10.2l-4 10.7Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M288.3 230.4c0-3.6-2.9-6.5-6.5-6.5h-14.2c-3.6 0-6.5 2.9-6.5 6.5v5.3h27.2v-5.3Z" fill="#071F4D"/><path d="M80.4 228.5H83M87.7 228.5h19.2M146.3 195.8v2c0 3.6-2.9 6.6-6.6 6.6H138M133.4 204.3h1.5M154 249.9h9.4" stroke="#DEEBFC"/><path d="m299.4 141.9 5.1-13.9" stroke="#071F4D"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 400 300" fill="none" xmlns="http://www.w3.org/2000/svg"><mask id="a" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="44" y="42" width="312" height="217"><path d="M355.3 42H44v216.9h311.3V42Z" fill="#fff"/></mask><g mask="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M288.2 248.4h25.1v-30h-25.1v30Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M304.498 238.199c-1.5-3.9-5.9-15.4-4-21.6-2.9.8-3.3.1-5-.1-1.7-.1 0 10.7 2.2 16.4 1.7 4.5 2.1 11.1 2.1 13.6h5.4c.2-1.9.3-5.5-.7-8.3Z" fill="#fff"/><path d="M311.5 214.7v-1.6c0-.7-.6-1.3-1.3-1.3h-22.8c-.7 0-1.3.6-1.3 1.3v1.6" fill="#fff"/><path d="M311.5 214.7v-1.6c0-.7-.6-1.3-1.3-1.3h-22.8c-.7 0-1.3.6-1.3 1.3v1.6M290.2 214.7h21.4c1 0 1.8.8 1.8 1.8v29" stroke="#071F4D" stroke-width="1.096"/><path d="M284.3 245.6v-29c0-1 .8-1.8 1.8-1.8h1.6" fill="#fff"/><path d="M284.3 245.6v-29c0-1 .8-1.8 1.8-1.8h1.6" stroke="#071F4D" stroke-width="1.096"/><path d="M295.402 216.5c-.9 4.2-.4 9.7 2.8 17.5 2.4 5.9 1.9 10.2 1.8 12.3M300.502 216.5c-.9 4.2-.4 9.7 2.8 17.5 2.4 5.9 1.9 10.2 1.8 12.3" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m331 258.4-.3-5.2H88.5l-1.2 5.2H331Z" fill="#C7DEFF"/><path d="M252.9 248.7H331M216.6 258.4H331M47.1 139.3l-2.6 1.5 42.7 117.6h129.2v-6.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m247.2 248.6-40.4-111.3H50.5l40.3 111.3h156.4Z" fill="#fff"/><path d="m247.2 248.6-40.4-111.3H50.5l40.3 111.3h156.4Z" stroke="#071F4D"/><path d="m203.2 153.2 32.2 88.7H97.8l-32.3-88.7" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M72.2 146.9c-.77 0-1.4.63-1.4 1.4 0 .77.63 1.4 1.4 1.4.77 0 1.4-.63 1.4-1.4 0-.77-.63-1.4-1.4-1.4ZM79.3 146.9c-.77 0-1.4.63-1.4 1.4 0 .77.63 1.4 1.4 1.4.77 0 1.4-.63 1.4-1.4 0-.77-.63-1.4-1.4-1.4Z" fill="#fff"/><path fill-rule="evenodd" clip-rule="evenodd" d="M263.5 171.2h80.3v-63.7h-80.3v63.7Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M290 143.9h-45.6l12.5 51.3H290v-51.3Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M286 117.4h-29.3v77.8h92.9v-67.6l-55.9.6-7.7-10.8Z" fill="#00E4E5"/><path d="m332.6 127.6-38.9.6-7.7-10.8h-11.7M308.9 195.2h45.9M250.3 195.2h28.5M287.3 195.2h12.3" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M130.5 211.4H186v-44h-55.5v44Z" fill="#C7DEFF"/><path fill-rule="evenodd" clip-rule="evenodd" d="M148.7 192.5h-31.6l8.7 35.5h22.9v-35.5Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M145.9 174.2h-20.2V228h64.1v-46.7l-38.6.4-5.3-7.5Z" fill="#006EFF"/><path d="m179 181.3-27.8.4-5.3-7.5h-7.7M176.2 201.7h19.2M163.2 210.7H195M172.1 228h-54.2M184.8 228h8.1M174.9 228h5.4" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="m293.2 155.7-6.4 6.3 15.3 15.3 22.7-22.6-6.4-6.4-16.3 16.3-8.9-8.9Z" fill="#fff"/><path d="M57.2 258.4h283.6M345.9 258.4h8.1M55.4 258.4h220.5M160.1 118.8l-1.2 2.7M156.7 127c-.3.8-.7 1.8-1.1 2.8M222 68.5c-1 .2-1.9.5-2.9.8M214.1 70.7c-5.8 1.9-11.3 4.4-16.5 7.4M195.4 79.5c-.9.5-1.7 1.1-2.5 1.6M314.2 98.5c-.6-.8-1.3-1.5-2-2.3M308.9 92.8c-4-4-8.3-7.6-13-10.8M293.9 80.7c-.8-.5-1.7-1.1-2.5-1.6" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M251.296 71.203c-3.6-1.5-18.5-2.9-21.8-1.9-1 5.8 4.9 13.5 4.9 13.5s6-9.9 16.9-11.6Z" fill="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M251.3 42.704c-6.5 6.7-7.8 13-8.8 19.3 24.4-1.1 36.3 13 42.8 20 3.2-9.1 7.8-23 7.2-29-7.1-6.4-20-11.7-41.2-10.3Z" fill="#C7DEFF"/><path d="M230 69.3c36.2-3.8 52 21.1 52 21.1s11.4-28.2 10.5-37.4c-7.3-6.5-23.3-12-45.6-10.1-9 6.3-15.6 18.7-16.9 26.4Z" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M161.604 70.7c-6 8.4-9.9 21.9-8.8 33.8 8.4 5.3 32.3 10.5 43.6 11.5 6.1-7.9 15.9-26 15.9-26s-32-4.8-50.7-19.3Z" fill="#C7DEFF"/><path d="M193.103 119.5c4.8-2.7 19.2-29.5 19.2-29.5s-35.8-5.4-53.7-21.8c-9.3 6.1-16.4 24.3-15 40.1 10.6 6.7 45.8 13.3 49.5 11.2Z" stroke="#071F4D"/><path fill-rule="evenodd" clip-rule="evenodd" d="M189.5 111.6c-3 5.2-5.7 7.2-9.8 6.6 12.2 2.6 13.5 1.2 15.6-1.1 2.2-2.4 4.2-6.6 4.2-6.6s-3.1 2.5-10 1.1Z" fill="#071F4D"/><path d="M331 251.8v6.6M77 165.4l-2.7-6.7h7.8M222.8 228.9l2.8 6.6h-7.9" stroke="#071F4D"/></g></svg>
|
||||
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
@@ -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="1756114168869" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="37747" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M768 0H256C114.6112 0 0 114.6112 0 256v512c0 141.3376 114.6112 256 256 256h512c141.3376 0 256-114.6624 256-256V256c0-141.3888-114.6624-256-256-256zM447.6416 230.4h123.4688c15.1552 0 27.2384 8.9088 27.2384 25.5488 0.0256 16.6912-12.1088 25.6512-26.496 25.6512h-124.2624c-15.104 0-27.2384-8.96-27.2384-25.6512 0.0256-16.64 12.16-25.5488 27.2896-25.5488zM768 725.0688C768 774.3232 749.9008 793.6 701.3888 793.6H316.5952C268.1344 793.6 256 768.9984 256 725.0432v-405.248c0-40.9344 6.8096-63.7952 56.832-63.7952h62.2592c-0.6144 0-0.9984 2.0736-1.024 5.4272 0 25.3696 18.432 45.7728 41.4976 45.7728h188.8768c21.8624 0 40.2432-20.3776 40.2432-45.7728 0-3.3792-0.384-5.4272-0.9984-5.4272h61.4912c46.2336 0 62.8224 22.8864 62.8224 63.7952v405.2736z" fill="#6EE9DF" p-id="37748"></path><path d="M695.4752 665.6H328.5248a21.3248 21.3248 0 0 0-21.3248 21.3248v8.5504c0 11.776 9.5488 21.3248 21.3248 21.3248h366.9504c11.776 0 21.3248-9.5488 21.3248-21.3248v-8.5504a21.3248 21.3248 0 0 0-21.3248-21.3248zM672.8192 354.8928l-182.0672 224.6656-103.5264-93.6192a31.4368 31.4368 0 0 0-44.2368 2.0992 30.9248 30.9248 0 0 0 2.1248 43.904l118.7072 107.2896c8.0128 7.1936 18.4576 11.2384 29.1584 11.2384 1.0752 0 2.1504-0.1024 3.2512-0.2048 11.776-0.896 22.8608-6.656 30.464-15.9488l194.8928-240.4352a30.9504 30.9504 0 0 0-4.7872-43.776 31.488 31.488 0 0 0-43.9808 4.7872z" fill="#6EE9DF" p-id="37749"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
@@ -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="1756113838264" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1618" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M720.96 240.746667A85.333333 85.333333 0 0 1 725.333333 267.733333v482.197334a85.333333 85.333333 0 0 1-116.266666 79.530666l-186.133334-72.384a127.786667 127.786667 0 0 1-51.733333-37.12A85.013333 85.013333 0 0 1 341.333333 725.333333h-128a128 128 0 0 1-128-128v-192a128 128 0 0 1 128-128h128c11.669333 0 22.805333 2.346667 32.938667 6.592a127.445333 127.445333 0 0 1 54.592-35.776l184.149333-61.376a85.333333 85.333333 0 0 1 107.946667 53.973334z" fill="#FAB007" p-id="1619"></path><path d="M768 469.333333m42.666667 0l85.333333 0q42.666667 0 42.666667 42.666667l0 0q0 42.666667-42.666667 42.666667l-85.333333 0q-42.666667 0-42.666667-42.666667l0 0q0-42.666667 42.666667-42.666667Z" fill="#FEE789" p-id="1620"></path><path d="M758.099166 325.716249m36.950417-21.333333l73.900834-42.666667q36.950417-21.333333 58.283751 15.617084l0 0q21.333333 36.950417-15.617084 58.283751l-73.900835 42.666667q-36.950417 21.333333-58.28375-15.617084l0 0q-21.333333-36.950417 15.617084-58.283751Z" fill="#FEE789" p-id="1621"></path><path d="M758.098241 698.2872m36.950418 21.333333l73.900834 42.666667q36.950417 21.333333 58.283751-15.617084l0 0q21.333333-36.950417-15.617084-58.283751l-73.900835-42.666666q-36.950417-21.333333-58.28375 15.617083l0 0q-21.333333 36.950417 15.617084 58.283751Z" fill="#FEE789" p-id="1622"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
@@ -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="1756113949131" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1213" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M516.8128 427.4688a46.08 46.08 0 1 0-46.08-46.08 46.3872 46.3872 0 0 0 46.08 46.08z" fill="#FFA937" p-id="1214"></path><path d="M938.8544 830.2592h-58.5216V381.1328a60.8768 60.8768 0 0 0-60.8768-60.8768h-111.7696V272.384a36.9152 36.9152 0 0 0-12.032-27.2896l-152.5248-139.1616a37.0176 37.0176 0 0 0-49.5616 0L338.176 245.0944a36.864 36.864 0 0 0-12.288 27.4944v47.6672H214.1184a60.8768 60.8768 0 0 0-60.8768 60.8768v449.1264H92.16a30.1056 30.1056 0 0 0 0 60.16h846.6944a30.1056 30.1056 0 1 0 0-60.16z m-422.0416-555.52a106.4448 106.4448 0 1 1-106.4448 106.3936 106.496 106.496 0 0 1 106.4448-106.3936z m80.8448 525.4656v-142.2336a19.3536 19.3536 0 0 0-19.3536-19.3536h-122.88a19.4048 19.4048 0 0 0-19.3536 19.4048v142.1824a30.0544 30.0544 0 0 1-30.0544 30.0544 30.0544 30.0544 0 0 1-30.1056-30.0544v-142.2336A79.4624 79.4624 0 0 1 455.2704 578.56h122.88a79.4624 79.4624 0 0 1 79.5136 79.4624v142.2336a30.0544 30.0544 0 0 1-30.1056 30.0544 30.0544 30.0544 0 0 1-29.9008-30.1056z" fill="#FFA937" p-id="1215"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -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="1756096800268" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6149" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M958.83 512c0 321.16-126.32 447.5-447.48 447.5S63.83 833.15 63.83 512 190.18 64.51 511.36 64.51 958.81 190.83 958.81 512z" fill="#03A9F5" p-id="6150"></path><path d="M391.16 697.63h240.47a16.39 16.39 0 1 1 0 32.79H391.16A17.63 17.63 0 0 1 374.84 714a15.74 15.74 0 0 1 16.32-16.39z m275.67-404.05H355.75A63.54 63.54 0 0 0 293 356.46v229.25a63.54 63.54 0 0 0 62.81 62.81h311a64.13 64.13 0 0 0 62.81-65.58V356.46a63.54 63.54 0 0 0-62.81-62.89zM615 577.76a20.33 20.33 0 0 1-24.56 0l-38.24-38.18a98.22 98.22 0 0 1-54.58 16.32 95.6 95.6 0 1 1 95.53-95.68 98.37 98.37 0 0 1-16.39 54.58L615 553a20.33 20.33 0 0 1 0 24.56z m0 0" fill="#FFFFFF" p-id="6151"></path><path d="M500.39 400.18a60 60 0 1 0 60 60 60 60 0 0 0-60-60z m0 0" fill="#FFFFFF" p-id="6152"></path><path d="M560.44 460.23a60 60 0 1 1-60-60 60 60 0 0 1 60 60z m0 0" fill="#FFFFFF" p-id="6153"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
@@ -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="1756113963939" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M154.7264 150.528m89.2928 0l148.224 0q89.2928 0 89.2928 89.2928l0 148.224q0 89.2928-89.2928 89.2928l-148.224 0q-89.2928 0-89.2928-89.2928l0-148.224q0-89.2928 89.2928-89.2928Z" fill="#5097FF" p-id="1718"></path><path d="M154.7264 541.44m89.2928 0l148.224 0q89.2928 0 89.2928 89.2928l0 148.224q0 89.2928-89.2928 89.2928l-148.224 0q-89.2928 0-89.2928-89.2928l0-148.224q0-89.2928 89.2928-89.2928Z" fill="#5097FF" p-id="1719"></path><path d="M547.4816 541.44m89.2928 0l148.224 0q89.2928 0 89.2928 89.2928l0 148.224q0 89.2928-89.2928 89.2928l-148.224 0q-89.2928 0-89.2928-89.2928l0-148.224q0-89.2928 89.2928-89.2928Z" fill="#5097FF" p-id="1720"></path><path d="M710.906623 97.648519m63.139544 63.139545l90.002814 90.002814q63.139544 63.139544 0 126.279088l-90.002814 90.002814q-63.139544 63.139544-126.279089 0l-90.002814-90.002814q-63.139544-63.139544 0-126.279088l90.002814-90.002814q63.139544-63.139544 126.279089 0Z" fill="#5097FF" p-id="1721"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -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="1756096945880" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2454" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M711.104 0c47.104 0 85.312 38.208 85.312 85.312v853.376c0 47.104-38.208 85.312-85.312 85.312H312.96a85.312 85.312 0 0 1-85.312-85.312V85.312C227.584 38.208 265.792 0 312.896 0h398.208zM113.792 142.208c31.36 0 56.896 25.472 56.896 56.96v682.624c0 31.36-25.472 56.896-56.96 56.896H0V142.208h113.792z m910.208 0v796.48h-113.792a56.896 56.896 0 0 1-56.896-56.96V199.168c0-31.36 25.472-56.896 56.96-56.896H1024z" fill="#25DCA2" p-id="2455"></path></svg>
|
||||
|
After Width: | Height: | Size: 781 B |
@@ -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="1756096967537" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3118" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M1011.512149 85.354138V1023.999905H180.011738C87.414674 1023.999905 12.487851 947.199912 12.487851 852.292604V171.707301C12.487851 76.799993 87.414674 0 180.011738 0h664.975548v682.64579H181.073202c-46.829264 0-85.354138 39.46146-85.354139 87.477065v81.108285c0 47.953166 38.524874 87.414626 85.354139 87.414626h747.207735V85.354138H1011.512149zM844.987286 767.999929H179.012714v85.354138h665.974572V767.999929z" fill="#FE9C27" p-id="3119"></path></svg>
|
||||
|
After Width: | Height: | Size: 786 B |
@@ -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="1756096958321" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2784" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M864.097437 0H159.841877A127.67992 127.67992 0 0 0 31.969957 127.42392v769.08752C31.969957 966.911396 89.249922 1023.99936 159.841877 1023.99936h704.25556a127.61592 127.61592 0 0 0 127.80792-127.35992V127.35992C991.969357 57.023964 934.689393 0 864.097437 0z m-563.199648 277.439827h39.807975c30.591981 0 55.359965 19.135988 55.359966 42.687973 0 23.679985-24.767985 42.751973-55.359966 42.751973H300.769789c-30.591981 0-55.359965-19.135988-55.359965-42.751973 0-23.551985 24.767985-42.687973 55.359965-42.687973z m422.143736 490.623693H300.833789c-30.591981 0-55.359965-19.135988-55.359965-42.687973 0-23.679985 24.767985-42.751973 55.359965-42.751974h422.207736c30.655981 0 55.423965 19.135988 55.423966 42.751974 0 23.551985-24.767985 42.687973-55.423966 42.687973z m0-192.31988H300.833789c-30.591981 0-55.359965-19.007988-55.359965-42.431973 0-23.487985 24.767985-42.495973 55.359965-42.495974h422.207736c30.655981 0 55.423965 19.007988 55.423966 42.495974 0 23.423985-24.767985 42.431973-55.423966 42.431973z m0-212.863867H552.033632c-30.591981 0-55.423965-19.135988-55.423965-42.687973 0-23.679985 24.831984-42.751973 55.423965-42.751973h171.007893c30.655981 0 55.423965 19.135988 55.423966 42.751973 0 23.551985-24.767985 42.687973-55.423966 42.687973z" fill="#FF7400" p-id="2785"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
@@ -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="1756113811295" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="943" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M648.746667 241.130667l-90.176-90.816a65.706667 65.706667 0 0 0-93.397334 0l-90.197333 90.816a65.728 65.728 0 0 1-65.344 16.789333l-113.066667-33.536c-42.304-12.522667-84.693333 19.413333-84.693333 63.808v489.152c0 36.736 29.568 66.496 66.048 66.496h667.904c36.48 0 66.048-29.76 66.048-66.496V288.192c0-44.394667-42.389333-76.352-84.693333-63.786667l-113.066667 33.493334a65.728 65.728 0 0 1-65.344-16.768z" fill="#FE7840" p-id="944"></path><path d="M585.301333 373.909333h-146.858666c-16.746667 0-32.832 7.082667-44.672 19.669334l-101.162667 107.562666a26.794667 26.794667 0 0 0 0 36.245334l196.693333 209.109333a30.613333 30.613333 0 0 0 45.141334 0l196.693333-209.109333c9.408-10.026667 9.408-26.24 0-36.266667L629.973333 393.6a61.333333 61.333333 0 0 0-44.672-19.669333z" fill="#FFFFFF" opacity=".56" p-id="945"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -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="1756113951989" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1382" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M931.1232 465.3056l-94.72-87.6544V216.064a50.0224 50.0224 0 1 0-99.9424 0v69.0176l-175.9744-162.9184C532.992 98.8672 481.792 104.6528 457.728 128L98.9184 465.0496a49.9712 49.9712 0 1 0 68.4544 72.8064L467.2 256A66.56 66.56 0 0 1 558.08 256l305.3568 282.7776a50.0224 50.0224 0 0 0 67.9424-73.3696z" fill="#FF5A3E" p-id="1383"></path><path d="M546.816 301.4144a50.2272 50.2272 0 0 0-66.56 0L189.44 579.072v289.536a47.616 47.616 0 0 0 48.9472 46.08H788.48a47.616 47.616 0 0 0 48.9472-46.08v-290.816z" fill="#FF5A3E" p-id="1384"></path></svg>
|
||||
|
After Width: | Height: | Size: 871 B |
@@ -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="1756096961327" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2952" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M929.6 134.336c-20.16-20.8-43.52-31.168-69.952-31.168H652.16A159.68 159.68 0 0 0 598.4 28.8C573.44 9.6 544.704 0 512.064 0c-32.704 0-61.44 9.536-86.4 28.736-24.832 19.2-42.752 43.968-53.632 74.368H164.352c-26.432 0-49.792 10.432-70.016 31.168-20.224 20.864-30.336 44.8-30.336 72v714.56c0 27.136 10.176 51.136 30.336 71.936 20.224 20.864 43.584 31.232 70.016 31.232h695.296c26.432 0 49.792-10.432 69.952-31.168 20.288-20.8 30.4-44.736 30.4-71.936V206.272c0-27.136-10.176-51.136-30.4-71.936z m-452.672-16.832A47.104 47.104 0 0 1 512 103.104c14.08 0 25.664 4.8 35.072 14.4 9.344 9.6 13.952 21.568 13.952 35.968a53.824 53.824 0 0 1-13.952 37.184 45.184 45.184 0 0 1-35.072 15.616 45.312 45.312 0 0 1-35.072-15.552 53.568 53.568 0 0 1-13.952-37.184c0-14.4 4.608-26.368 13.952-36.032z m135.424 702.656H262.336v-103.168h349.952v103.168zM761.6 613.888H262.336V513.216h499.328v100.672z m0-203.84H262.336V306.944h499.328v103.104z" fill="#5290FB" p-id="2953"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -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="1756096928165" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1282" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M716.270137 257.088L473.710137 27.328a99.328 99.328 0 0 0-136.832 0.064L95.214137 257.152A100.736 100.736 0 0 0 63.982137 329.92v593.664C63.982137 979.072 108.590137 1024 163.694137 1024h484.16c55.104 0 99.712-44.864 99.712-100.288V330.112c0-27.648-11.264-54.08-31.36-72.96zM408.238137 178.624c31.616 0 57.152 25.792 57.152 57.6 0 31.744-25.6 57.472-57.152 57.472a57.344 57.344 0 0 1-57.216-57.536c0-31.744 25.6-57.536 57.216-57.536z m-100.608 650.88l63.104-183.552H254.318137l196.352-225.28-12.608 167.424 104.32 5.248-234.752 236.16z m498.176-358.912l146.432 290.88c17.344 34.56 4.608 76.8-28.992 95.68l-119.68 67.328 2.24-453.888z" fill="#FF8E12" p-id="1283"></path></svg>
|
||||
|
After Width: | Height: | Size: 1008 B |
@@ -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="1756096832904" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7620" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M959.6 512.3c0 321.16-126.32 447.5-447.48 447.5S64.6 833.46 64.6 512.3 190.94 64.82 512.12 64.82s447.45 126.32 447.45 447.5z m0 0" fill="#F76969" p-id="7621"></path><path d="M721.15 452.57c-232.91 104.54-418.14 0-418.14 0v65.63c200.61 121.12 418.14 0 418.14 0z" fill="#FFFFFF" p-id="7622"></path><path d="M303 607.85c200.61 121.13 418.14 0 418.14 0v-65.68c-232.91 104.55-418.14 0-418.14 0zM512.1 273.35c-115.48 0-209.1 46.82-209.1 104.54 0 37.34 39.8 71.87 104.55 90.54s144.38 18.67 209.09 0 104.55-53.17 104.55-90.54c0-57.72-93.6-104.54-209.09-104.54z" fill="#FFFFFF" p-id="7623"></path><path d="M303 697.46c200.61 121.09 418.14 0 418.14 0v-65.67c-232.91 104.54-418.14 0-418.14 0z" fill="#FFFFFF" p-id="7624"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
@@ -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="1756096803387" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6314" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M958.83 511c0 321.16-126.32 447.5-447.48 447.5S63.83 832.15 63.83 511 190.18 63.51 511.36 63.51 958.81 189.83 958.81 511z" fill="#FDBB00" p-id="6315"></path><path d="M615.5 667.26h-69.44a17.36 17.36 0 0 1 0-34.72h69.44a69.45 69.45 0 0 0 0-138.9H320.35a17.36 17.36 0 0 1 0-34.72H615.5a104.17 104.17 0 1 1 0 208.34z" fill="#FFFFFF" p-id="6316"></path><path d="M436.8 359.82a17.37 17.37 0 0 0-24.55 0L308.08 464a17.37 17.37 0 0 0 0 24.57l104.17 104.16a17.36 17.36 0 0 0 29.64-12.28V372.1a17.34 17.34 0 0 0-5.09-12.28z" fill="#FFFFFF" p-id="6317"></path></svg>
|
||||
|
After Width: | Height: | Size: 889 B |
|
After Width: | Height: | Size: 2.9 KiB |