chore: initial commit
2
frontend/packages/mobile/.env.development
Normal file
@@ -0,0 +1,2 @@
|
||||
VITE_API_BASE_URL= 'front'
|
||||
VITE_DEV_DOMAIN='localhost:8081'
|
||||
1
frontend/packages/mobile/.env.production
Normal file
@@ -0,0 +1 @@
|
||||
VITE_API_BASE_URL= ''
|
||||
7
frontend/packages/mobile/.eslintignore
Normal file
@@ -0,0 +1,7 @@
|
||||
/*.json
|
||||
/src/**/*.json
|
||||
dist
|
||||
postcss.config.js
|
||||
*.md
|
||||
/src/assets/icon-font/iconfont.js
|
||||
/src/assets/fonts/AlibabaPuHuiTi-3-55-Regular-normal.js
|
||||
74
frontend/packages/mobile/.eslintrc-auto-import.json
Normal file
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"globals": {
|
||||
"Component": true,
|
||||
"ComponentPublicInstance": true,
|
||||
"ComputedRef": true,
|
||||
"DirectiveBinding": true,
|
||||
"EffectScope": true,
|
||||
"ExtractDefaultPropTypes": true,
|
||||
"ExtractPropTypes": true,
|
||||
"ExtractPublicPropTypes": true,
|
||||
"InjectionKey": true,
|
||||
"MaybeRef": true,
|
||||
"MaybeRefOrGetter": true,
|
||||
"PropType": true,
|
||||
"Ref": true,
|
||||
"VNode": true,
|
||||
"WritableComputedRef": true,
|
||||
"computed": true,
|
||||
"createApp": true,
|
||||
"customRef": true,
|
||||
"defineAsyncComponent": true,
|
||||
"defineComponent": true,
|
||||
"effectScope": true,
|
||||
"getCurrentInstance": true,
|
||||
"getCurrentScope": true,
|
||||
"h": true,
|
||||
"inject": true,
|
||||
"isProxy": true,
|
||||
"isReactive": true,
|
||||
"isReadonly": true,
|
||||
"isRef": true,
|
||||
"markRaw": true,
|
||||
"nextTick": true,
|
||||
"onActivated": true,
|
||||
"onBeforeMount": true,
|
||||
"onBeforeUnmount": true,
|
||||
"onBeforeUpdate": true,
|
||||
"onDeactivated": true,
|
||||
"onErrorCaptured": true,
|
||||
"onMounted": true,
|
||||
"onRenderTracked": true,
|
||||
"onRenderTriggered": true,
|
||||
"onScopeDispose": true,
|
||||
"onServerPrefetch": true,
|
||||
"onUnmounted": true,
|
||||
"onUpdated": true,
|
||||
"onWatcherCleanup": true,
|
||||
"provide": true,
|
||||
"reactive": true,
|
||||
"readonly": true,
|
||||
"ref": true,
|
||||
"resolveComponent": true,
|
||||
"shallowReactive": true,
|
||||
"shallowReadonly": true,
|
||||
"shallowRef": true,
|
||||
"toRaw": true,
|
||||
"toRef": true,
|
||||
"toRefs": true,
|
||||
"toValue": true,
|
||||
"triggerRef": true,
|
||||
"unref": true,
|
||||
"useAttrs": true,
|
||||
"useCssModule": true,
|
||||
"useCssVars": true,
|
||||
"useId": true,
|
||||
"useModel": true,
|
||||
"useSlots": true,
|
||||
"useTemplateRef": true,
|
||||
"watch": true,
|
||||
"watchEffect": true,
|
||||
"watchPostEffect": true,
|
||||
"watchSyncEffect": true
|
||||
}
|
||||
}
|
||||
13
frontend/packages/mobile/.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# Local
|
||||
.DS_Store
|
||||
*.local
|
||||
*.log*
|
||||
|
||||
# Dist
|
||||
node_modules
|
||||
dist/
|
||||
|
||||
# IDE
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
29
frontend/packages/mobile/README.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Rsbuild Project
|
||||
|
||||
## Setup
|
||||
|
||||
Install the dependencies:
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
## Get Started
|
||||
|
||||
Start the dev server:
|
||||
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
Build the app for production:
|
||||
|
||||
```bash
|
||||
pnpm build
|
||||
```
|
||||
|
||||
Preview the production build locally:
|
||||
|
||||
```bash
|
||||
pnpm preview
|
||||
```
|
||||
77
frontend/packages/mobile/auto-import.d.ts
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
/* prettier-ignore */
|
||||
// @ts-nocheck
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
// Generated by unplugin-auto-import
|
||||
export {}
|
||||
declare global {
|
||||
const EffectScope: typeof import('vue')['EffectScope'];
|
||||
const computed: typeof import('vue')['computed'];
|
||||
const createApp: typeof import('vue')['createApp'];
|
||||
const customRef: typeof import('vue')['customRef'];
|
||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'];
|
||||
const defineComponent: typeof import('vue')['defineComponent'];
|
||||
const effectScope: typeof import('vue')['effectScope'];
|
||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance'];
|
||||
const getCurrentScope: typeof import('vue')['getCurrentScope'];
|
||||
const h: typeof import('vue')['h'];
|
||||
const inject: typeof import('vue')['inject'];
|
||||
const isProxy: typeof import('vue')['isProxy'];
|
||||
const isReactive: typeof import('vue')['isReactive'];
|
||||
const isReadonly: typeof import('vue')['isReadonly'];
|
||||
const isRef: typeof import('vue')['isRef'];
|
||||
const markRaw: typeof import('vue')['markRaw'];
|
||||
const nextTick: typeof import('vue')['nextTick'];
|
||||
const onActivated: typeof import('vue')['onActivated'];
|
||||
const onBeforeMount: typeof import('vue')['onBeforeMount'];
|
||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'];
|
||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'];
|
||||
const onDeactivated: typeof import('vue')['onDeactivated'];
|
||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured'];
|
||||
const onMounted: typeof import('vue')['onMounted'];
|
||||
const onRenderTracked: typeof import('vue')['onRenderTracked'];
|
||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered'];
|
||||
const onScopeDispose: typeof import('vue')['onScopeDispose'];
|
||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch'];
|
||||
const onUnmounted: typeof import('vue')['onUnmounted'];
|
||||
const onUpdated: typeof import('vue')['onUpdated'];
|
||||
const provide: typeof import('vue')['provide'];
|
||||
const reactive: typeof import('vue')['reactive'];
|
||||
const readonly: typeof import('vue')['readonly'];
|
||||
const ref: typeof import('vue')['ref'];
|
||||
const resolveComponent: typeof import('vue')['resolveComponent'];
|
||||
const shallowReactive: typeof import('vue')['shallowReactive'];
|
||||
const shallowReadonly: typeof import('vue')['shallowReadonly'];
|
||||
const shallowRef: typeof import('vue')['shallowRef'];
|
||||
const toRaw: typeof import('vue')['toRaw'];
|
||||
const toRef: typeof import('vue')['toRef'];
|
||||
const toRefs: typeof import('vue')['toRefs'];
|
||||
const toValue: typeof import('vue')['toValue'];
|
||||
const triggerRef: typeof import('vue')['triggerRef'];
|
||||
const unref: typeof import('vue')['unref'];
|
||||
const useAttrs: typeof import('vue')['useAttrs'];
|
||||
const useCssModule: typeof import('vue')['useCssModule'];
|
||||
const useCssVars: typeof import('vue')['useCssVars'];
|
||||
const useSlots: typeof import('vue')['useSlots'];
|
||||
const watch: typeof import('vue')['watch'];
|
||||
const watchEffect: typeof import('vue')['watchEffect'];
|
||||
const watchPostEffect: typeof import('vue')['watchPostEffect'];
|
||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect'];
|
||||
}
|
||||
// for type re-export
|
||||
declare global {
|
||||
// @ts-ignore
|
||||
export type {
|
||||
Component,
|
||||
ComponentPublicInstance,
|
||||
ComputedRef,
|
||||
ExtractDefaultPropTypes,
|
||||
ExtractPropTypes,
|
||||
ExtractPublicPropTypes,
|
||||
InjectionKey,
|
||||
PropType,
|
||||
Ref,
|
||||
VNode,
|
||||
WritableComputedRef,
|
||||
} from 'vue';
|
||||
import('vue');
|
||||
}
|
||||
95
frontend/packages/mobile/components.d.ts
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
/* eslint-disable */
|
||||
/* prettier-ignore */
|
||||
// @ts-nocheck
|
||||
// Generated by unplugin-vue-components
|
||||
// Read more: https://github.com/vuejs/core/pull/3399
|
||||
export {}
|
||||
|
||||
declare module 'vue' {
|
||||
export interface GlobalComponents {
|
||||
Checkbox: typeof import('./src/components/business/crm-form-create/components/basic/checkbox.vue')['default']
|
||||
CrmActionButtons: typeof import('./src/components/business/crm-action-buttons/index.vue')['default']
|
||||
CrmAvatar: typeof import('./src/components/business/crm-avatar/index.vue')['default']
|
||||
CrmContactList: typeof import('./src/components/business/crm-contact-list/index.vue')['default']
|
||||
CrmDatasource: typeof import('./src/components/business/crm-datasource/index.vue')['default']
|
||||
CrmDescription: typeof import('./src/components/pure/crm-description/index.vue')['default']
|
||||
CrmFileIcon: typeof import('./src/components/pure/crm-file-icon/index.vue')['default']
|
||||
CrmFileListPop: typeof import('./src/components/business/crm-file-list-pop/index.vue')['default']
|
||||
CrmFormCreate: typeof import('./src/components/business/crm-form-create/index.vue')['default']
|
||||
CrmHeaderList: typeof import('./src/components/business/crm-header-list/index.vue')['default']
|
||||
CrmIconFont: typeof import('./src/components/pure/crm-icon-font/index.vue')['default']
|
||||
CrmList: typeof import('./src/components/pure/crm-list/index.vue')['default']
|
||||
CrmListCommonItem: typeof import('./src/components/pure/crm-list-common-item/index.vue')['default']
|
||||
CrmMessageItem: typeof import('./src/components/business/crm-message-item/index.vue')['default']
|
||||
CrmPageHeader: typeof import('./src/components/pure/crm-page-header/index.vue')['default']
|
||||
CrmPageWrapper: typeof import('./src/components/pure/crm-page-wrapper/index.vue')['default']
|
||||
CrmPasswordInput: typeof import('./src/components/pure/crm-password-input/index.vue')['default']
|
||||
CrmSelectList: typeof import('./src/components/business/crm-select-list/index.vue')['default']
|
||||
CrmTag: typeof import('./src/components/pure/crm-tag/index.vue')['default']
|
||||
CrmTextButton: typeof import('./src/components/pure/crm-text-button/index.vue')['default']
|
||||
CrmWorkflowCard: typeof import('./src/components/business/crm-workflow-card/index.vue')['default']
|
||||
DataSource: typeof import('./src/components/business/crm-form-create/components/advanced/dataSource.vue')['default']
|
||||
DatePicker: typeof import('./src/components/business/crm-form-create/components/basic/datePicker.vue')['default']
|
||||
Detail: typeof import('./src/components/business/crm-contact-list/detail.vue')['default']
|
||||
Divider: typeof import('./src/components/business/crm-form-create/components/basic/divider.vue')['default']
|
||||
File: typeof import('./src/components/business/crm-form-create/components/advanced/file.vue')['default']
|
||||
FollowDetail: typeof import('./src/components/business/crm-follow-list/followDetail.vue')['default']
|
||||
FollowPlan: typeof import('./src/components/business/crm-follow-list/followPlan.vue')['default']
|
||||
FollowRecord: typeof import('./src/components/business/crm-follow-list/followRecord.vue')['default']
|
||||
Industry: typeof import('./src/components/business/crm-form-create/components/advanced/industry.vue')['default']
|
||||
InputNumber: typeof import('./src/components/business/crm-form-create/components/basic/inputNumber.vue')['default']
|
||||
Link: typeof import('./src/components/business/crm-form-create/components/advanced/link.vue')['default']
|
||||
ListItem: typeof import('./src/components/business/crm-follow-list/components/listItem.vue')['default']
|
||||
Location: typeof import('./src/components/business/crm-form-create/components/advanced/location.vue')['default']
|
||||
MemberSelect: typeof import('./src/components/business/crm-form-create/components/basic/memberSelect.vue')['default']
|
||||
MultiplePick: typeof import('./src/components/business/crm-form-create/components/basic/multiplePick.vue')['default']
|
||||
Phone: typeof import('./src/components/business/crm-form-create/components/advanced/phone.vue')['default']
|
||||
Pick: typeof import('./src/components/business/crm-form-create/components/basic/pick.vue')['default']
|
||||
Radio: typeof import('./src/components/business/crm-form-create/components/basic/radio.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
SerialNumber: typeof import('./src/components/business/crm-form-create/components/advanced/serialNumber.vue')['default']
|
||||
SingleText: typeof import('./src/components/business/crm-form-create/components/basic/singleText.vue')['default']
|
||||
Textarea: typeof import('./src/components/business/crm-form-create/components/basic/textarea.vue')['default']
|
||||
Upload: typeof import('./src/components/business/crm-form-create/components/advanced/upload.vue')['default']
|
||||
VanBadge: typeof import('vant/es')['Badge']
|
||||
VanButton: typeof import('vant/es')['Button']
|
||||
VanCascader: typeof import('vant/es')['Cascader']
|
||||
VanCell: typeof import('vant/es')['Cell']
|
||||
VanCellGroup: typeof import('vant/es')['CellGroup']
|
||||
VanCheckbox: typeof import('vant/es')['Checkbox']
|
||||
VanCheckboxGroup: typeof import('vant/es')['CheckboxGroup']
|
||||
VanCollapse: typeof import('vant/es')['Collapse']
|
||||
VanCollapseItem: typeof import('vant/es')['CollapseItem']
|
||||
VanCountDown: typeof import('vant/es')['CountDown']
|
||||
VanDatePicker: typeof import('vant/es')['DatePicker']
|
||||
VanDialog: typeof import('vant/es')['Dialog']
|
||||
VanDivider: typeof import('vant/es')['Divider']
|
||||
VanDropdownItem: typeof import('vant/es')['DropdownItem']
|
||||
VanDropdownMenu: typeof import('vant/es')['DropdownMenu']
|
||||
VanEmpty: typeof import('vant/es')['Empty']
|
||||
VanField: typeof import('vant/es')['Field']
|
||||
VanForm: typeof import('vant/es')['Form']
|
||||
VanImage: typeof import('vant/es')['Image']
|
||||
VanList: typeof import('vant/es')['List']
|
||||
VanLoading: typeof import('vant/es')['Loading']
|
||||
VanNavBar: typeof import('vant/es')['NavBar']
|
||||
VanNoticeBar: typeof import('vant/es')['NoticeBar']
|
||||
VanPicker: typeof import('vant/es')['Picker']
|
||||
VanPickerGroup: typeof import('vant/es')['PickerGroup']
|
||||
VanPopover: typeof import('vant/es')['Popover']
|
||||
VanPopup: typeof import('vant/es')['Popup']
|
||||
VanPullRefresh: typeof import('vant/es')['PullRefresh']
|
||||
VanRadio: typeof import('vant/es')['Radio']
|
||||
VanRadioGroup: typeof import('vant/es')['RadioGroup']
|
||||
VanSearch: typeof import('vant/es')['Search']
|
||||
VanTab: typeof import('vant/es')['Tab']
|
||||
VanTabbar: typeof import('vant/es')['Tabbar']
|
||||
VanTabbarItem: typeof import('vant/es')['TabbarItem']
|
||||
VanTabs: typeof import('vant/es')['Tabs']
|
||||
VanTag: typeof import('vant/es')['Tag']
|
||||
VanTimePicker: typeof import('vant/es')['TimePicker']
|
||||
VanUploader: typeof import('vant/es')['Uploader']
|
||||
WorkflowStage: typeof import('./src/components/business/crm-workflow-card/workflowStage.vue')['default']
|
||||
}
|
||||
}
|
||||
31
frontend/packages/mobile/config/plugin/compress.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Used to package and output gzip. Note that this does not work properly in Vite, the specific reason is still being investigated
|
||||
* gzip压缩
|
||||
* https://github.com/anncwb/vite-plugin-compression
|
||||
*/
|
||||
import type { Plugin } from 'vite';
|
||||
import compressPlugin from 'vite-plugin-compression';
|
||||
|
||||
export default function configCompressPlugin(compress: 'gzip' | 'brotli', deleteOriginFile = false): Plugin | Plugin[] {
|
||||
const plugins: Plugin[] = [];
|
||||
|
||||
if (compress === 'gzip') {
|
||||
plugins.push(
|
||||
compressPlugin({
|
||||
ext: '.gz',
|
||||
deleteOriginFile,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
if (compress === 'brotli') {
|
||||
plugins.push(
|
||||
compressPlugin({
|
||||
ext: '.br',
|
||||
algorithm: 'brotliCompress',
|
||||
deleteOriginFile,
|
||||
})
|
||||
);
|
||||
}
|
||||
return plugins;
|
||||
}
|
||||
18
frontend/packages/mobile/config/plugin/visualizer.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/**
|
||||
* Generation packaging analysis
|
||||
* 生成打包分析
|
||||
*/
|
||||
import { isReportMode } from '../utils';
|
||||
import visualizer from 'rollup-plugin-visualizer';
|
||||
|
||||
export default function configVisualizerPlugin() {
|
||||
if (isReportMode()) {
|
||||
return visualizer({
|
||||
filename: './node_modules/.cache/visualizer/stats.html',
|
||||
open: true,
|
||||
gzipSize: true,
|
||||
brotliSize: true,
|
||||
});
|
||||
}
|
||||
return [];
|
||||
}
|
||||
9
frontend/packages/mobile/config/utils/index.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Whether to generate package preview
|
||||
* 是否生成打包报告
|
||||
*/
|
||||
export default {};
|
||||
|
||||
export function isReportMode(): boolean {
|
||||
return process.env.REPORT === 'true';
|
||||
}
|
||||
99
frontend/packages/mobile/config/vite.config.base.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
import { VantResolver } from '@vant/auto-import-resolver';
|
||||
import vue from '@vitejs/plugin-vue';
|
||||
import vueJsx from '@vitejs/plugin-vue-jsx';
|
||||
import autoprefixer from 'autoprefixer';
|
||||
import { resolve } from 'path';
|
||||
import postcssPxtorem from 'postcss-pxtorem';
|
||||
import tailwindcss from 'tailwindcss';
|
||||
import AutoImport from 'unplugin-auto-import/vite';
|
||||
import Components from 'unplugin-vue-components/vite';
|
||||
import { defineConfig } from 'vite';
|
||||
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
|
||||
import vueSetupExtend from 'vite-plugin-vue-setup-extend';
|
||||
import svgLoader from 'vite-svg-loader';
|
||||
|
||||
export default defineConfig({
|
||||
base: '/mobile/',
|
||||
plugins: [
|
||||
vue(),
|
||||
vueJsx(),
|
||||
vueSetupExtend(),
|
||||
svgLoader({ svgoConfig: {} }),
|
||||
createSvgIconsPlugin({
|
||||
// 指定需要缓存的图标文件夹
|
||||
iconDirs: [resolve(process.cwd(), 'src/assets/svg'), resolve(process.cwd(), 'public/images')], // 与本地储存地址一致
|
||||
// 指定symbolId格式
|
||||
symbolId: 'icon-[name]',
|
||||
}),
|
||||
AutoImport({
|
||||
dts: 'src/auto-import.d.ts',
|
||||
include: [
|
||||
/\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
|
||||
/\.vue$/,
|
||||
/\.vue\?vue/, // .vue
|
||||
],
|
||||
imports: ['vue'],
|
||||
resolvers: [VantResolver()],
|
||||
eslintrc: {
|
||||
enabled: true,
|
||||
},
|
||||
}),
|
||||
Components({
|
||||
resolvers: [VantResolver()],
|
||||
}),
|
||||
],
|
||||
resolve: {
|
||||
alias: [
|
||||
{
|
||||
find: '@locale',
|
||||
replacement: resolve(__dirname, '../src/locale'),
|
||||
},
|
||||
{
|
||||
find: '@',
|
||||
replacement: resolve(__dirname, '../src'),
|
||||
},
|
||||
{
|
||||
find: 'vue-i18n',
|
||||
replacement: 'vue-i18n/dist/vue-i18n.esm-bundler.js', // 解决 vue-i18n 依赖包报错
|
||||
},
|
||||
{
|
||||
find: 'vue',
|
||||
replacement: 'vue/dist/vue.esm-bundler.js', // compile template
|
||||
},
|
||||
],
|
||||
extensions: ['.ts', '.js', '.jsx', '.tsx', '.json', '.vue', '.mjs'],
|
||||
},
|
||||
define: {
|
||||
'process.env': {},
|
||||
// 定义特性标志
|
||||
'__VUE_OPTIONS_API__': true,
|
||||
'__VUE_PROD_DEVTOOLS__': false,
|
||||
// 设置hydration不匹配详细信息的标志
|
||||
'__VUE_PROD_HYDRATION_MISMATCH_DETAILS__': true,
|
||||
},
|
||||
css: {
|
||||
postcss: {
|
||||
plugins: [
|
||||
postcssPxtorem({
|
||||
rootValue: 14, // 基准值,1rem
|
||||
propList: ['*'], // 需要转换的属性,`*` 表示所有属性都转换
|
||||
unitPrecision: 5, // 转换后保留的小数位数
|
||||
selectorBlackList: ['.no-rem'], // 忽略的选择器,例如 `.no-rem` 类名的样式不会被转换
|
||||
replace: true, // 替换规则,而不是添加回退
|
||||
mediaQuery: false, // 是否允许在媒体查询中转换
|
||||
minPixelValue: 2, // 小于或等于 2px 的值不转换为 rem
|
||||
}),
|
||||
tailwindcss(),
|
||||
autoprefixer(),
|
||||
],
|
||||
},
|
||||
preprocessorOptions: {
|
||||
less: {
|
||||
modifyVars: {
|
||||
hack: `true; @import (reference) "${resolve('src/assets/style/var.less')}";`,
|
||||
},
|
||||
javascriptEnabled: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
44
frontend/packages/mobile/config/vite.config.dev.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import baseConfig from './vite.config.base';
|
||||
import { config } from 'dotenv';
|
||||
import { mergeConfig } from 'vite';
|
||||
import eslint from 'vite-plugin-eslint';
|
||||
|
||||
// 注入本地/开发配置环境变量(先导入的配置优先级高)
|
||||
config({ path: ['.env.development.local', '.env.development'] });
|
||||
|
||||
export default mergeConfig(
|
||||
{
|
||||
mode: 'development',
|
||||
server: {
|
||||
port: 3000,
|
||||
open: true,
|
||||
fs: {
|
||||
strict: true,
|
||||
},
|
||||
proxy: {
|
||||
'/sse': {
|
||||
target: process.env.VITE_DEV_DOMAIN,
|
||||
changeOrigin: true,
|
||||
},
|
||||
'/front': {
|
||||
target: process.env.VITE_DEV_DOMAIN,
|
||||
changeOrigin: true,
|
||||
rewrite: (path: string) => path.replace(/^\/front/, ''),
|
||||
},
|
||||
'/pic': {
|
||||
target: process.env.VITE_DEV_DOMAIN,
|
||||
changeOrigin: true,
|
||||
rewrite: (path: string) => path.replace(/^\/front\/pic/, ''),
|
||||
},
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
eslint({
|
||||
cache: false,
|
||||
include: ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.vue'],
|
||||
exclude: ['node_modules'],
|
||||
}),
|
||||
],
|
||||
},
|
||||
baseConfig
|
||||
);
|
||||
30
frontend/packages/mobile/config/vite.config.prod.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import configCompressPlugin from './plugin/compress';
|
||||
import configVisualizerPlugin from './plugin/visualizer';
|
||||
import baseConfig from './vite.config.base';
|
||||
import legacy from '@vitejs/plugin-legacy';
|
||||
import { mergeConfig } from 'vite';
|
||||
|
||||
export default mergeConfig(
|
||||
{
|
||||
mode: 'production',
|
||||
plugins: [
|
||||
configCompressPlugin('gzip'),
|
||||
configVisualizerPlugin(),
|
||||
// 兼容性配置,配合package.json中的browserslist使用
|
||||
legacy({
|
||||
targets: ['defaults', 'not IE 11'],
|
||||
}),
|
||||
],
|
||||
build: {
|
||||
rollupOptions: {
|
||||
output: {
|
||||
manualChunks: {
|
||||
vue: ['vue', 'vue-router', 'pinia', '@vueuse/core', 'vue-i18n'],
|
||||
},
|
||||
},
|
||||
},
|
||||
chunkSizeWarningLimit: 2000,
|
||||
},
|
||||
},
|
||||
baseConfig
|
||||
);
|
||||
13
frontend/packages/mobile/env.d.ts
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
/// <reference types="vite/client" />
|
||||
|
||||
declare module '*.vue' {
|
||||
import { DefineComponent } from 'vue';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
||||
const component: DefineComponent<{}, {}, any>;
|
||||
export default component;
|
||||
}
|
||||
interface ImportMetaEnv {
|
||||
readonly VITE_API_BASE_URL: string;
|
||||
readonly VITE_DEV_DOMAIN: string; // 开发环境域名
|
||||
}
|
||||
173
frontend/packages/mobile/eslint.config.cjs
Normal file
@@ -0,0 +1,173 @@
|
||||
const { defineConfig, globalIgnores } = require('eslint/config');
|
||||
|
||||
const pluginVue = require('eslint-plugin-vue');
|
||||
const parser = require('vue-eslint-parser');
|
||||
const globals = require('globals');
|
||||
const simpleImportSort = require('eslint-plugin-simple-import-sort');
|
||||
|
||||
const { fixupConfigRules } = require('@eslint/compat');
|
||||
|
||||
const js = require('@eslint/js');
|
||||
|
||||
const { FlatCompat } = require('@eslint/eslintrc');
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname,
|
||||
recommendedConfig: js.configs.recommended,
|
||||
allConfig: js.configs.all,
|
||||
});
|
||||
const path = require('path');
|
||||
|
||||
module.exports = defineConfig([
|
||||
{
|
||||
languageOptions: {
|
||||
parser,
|
||||
sourceType: 'module',
|
||||
ecmaVersion: 2020,
|
||||
|
||||
parserOptions: {
|
||||
parser: '@typescript-eslint/parser',
|
||||
|
||||
ecmaFeatures: {
|
||||
jsx: true,
|
||||
},
|
||||
},
|
||||
|
||||
globals: {
|
||||
...globals.browser,
|
||||
...globals.node,
|
||||
NodeJS: 'readonly',
|
||||
},
|
||||
},
|
||||
|
||||
plugins: {
|
||||
'vue': pluginVue,
|
||||
'simple-import-sort': simpleImportSort,
|
||||
},
|
||||
|
||||
extends: fixupConfigRules(
|
||||
compat.extends(
|
||||
'airbnb-base',
|
||||
'plugin:@typescript-eslint/recommended',
|
||||
'plugin:import/recommended',
|
||||
'plugin:import/typescript',
|
||||
'plugin:prettier/recommended',
|
||||
'./.eslintrc-auto-import.json'
|
||||
)
|
||||
),
|
||||
|
||||
settings: {
|
||||
'import/resolver': {
|
||||
typescript: {
|
||||
project: path.resolve(__dirname, './tsconfig.json'),
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
rules: {
|
||||
'prettier/prettier': 1,
|
||||
'vue/require-default-prop': 0,
|
||||
'vue/singleline-html-element-content-newline': 0,
|
||||
'vue/max-attributes-per-line': 0,
|
||||
'vue/custom-event-name-casing': [2, 'camelCase'],
|
||||
'vue/no-v-text': 1,
|
||||
'vue/padding-line-between-blocks': 1,
|
||||
'vue/require-direct-export': 1,
|
||||
'vue/multi-word-component-names': 0,
|
||||
'@typescript-eslint/ban-ts-comment': 0,
|
||||
'@typescript-eslint/no-unused-vars': 1,
|
||||
'@typescript-eslint/no-empty-function': 1,
|
||||
'@typescript-eslint/no-explicit-any': 0,
|
||||
'@typescript-eslint/no-duplicate-enum-values': 0,
|
||||
'consistent-return': 'off',
|
||||
'vue/return-in-computed-property': ['off'],
|
||||
'vue/no-side-effects-in-computed-properties': 'off',
|
||||
|
||||
'import/no-unresolved': [
|
||||
'error',
|
||||
{
|
||||
ignore: ['^@lib/shared'],
|
||||
},
|
||||
],
|
||||
|
||||
'import/extensions': [
|
||||
2,
|
||||
'ignorePackages',
|
||||
{
|
||||
js: 'never',
|
||||
jsx: 'never',
|
||||
ts: 'never',
|
||||
tsx: 'never',
|
||||
},
|
||||
],
|
||||
|
||||
'no-debugger': 2,
|
||||
'no-param-reassign': 0,
|
||||
'prefer-regex-literals': 0,
|
||||
'import/no-extraneous-dependencies': 0,
|
||||
'import/no-cycle': 'off',
|
||||
'import/order': 'off',
|
||||
'class-methods-use-this': 'off',
|
||||
'global-require': 0,
|
||||
'no-plusplus': 'off',
|
||||
'no-underscore-dangle': 'off',
|
||||
'vue/attributes-order': 1,
|
||||
'simple-import-sort/exports': 'error',
|
||||
'no-case-declarations': 'off',
|
||||
|
||||
'simple-import-sort/imports': [
|
||||
'error',
|
||||
{
|
||||
groups: [
|
||||
[
|
||||
'^vue$',
|
||||
'^vue-router$',
|
||||
'^vue-i18n$',
|
||||
'^pinia$',
|
||||
'^@vueuse/core$',
|
||||
'^vant$',
|
||||
'^@vicons/ionicons5$',
|
||||
'^lodash-es$',
|
||||
'^axios$',
|
||||
'^dayjs$',
|
||||
'^jsencrypt$',
|
||||
'^echarts$',
|
||||
'^localforage$',
|
||||
],
|
||||
['.*/assets/.*', '^@/assets$'],
|
||||
['^@lib/shared/.*'],
|
||||
['^@/components/pure/.*', '^@/components/business/.*', '.*\\.vue$'],
|
||||
[
|
||||
'^@/api($|/.*)',
|
||||
'^@/config($|/.*)',
|
||||
'^@/directive($|/.*)',
|
||||
'^@/hooks($|/.*)',
|
||||
'^@/locale($|/.*)',
|
||||
'^@/router($|/.*)',
|
||||
'^@/store($|/.*)',
|
||||
'^@/utils($|/.*)',
|
||||
],
|
||||
['^@/models($|/.*)', '^@/enums($|/.*)'],
|
||||
['^type'],
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ['src/enums/**/*.ts'],
|
||||
|
||||
rules: {
|
||||
'no-shadow': 'off',
|
||||
},
|
||||
},
|
||||
globalIgnores([
|
||||
'*.json',
|
||||
'src/**/*.json',
|
||||
'**/dist',
|
||||
'**/postcss.config.js',
|
||||
'**/*.md',
|
||||
'src/assets/icon-font/iconfont.js',
|
||||
'src/assets/fonts/AlibabaPuHuiTi-3-55-Regular-normal.js',
|
||||
]),
|
||||
]);
|
||||
16
frontend/packages/mobile/index.html
Normal file
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN" style="font-size: 14px">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0,viewport-fit=cover"
|
||||
/>
|
||||
<title>Cordys CRM</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
||||
62
frontend/packages/mobile/package.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"name": "@cordys/mobile",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"author": "",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite --config ./config/vite.config.dev.ts --host",
|
||||
"build": "vue-tsc --noEmit && vite build --config ./config/vite.config.prod.ts",
|
||||
"build:local": "vue-tsc --noEmit && vite build --config ./config/vite.config.prod.ts --mode development",
|
||||
"build:localProd": "vue-tsc --noEmit && vite build --config ./config/vite.config.prod.ts --mode localProd",
|
||||
"type:check": "vue-tsc --noEmit --skipLibCheck -p tsconfig.json",
|
||||
"lint-staged": "npx lint-staged",
|
||||
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
|
||||
"lint:styles": "stylelint 'src/**/*.{vue,html,css,scss,less}' --fix"
|
||||
},
|
||||
"dependencies": {
|
||||
"nprogress": "^0.2.0",
|
||||
"typescript": "5.9",
|
||||
"vant": "^4.8.2",
|
||||
"vue": "^3.5.13"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/postcss-pxtorem": "^6.1.0",
|
||||
"@vant/auto-import-resolver": "^1.1.0",
|
||||
"@vitejs/plugin-legacy": "^6.0.0",
|
||||
"@vitejs/plugin-vue": "^5.2.1",
|
||||
"@vitejs/plugin-vue-jsx": "^4.1.1",
|
||||
"@vue/babel-plugin-jsx": "^1.2.2",
|
||||
"@vue/test-utils": "^2.4.6",
|
||||
"eruda": "^3.4.1",
|
||||
"less": "4.3.0",
|
||||
"less-loader": "^11.1.4",
|
||||
"postcss-pxtorem": "^6.1.0",
|
||||
"rollup": "4.59.0",
|
||||
"rollup-plugin-visualizer": "^5.12.0",
|
||||
"unplugin-auto-import": "^0.17.5",
|
||||
"unplugin-vue-components": "^0.26.0",
|
||||
"vite": "^6.0.5",
|
||||
"vite-plugin-compression": "^0.5.1",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-plugin-svg-icons": "^2.0.1",
|
||||
"vite-plugin-vue-setup-extend": "^0.4.0",
|
||||
"vite-svg-loader": "^3.6.0"
|
||||
},
|
||||
"lint-staged": {
|
||||
"*.{js,ts,jsx,tsx}": [
|
||||
"prettier --write",
|
||||
"eslint --fix"
|
||||
],
|
||||
"*.vue": [
|
||||
"stylelint --fix",
|
||||
"prettier --write",
|
||||
"eslint --fix"
|
||||
],
|
||||
"*.{less,css,scss,sass}": [
|
||||
"stylelint --fix --custom-syntax postcss-less",
|
||||
"prettier --write"
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
frontend/packages/mobile/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
frontend/packages/mobile/public/images/login_bg.png
Normal file
|
After Width: | Height: | Size: 46 KiB |
54
frontend/packages/mobile/src/App.vue
Normal file
@@ -0,0 +1,54 @@
|
||||
<template>
|
||||
<Suspense>
|
||||
<RouterView />
|
||||
</Suspense>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { useRouter } from 'vue-router';
|
||||
import { showLoadingToast } from 'vant';
|
||||
|
||||
import useLocale from '@lib/shared/locale/useLocale';
|
||||
import { getQueryVariable } from '@lib/shared/method';
|
||||
import { hasToken } from '@lib/shared/method/auth';
|
||||
import { LocaleType } from '@lib/shared/types/global';
|
||||
|
||||
import useLicenseStore from '@/store/modules/setting/license';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
import { AppRouteEnum } from '@/enums/routeEnum';
|
||||
|
||||
import useLogin from './hooks/useLogin';
|
||||
|
||||
const router = useRouter();
|
||||
const userStore = useUserStore();
|
||||
const { oAuthLogin } = useLogin();
|
||||
const licenseStore = useLicenseStore();
|
||||
const { changeLocale } = useLocale(showLoadingToast);
|
||||
|
||||
onBeforeMount(async () => {
|
||||
changeLocale(navigator.language as LocaleType);
|
||||
const loginStatus = await userStore.isLogin(true);
|
||||
|
||||
const ua = navigator.userAgent.toLowerCase();
|
||||
const isWXWork = ua.includes('wxwork');
|
||||
|
||||
const isDingTalk =
|
||||
ua.includes('dingtalk') ||
|
||||
ua.includes('aliapp(dingtalk') ||
|
||||
(getQueryVariable('authCode') !== '' &&
|
||||
getQueryVariable('authCode') !== undefined &&
|
||||
getQueryVariable('authCode') !== null);
|
||||
|
||||
const isLark = ua.includes('feishu') || ua.includes('lark') || getQueryVariable('state') === 'LARK';
|
||||
|
||||
if (!loginStatus && !hasToken() && (isWXWork || isDingTalk || isLark)) {
|
||||
await oAuthLogin();
|
||||
return;
|
||||
}
|
||||
router.replace({ name: AppRouteEnum.WORKBENCH });
|
||||
licenseStore.getValidateLicense();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
80
frontend/packages/mobile/src/api/http/checkStatus.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { showFailToast } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import useUser from '@/hooks/useUser';
|
||||
|
||||
export default function checkStatus(
|
||||
status: number,
|
||||
msg: string,
|
||||
msgDetail: string | Record<string, any>,
|
||||
code?: number,
|
||||
noErrorTip?: boolean
|
||||
): void {
|
||||
const { t } = useI18n();
|
||||
const { logout, isLoginPage, isWhiteListPage } = useUser();
|
||||
|
||||
let errMessage = '';
|
||||
switch (status) {
|
||||
case 400:
|
||||
errMessage = `${msg}`;
|
||||
break;
|
||||
case 401: {
|
||||
errMessage = msg || t('api.errMsg401');
|
||||
if (!isLoginPage() && !isWhiteListPage()) {
|
||||
logout();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 403:
|
||||
errMessage = msg || t('api.errMsg403');
|
||||
break;
|
||||
// 404请求不存在
|
||||
case 404:
|
||||
errMessage = msg || t('api.errMsg404');
|
||||
break;
|
||||
case 405:
|
||||
errMessage = msg || t('api.errMsg405');
|
||||
break;
|
||||
case 408:
|
||||
errMessage = msg || t('api.errMsg408');
|
||||
break;
|
||||
case 500:
|
||||
errMessage = msg || t('api.errMsg500');
|
||||
break;
|
||||
case 501:
|
||||
errMessage = msg || t('api.errMsg501');
|
||||
break;
|
||||
case 502:
|
||||
errMessage = msg || t('api.errMsg502');
|
||||
break;
|
||||
case 503:
|
||||
errMessage = msg || t('api.errMsg503');
|
||||
break;
|
||||
case 504:
|
||||
errMessage = msg || t('api.errMsg504');
|
||||
break;
|
||||
case 505:
|
||||
errMessage = msg || t('api.errMsg505');
|
||||
break;
|
||||
default:
|
||||
}
|
||||
if (msgDetail && !noErrorTip) {
|
||||
if (typeof msgDetail === 'object') {
|
||||
errMessage = Object.values(msgDetail)
|
||||
.map((e) => e)
|
||||
.join('\n');
|
||||
} else {
|
||||
errMessage = msgDetail;
|
||||
}
|
||||
showFailToast({
|
||||
message: errMessage,
|
||||
duration: 5000,
|
||||
});
|
||||
} else if (errMessage && !noErrorTip) {
|
||||
showFailToast({
|
||||
message: errMessage,
|
||||
duration: 5000,
|
||||
});
|
||||
}
|
||||
}
|
||||
15
frontend/packages/mobile/src/api/http/index.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { showFailToast } from 'vant';
|
||||
|
||||
import createAxios from '@lib/shared/api/http';
|
||||
|
||||
import useAppStore from '@/store/modules/app';
|
||||
|
||||
import checkStatus from './checkStatus';
|
||||
|
||||
const CDR = createAxios({
|
||||
useAppStore,
|
||||
showErrorMsg: showFailToast,
|
||||
checkStatus,
|
||||
});
|
||||
|
||||
export default CDR;
|
||||
441
frontend/packages/mobile/src/api/modules/index.ts
Normal file
@@ -0,0 +1,441 @@
|
||||
import { showFailToast } from 'vant';
|
||||
|
||||
import createAxios from '@lib/shared/api/http';
|
||||
import useAgentApi from '@lib/shared/api/modules/agent';
|
||||
import useClueApi from '@lib/shared/api/modules/clue';
|
||||
import useContractApi from '@lib/shared/api/modules/contract';
|
||||
import useCustomerApi from '@lib/shared/api/modules/customer';
|
||||
import useCustomFormApi from '@lib/shared/api/modules/customForm';
|
||||
import useFollowApi from '@lib/shared/api/modules/follow';
|
||||
import useOpportunityApi from '@lib/shared/api/modules/opportunity';
|
||||
import useOrderApi from '@lib/shared/api/modules/order';
|
||||
import useProductApi from '@lib/shared/api/modules/product';
|
||||
import useLicenseApi from '@lib/shared/api/modules/system/authorizedManagement';
|
||||
import useBusinessApi from '@lib/shared/api/modules/system/business';
|
||||
import useLoginApi from '@lib/shared/api/modules/system/login';
|
||||
import useMessageApi from '@lib/shared/api/modules/system/message';
|
||||
import useModuleApi from '@lib/shared/api/modules/system/module';
|
||||
import useOrgApi from '@lib/shared/api/modules/system/org';
|
||||
|
||||
import checkStatus from '../http/checkStatus';
|
||||
|
||||
const CDR = createAxios({
|
||||
showErrorMsg: showFailToast,
|
||||
checkStatus,
|
||||
});
|
||||
|
||||
const productApi = useProductApi(CDR);
|
||||
const opportunityApi = useOpportunityApi(CDR);
|
||||
const clueApi = useClueApi(CDR);
|
||||
const customerApi = useCustomerApi(CDR);
|
||||
const messageApi = useMessageApi(CDR);
|
||||
const moduleApi = useModuleApi(CDR);
|
||||
const orgApi = useOrgApi(CDR);
|
||||
const businessApi = useBusinessApi(CDR);
|
||||
const loginApi = useLoginApi(CDR);
|
||||
const licenseApi = useLicenseApi(CDR);
|
||||
const followApi = useFollowApi(CDR);
|
||||
const contractApi = useContractApi(CDR);
|
||||
const orderApi = useOrderApi(CDR);
|
||||
const agentApi = useAgentApi(CDR);
|
||||
|
||||
export const {
|
||||
getFollowPlanDetail,
|
||||
getFollowPLanPage,
|
||||
getFollowRecordDetail,
|
||||
getFollowRecordPage,
|
||||
deleteFollowRecord,
|
||||
getFollowRecordTab,
|
||||
getFollowPlanTab,
|
||||
deleteFollowPlan,
|
||||
updateFollowPlanStatus,
|
||||
updateFollowPlan,
|
||||
updateFollowRecord,
|
||||
addFollowRecord,
|
||||
addFollowPlan,
|
||||
} = followApi;
|
||||
|
||||
export const {
|
||||
getOrderFormConfig,
|
||||
getOrderFormSnapshotConfig,
|
||||
addOrder,
|
||||
getOrderDetail,
|
||||
getOrderDetailSnapshot,
|
||||
updateOrder,
|
||||
deleteOrder,
|
||||
getOrderList,
|
||||
getOrderInContractList,
|
||||
getOrderTab,
|
||||
addOrderView,
|
||||
updateOrderView,
|
||||
getOrderViewList,
|
||||
getOrderViewDetail,
|
||||
fixedOrderView,
|
||||
enableOrderView,
|
||||
deleteOrderView,
|
||||
dragOrderView,
|
||||
updateOrderStatus,
|
||||
updateOrderStatusRollback,
|
||||
sortOrderStatus,
|
||||
addOrderStatus,
|
||||
getOrderStatusConfig,
|
||||
updateOrderStage,
|
||||
downloadOrder,
|
||||
deleteOrderStatus,
|
||||
} = orderApi;
|
||||
|
||||
export const {
|
||||
addProduct,
|
||||
getProduct,
|
||||
getProductFormConfig,
|
||||
getProductList,
|
||||
deleteProduct,
|
||||
updateProduct,
|
||||
batchDeleteProduct,
|
||||
batchUpdateProduct,
|
||||
dragSortProduct,
|
||||
getProductOptions,
|
||||
addProductPrice,
|
||||
updateProductPrice,
|
||||
getProductPriceList,
|
||||
getProductPrice,
|
||||
deleteProductPrice,
|
||||
getProductPriceFormConfig,
|
||||
dragSortProductPrice,
|
||||
copyProductPrice,
|
||||
} = productApi;
|
||||
|
||||
export const {
|
||||
getOpportunityList,
|
||||
addOpportunity,
|
||||
updateOpportunity,
|
||||
getOpportunityDetail,
|
||||
getOptFormConfig,
|
||||
getOptFollowRecordList,
|
||||
deleteOptFollowRecord,
|
||||
addOptFollowRecord,
|
||||
updateOptFollowRecord,
|
||||
getOptFollowRecord,
|
||||
getOptFollowPlanList,
|
||||
addOptFollowPlan,
|
||||
updateOptFollowPlan,
|
||||
deleteOptFollowPlan,
|
||||
getOptFollowPlan,
|
||||
cancelOptFollowPlan,
|
||||
transferOpt,
|
||||
batchDeleteOpt,
|
||||
deleteOpt,
|
||||
updateOptStage,
|
||||
getOptTab,
|
||||
getOpportunityContactList,
|
||||
updateOptFollowPlanStatus,
|
||||
advancedSearchOptPage,
|
||||
globalSearchOptPage,
|
||||
getOpportunityStageConfig,
|
||||
getQuotationList,
|
||||
addQuotation,
|
||||
updateQuotation,
|
||||
getQuotationDetail,
|
||||
getQuotationSnapshotDetail,
|
||||
getQuotationFormConfig,
|
||||
getQuotationSnapshotFormConfig,
|
||||
deleteQuotation,
|
||||
approvalQuotation,
|
||||
voidQuotation,
|
||||
revokeQuotation,
|
||||
batchApprove,
|
||||
batchVoided,
|
||||
downloadQuotation,
|
||||
} = opportunityApi;
|
||||
|
||||
export const {
|
||||
addClue,
|
||||
updateClue,
|
||||
updateClueStatus,
|
||||
getClueList,
|
||||
batchTransferClue,
|
||||
batchToCluePool,
|
||||
batchDeleteClue,
|
||||
getClueFormConfig,
|
||||
getClue,
|
||||
deleteClue,
|
||||
ClueTransitionCustomer,
|
||||
addClueFollowRecord,
|
||||
updateClueFollowRecord,
|
||||
getClueFollowRecordList,
|
||||
deleteClueFollowRecord,
|
||||
getClueFollowRecord,
|
||||
addClueFollowPlan,
|
||||
updateClueFollowPlan,
|
||||
deleteClueFollowPlan,
|
||||
getClueFollowPlanList,
|
||||
getClueFollowPlan,
|
||||
cancelClueFollowPlan,
|
||||
getClueHeaderList,
|
||||
pickClue,
|
||||
getCluePoolList,
|
||||
batchPickClue,
|
||||
batchDeleteCluePool,
|
||||
batchAssignClue,
|
||||
assignClue,
|
||||
getPoolOptions,
|
||||
deleteCluePool,
|
||||
getCluePoolFollowRecordList,
|
||||
getPoolClue,
|
||||
getClueTab,
|
||||
getClueTransitionCustomerList,
|
||||
updateClueFollowPlanStatus,
|
||||
getAdvancedCluePoolList,
|
||||
getAdvancedSearchClueList,
|
||||
getGlobalSearchClueList,
|
||||
getGlobalCluePoolList,
|
||||
transformClue,
|
||||
moveToLeadPool,
|
||||
} = clueApi;
|
||||
|
||||
export const { getDepartmentTree, getUserList, getUserDetail, getUserOptions, getRoleOptions } = orgApi;
|
||||
|
||||
export const {
|
||||
addCustomer,
|
||||
updateCustomer,
|
||||
getCustomerList,
|
||||
getCustomerFormConfig,
|
||||
getCustomer,
|
||||
deleteCustomer,
|
||||
batchDeleteCustomer,
|
||||
batchTransferCustomer,
|
||||
batchMoveCustomer,
|
||||
addCustomerFollowRecord,
|
||||
updateCustomerFollowRecord,
|
||||
deleteCustomerFollowRecord,
|
||||
getCustomerFollowRecordList,
|
||||
getCustomerFollowRecordFormConfig,
|
||||
getCustomerFollowRecord,
|
||||
addCustomerFollowPlan,
|
||||
updateCustomerFollowPlan,
|
||||
deleteCustomerFollowPlan,
|
||||
getCustomerFollowPlanList,
|
||||
cancelCustomerFollowPlan,
|
||||
getCustomerFollowPlanFormConfig,
|
||||
getCustomerFollowPlan,
|
||||
addCustomerContact,
|
||||
getCustomerContactList,
|
||||
updateCustomerContact,
|
||||
disableCustomerContact,
|
||||
getCustomerContactFormConfig,
|
||||
getCustomerContact,
|
||||
enableCustomerContact,
|
||||
deleteCustomerContact,
|
||||
checkOpportunity,
|
||||
getContactListUnderCustomer,
|
||||
addCustomerOpenSea,
|
||||
updateCustomerOpenSea,
|
||||
getCustomerOpenSeaList,
|
||||
switchCustomerOpenSea,
|
||||
deleteCustomerOpenSea,
|
||||
isCustomerOpenSeaNoPick,
|
||||
getOpenSeaCustomerList,
|
||||
pickOpenSeaCustomer,
|
||||
batchPickOpenSeaCustomer,
|
||||
batchDeleteOpenSeaCustomer,
|
||||
batchAssignOpenSeaCustomer,
|
||||
assignOpenSeaCustomer,
|
||||
getOpenSeaOptions,
|
||||
getOpenSeaCustomer,
|
||||
deleteOpenSeaCustomer,
|
||||
getCustomerHeaderList,
|
||||
saveCustomerRelation,
|
||||
getCustomerRelationList,
|
||||
getCustomerCollaborationList,
|
||||
batchDeleteCustomerCollaboration,
|
||||
updateCustomerCollaboration,
|
||||
addCustomerCollaboration,
|
||||
deleteCustomerCollaboration,
|
||||
getCustomerOptions,
|
||||
getCustomerOpenSeaFollowRecordList,
|
||||
updateCustomerRelationItem,
|
||||
deleteCustomerRelationItem,
|
||||
addCustomerRelationItem,
|
||||
getCustomerTab,
|
||||
getCustomerContactTab,
|
||||
updateCustomerFollowPlanStatus,
|
||||
getCustomerOpportunityPage,
|
||||
geAdvancedCustomerList,
|
||||
getAdvancedCustomerContactList,
|
||||
getAdvancedOpenSeaCustomerList,
|
||||
getGlobalCustomerContactList,
|
||||
getGlobalCustomerList,
|
||||
getGlobalOpenSeaCustomerList,
|
||||
getGlobalModuleCount,
|
||||
moveCustomerToPool,
|
||||
getCustomerOrderList,
|
||||
} = customerApi;
|
||||
|
||||
export const {
|
||||
exportContractAll,
|
||||
exportContractSelected,
|
||||
generateContractChart,
|
||||
getContractDetail,
|
||||
getContractList,
|
||||
getContractTab,
|
||||
getContractViewDetail,
|
||||
getContractViewList,
|
||||
addContractView,
|
||||
updateContractView,
|
||||
fixedContractView,
|
||||
enableContractView,
|
||||
deleteContractView,
|
||||
dragContractView,
|
||||
addContract,
|
||||
getContractFormSnapshotConfig,
|
||||
updateContract,
|
||||
deleteContract,
|
||||
getContractFormConfig,
|
||||
getPaymentPlanList,
|
||||
getContractPaymentPlanList,
|
||||
addPaymentPlan,
|
||||
updatePaymentPlan,
|
||||
deletePaymentPlan,
|
||||
getPaymentPlanDetail,
|
||||
getPaymentPlanFormConfig,
|
||||
getPaymentPlanTab,
|
||||
exportPaymentPlanAll,
|
||||
exportPaymentPlanSelected,
|
||||
generatePaymentPlanChart,
|
||||
addPaymentPlanView,
|
||||
updatePaymentPlanView,
|
||||
getPaymentPlanViewList,
|
||||
getPaymentPlanViewDetail,
|
||||
fixedPaymentPlanView,
|
||||
enablePaymentPlanView,
|
||||
deletePaymentPlanView,
|
||||
dragPaymentPlanView,
|
||||
getPaymentRecordFormConfig,
|
||||
addPaymentRecord,
|
||||
updatePaymentRecord,
|
||||
getPaymentRecordDetail,
|
||||
getPaymentRecordList,
|
||||
deletePaymentRecord,
|
||||
preCheckImportBusinessTitle,
|
||||
downloadBusinessTitleTemplate,
|
||||
importBusinessTitle,
|
||||
getBusinessTitleList,
|
||||
addBusinessTitle,
|
||||
updateBusinessTitle,
|
||||
deleteBusinessTitle,
|
||||
revokeBusinessTitle,
|
||||
getBusinessTitleDetail,
|
||||
getBusinessTitleInvoiceCheck,
|
||||
exportBusinessTitleAll,
|
||||
exportBusinessTitleSelected,
|
||||
getBusinessTitleThirdQuery,
|
||||
getBusinessTitleThirdQueryOption,
|
||||
getBusinessTitleConfig,
|
||||
switchBusinessTitleFormConfig,
|
||||
getInvoicedDetail,
|
||||
getInvoicedFormConfig,
|
||||
getInvoicedFormSnapshotConfig,
|
||||
addInvoiced,
|
||||
updateInvoiced,
|
||||
getInvoicedList,
|
||||
getBusinessTitleModuleForm,
|
||||
getInvoicedInContractList,
|
||||
getContractDetailSnapshot,
|
||||
getInvoicedDetailSnapshot,
|
||||
} = contractApi;
|
||||
|
||||
export const {
|
||||
addAnnouncement,
|
||||
updateAnnouncement,
|
||||
getAnnouncementList,
|
||||
getAnnouncementDetail,
|
||||
deleteAnnouncement,
|
||||
getNotificationList,
|
||||
getNotificationCount,
|
||||
setNotificationRead,
|
||||
setAllNotificationRead,
|
||||
getMessageTask,
|
||||
saveMessageTask,
|
||||
batchSaveMessageTask,
|
||||
getHomeMessageList,
|
||||
closeMessageSubscribe,
|
||||
getUnReadAnnouncement,
|
||||
getMessageTaskConfigDetail,
|
||||
} = messageApi;
|
||||
|
||||
export const {
|
||||
getFieldDisplayList,
|
||||
getModuleNavConfigList,
|
||||
getModuleUserDeptTree,
|
||||
getModuleRoleTree,
|
||||
getOpportunityRuleList,
|
||||
getCluePoolPage,
|
||||
noPickCluePool,
|
||||
getCapacityPage,
|
||||
getCustomerPoolPage,
|
||||
noPickCustomerPool,
|
||||
getFormDesignConfig,
|
||||
getFieldDeptUerTree,
|
||||
getFieldDeptTree,
|
||||
getFieldClueList,
|
||||
getFieldContactList,
|
||||
getFieldCustomerList,
|
||||
getFieldOpportunityList,
|
||||
getFieldContractList,
|
||||
getFieldInvoiceList,
|
||||
getFieldProductList,
|
||||
checkRepeat,
|
||||
uploadTempFile,
|
||||
previewPicture,
|
||||
downloadPicture,
|
||||
getReasonConfig,
|
||||
getSearchConfig,
|
||||
uploadTempAttachment,
|
||||
previewAttachment,
|
||||
downloadAttachment,
|
||||
deleteAttachment,
|
||||
getFieldPriceList,
|
||||
getFieldQuotationList,
|
||||
getFieldOrderList,
|
||||
getFieldContractPaymentPlanList,
|
||||
getFieldContractPaymentRecordList,
|
||||
getFieldBusinessTitleList,
|
||||
getDatasourceFieldConfig,
|
||||
} = moduleApi;
|
||||
|
||||
export const {
|
||||
updatePersonalInfo,
|
||||
getPersonalInfo,
|
||||
sendEmailCode,
|
||||
updateUserPassword,
|
||||
getThirdConfigByType,
|
||||
exportCenterDownload,
|
||||
getExportCenterList,
|
||||
cancelCenterExport,
|
||||
getConfigSynchronization,
|
||||
getApiKeyList,
|
||||
} = businessApi;
|
||||
|
||||
export const { isLogin, signout, getKey, login, getThirdOauthCallback, getThirdCallback } = loginApi;
|
||||
|
||||
export const { getLicense, addLicense } = licenseApi;
|
||||
|
||||
export const { getAgentOptions } = agentApi;
|
||||
|
||||
export const {
|
||||
getCustomFormAdmins,
|
||||
getCustomFormDataDetail,
|
||||
getCustomFormDataPage,
|
||||
getCustomFormDetail,
|
||||
getCustomFormList,
|
||||
getCustomFormRoles,
|
||||
getCustomFormRoleUsers,
|
||||
addCustomForm,
|
||||
addCustomFormData,
|
||||
saveCustomFormAdmins,
|
||||
updateCustomForm,
|
||||
updateCustomFormData,
|
||||
batchUpdateCustomFormData,
|
||||
batchDeleteCustomFormData,
|
||||
deleteCustomFormData,
|
||||
} = useCustomFormApi(CDR);
|
||||
1003
frontend/packages/mobile/src/assets/icon-font/iconfont.css
Normal file
65
frontend/packages/mobile/src/assets/icon-font/iconfont.js
Normal file
2319
frontend/packages/mobile/src/assets/icon-font/iconfont.json
Normal file
679
frontend/packages/mobile/src/assets/icon-font/iconfont.svg
Normal file
@@ -0,0 +1,679 @@
|
||||
<?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 xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Created by iconfont</metadata>
|
||||
<defs>
|
||||
<font id="iconfont" horiz-adv-x="1024">
|
||||
<font-face
|
||||
font-family="iconfont"
|
||||
font-weight="400"
|
||||
font-stretch="normal"
|
||||
units-per-em="1024"
|
||||
ascent="896"
|
||||
descent="-128"
|
||||
/>
|
||||
<missing-glyph />
|
||||
|
||||
<glyph glyph-name="icon_functions_outlined" unicode="" d="M512 384L207.189333 645.248C175.104 672.768 194.56 725.333333 236.8 725.333333H802.133333c12.586667 0 22.741333-10.197333 22.741334-22.741333v-39.850667A22.741333 22.741333 0 0 0 802.133333 640H341.333333l291.370667-238.378667c11.093333-9.130667 11.093333-26.112 0-35.242666L341.333333 128h489.258667c12.544 0 22.741333-10.197333 22.741333-22.741333v-39.850667a22.741333 22.741333 0 0 0-22.741333-22.741333H236.8c-42.24 0-61.696 52.565333-29.610667 80.085333L512 384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_timeline" unicode="" d="M138.666667-42.666667a42.666667 42.666667 0 0 0-85.333334 0V810.666667a42.666667 42.666667 0 1 0 85.333334 0v-128h113.92a128.042667 128.042667 0 0 0 241.493333 0h455.253333a42.666667 42.666667 0 0 0 0-85.333334H494.037333a128.042667 128.042667 0 0 0-241.408 0H138.666667v-170.666666h497.92a128.042667 128.042667 0 0 0 241.493333 0h71.253333a42.666667 42.666667 0 0 0 0-85.333334h-71.296a128.042667 128.042667 0 0 0-241.408 0H138.666667v-170.666666h113.92a128.042667 128.042667 0 0 0 241.493333 0h455.253333a42.666667 42.666667 0 0 0 0-85.333334H494.037333a128.042667 128.042667 0 0 0-241.408 0H138.666667v-128z m234.666666 213.333334a42.666667 42.666667 0 1 1 0-85.333334 42.666667 42.666667 0 0 1 0 85.333334z m384 256a42.666667 42.666667 0 1 1 0-85.333334 42.666667 42.666667 0 0 1 0 85.333334z m-384 256a42.666667 42.666667 0 1 1 0-85.333334 42.666667 42.666667 0 0 1 0 85.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_waterfalls" unicode="" d="M490.666667 810.666667a42.666667 42.666667 0 0 0 42.666666-42.666667v-298.666667a42.666667 42.666667 0 0 0-42.666666-42.666666H128a42.666667 42.666667 0 0 0-42.666667 42.666666V768a42.666667 42.666667 0 0 0 42.666667 42.666667h362.666667z m-42.666667-85.333334H170.666667v-213.333333h277.333333V725.333333zM896 341.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-362.666667a42.666667 42.666667 0 0 0-42.666666 42.666667v298.666667a42.666667 42.666667 0 0 0 42.666666 42.666666H896z m-42.666667-85.333333h-277.333333v-213.333333H853.333333v213.333333z m42.666667 554.666667a42.666667 42.666667 0 0 0 42.666667-42.666667v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666666h-234.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768a42.666667 42.666667 0 0 0 42.666666 42.666667H896z m-42.666667-85.333334h-149.333333v-213.333333H853.333333V725.333333zM362.666667 341.333333a42.666667 42.666667 0 0 0 42.666666-42.666666v-298.666667a42.666667 42.666667 0 0 0-42.666666-42.666667H128a42.666667 42.666667 0 0 0-42.666667 42.666667v298.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h234.666667z m-42.666667-85.333333H170.666667v-213.333333h149.333333v213.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_list" unicode="" d="M170.666667 810.666667a128 128 0 1 0 0-256 128 128 0 0 0 0 256z m0-85.333334a42.666667 42.666667 0 1 1 0-85.333333 42.666667 42.666667 0 0 1 0 85.333333z m0-256a85.333333 85.333333 0 1 0 0-170.666666 85.333333 85.333333 0 0 0 0 170.666666z m0-298.666666a85.333333 85.333333 0 1 0 0-170.666667 85.333333 85.333333 0 0 0 0 170.666667z m768 256a42.666667 42.666667 0 0 0 0-85.333334H426.666667a42.666667 42.666667 0 0 0 0 85.333334h512z m0-298.666667a42.666667 42.666667 0 0 0 0-85.333333H426.666667a42.666667 42.666667 0 0 0 0 85.333333h512z m0 597.333333a42.666667 42.666667 0 0 0 0-85.333333H426.666667a42.666667 42.666667 0 1 0 0 85.333333h512z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-unknown_colorful1" unicode="" d="M170.666667 789.333333a42.666667 42.666667 0 0 0 42.666666 42.666667h417.834667a21.333333 21.333333 0 0 0 15.061333-6.229333l200.874667-200.874667a21.333333 21.333333 0 0 0 6.229333-15.061333V-21.333333a42.666667 42.666667 0 0 0-42.666666-42.666667H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666667v810.666666zM640 830.08a21.290667 21.290667 0 0 0 6.229333-4.309333l200.874667-200.874667a21.376 21.376 0 0 0 4.309333-6.229333H682.666667a42.666667 42.666667 0 0 0-42.666667 42.666666V830.08zM609.578667 475.093333c-23.253333 22.058667-53.845333 32.981333-91.818667 32.981334-42.666667 0-76.16-13.653333-100.394667-41.557334-20.522667-23.936-31.573333-46.933333-33.194666-83.114666l-0.085334-4.266667a10.581333 10.581333 0 0 1 10.624-10.666667h25.216a10.752 10.752 0 0 1 10.709334 10.581334c0 1.749333 0.085333 3.285333 0.128 4.096 1.237333 25.002667 7.722667 38.101333 19.370666 52.650666 14.72 19.626667 36.266667 29.226667 65.877334 29.226667 26.410667 0 46.208-6.741333 59.861333-20.394667 13.056-13.568 19.84-32.042667 19.84-55.253333 0-15.786667-5.717333-30.890667-17.408-45.866667-3.712-4.650667-9.045333-10.154667-26.282667-27.392-27.178667-23.765333-43.989333-43.093333-52.906666-62.165333a108.8 108.8 0 0 1-11.008-48.981333v-12.032c0-5.888 4.778667-10.666667 10.666666-10.666667h25.813334a10.666667 10.666667 0 0 1 10.666666 10.666667v12.032c0 15.104 3.712 28.629333 11.434667 41.813333 5.76 9.813333 13.184 17.536 26.112 28.842667 25.898667 23.466667 40.234667 37.376 46.677333 45.568a112.554667 112.554667 0 0 1 23.381334 69.376c0 35.285333-11.093333 63.573333-33.28 84.48z m-110.208-339.370666a10.666667 10.666667 0 0 1-10.666667-10.666667v-25.216c0-5.888 4.778667-10.666667 10.666667-10.666667h25.216a10.666667 10.666667 0 0 1 10.666666 10.666667v25.173333a10.666667 10.666667 0 0 1-10.666666 10.666667h-25.173334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_link2" unicode="" d="M503.850667 438.144a32 32 0 0 0 0-45.269333c-45.952-45.952-46.933333-119.04-2.816-163.157334l1.408-1.493333 1.365333-1.28 194.986667-194.986667c44.16-44.16 117.205333-43.178667 163.157333 2.773334s46.933333 119.04 2.773333 163.157333L695.466667 367.146667a32 32 0 1 0 45.226666 45.269333l169.301334-169.258667c69.418667-69.418667 67.882667-182.997333-2.773334-253.653333-70.698667-70.698667-184.234667-72.234667-253.653333-2.816l-194.986667 194.986667-1.28 1.408a32.469333 32.469333 0 0 0-1.536 1.408c-69.376 69.376-67.84 182.954667 2.816 253.653333a32 32 0 0 0 45.226667 0zM403.584 748.8l194.986667-194.986667c69.418667-69.418667 67.882667-182.954667-2.773334-253.653333a32 32 0 1 0-45.226666 45.226667c45.909333 45.994667 46.933333 119.04 2.773333 163.2l-194.986667 194.986666c-44.16 44.117333-117.205333 43.136-163.157333-2.816s-46.933333-118.997333-2.816-163.157333l169.301333-169.258667a32 32 0 0 0-45.226666-45.226666L147.114667 492.373333c-69.418667 69.418667-67.882667 182.954667 2.773333 253.653334C220.629333 816.725333 334.165333 818.261333 403.626667 748.8z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_bot" unicode="" d="M522.666667 810.666667a85.333333 85.333333 0 0 0 42.709333-159.232L565.333333 554.666667h234.666667a85.333333 85.333333 0 0 0 85.333333-85.333334v-426.666666a85.333333 85.333333 0 0 0-85.333333-85.333334h-554.666667a85.333333 85.333333 0 0 0-85.333333 85.333334V469.333333a85.333333 85.333333 0 0 0 85.333333 85.333334h234.666667V651.434667a85.333333 85.333333 0 0 0 42.666667 159.232z m277.333333-341.333334h-554.666667v-426.666666h554.666667V469.333333z m-704-85.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666666a42.666667 42.666667 0 0 0-85.333334 0v170.666666a42.666667 42.666667 0 0 0 42.666667 42.666667z m853.333333 0a42.666667 42.666667 0 0 0 42.666667-42.666667v-170.666666a42.666667 42.666667 0 0 0-85.333333 0v170.666666a42.666667 42.666667 0 0 0 42.666666 42.666667z m-341.333333-170.666667l4.992-0.298666A42.666667 42.666667 0 0 0 608 128h-170.666667l-4.992 0.298667A42.666667 42.666667 0 0 0 437.333333 213.333333h170.666667z m-234.666667 170.666667a42.666667 42.666667 0 1 0 0-85.333333 42.666667 42.666667 0 0 0 0 85.333333z m298.666667 0a42.666667 42.666667 0 1 0 0-85.333333 42.666667 42.666667 0 0 0 0 85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_365" unicode="" d="M906.666667 853.333333a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333h-768a85.333333 85.333333 0 0 0-85.333334 85.333333V768a85.333333 85.333333 0 0 0 85.333334 85.333333h768z m0-298.666666h-768v-554.666667h768V554.666667z m0 213.333333h-768v-128h768V768zM521.642667 426.666667c43.776 0 82.048-28.885333 97.706666-71.338667a28.373333 28.373333 0 0 0-16.426666-36.437333 27.989333 27.989333 0 0 0-36.096 16.64c-7.765333 20.992-25.685333 34.517333-45.226667 34.517333-26.496 0-49.066667-24.832-49.066667-56.661333v-12.245334a103.936 103.936 0 0 0 49.066667 12.245334c58.112 0 105.216-47.530667 105.216-106.154667 0-58.666667-47.104-106.197333-105.173333-106.197333-58.112 0-105.216 47.530667-105.216 106.197333l0.085333 4.906667a29.013333 29.013333 0 0 0-0.085333 2.133333v99.114667C416.426667 375.466667 462.933333 426.666667 521.642667 426.666667z m0-169.898667c-27.136 0-49.066667-22.186667-49.066667-49.536 0-27.392 21.930667-49.536 49.066667-49.536 27.093333 0 49.066667 22.186667 49.066666 49.493333 0 27.392-21.973333 49.578667-49.066666 49.578667zM345.984 426.666667c19.370667 0 35.072-15.829333 35.072-35.413334v-247.722666c0-19.541333-15.701333-35.413333-35.072-35.413334H205.738667a35.242667 35.242667 0 0 0-35.072 35.413334c0 19.541333 15.701333 35.413333 35.072 35.413333h105.173333v53.077333H240.810667a35.242667 35.242667 0 0 0-35.072 35.413334c0 19.498667 15.701333 35.370667 35.072 35.370666h70.101333v53.077334H205.738667a35.2 35.2 0 0 0-34.816 31.274666L170.666667 391.253333c0 19.584 15.701333 35.413333 35.072 35.413334h140.245333zM821.461333 426.666667a31.872 31.872 0 0 0 0-63.701334h-95.573333v-29.141333l6.016 1.493333c8.106667 1.834667 16.512 2.986667 25.130667 3.498667l8.704 0.256c61.866667 0 87.594667-45.525333 87.594666-119.466667 0-69.888-37.12-111.488-102.656-111.488-56.32 0-88.448 36.565333-88.448 85.418667a31.872 31.872 0 0 0 63.701334 0c0-15.36 5.546667-21.717333 24.746666-21.717333 28.586667 0 38.954667 11.605333 38.954667 47.786666 0 43.434667-6.997333 55.765333-23.893333 55.765334-13.738667 0-26.88-3.2-38.741334-8.533334a74.837333 74.837333 0 0 1-13.44-7.424 31.872 31.872 0 0 0-51.328 25.173334v110.208c0 17.621333 14.250667 31.872 31.829334 31.872h127.402666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_facial_clue" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333z m184.874667-184.874666a99.541333 99.541333 0 0 1-28.416-194.986667v-253.098667a63.957333 63.957333 0 0 0-127.914667 0V547.498667a120.96 120.96 0 1 1-241.877333 0v-252.970667a99.584 99.584 0 1 1 56.917333 0V547.498667a64.042667 64.042667 0 1 0 128.085333 0v-327.125334a120.832 120.832 0 0 1 241.664 0V473.472a99.584 99.584 0 0 1-28.458666 194.986667z m-369.749334-426.666667a42.666667 42.666667 0 1 0 0-85.333333 42.666667 42.666667 0 0 0 0 85.333333z m369.749334 369.749333a42.666667 42.666667 0 1 0 0-85.333333 42.666667 42.666667 0 0 0 0 85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_jin" unicode="" d="M906.666667 853.333333a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333h-768a85.333333 85.333333 0 0 0-85.333334 85.333333V768a85.333333 85.333333 0 0 0 85.333334 85.333333h768z m0-298.666666h-768v-554.666667h768V554.666667z m-183.04-291.84v-58.026667a2119.253333 2119.253333 0 0 0-131.413334-165.546667l-64.853333 35.84c34.133333 37.546667 68.266667 78.506667 100.693333 124.586667H365.226667v63.146667h358.4z m-186.026667 116.053333c27.306667-29.013333 49.493333-54.613333 69.973333-78.506667l-58.026666-37.546666c-29.013333 35.84-49.493333 63.146667-64.853334 80.213333l52.906667 35.84z m71.68 121.173333v-1.706666l-15.36-15.36c47.786667-63.146667 112.64-112.64 194.56-145.066667-15.36-18.773333-29.013333-35.84-44.373333-56.32-83.626667 39.253333-146.773333 90.453333-192.853334 153.6-49.493333-63.146667-116.053333-116.053333-201.386666-158.72-17.066667 27.306667-32.426667 44.373333-44.373334 58.026667 83.626667 35.84 155.306667 92.16 209.92 165.546666h93.866667zM906.666667 768h-768v-128h768V768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_facial_deal_win" unicode="" d="M496.512 853.333333c173.952 0 320-67.413333 320-170.666666 0-41.728-23.850667-77.568-63.701333-105.514667 73.941333-97.706667 134.528-220.330667 183.466666-357.973333C990.592 66.346667 872.874667-85.333333 708.437333-85.333333H283.605333c-164.096 0-281.685333 151.125333-227.626666 303.616C104.746667 355.84 165.546667 478.72 240.170667 577.237333 200.362667 605.098667 176.512 640.938667 176.512 682.666667c0 103.253333 146.048 170.666667 320 170.666666z m-97.834667-396.501333a42.666667 42.666667 0 0 1-60.330666-60.330667L393.472 341.333333h-24.96a42.666667 42.666667 0 0 1 0-85.333333h85.504v-42.666667H368.512a42.666667 42.666667 0 0 1 0-85.333333h85.504v-42.666667a42.666667 42.666667 0 0 1 85.333333 0v42.666667h85.162667a42.666667 42.666667 0 1 1 0 85.333333h-85.162667v42.666667h85.162667a42.666667 42.666667 0 1 1 0 85.333333h-25.002667l55.168 55.168a42.666667 42.666667 0 0 1 0 60.330667l-4.010666 3.541333a42.666667 42.666667 0 0 1-56.32-3.541333l-97.877334-97.792zM496.512 768c-132.394667 0-234.666667-47.232-234.666667-85.333333 0-20.565333 29.824-43.818667 78.08-60.842667 4.053333-1.322667 8.149333-2.56 12.373334-3.797333 31.36-8.96 65.493333-14.848 99.669333-18.090667 14.506667-1.408 26.624-2.133333 35.498667-2.432l4.906666-0.128 4.266667-0.042667 5.077333 0.042667c9.002667 0.213333 22.698667 0.938667 39.68 2.56 34.133333 3.285333 68.181333 9.130667 99.498667 18.133333l10.922667 3.328c49.024 17.066667 79.36 40.533333 79.36 61.269334 0 38.101333-102.272 85.333333-234.666667 85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_facial_business" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333zM414.165333 606.165333a42.666667 42.666667 0 0 1-60.330666-60.330666L430.293333 469.333333H384a42.666667 42.666667 0 0 1 0-85.333333h85.504v-42.666667H384a42.666667 42.666667 0 0 1 0-85.333333h85.504v-85.333333a42.666667 42.666667 0 0 1 85.333333 0v85.333333H640a42.666667 42.666667 0 0 1 0 85.333333h-85.162667v42.666667H640a42.666667 42.666667 0 0 1 0 85.333333h-46.336l76.501333 76.501334a42.666667 42.666667 0 0 1 0 60.330666l-4.010666 3.541334a42.666667 42.666667 0 0 1-56.32-3.541334l-97.877334-97.792z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_30" unicode="" d="M906.666667 853.333333a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333h-768a85.333333 85.333333 0 0 0-85.333334 85.333333V768a85.333333 85.333333 0 0 0 85.333334 85.333333h768z m0-298.666666h-768v-554.666667h768V554.666667zM768 469.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-298.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666667v298.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h170.666667z m-341.333333 0a42.666667 42.666667 0 0 0 42.666666-42.666666v-298.666667a42.666667 42.666667 0 0 0-42.666666-42.666667H256a42.666667 42.666667 0 0 0 0 85.333334h128v64H298.666667a42.666667 42.666667 0 0 0 0 85.333333h85.333333V384H256a42.666667 42.666667 0 0 0-42.368 37.674667L213.333333 426.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h170.666667z m298.666666-85.333333h-85.333333v-213.333333h85.333333v213.333333z m181.333334 384h-768v-128h768V768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_7" unicode="" d="M906.666667 853.333333a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333h-768a85.333333 85.333333 0 0 0-85.333334 85.333333V768a85.333333 85.333333 0 0 0 85.333334 85.333333h768z m0-298.666666h-768v-554.666667h768V554.666667zM640 512a42.666667 42.666667 0 0 0 39.04-59.989333l-170.837333-384a42.666667 42.666667 0 1 0-77.952 34.645333L574.378667 426.666667H426.666667a42.666667 42.666667 0 0 0-42.368 37.674666L384 469.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h213.333333z m266.666667 256h-768v-128h768V768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_data_person" unicode="" d="M477.44 341.290667c107.093333-0.426667 136.106667-3.84 174.08-23.210667a213.333333 213.333333 0 0 0 93.226667-93.226667c20.778667-40.746667 23.253333-71.210667 23.253333-199.253333v-25.6a42.666667 42.666667 0 0 0-42.666667-42.666667H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667l0.042666 50.773333c0.426667 107.093333 3.84 136.106667 23.210667 174.08a213.333333 213.333333 0 0 0 93.226667 93.226667c37.973333 19.328 66.986667 22.826667 174.08 23.210667h144.213333z m-2.688-85.333334H335.914667c-92.16-0.298667-116.522667-2.986667-138.026667-13.909333a128 128 0 0 1-55.936-55.936c-10.965333-21.504-13.610667-45.866667-13.909333-138.026667L128 42.666667h554.624v5.418666c-0.298667 88.618667-2.773333 114.56-12.672 135.509334l-1.237333 2.517333a128 128 0 0 1-55.936 55.936c-21.504 10.965333-45.866667 13.610667-138.026667 13.909333zM810.666667 661.333333a42.666667 42.666667 0 0 0 42.666666-42.666666v-85.333334h85.333334a42.666667 42.666667 0 0 0 42.368-37.674666L981.333333 490.666667a42.666667 42.666667 0 0 0-42.666666-42.666667h-85.333334v-85.333333a42.666667 42.666667 0 0 0-37.674666-42.368L810.666667 320a42.666667 42.666667 0 0 0-42.666667 42.666667v85.333333h-85.333333a42.666667 42.666667 0 0 0-42.368 37.674667L640 490.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h85.333333v85.333334a42.666667 42.666667 0 0 0 37.674667 42.368L810.666667 661.333333zM405.333333 810.666667a192 192 0 1 0 0-384 192 192 0 0 0 0 384z m0-85.333334a106.666667 106.666667 0 1 1 0-213.333333 106.666667 106.666667 0 0 1 0 213.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_data_plan" unicode="" d="M704 853.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-21.333334H896a85.333333 85.333333 0 0 0 85.333333-85.333333V42.666667a85.333333 85.333333 0 0 0-85.333333-85.333334H170.666667a85.333333 85.333333 0 0 0-85.333334 85.333334V704a85.333333 85.333333 0 0 0 85.333334 85.333333h149.333333V810.666667a42.666667 42.666667 0 1 0 85.333333 0v-21.333334h256V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666z m192-384H170.666667v-426.666666h725.333333V469.333333z m-119.168-55.168a42.666667 42.666667 0 0 0 0-60.330666l-256-256a42.666667 42.666667 0 0 0-60.330667 0l-128 128a42.666667 42.666667 0 0 0 60.330667 60.330666l97.834667-97.792 225.834666 225.792a42.666667 42.666667 0 0 0 60.330667 0zM320 704H170.666667V554.666667h725.333333V704h-149.333333V640a42.666667 42.666667 0 0 0-85.333334 0V704h-256V640a42.666667 42.666667 0 1 0-85.333333 0V704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_data_record" unicode="" d="M170.666667-96a85.333333 85.333333 0 0 0-85.333334 85.333333v768a85.333333 85.333333 0 0 0 85.333334 85.333334h682.666666a85.333333 85.333333 0 0 0 85.333334-85.333334v-768a85.333333 85.333333 0 0 0-85.333334-85.333333H170.666667z m85.333333 853.333333H170.666667v-768h85.333333v768z m597.333333 0H341.333333v-768h512v768z m-213.333333-256a42.666667 42.666667 0 0 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667z m0 170.666667a42.666667 42.666667 0 0 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_folder_collapse" unicode="" d="M85.333333 690.432C85.333333 733.269333 121.728 768 166.613333 768h243.797334c12.032 0 23.509333-5.12 31.232-13.952l89.344-102.4h326.4c44.885333 0 81.28-34.730667 81.28-77.568v-504.277333c0-42.837333-36.394667-77.568-81.28-77.568H166.613333C121.728-7.765333 85.333333 26.965333 85.333333 69.802667V690.432z m306.048 0H166.613333v-620.629333h690.773334V574.08H512a41.514667 41.514667 0 0 0-31.232 13.952l-89.386667 102.4z m173.141334-244.096a42.069333 42.069333 0 0 0 57.472 0l101.632-96.981333a37.546667 37.546667 0 0 0 0-54.826667l-101.632-96.981333a42.069333 42.069333 0 0 0-57.472 0 37.546667 37.546667 0 0 0 0 54.826666l72.874666 69.546667-72.874666 69.546667a37.546667 37.546667 0 0 0 0 54.869333z m-105.045334-54.869333a37.546667 37.546667 0 0 1 0 54.869333 42.026667 42.026667 0 0 1-57.472 0L300.373333 349.354667a37.546667 37.546667 0 0 1 0-54.826667l101.632-96.981333a42.069333 42.069333 0 0 1 57.472 0 37.546667 37.546667 0 0 1 0 54.826666l-72.874666 69.546667 72.874666 69.546667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_folder_expansion" unicode="" d="M409.898667 768c11.52 0 22.485333-5.12 29.866666-13.952l90.368-108.501333h328.96c41.898667 0 76.330667-32.512 79.36-73.685334l0.213334-5.973333v-183.722667a38.826667 38.826667 0 1 0-77.568 0V565.888a2.048 2.048 0 0 1-2.048 2.048H512a38.826667 38.826667 0 0 0-29.781333 13.952l-90.453334 108.544H164.949333a2.005333 2.005333 0 0 1-1.749333-1.024l-0.298667-1.024v-610.602667c0-1.152 0.938667-2.048 2.048-2.048h306.218667a38.826667 38.826667 0 1 0 0-77.568H164.949333A79.616 79.616 0 0 0 85.333333 77.781333V688.341333C85.333333 732.416 120.96 768 164.949333 768h244.949334z m517.418666-540.330667a38.826667 38.826667 0 0 0 0-54.826666l-102.058666-102.101334a38.826667 38.826667 0 0 0-54.912 54.912l74.666666 74.666667-74.666666 74.624a38.826667 38.826667 0 0 0-3.2 51.2l3.2 3.626667a38.826667 38.826667 0 0 0 54.912 0l102.058666-102.101334z m-265.386666 47.274667l-74.666667-74.666667 74.666667-74.666666a38.826667 38.826667 0 0 0 3.2-51.2l-3.2-3.669334a38.826667 38.826667 0 0 0-54.869334 0l-102.101333 102.101334a38.826667 38.826667 0 0 0 0 54.826666l102.101333 102.101334a38.826667 38.826667 0 0 0 54.869334-54.826667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_dashboard1" unicode="" d="M512 810.666667c259.2 0 469.333333-210.133333 469.333333-469.333334 0-126.122667-50.048-244.48-137.472-331.861333a42.666667 42.666667 0 0 0-60.330666 60.330667 383.018667 383.018667 0 0 1 97.194666 163.925333 12.8 12.8 0 0 0-2.005333 0.341333l-79.189333 18.304a42.666667 42.666667 0 1 0 19.2 83.114667l76.544-17.664a382.208 382.208 0 0 1-67.2 241.578667l-50.773334-41.130667a42.666667 42.666667 0 0 0-53.674666 66.304l48.469333 39.253333A382.592 382.592 0 0 1 554.666667 722.986667L554.666667 666.410667a42.666667 42.666667 0 0 0-85.333334 0V722.986667a382.592 382.592 0 0 1-217.429333-99.157334l48.469333-39.253333a42.666667 42.666667 0 0 0-53.674666-66.304l-50.773334 41.130667a382.208 382.208 0 0 1-67.2-241.578667l76.544 17.664a42.666667 42.666667 0 0 0 19.2-83.114667l-79.189333-18.304-2.005333-0.341333a383.018667 383.018667 0 0 1 97.194666-163.925333 42.666667 42.666667 0 1 0-60.330666-60.330667A467.925333 467.925333 0 0 0 42.666667 341.333333C42.666667 600.533333 252.8 810.666667 512 810.666667z m168.149333-377.514667a2504.533333 2504.533333 0 0 0-43.392-113.066667c-4.864-11.733333-9.642667-22.912-14.208-33.28-18.986667-42.922667-34.048-71.04-48.682666-86.229333a123.946667 123.946667 0 0 0-178.346667 172.16c15.061333 15.573333 43.776 32.128 87.893333 53.333333 9.386667 4.48 19.328 9.130667 29.781334 13.866667a2508.672 2508.672 0 0 0 111.104 47.189333 42.666667 42.666667 0 0 0 55.893333-53.973333z m-115.498666-63.573333l-16.170667-7.338667c-9.898667-4.48-19.328-8.874667-28.117333-13.098667-34.048-16.384-58.282667-30.293333-63.445334-35.669333a38.613333 38.613333 0 1 1 55.552-53.632c4.949333 5.12 17.493333 28.501333 32 61.44 4.309333 9.728 8.789333 20.266667 13.397334 31.445333l6.826666 16.810667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_export" unicode="" d="M810.666667 853.333333a85.333333 85.333333 0 0 0 85.333333-85.333333v-384a42.666667 42.666667 0 0 0-85.333333 0V768H213.333333v-768h298.666667a42.666667 42.666667 0 0 0 0-85.333333H213.333333a85.333333 85.333333 0 0 0-85.333333 85.333333V768a85.333333 85.333333 0 0 0 85.333333 85.333333h597.333334z m30.165333-620.501333l96-96a42.666667 42.666667 0 0 0 0-60.330667l-96-96a42.666667 42.666667 0 0 0-60.330667 60.330667l23.082667 23.168H608a42.666667 42.666667 0 0 0 0 85.333333h195.626667l-23.125334 23.168a42.666667 42.666667 0 0 0-3.541333 56.32l3.541333 4.010667a42.666667 42.666667 0 0 0 60.330667 0zM512 426.666667a42.666667 42.666667 0 0 0 0-85.333334H341.333333a42.666667 42.666667 0 0 0 0 85.333334h170.666667z m170.666667 170.666666a42.666667 42.666667 0 0 0 0-85.333333H341.333333a42.666667 42.666667 0 1 0 0 85.333333h341.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_phone_outgoing" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333zM349.781333 662.954667H266.368c-64.938667 0-111.530667-61.482667-90.752-123.093334 41.557333-123.178667 97.450667-232.277333 170.24-305.066666 72.832-72.832 181.930667-128.682667 305.066667-170.24 61.653333-20.821333 123.136 25.770667 123.136 90.709333v83.413333c0 23.893333-12.970667 45.909333-33.834667 57.514667l-72.661333 40.362667-5.248 2.645333a65.749333 65.749333 0 0 1-56.106667-1.28l-66.474667-33.194667-1.578666 0.469334a202.410667 202.410667 0 0 0-57.173334 29.568 175.104 175.104 0 0 0-35.328 35.370666 198.314667 198.314667 0 0 0-26.453333 48.384l-1.664 4.608a191.658667 191.658667 0 0 0-1.408 4.181334l-0.512 1.664 33.194667 66.346666a65.792 65.792 0 0 1-1.28 61.312l-40.234667 72.490667a65.749333 65.749333 0 0 1-57.514667 33.834667z m0-65.749334l40.234667-72.490666-38.784-77.482667a32.853333 32.853333 0 0 1-2.858667-20.992c4.864-24.96 18.218667-60.16 44.629334-95.488a241.28 241.28 0 0 1 48.512-48.64c35.413333-26.538667 70.698667-39.850667 95.701333-44.629333a32.853333 32.853333 0 0 1 20.906667 2.858666l77.482666 38.741334 72.661334-40.405334v-83.413333c0-20.778667-18.133333-34.56-36.266667-28.416-114.389333 38.613333-215.594667 90.453333-279.594667 154.453333s-115.882667 165.205333-154.453333 279.552c-6.144 18.176 7.637333 36.352 28.416 36.352h83.413333z m362.368 118.485334a32.853333 32.853333 0 0 1-46.506666 0l-2.773334-3.072a32.853333 32.853333 0 0 1 2.773334-43.434667l75.52-75.52h-183.808a32.853333 32.853333 0 1 1 0-65.749333h183.466666l-75.178666-75.264a32.853333 32.853333 0 1 1 46.506666-46.506667l130.56 130.432a32.298667 32.298667 0 0 1 8.448 12.714667l0.426667 0.853333a25.173333 25.173333 0 0 1 0.853333 3.242667l0.384 1.706666a33.109333 33.109333 0 0 1 0.469334 5.674667l-0.085334-2.218667-0.085333-0.64 0.170667 2.858667V561.92a28.416 28.416 0 0 1-0.256 2.944l-0.085334 0.938667a25.898667 25.898667 0 0 1-0.725333 3.285333l-0.256 1.194667a22.528 22.528 0 0 1-1.152 3.114666 32.810667 32.810667 0 0 1-7.125333 10.794667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_that_person" unicode="" d="M512 810.666667c259.2 0 469.333333-210.133333 469.333333-469.333334a468.053333 468.053333 0 0 0-132.352-326.656C798.165333 122.794667 714.282667 234.666667 640 234.666667H384c-74.325333 0-158.208-111.786667-209.066667-219.946667C93.098667 99.2 42.666667 214.4 42.666667 341.333333 42.666667 600.533333 252.8 810.666667 512 810.666667z m0-170.666667a170.666667 170.666667 0 1 1 0-341.333333 170.666667 170.666667 0 0 1 0 341.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file1" unicode="" d="M431.488 768c12.117333 0 23.552-5.376 31.317333-14.634667l89.6-107.52h255.829334a81.493333 81.493333 0 0 0 81.194666-75.392l0.256-6.101333V482.986667h50.901334a40.746667 40.746667 0 0 0 39.936-48.725334l-81.493334-407.253333a40.746667 40.746667 0 0 0-39.893333-32.768H127.829333c-1.92-0.042667-3.84 0-5.76 0.213333l3.968-0.213333a41.386667 41.386667 0 0 0-10.154666 1.28 38.954667 38.954667 0 0 0-30.293334 34.474667L85.333333 34.944V686.506667C85.333333 731.52 121.813333 768 166.784 768h264.704z m-19.072-81.450667H166.784v-308.181333l17.664 73.386667a40.746667 40.746667 0 0 0 39.594667 31.146666h584.192v81.493334H533.333333a40.746667 40.746667 0 0 0-31.317333 14.634666l-89.6 107.52z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_enterprise" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333z m57.6-128a42.666667 42.666667 0 0 1-67.456 34.730667l-209.066667-149.333333a42.666667 42.666667 0 0 1-17.877333-34.730667L275.157333 170.666667H213.333333a42.666667 42.666667 0 0 1 0-85.333334h597.333334a42.666667 42.666667 0 0 1 0 85.333334h-32v270.933333a42.666667 42.666667 0 0 1-17.877334 34.730667l-191.232 136.533333z m-85.376-82.901333V170.666667H360.533333V554.069333l123.690667 88.362667z m85.376-134.4l123.733333-88.362667V170.666667h-123.733333V508.032z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_send_colorful" unicode="" d="M512 332.373333v-267.349333l146.773333-132.266667a43.477333 43.477333 0 0 1 72.661334 19.541334l220.373333 780.544c6.058667 21.376-20.522667 36.608-35.925333 20.565333L512 332.373333zM881.706667 788.181333c16.213333 15.573333 0.426667 42.410667-21.034667 35.797334L81.92 583.424a43.434667 43.434667 0 0 1-19.712-72.704l133.888-146.645333h243.413333l442.154667 424.106666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_edit1" unicode="" d="M904.448 579.2L696.96 786.752 742.144 832l207.552-207.552-45.248-45.248zM382.208 56.96l-231.232-46.272a19.2 19.2 0 0 0-22.592 22.592l46.272 231.232 467.008 467.008 207.616-207.552-467.072-467.072z m376.512 467.008l-117.056 117.056L233.6 232.96l-29.312-146.368 146.368 29.248 408.064 408.128zM960 192h-256v-64h256v64zM960 64H544v-64H960v64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_my" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333 0-127.573333-50.858667-243.2-133.461333-327.808l-5.546667-5.546667A467.882667 467.882667 0 0 0 512-85.333333c-125.184 0-238.933333 48.981333-323.029333 128.853333a43.562667 43.562667 0 0 0-9.045334 8.789333A467.968 467.968 0 0 0 42.666667 384C42.666667 643.2 252.8 853.333333 512 853.333333z m85.333333-618.666666h-170.666666a170.752 170.752 0 0 1-167.808-139.392A382.506667 382.506667 0 0 1 512 0c96.981333 0 185.6 35.968 253.141333 95.232A170.752 170.752 0 0 1 597.333333 234.666667zM512 768a384 384 0 0 1-318.592-598.442667A256 256 0 0 0 426.666667 320h170.666666a256.170667 256.170667 0 0 0 233.301334-150.4A384 384 0 0 1 512 768z m0-106.666667a149.333333 149.333333 0 1 0 0-298.666666 149.333333 149.333333 0 0 0 0 298.666666z m0-85.333333a64 64 0 1 1 0-128 64 64 0 0 1 0 128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_general" unicode="" d="M512-85.333333C252.8-85.333333 42.666667 124.8 42.666667 384S252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333-210.133333-469.333333-469.333333-469.333333z m0 213.333333l256 242.517333h-161.706667V613.034667H417.706667v-242.517334H256L512 128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_serious" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333z m0-213.333333l-256-242.517333h161.706667v-242.517334h188.586666v242.517334H768L512 640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_succeed_filled" unicode="" d="M42.666667 384c0-259.2 210.133333-469.333333 469.333333-469.333333s469.333333 210.133333 469.333333 469.333333S771.2 853.333333 512 853.333333 42.666667 643.2 42.666667 384z m646.101333 128.981333a21.333333 21.333333 0 0 0 30.165333 0l30.165334-30.165333a21.333333 21.333333 0 0 0 0-30.165333l-271.488-271.530667a21.333333 21.333333 0 0 0-30.208 0l-156.16 156.16a21.333333 21.333333 0 0 0 0 30.208l30.165333 30.165333a21.333333 21.333333 0 0 0 30.165333 0l110.933334-110.933333 226.261333 226.261333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_block_filled" unicode="" d="M981.333333 384c0-259.2-210.133333-469.333333-469.333333-469.333333S42.666667 124.79999999999995 42.666667 384 252.8 853.333333 512 853.333333s469.333333-210.133333 469.333333-469.333333zM320 426.666667a21.333333 21.333333 0 0 1-21.333333-21.333334v-42.666666a21.333333 21.333333 0 0 1 21.333333-21.333334h384a21.333333 21.333333 0 0 1 21.333333 21.333334v42.666666a21.333333 21.333333 0 0 1-21.333333 21.333334h-384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_testing" unicode="" d="M520.533333-85.333333c-259.242667 0-469.333333 210.090667-469.333333 469.333333s210.090667 469.333333 469.333333 469.333333 469.333333-210.090667 469.333334-469.333333-210.090667-469.333333-469.333334-469.333333z m216.533334 675.072A298.666667 298.666667 0 0 1 222.378667 401.066667c-0.554667-9.386667 7.125333-17.066667 16.554666-17.066667h51.2c9.429333 0 17.024 7.68 17.749334 17.066667a213.333333 213.333333 0 0 0 390.826666 100.352l-65.066666-5.461334a17.066667 17.066667 0 0 1-15.573334-18.474666l4.309334-50.986667a17.066667 17.066667 0 0 1 18.432-15.573333l178.56 15.061333a17.066667 17.066667 0 0 1 15.573333 18.432l-15.061333 178.56a17.066667 17.066667 0 0 1-18.432 15.573333l-51.029334-4.266666a17.066667 17.066667 0 0 1-15.573333-18.474667l2.218667-26.069333z m-417.237334-411.477334A298.666667 298.666667 0 0 1 834.56 366.933333a16.341333 16.341333 0 0 1-16.554667 17.066667h-51.2c-9.429333 0-17.024-7.68-17.749333-17.066667a213.333333 213.333333 0 0 0-390.826667-100.352l65.066667 5.461334a17.066667 17.066667 0 0 1 15.573333 18.474666l-4.309333 50.986667a17.066667 17.066667 0 0 1-18.474667 15.573333l-178.56-15.061333a17.066667 17.066667 0 0 1-15.573333-18.432l15.104-178.56a17.066667 17.066667 0 0 1 18.432-15.573333l51.029333 4.266666a17.066667 17.066667 0 0 1 15.573334 18.474667l-2.218667 26.069333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_off_screen" unicode="" d="M347.733333 806.4a46.933333 46.933333 0 0 1-93.866666 0v-164.266667H89.6a46.933333 46.933333 0 0 1 0-93.866666h211.2a46.933333 46.933333 0 0 1 46.933333 46.933333V806.4z m422.4 0a46.933333 46.933333 0 1 1-93.866666 0v-211.2a46.933333 46.933333 0 0 1 46.933333-46.933333h211.2a46.933333 46.933333 0 1 1 0 93.866666h-164.266667V806.4zM42.666667 172.8a46.933333 46.933333 0 0 0 46.933333 46.933333h211.2a46.933333 46.933333 0 0 0 46.933333-46.933333v-211.2a46.933333 46.933333 0 1 0-93.866666 0v164.266667H89.6a46.933333 46.933333 0 0 0-46.933333 46.933333z m680.533333 46.933333a46.933333 46.933333 0 0 1-46.933333-46.933333v-211.2a46.933333 46.933333 0 1 1 93.866666 0v164.266667h161.92a46.933333 46.933333 0 0 1 0 93.866666H723.2z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_full_screen_one" unicode="" d="M704 810.666667H896a42.666667 42.666667 0 0 0 42.666667-42.666667v-192a42.666667 42.666667 0 1 0-85.333334 0V667.136l-140.501333-140.501333a42.666667 42.666667 0 1 0-60.330667 60.330666L790.826667 725.333333H704a42.666667 42.666667 0 1 0 0 85.333334zM170.666667 682.666667v-106.666667a42.666667 42.666667 0 0 0-85.333334 0V768a42.666667 42.666667 0 0 0 42.666667 42.666667h192a42.666667 42.666667 0 0 0 0-85.333334H246.912l124.416-138.24a42.666667 42.666667 0 1 0-60.032-60.586666L170.666667 682.666667z m200.661333-499.626667a42.666667 42.666667 0 0 1-60.032 60.586667L170.666667 104.448V192a42.666667 42.666667 0 1 1-85.333334 0V0a42.666667 42.666667 0 0 1 42.666667-42.666667h192a42.666667 42.666667 0 1 1 0 85.333334H229.546667l141.781333 140.373333z m283.306667 60.458667a42.666667 42.666667 0 0 0 60.373333 0L853.333333 105.173333V192a42.666667 42.666667 0 1 0 85.333334 0V0a42.666667 42.666667 0 0 0-42.666667-42.666667h-192a42.666667 42.666667 0 1 0 0 85.333334h91.136l-140.501333 140.501333a42.666667 42.666667 0 0 0 0 60.330667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_disable" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333z m0-85.333333a384 384 0 1 1 0-768 384 384 0 0 1 0 768zM320.682667 613.333333l294.314666-509.781333A298.666667 298.666667 0 0 0 320.682667 613.333333zM512 682.666667a298.666667 298.666667 0 0 0 178.048-538.453334L393.301333 658.133333A297.685333 297.685333 0 0 0 512 682.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_file-compressed_colorful_ash" unicode="" d="M648.533333 853.333333a42.666667 42.666667 0 0 0 33.322667-16l170.325333-212.906666 1.792-2.346667 0.213334-0.341333 0.426666-0.554667 0.426667-0.768-0.853333 1.322667-1.664 2.261333 2.730666-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053334-9.941333 41.258667 41.258667 0 0 0 1.109333-5.973333L861.866667 597.333333v-85.333333h42.666666a85.333333 85.333333 0 0 0 85.333334-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333334-85.333333h-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-597.333333a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334h-42.666667a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h426.666666z m128-810.666666h-512v-42.666667h512v42.666667z m128 384h-768v-298.666667h768v298.666667z m-533.333333-21.333334a42.666667 42.666667 0 0 0 34.133333-68.266666l-76.8-102.4h42.666667a42.666667 42.666667 0 0 0 42.368-37.674667l0.298667-4.992a42.666667 42.666667 0 0 0-42.666667-42.666667h-128a42.666667 42.666667 0 0 0-34.133333 68.266667l76.8 102.4h-42.666667a42.666667 42.666667 0 0 0-42.368 37.674667L200.533333 362.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h128z m149.333333 0a42.666667 42.666667 0 0 0 42.666667-42.666666v-170.666667a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666666 42.666666z m224 0a96 96 0 0 0 0-192h-32v-21.333333a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h74.666666z m0-85.333333h-32v-21.333333h32a10.666667 10.666667 0 1 1 0 21.333333zM563.2 768h-298.666667v-256h512V554.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666V768z m85.333333-25.6V640h81.92L648.533333 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_file-compressed_colorful" unicode="" d="M648.533333 853.333333a42.666667 42.666667 0 0 0 33.322667-16l170.325333-212.906666 1.792-2.346667 0.213334-0.341333 0.426666-0.554667 0.426667-0.768-0.853333 1.322667-1.664 2.261333 2.730666-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053334-9.941333 41.258667 41.258667 0 0 0 1.109333-5.973333L861.866667 597.333333v-85.333333h42.666666a85.333333 85.333333 0 0 0 85.333334-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333334-85.333333h-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-597.333333a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334h-42.666667a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h426.666666z m128-810.666666h-512v-42.666667h512v42.666667z m128 384h-768v-298.666667h768v298.666667z m-533.333333-21.333334a42.666667 42.666667 0 0 0 34.133333-68.266666l-76.8-102.4h42.666667a42.666667 42.666667 0 0 0 42.368-37.674667l0.298667-4.992a42.666667 42.666667 0 0 0-42.666667-42.666667h-128a42.666667 42.666667 0 0 0-34.133333 68.266667l76.8 102.4h-42.666667a42.666667 42.666667 0 0 0-42.368 37.674667L200.533333 362.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h128z m149.333333 0a42.666667 42.666667 0 0 0 42.666667-42.666666v-170.666667a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666666 42.666666z m224 0a96 96 0 0 0 0-192h-32v-21.333333a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h74.666666z m0-85.333333h-32v-21.333333h32a10.666667 10.666667 0 1 1 0 21.333333zM563.2 768h-298.666667v-256h512V554.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666V768z m85.333333-25.6V640h81.92L648.533333 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-image_colorful_ash" unicode="" d="M867.541333 853.333333A113.792 113.792 0 0 0 981.333333 739.541333v-711.082666A113.792 113.792 0 0 0 867.541333-85.333333H156.458667A113.792 113.792 0 0 0 42.666667 28.458667V739.541333A113.792 113.792 0 0 0 156.458667 853.333333h711.082666z m-189.781333-574.293333l-208.341333-187.477333a42.666667 42.666667 0 0 0-52.053334-3.882667l-4.266666 3.2-139.946667 119.978667L128 101.930667v-73.472c0-15.744 12.714667-28.458667 28.458667-28.458667h711.082666a28.458667 28.458667 0 0 1 28.458667 28.458667V80.64l-218.24 198.4zM867.541333 768H156.458667A28.458667 28.458667 0 0 1 128 739.541333V208.64l121.344 91.008a42.666667 42.666667 0 0 0 53.376-1.706667l137.472-117.802666 209.194667 188.202666a42.666667 42.666667 0 0 0 57.258666-0.128L896 196.010667V739.584A28.458667 28.458667 0 0 1 867.541333 768zM369.792 687.402667a161.194667 161.194667 0 1 0 0-322.346667 161.194667 161.194667 0 0 0 0 322.346667z m0-85.333334a75.861333 75.861333 0 1 1 0-151.68 75.861333 75.861333 0 0 1 0 151.68z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-ppt_colorful_ash" unicode="" d="M576 810.666667v-21.333334H810.666667a42.666667 42.666667 0 0 0 42.666666-42.666666V640h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-341.333334a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-106.666667a42.666667 42.666667 0 0 0-42.666666-42.666666h-234.666667v-21.333334a42.666667 42.666667 0 0 0-57.088-40.192l-320 114.773334A42.666667 42.666667 0 0 0 170.666667 72.106667V128H128a85.333333 85.333333 0 0 0-85.333333 85.333333V554.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V695.850667a42.666667 42.666667 0 0 0 28.245333 40.106666l320 114.816A42.666667 42.666667 0 0 0 576 810.666667z m-85.333333-682.666667H256v-25.898667l234.666667-84.138666V128z m277.333333 0h-192v-64H768V128z m128 426.666667H128v-341.333334h768V554.666667z m-618.666667-21.333334a106.666667 106.666667 0 1 0 0-213.333333H256v-42.666667a42.666667 42.666667 0 1 0-85.333333 0v213.333334a42.666667 42.666667 0 0 0 42.666666 42.666666h64z m234.666667 0a106.666667 106.666667 0 1 0 0-213.333333h-21.333333v-42.666667a42.666667 42.666667 0 1 0-85.333334 0v213.333334a42.666667 42.666667 0 0 0 42.666667 42.666666H512z m298.666667-21.333333a42.666667 42.666667 0 1 0 0-85.333333h-21.333334v-128a42.666667 42.666667 0 1 0-85.333333 0v128H682.666667a42.666667 42.666667 0 1 0 0 85.333333h128zM277.333333 448H256v-42.666667h21.333333a21.333333 21.333333 0 1 1 0 42.666667z m234.666667 0h-21.333333v-42.666667h21.333333a21.333333 21.333333 0 1 1 0 42.666667z m-21.333333 301.994667L256 665.856V640h234.666667V749.994667zM768 704L576 704V640H768V704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-pdf_colorful_ash" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-405.333333-21.333334a128 128 0 0 0 0-256h-42.666667a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h42.666667z m-202.666667 0a96 96 0 0 0 0-192H256v-21.333333a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h74.666667z m501.333333 0a42.666667 42.666667 0 1 0 0-85.333333H725.333333v-21.333333h64a42.666667 42.666667 0 1 0 0-85.333334H725.333333v-21.333333a42.666667 42.666667 0 0 0-37.674666-42.368L682.666667 149.333333a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h106.666666z m-298.666666-85.333333v-85.333333a42.666667 42.666667 0 1 1 0 85.333333z m-202.666667 0H256v-21.333333h32a10.666667 10.666667 0 1 1 0 21.333333zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_file-compressed_colorful1" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-533.333333-21.333334a42.666667 42.666667 0 0 0 34.133333-68.266666l-76.8-102.4h42.666667a42.666667 42.666667 0 0 0 42.368-37.674667l0.298666-4.992a42.666667 42.666667 0 0 0-42.666666-42.666667h-128a42.666667 42.666667 0 0 0-34.133334 68.266667l76.8 102.4h-42.666666a42.666667 42.666667 0 0 0-42.368 37.674667L192 362.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h128z m149.333333 0a42.666667 42.666667 0 0 0 42.666667-42.666666v-170.666667a42.666667 42.666667 0 1 0-85.333334 0v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666z m224 0a96 96 0 0 0 0-192h-32v-21.333333a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h74.666667z m0-85.333333h-32v-21.333333h32a10.666667 10.666667 0 1 1 0 21.333333zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-image_colorful" unicode="" d="M867.541333 853.333333A113.792 113.792 0 0 0 981.333333 739.541333v-711.082666A113.792 113.792 0 0 0 867.541333-85.333333H156.458667A113.792 113.792 0 0 0 42.666667 28.458667V739.541333A113.792 113.792 0 0 0 156.458667 853.333333h711.082666z m-189.781333-574.293333l-208.341333-187.477333a42.666667 42.666667 0 0 0-52.053334-3.882667l-4.266666 3.2-139.946667 119.978667L128 101.930667v-73.472c0-15.744 12.714667-28.458667 28.458667-28.458667h711.082666a28.458667 28.458667 0 0 1 28.458667 28.458667V80.64l-218.24 198.4zM867.541333 768H156.458667A28.458667 28.458667 0 0 1 128 739.541333V208.64l121.344 91.008a42.666667 42.666667 0 0 0 53.376-1.706667l137.472-117.802666 209.194667 188.202666a42.666667 42.666667 0 0 0 57.258666-0.128L896 196.010667V739.584A28.458667 28.458667 0 0 1 867.541333 768zM369.792 687.402667a161.194667 161.194667 0 1 0 0-322.346667 161.194667 161.194667 0 0 0 0 322.346667z m0-85.333334a75.861333 75.861333 0 1 1 0-151.68 75.861333 75.861333 0 0 1 0 151.68z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-word_colorful_ash" unicode="" d="M256 0h640V768H256v-128h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-384a42.666667 42.666667 0 0 0-42.666667-42.666666H256v-170.666667z m554.666667 256a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM135.04 554.666667h-10.581333a30.208 30.208 0 0 1-29.226667-37.845334l61.653333-235.349333a34.133333 34.133333 0 0 1 33.024-25.472h18.773334a34.133333 34.133333 0 0 1 33.28 26.453333l35.157333 153.258667 36.48-153.472a34.133333 34.133333 0 0 1 33.194667-26.24h18.517333a34.133333 34.133333 0 0 1 33.024 25.557333l61.226667 235.52a30.08 30.08 0 0 1-29.013334 37.589334h-10.325333a34.133333 34.133333 0 0 1-33.578667-28.074667l-28.885333-160.085333-38.272 161.877333A34.133333 34.133333 0 0 1 286.250667 554.666667h-18.602667a34.133333 34.133333 0 0 1-33.28-26.538667l-36.864-161.621333-28.885333 160.085333A34.133333 34.133333 0 0 1 135.04 554.666667zM810.666667 426.666667a42.666667 42.666667 0 1 0 0-85.333334h-170.666667a42.666667 42.666667 0 1 0 0 85.333334h170.666667z m0 170.666666a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM85.333333 170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V597.333333a42.666667 42.666667 0 0 0 42.666666 42.666667h85.333334V768a85.333333 85.333333 0 0 0 85.333333 85.333333h640a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333H256a85.333333 85.333333 0 0 0-85.333333 85.333333v170.666667H85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-sketch_colorful" unicode="" d="M874.666667 853.333333A106.666667 106.666667 0 0 0 981.333333 746.666667v-725.333334a106.666667 106.666667 0 0 0-106.666666-106.666666h-725.333334A106.666667 106.666667 0 0 0 42.666667 21.333333v725.333334A106.666667 106.666667 0 0 0 149.333333 853.333333h725.333334z m0-85.333333h-725.333334a21.333333 21.333333 0 0 1-21.333333-21.333333v-725.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h725.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v725.333334a21.333333 21.333333 0 0 1-21.333333 21.333333zM640 616.277333a42.666667 42.666667 0 0 0 33.877333-16.725333l85.333334-111.530667a42.666667 42.666667 0 0 0-0.512-52.522666l-213.333334-267.733334a42.666667 42.666667 0 0 0-66.730666 0l-213.333334 267.733334a42.666667 42.666667 0 0 0-0.512 52.48l85.333334 111.573333A42.666667 42.666667 0 0 0 384 616.277333h256z m-21.077333-85.333333H405.034667l-52.266667-68.266667L512 262.826667l159.189333 199.765333-52.266666 68.309333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-ppt_colorful" unicode="" d="M576 810.666667v-21.333334H810.666667a42.666667 42.666667 0 0 0 42.666666-42.666666V640h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-341.333334a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-106.666667a42.666667 42.666667 0 0 0-42.666666-42.666666h-234.666667v-21.333334a42.666667 42.666667 0 0 0-57.088-40.192l-320 114.773334A42.666667 42.666667 0 0 0 170.666667 72.106667V128H128a85.333333 85.333333 0 0 0-85.333333 85.333333V554.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V695.850667a42.666667 42.666667 0 0 0 28.245333 40.106666l320 114.816A42.666667 42.666667 0 0 0 576 810.666667z m-85.333333-682.666667H256v-25.898667l234.666667-84.138666V128z m277.333333 0h-192v-64H768V128z m128 426.666667H128v-341.333334h768V554.666667z m-618.666667-21.333334a106.666667 106.666667 0 1 0 0-213.333333H256v-42.666667a42.666667 42.666667 0 1 0-85.333333 0v213.333334a42.666667 42.666667 0 0 0 42.666666 42.666666h64z m234.666667 0a106.666667 106.666667 0 1 0 0-213.333333h-21.333333v-42.666667a42.666667 42.666667 0 1 0-85.333334 0v213.333334a42.666667 42.666667 0 0 0 42.666667 42.666666H512z m298.666667-21.333333a42.666667 42.666667 0 1 0 0-85.333333h-21.333334v-128a42.666667 42.666667 0 1 0-85.333333 0v128H682.666667a42.666667 42.666667 0 1 0 0 85.333333h128zM277.333333 448H256v-42.666667h21.333333a21.333333 21.333333 0 1 1 0 42.666667z m234.666667 0h-21.333333v-42.666667h21.333333a21.333333 21.333333 0 1 1 0 42.666667z m-21.333333 301.994667L256 665.856V640h234.666667V749.994667zM768 704L576 704V640H768V704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_video_colorful_ash" unicode="" d="M867.541333 853.333333A113.792 113.792 0 0 0 981.333333 739.541333v-711.082666A113.792 113.792 0 0 0 867.541333-85.333333H156.458667A113.792 113.792 0 0 0 42.666667 28.458667V739.541333A113.792 113.792 0 0 0 156.458667 853.333333h711.082666zM896 554.666667H128v-526.208c0-15.744 12.714667-28.458667 28.458667-28.458667h711.082666a28.458667 28.458667 0 0 1 28.458667 28.458667V554.666667zM450.389333 469.845333l124.416-71.850666 124.458667-71.850667a42.666667 42.666667 0 0 0 0-73.898667l-124.458667-71.850666-124.416-71.850667a42.666667 42.666667 0 0 0-64 36.949333v287.402667a42.666667 42.666667 0 0 0 64 36.949333z m21.333334-110.848v-139.562666l60.416 34.858666 60.458666 34.944-60.458666 34.858667-60.416 34.901333zM361.130667 768H156.458667A28.458667 28.458667 0 0 1 128 739.541333V640h147.797333l85.333334 128z m506.453333 0h-119.424l-85.376-128H896V739.541333A28.458667 28.458667 0 0 1 867.541333 768zM645.546667 768h-181.845334l-85.333333-128h181.888l85.290667 128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-excel_colorful" unicode="" d="M256 0h640V768H256v-170.666667h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-384a42.666667 42.666667 0 0 0-42.666667-42.666667H256v-128z m554.666667 256a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM221.184 512H175.274667a27.477333 27.477333 0 0 1-22.997334-42.496l65.877334-100.522667-74.666667-112.64A27.690667 27.690667 0 0 1 166.656 213.333333H213.333333a8.533333 8.533333 0 0 1 7.253334 4.053334l56.618666 91.904 56.362667-91.904a8.533333 8.533333 0 0 1 7.253333-4.053334h47.104a27.904 27.904 0 0 1 23.296 43.264L338.133333 367.36l65.706667 102.314667A27.477333 27.477333 0 0 1 380.714667 512H335.402667a8.533333 8.533333 0 0 1-7.424-4.352L279.04 420.138667 228.565333 507.733333a8.533333 8.533333 0 0 1-7.381333 4.266667zM810.666667 426.666667a42.666667 42.666667 0 1 0 0-85.333334h-170.666667a42.666667 42.666667 0 1 0 0 85.333334h170.666667z m0 170.666666a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM85.333333 128a42.666667 42.666667 0 0 0-42.666666 42.666667V554.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h85.333334V768a85.333333 85.333333 0 0 0 85.333333 85.333333h640a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333H256a85.333333 85.333333 0 0 0-85.333333 85.333333v128H85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-pdf_colorful" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-405.333333-21.333334a128 128 0 0 0 0-256h-42.666667a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h42.666667z m-202.666667 0a96 96 0 0 0 0-192H256v-21.333333a42.666667 42.666667 0 1 0-85.333333 0v170.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h74.666667z m501.333333 0a42.666667 42.666667 0 1 0 0-85.333333H725.333333v-21.333333h64a42.666667 42.666667 0 1 0 0-85.333334H725.333333v-21.333333a42.666667 42.666667 0 0 0-37.674666-42.368L682.666667 149.333333a42.666667 42.666667 0 0 0-42.666667 42.666667v170.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h106.666666z m-298.666666-85.333333v-85.333333a42.666667 42.666667 0 1 1 0 85.333333z m-202.666667 0H256v-21.333333h32a10.666667 10.666667 0 1 1 0 21.333333zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_video_colorful" unicode="" d="M867.541333 853.333333A113.792 113.792 0 0 0 981.333333 739.541333v-711.082666A113.792 113.792 0 0 0 867.541333-85.333333H156.458667A113.792 113.792 0 0 0 42.666667 28.458667V739.541333A113.792 113.792 0 0 0 156.458667 853.333333h711.082666zM896 554.666667H128v-526.208c0-15.744 12.714667-28.458667 28.458667-28.458667h711.082666a28.458667 28.458667 0 0 1 28.458667 28.458667V554.666667zM450.389333 469.845333l124.416-71.850666 124.458667-71.850667a42.666667 42.666667 0 0 0 0-73.898667l-124.458667-71.850666-124.416-71.850667a42.666667 42.666667 0 0 0-64 36.949333v287.402667a42.666667 42.666667 0 0 0 64 36.949333z m21.333334-110.848v-139.562666l60.416 34.858666 60.458666 34.944-60.458666 34.858667-60.416 34.901333zM361.130667 768H156.458667A28.458667 28.458667 0 0 1 128 739.541333V640h147.797333l85.333334 128z m506.453333 0h-119.424l-85.376-128H896V739.541333A28.458667 28.458667 0 0 1 867.541333 768zM645.546667 768h-181.845334l-85.333333-128h181.888l85.290667 128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-CSV_colorful_ash" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-632.192-19.114667c29.312 0 52.394667-5.930667 69.12-17.749333 16.810667-11.861333 29.269333-30.08 37.418667-54.613334l-63.488-14.165333a54.442667 54.442667 0 0 1-6.997334 15.573333 41.344 41.344 0 0 1-14.762666 12.714667 42.410667 42.410667 0 0 1-19.541334 4.437333c-16.298667 0-28.757333-6.570667-37.461333-19.712-6.570667-9.728-9.813333-25.002667-9.813333-45.866666 0-25.813333 3.882667-43.52 11.733333-53.077334 7.808-9.6 18.816-14.378667 33.024-14.378666 13.738667 0 24.149333 3.84 31.146667 11.605333 7.082667 7.68 12.16 18.944 15.36 33.621333l63.018666-19.029333c-4.266667-17.664-10.88-32.426667-20.010666-44.288a86.826667 86.826667 0 0 0-33.877334-26.837333c-13.482667-6.016-30.677333-9.045333-51.541333-9.045334-25.258667 0-45.952 3.669333-61.952 11.008-16.042667 7.381333-29.866667 20.309333-41.514667 38.826667-11.648 18.517333-17.493333 42.24-17.493333 71.125333 0 38.528 10.24 68.138667 30.72 88.832 20.48 20.693333 49.493333 31.018667 86.912 31.018667z m238.762667 0c29.738667 0 52.437333-5.546667 68.053333-16.597333 15.573333-11.050667 24.874667-28.629333 27.861333-52.778667l-67.84-3.968c-1.749333 10.496-5.546667 18.090667-11.306666 22.869333-5.76 4.778667-13.738667 7.168-23.893334 7.168-8.362667 0-14.677333-1.792-18.901333-5.333333a16.298667 16.298667 0 0 1-6.357333-12.928c0-3.712 1.749333-7.04 5.248-10.026667 3.413333-3.072 11.434667-5.930667 24.149333-8.533333 31.402667-6.826667 53.930667-13.653333 67.541333-20.608 13.610667-6.912 23.466667-15.530667 29.696-25.770667 6.186667-10.24 9.258667-21.76 9.258667-34.474666 0-14.933333-4.138667-28.672-12.373333-41.258667a77.525333 77.525333 0 0 0-34.602667-28.672c-14.805333-6.485333-33.493333-9.728-56.021333-9.728-39.594667 0-66.986667 7.594667-82.261334 22.826667-15.232 15.274667-23.893333 34.645333-25.856 58.112l68.394667 4.266666c1.493333-11.093333 4.522667-19.541333 9.045333-25.386666 7.424-9.386667 18.005333-14.08 31.786667-14.08 10.24 0 18.133333 2.389333 23.722667 7.168a21.632 21.632 0 0 1 8.32 16.768 21.333333 21.333333 0 0 1-7.936 16.213333c-5.290667 4.736-17.578667 9.258667-36.821334 13.482667-31.573333 7.082667-54.016 16.512-67.456 28.245333a56.832 56.832 0 0 0-20.352 44.928c0 11.946667 3.498667 23.253333 10.410667 33.877333 6.912 10.666667 17.365333 19.029333 31.274667 25.088 13.909333 6.101333 32.981333 9.130667 57.216 9.130667z m191.957333-3.968l52.394667-167.466667 51.584 167.466667h73.002666l-86.357333-232.704h-77.952l-87.936 232.704h75.264zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-sketch_colorful_ash" unicode="" d="M874.666667 853.333333A106.666667 106.666667 0 0 0 981.333333 746.666667v-725.333334a106.666667 106.666667 0 0 0-106.666666-106.666666h-725.333334A106.666667 106.666667 0 0 0 42.666667 21.333333v725.333334A106.666667 106.666667 0 0 0 149.333333 853.333333h725.333334z m0-85.333333h-725.333334a21.333333 21.333333 0 0 1-21.333333-21.333333v-725.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h725.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v725.333334a21.333333 21.333333 0 0 1-21.333333 21.333333zM640 616.277333a42.666667 42.666667 0 0 0 33.877333-16.725333l85.333334-111.530667a42.666667 42.666667 0 0 0-0.512-52.522666l-213.333334-267.733334a42.666667 42.666667 0 0 0-66.730666 0l-213.333334 267.733334a42.666667 42.666667 0 0 0-0.512 52.48l85.333334 111.573333A42.666667 42.666667 0 0 0 384 616.277333h256z m-21.077333-85.333333H405.034667l-52.266667-68.266667L512 262.826667l159.189333 199.765333-52.266666 68.309333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-CSV_colorful" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-632.192-19.114667c29.312 0 52.394667-5.930667 69.12-17.749333 16.810667-11.861333 29.269333-30.08 37.418667-54.613334l-63.488-14.165333a54.442667 54.442667 0 0 1-6.997334 15.573333 41.344 41.344 0 0 1-14.762666 12.714667 42.410667 42.410667 0 0 1-19.541334 4.437333c-16.298667 0-28.757333-6.570667-37.461333-19.712-6.570667-9.728-9.813333-25.002667-9.813333-45.866666 0-25.813333 3.882667-43.52 11.733333-53.077334 7.808-9.6 18.816-14.378667 33.024-14.378666 13.738667 0 24.149333 3.84 31.146667 11.605333 7.082667 7.68 12.16 18.944 15.36 33.621333l63.018666-19.029333c-4.266667-17.664-10.88-32.426667-20.010666-44.288a86.826667 86.826667 0 0 0-33.877334-26.837333c-13.482667-6.016-30.677333-9.045333-51.541333-9.045334-25.258667 0-45.952 3.669333-61.952 11.008-16.042667 7.381333-29.866667 20.309333-41.514667 38.826667-11.648 18.517333-17.493333 42.24-17.493333 71.125333 0 38.528 10.24 68.138667 30.72 88.832 20.48 20.693333 49.493333 31.018667 86.912 31.018667z m238.762667 0c29.738667 0 52.437333-5.546667 68.053333-16.597333 15.573333-11.050667 24.874667-28.629333 27.861333-52.778667l-67.84-3.968c-1.749333 10.496-5.546667 18.090667-11.306666 22.869333-5.76 4.778667-13.738667 7.168-23.893334 7.168-8.362667 0-14.677333-1.792-18.901333-5.333333a16.298667 16.298667 0 0 1-6.357333-12.928c0-3.712 1.749333-7.04 5.248-10.026667 3.413333-3.072 11.434667-5.930667 24.149333-8.533333 31.402667-6.826667 53.930667-13.653333 67.541333-20.608 13.610667-6.912 23.466667-15.530667 29.696-25.770667 6.186667-10.24 9.258667-21.76 9.258667-34.474666 0-14.933333-4.138667-28.672-12.373333-41.258667a77.525333 77.525333 0 0 0-34.602667-28.672c-14.805333-6.485333-33.493333-9.728-56.021333-9.728-39.594667 0-66.986667 7.594667-82.261334 22.826667-15.232 15.274667-23.893333 34.645333-25.856 58.112l68.394667 4.266666c1.493333-11.093333 4.522667-19.541333 9.045333-25.386666 7.424-9.386667 18.005333-14.08 31.786667-14.08 10.24 0 18.133333 2.389333 23.722667 7.168a21.632 21.632 0 0 1 8.32 16.768 21.333333 21.333333 0 0 1-7.936 16.213333c-5.290667 4.736-17.578667 9.258667-36.821334 13.482667-31.573333 7.082667-54.016 16.512-67.456 28.245333a56.832 56.832 0 0 0-20.352 44.928c0 11.946667 3.498667 23.253333 10.410667 33.877333 6.912 10.666667 17.365333 19.029333 31.274667 25.088 13.909333 6.101333 32.981333 9.130667 57.216 9.130667z m191.957333-3.968l52.394667-167.466667 51.584 167.466667h73.002666l-86.357333-232.704h-77.952l-87.936 232.704h75.264zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-sql_colorful_ash" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-384.469333-19.114667c39.893333 0 70.698667-10.666667 92.373333-32.128 21.717333-21.418667 32.554667-52.053333 32.554667-91.989333 0-35.498667-8.746667-63.914667-26.24-85.248 9.301333-6.442667 15.36-10.496 18.218666-12.117334 4.266667-2.432 9.984-5.205333 17.194667-8.362666l-20.650667-41.642667a240.768 240.768 0 0 0-30.848 17.92 263.850667 263.850667 0 0 0-21.333333 15.658667c-16.341333-7.082667-36.906667-10.666667-61.610667-10.666667-36.48 0-65.28 9.557333-86.4 28.586667-24.917333 22.485333-37.376 54.144-37.376 94.890666 0 39.594667 10.88 70.314667 32.682667 92.245334 21.845333 21.888 52.309333 32.853333 91.434667 32.853333z m-259.072 0c30.72 0 54.186667-5.717333 70.272-17.109333 16.128-11.434667 25.728-29.610667 28.757333-54.528l-69.973333-4.096c-1.877333 10.837333-5.802667 18.688-11.733334 23.594666-5.973333 4.949333-14.208 7.381333-24.704 7.381334-8.618667 0-15.104-1.834667-19.498666-5.504a16.853333 16.853333 0 0 1-6.570667-13.354667c0-3.84 1.834667-7.253333 5.418667-10.325333 3.498667-3.157333 11.818667-6.101333 24.917333-8.832 32.469333-6.997333 55.722667-14.08 69.76-21.248 14.08-7.168 24.32-16.042667 30.677333-26.624 6.4-10.624 9.6-22.485333 9.6-35.584 0-15.402667-4.266667-29.610667-12.8-42.666667-8.533333-12.970667-20.437333-22.826667-35.754666-29.568-15.274667-6.741333-34.56-10.069333-57.856-10.069333-40.874667 0-69.205333 7.850667-84.906667 23.594666-15.786667 15.744-24.661333 35.754667-26.752 59.989334l70.656 4.437333c1.536-11.477333 4.693333-20.224 9.386667-26.24 7.637333-9.728 18.56-14.592 32.768-14.592 10.581333 0 18.773333 2.517333 24.490666 7.466667a22.357333 22.357333 0 0 1 8.618667 17.322666 22.058667 22.058667 0 0 1-8.192 16.725334c-5.461333 4.906667-18.133333 9.557333-38.058667 13.909333-32.554667 7.338667-55.765333 17.066667-69.674666 29.184a58.666667 58.666667 0 0 0-20.992 46.421333c0 12.373333 3.584 24.021333 10.752 34.986667 7.168 11.008 17.92 19.626667 32.298666 25.898667 14.378667 6.314667 34.090667 9.429333 59.093334 9.429333z m498.261333-4.096v-181.162667h115.925333v-59.178666h-190.208v240.341333h74.282667z m-239.36-52.138667a45.226667 45.226667 0 0 1-35.925333-15.914666c-9.173333-10.581333-13.738667-27.136-13.738667-49.664 0-26.24 4.48-44.629333 13.44-55.253334 8.96-10.581333 21.248-15.914667 36.864-15.914666 5.034667 0 9.813333 0.512 14.293333 1.493333-6.229333 5.973333-16.085333 11.690667-29.525333 17.066667l11.648 26.709333c6.528-1.194667 11.648-2.688 15.36-4.437333 3.626667-1.706667 10.752-6.314667 21.333333-13.738667 2.56-1.749333 5.248-3.584 8.234667-5.418667 5.888 10.581333 8.832 26.453333 8.832 47.530667 0 24.277333-4.522667 41.6-13.525333 51.968-9.002667 10.410667-21.461333 15.573333-37.290667 15.573333zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-text_colorful" unicode="" d="M874.666667 853.333333A106.666667 106.666667 0 0 0 981.333333 746.666667v-725.333334a106.666667 106.666667 0 0 0-106.666666-106.666666h-725.333334A106.666667 106.666667 0 0 0 42.666667 21.333333v725.333334A106.666667 106.666667 0 0 0 149.333333 853.333333h725.333334z m0-85.333333h-725.333334a21.333333 21.333333 0 0 1-21.333333-21.333333v-725.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h725.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v725.333334a21.333333 21.333333 0 0 1-21.333333 21.333333z m-410.069334-663.722667a42.666667 42.666667 0 0 0 0 85.333334l4.736 0.042666V526.208l0.256 4.778667h-104.533333v-28.458667a42.666667 42.666667 0 0 0-37.717333-42.410667l-4.949334-0.256a42.666667 42.666667 0 0 0-42.666666 42.666667V573.610667a42.666667 42.666667 0 0 0 42.666666 42.666666h379.221334a42.666667 42.666667 0 0 0 42.666666-42.666666v-71.082667a42.666667 42.666667 0 1 0-85.333333 0v28.416l-104.533333 0.042667c0.170667-1.578667 0.256-3.157333 0.256-4.778667v-336.554667h4.736a42.666667 42.666667 0 1 0 0-85.333333H464.64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-word_colorful" unicode="" d="M256 0h640V768H256v-128h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-384a42.666667 42.666667 0 0 0-42.666667-42.666666H256v-170.666667z m554.666667 256a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM135.04 554.666667h-10.581333a30.208 30.208 0 0 1-29.226667-37.845334l61.653333-235.349333a34.133333 34.133333 0 0 1 33.024-25.472h18.773334a34.133333 34.133333 0 0 1 33.28 26.453333l35.157333 153.258667 36.48-153.472a34.133333 34.133333 0 0 1 33.194667-26.24h18.517333a34.133333 34.133333 0 0 1 33.024 25.557333l61.226667 235.52a30.08 30.08 0 0 1-29.013334 37.589334h-10.325333a34.133333 34.133333 0 0 1-33.578667-28.074667l-28.885333-160.085333-38.272 161.877333A34.133333 34.133333 0 0 1 286.250667 554.666667h-18.602667a34.133333 34.133333 0 0 1-33.28-26.538667l-36.864-161.621333-28.885333 160.085333A34.133333 34.133333 0 0 1 135.04 554.666667zM810.666667 426.666667a42.666667 42.666667 0 1 0 0-85.333334h-170.666667a42.666667 42.666667 0 1 0 0 85.333334h170.666667z m0 170.666666a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM85.333333 170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V597.333333a42.666667 42.666667 0 0 0 42.666666 42.666667h85.333334V768a85.333333 85.333333 0 0 0 85.333333 85.333333h640a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333H256a85.333333 85.333333 0 0 0-85.333333 85.333333v170.666667H85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-xmind_colorful" unicode="" d="M260.266667-8.533333h640v768h-640v-128h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-384a42.666667 42.666667 0 0 0-42.666667-42.666667h-213.333333v-170.666666z m554.666666 256a42.666667 42.666667 0 1 0 0-85.333334h-170.666666a42.666667 42.666667 0 1 0 0 85.333334h170.666666zM120.192 463.573333c-9.813333 0-19.456-0.768-28.842667-2.218666a185.6 185.6 0 0 1 20.906667-114.773334 187.562667 187.562667 0 0 0 90.752-6.186666 185.941333 185.941333 0 0 0-12.629333-85.333334 185.813333 185.813333 0 0 1 102.4-48.725333 185.472 185.472 0 0 1 13.866666 70.784 186.453333 186.453333 0 0 1-186.453333 186.453333zM270.378667 588.8a185.130667 185.130667 0 0 1-13.824-70.698667 188.885333 188.885333 0 0 1 10.154666-60.928 189.226667 189.226667 0 0 1 22.869334-45.098666l0.426666-0.554667a187.733333 187.733333 0 0 1 21.162667-25.301333l0.64-0.597334 1.28-1.28 4.138667-3.925333c18.645333-17.066667 40.789333-30.378667 65.194666-38.741333l1.450667-0.426667 0.938667-0.384c7.765333-2.56 15.744-4.565333 23.893333-6.058667l4.565333-0.768 8.192-1.194666a188.714667 188.714667 0 0 1 50.389334 1.024 187.733333 187.733333 0 0 1-20.906667 114.773333 187.648 187.648 0 0 0-90.752 6.144 185.984 185.984 0 0 0 12.629333 85.333333 185.813333 185.813333 0 0 1-102.4 48.682667z m544.554666-170.666667a42.666667 42.666667 0 1 0 0-85.333333h-170.666666a42.666667 42.666667 0 1 0 0 85.333333h170.666666z m0 170.666667a42.666667 42.666667 0 1 0 0-85.333333h-170.666666a42.666667 42.666667 0 1 0 0 85.333333h170.666666z m-725.333333-426.666667a42.666667 42.666667 0 0 0-42.666667 42.666667v384a42.666667 42.666667 0 0 0 42.666667 42.666667h85.333333v128a85.333333 85.333333 0 0 0 85.333334 85.333333h640a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333334h-640a85.333333 85.333333 0 0 0-85.333334 85.333334v170.666666h-85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-sql_colorful" unicode="" d="M640 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666 1.792-2.346667 0.213333-0.341333 0.426667-0.554667 0.426667-0.768-0.853334 1.322667-1.706666 2.261333 2.773333-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053333-9.941333 41.258667 41.258667 0 0 0 1.109334-5.973333L853.333333 597.333333v-85.333333h42.666667a85.333333 85.333333 0 0 0 85.333333-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333333-85.333333h-42.666667v-85.333334a42.666667 42.666667 0 0 0-42.666666-42.666666H213.333333a42.666667 42.666667 0 0 0-42.666666 42.666666v85.333334H128a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h426.666667z m128-810.666666H256v-42.666667h512v42.666667z m128 384H128v-298.666667h768v298.666667z m-384.469333-19.114667c39.893333 0 70.698667-10.666667 92.373333-32.128 21.717333-21.418667 32.554667-52.053333 32.554667-91.989333 0-35.498667-8.746667-63.914667-26.24-85.248 9.301333-6.442667 15.36-10.496 18.218666-12.117334 4.266667-2.432 9.984-5.205333 17.194667-8.362666l-20.650667-41.642667a240.768 240.768 0 0 0-30.848 17.92 263.850667 263.850667 0 0 0-21.333333 15.658667c-16.341333-7.082667-36.906667-10.666667-61.610667-10.666667-36.48 0-65.28 9.557333-86.4 28.586667-24.917333 22.485333-37.376 54.144-37.376 94.890666 0 39.594667 10.88 70.314667 32.682667 92.245334 21.845333 21.888 52.309333 32.853333 91.434667 32.853333z m-259.072 0c30.72 0 54.186667-5.717333 70.272-17.109333 16.128-11.434667 25.728-29.610667 28.757333-54.528l-69.973333-4.096c-1.877333 10.837333-5.802667 18.688-11.733334 23.594666-5.973333 4.949333-14.208 7.381333-24.704 7.381334-8.618667 0-15.104-1.834667-19.498666-5.504a16.853333 16.853333 0 0 1-6.570667-13.354667c0-3.84 1.834667-7.253333 5.418667-10.325333 3.498667-3.157333 11.818667-6.101333 24.917333-8.832 32.469333-6.997333 55.722667-14.08 69.76-21.248 14.08-7.168 24.32-16.042667 30.677333-26.624 6.4-10.624 9.6-22.485333 9.6-35.584 0-15.402667-4.266667-29.610667-12.8-42.666667-8.533333-12.970667-20.437333-22.826667-35.754666-29.568-15.274667-6.741333-34.56-10.069333-57.856-10.069333-40.874667 0-69.205333 7.850667-84.906667 23.594666-15.786667 15.744-24.661333 35.754667-26.752 59.989334l70.656 4.437333c1.536-11.477333 4.693333-20.224 9.386667-26.24 7.637333-9.728 18.56-14.592 32.768-14.592 10.581333 0 18.773333 2.517333 24.490666 7.466667a22.357333 22.357333 0 0 1 8.618667 17.322666 22.058667 22.058667 0 0 1-8.192 16.725334c-5.461333 4.906667-18.133333 9.557333-38.058667 13.909333-32.554667 7.338667-55.765333 17.066667-69.674666 29.184a58.666667 58.666667 0 0 0-20.992 46.421333c0 12.373333 3.584 24.021333 10.752 34.986667 7.168 11.008 17.92 19.626667 32.298666 25.898667 14.378667 6.314667 34.090667 9.429333 59.093334 9.429333z m498.261333-4.096v-181.162667h115.925333v-59.178666h-190.208v240.341333h74.282667z m-239.36-52.138667a45.226667 45.226667 0 0 1-35.925333-15.914666c-9.173333-10.581333-13.738667-27.136-13.738667-49.664 0-26.24 4.48-44.629333 13.44-55.253334 8.96-10.581333 21.248-15.914667 36.864-15.914666 5.034667 0 9.813333 0.512 14.293333 1.493333-6.229333 5.973333-16.085333 11.690667-29.525333 17.066667l11.648 26.709333c6.528-1.194667 11.648-2.688 15.36-4.437333 3.626667-1.706667 10.752-6.314667 21.333333-13.738667 2.56-1.749333 5.248-3.584 8.234667-5.418667 5.888 10.581333 8.832 26.453333 8.832 47.530667 0 24.277333-4.522667 41.6-13.525333 51.968-9.002667 10.410667-21.461333 15.573333-37.290667 15.573333zM554.666667 768H256v-256h512V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666666 42.666666V768z m85.333333-25.6V640h81.92L640 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-text_colorful_ash" unicode="" d="M874.666667 853.333333A106.666667 106.666667 0 0 0 981.333333 746.666667v-725.333334a106.666667 106.666667 0 0 0-106.666666-106.666666h-725.333334A106.666667 106.666667 0 0 0 42.666667 21.333333v725.333334A106.666667 106.666667 0 0 0 149.333333 853.333333h725.333334z m0-85.333333h-725.333334a21.333333 21.333333 0 0 1-21.333333-21.333333v-725.333334a21.333333 21.333333 0 0 1 21.333333-21.333333h725.333334a21.333333 21.333333 0 0 1 21.333333 21.333333v725.333334a21.333333 21.333333 0 0 1-21.333333 21.333333z m-410.069334-663.722667a42.666667 42.666667 0 0 0 0 85.333334l4.736 0.042666V526.208l0.256 4.778667h-104.533333v-28.458667a42.666667 42.666667 0 0 0-37.717333-42.410667l-4.949334-0.256a42.666667 42.666667 0 0 0-42.666666 42.666667V573.610667a42.666667 42.666667 0 0 0 42.666666 42.666666h379.221334a42.666667 42.666667 0 0 0 42.666666-42.666666v-71.082667a42.666667 42.666667 0 1 0-85.333333 0v28.416l-104.533333 0.042667c0.170667-1.578667 0.256-3.157333 0.256-4.778667v-336.554667h4.736a42.666667 42.666667 0 1 0 0-85.333333H464.64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-xmind_colorful_ash" unicode="" d="M260.266667-8.533333h640v768h-640v-128h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666667v-384a42.666667 42.666667 0 0 0-42.666667-42.666667h-213.333333v-170.666666z m554.666666 256a42.666667 42.666667 0 1 0 0-85.333334h-170.666666a42.666667 42.666667 0 1 0 0 85.333334h170.666666zM120.192 463.573333c-9.813333 0-19.456-0.768-28.842667-2.218666a185.6 185.6 0 0 1 20.906667-114.773334 187.562667 187.562667 0 0 0 90.752-6.186666 185.941333 185.941333 0 0 0-12.629333-85.333334 185.813333 185.813333 0 0 1 102.4-48.725333 185.472 185.472 0 0 1 13.866666 70.784 186.453333 186.453333 0 0 1-186.453333 186.453333zM270.378667 588.8a185.130667 185.130667 0 0 1-13.824-70.698667 188.885333 188.885333 0 0 1 10.154666-60.928 189.226667 189.226667 0 0 1 22.869334-45.098666l0.426666-0.554667a187.733333 187.733333 0 0 1 21.162667-25.301333l0.64-0.597334 1.28-1.28 4.138667-3.925333c18.645333-17.066667 40.789333-30.378667 65.194666-38.741333l1.450667-0.426667 0.938667-0.384c7.765333-2.56 15.744-4.565333 23.893333-6.058667l4.565333-0.768 8.192-1.194666a188.714667 188.714667 0 0 1 50.389334 1.024 187.733333 187.733333 0 0 1-20.906667 114.773333 187.648 187.648 0 0 0-90.752 6.144 185.984 185.984 0 0 0 12.629333 85.333333 185.813333 185.813333 0 0 1-102.4 48.682667z m544.554666-170.666667a42.666667 42.666667 0 1 0 0-85.333333h-170.666666a42.666667 42.666667 0 1 0 0 85.333333h170.666666z m0 170.666667a42.666667 42.666667 0 1 0 0-85.333333h-170.666666a42.666667 42.666667 0 1 0 0 85.333333h170.666666z m-725.333333-426.666667a42.666667 42.666667 0 0 0-42.666667 42.666667v384a42.666667 42.666667 0 0 0 42.666667 42.666667h85.333333v128a85.333333 85.333333 0 0 0 85.333334 85.333333h640a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333334h-640a85.333333 85.333333 0 0 0-85.333334 85.333334v170.666666h-85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-unknown_colorful" unicode="" d="M682.666667 853.333333a42.666667 42.666667 0 0 0 33.28-16l170.368-212.906666c1.28-1.536 2.389333-3.157333 3.413333-4.821334l-3.072 4.394667c1.450667-1.834667 2.773333-3.797333 3.882667-5.802667l2.389333-4.949333 1.664-4.992a41.258667 41.258667 0 0 0 1.109333-5.973333L896 597.333333v-640a42.666667 42.666667 0 0 0-42.666667-42.666666H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h512z m-85.333334-85.333333H213.333333v-768h597.333334V554.666667h-170.666667a42.666667 42.666667 0 0 0-42.666667 42.666666V768z m-85.333333-612.437333a41.472 41.472 0 1 0 0-82.986667 41.472 41.472 0 0 0 0 82.986667z m0 374.528a142.208 142.208 0 0 0 44.970667-277.205334l-2.304-0.64v-30.293333a42.666667 42.666667 0 0 0-37.674667-42.410667l-4.992-0.298666a42.666667 42.666667 0 0 0-42.666667 42.666666v66.389334a42.666667 42.666667 0 0 0 37.674667 42.368l4.992 0.298666a56.874667 56.874667 0 1 1-56.618667 62.378667l-0.256-5.504a42.666667 42.666667 0 1 0-85.333333 0A142.208 142.208 0 0 0 512 530.090667zM764.586667 640L682.666667 742.4V640h81.92z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_file-jar_colorful" unicode="" d="M648.533 853.333a42.667 42.667 0 0 0 33.323-16L852.523 624l2.73-3.925 1.152-1.878a40.021 40.021 0 0 0 4.054-9.941 41.259 41.259 0 0 0 1.109-5.973l0.299-4.95V512h42.666a85.333 85.333 0 0 0 85.334-85.333V128a85.333 85.333 0 0 0-85.334-85.333h-42.666v-85.334a42.667 42.667 0 0 0-42.667-42.666H221.867a42.667 42.667 0 0 0-42.667 42.666v85.334h-42.667A85.333 85.333 0 0 0 51.2 128V426.667A85.333 85.333 0 0 0 136.533 512H179.2V810.667a42.667 42.667 0 0 0 42.667 42.666h426.666z m128-810.666h-512V0h512v42.667z m128 384h-768V128h768V426.667z m-556.8-42.24v-116.182c0-24.405-2.176-43.008-6.528-55.722-4.309-12.758-13.013-23.51-26.112-32.384-13.056-8.832-29.781-13.227-50.218-13.227-21.59 0-38.315 2.859-50.176 8.704a63.104 63.104 0 0 0-27.478 25.6c-6.485 11.221-10.282 25.13-11.434 41.643l63.146 8.618c0.086-9.429 0.896-16.469 2.475-21.034a22.87 22.87 0 0 1 7.85-11.094c2.56-1.834 6.145-2.73 10.795-2.73 7.382 0 12.8 2.73 16.256 8.234 3.456 5.504 5.206 14.763 5.206 27.734v131.84h66.176z m174.848 0l80.299-213.76h-69.12l-10.496 35.285H448l-10.368-35.285h-67.456l80.341 213.76h72.064z m212.48 0c20.395 0 36.011-1.707 46.806-5.206 10.794-3.498 19.498-9.984 26.112-19.498 6.57-9.472 9.898-20.992 9.898-34.603 0-11.861-2.56-22.101-7.594-30.72a59.307 59.307 0 0 0-20.864-20.907c-5.632-3.413-13.355-6.229-23.168-8.49 7.893-2.603 13.61-5.248 17.194-7.851 2.432-1.75 5.974-5.504 10.582-11.221 4.608-5.76 7.68-10.155 9.258-13.27l31.958-61.994h-74.667l-35.285 65.322c-4.48 8.448-8.491 13.952-11.947 16.47a27.733 27.733 0 0 1-16.213 4.992h-5.846v-86.784H624.94v213.76h110.08z m-249.258-55.382l-23.467-76.842h47.104l-23.637 76.8z m234.496 12.246h-29.014v-43.478h27.862c2.986 0 8.832 0.982 17.493 2.944a17.493 17.493 0 0 1 10.71 6.699 19.755 19.755 0 0 1 4.18 12.373c0 6.912-2.218 12.246-6.57 15.915-4.395 3.712-12.587 5.547-24.661 5.547zM563.2 768H264.533v-256h512v42.667H605.867a42.667 42.667 0 0 0-42.667 42.666V768z m85.333-25.6V640h81.92l-81.92 102.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="logo_dingtalk" unicode="" d="M838.058667 470.314667a164.693333 164.693333 0 0 0-9.728-26.453334h0.085333l-0.512-1.066666c-28.416-63.829333-102.656-189.141333-102.656-189.141334l-0.341333 0.853334-21.674667-39.68h104.533333l-199.68-278.826667 45.312 189.653333h-82.346666l28.586666 125.44c-23.125333-5.845333-50.389333-13.952-82.773333-24.874666 0 0-43.776-26.88-126.208 51.84 0 0-55.552 51.328-23.338667 64.256 13.653333 5.418667 66.517333 12.373333 108.117334 18.346666 56.064 7.978667 90.624 12.245333 90.624 12.245334s-173.056-2.773333-214.144 4.053333c-41.088 6.784-93.056 78.762667-104.234667 141.994667 0 0-17.152 34.773333 36.821333 18.346666 54.101333-16.426667 277.845333-64 277.845334-64S271.445333 566.869333 252.074667 589.738667c-19.328 22.826667-56.96 124.8-52.053334 187.392 0 0 2.133333 15.658667 17.408 11.52 0 0 215.168-103.338667 362.24-159.744 147.072-56.618667 274.901333-85.418667 258.389334-158.592z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="logo_lark" unicode="" d="M548.48 366.805333c0.682667 0.725333 1.450667 1.365333 2.133333 2.048 1.493333 1.365333 2.858667 2.773333 4.266667 4.181334l2.901333 2.858666 8.746667 8.661334 11.904 11.733333 10.197333 10.112 9.557334 9.472 10.026666 9.856 9.173334 9.088 12.8 12.629333a273.493333 273.493333 0 0 0 35.541333 29.696 290.645333 290.645333 0 0 0 80 39.808A504.533333 504.533333 0 0 1 650.410667 708.266667 45.568 45.568 0 0 1 614.656 725.333333h-368.213333c-6.656 0-9.429333-8.533333-4.053334-12.458666a1074.773333 1074.773333 0 0 0 305.237334-346.88l0.853333 0.853333zM402.432 42.666667a505.728 505.728 0 0 1 450.986667 276.522666 208.469333 208.469333 0 0 0-48.213334-61.184 187.733333 187.733333 0 0 0-31.658666-22.016 192.768 192.768 0 0 0-64.938667-22.314666 198.186667 198.186667 0 0 0-34.688-2.346667 207.786667 207.786667 0 0 0-34.730667 3.413333 216.149333 216.149333 0 0 0-19.797333 4.394667c-6.4 1.706667-12.672 3.456-18.944 5.290667-3.157333 0.853333-6.272 1.834667-9.386667 2.773333-4.693333 1.408-9.386667 2.816-13.994666 4.266667a966.698667 966.698667 0 0 0-22.186667 7.210666l-7.381333 2.432-8.874667 3.114667-6.4 2.218667-12.501333 4.608c-2.432 0.853333-4.821333 1.834667-7.253334 2.730666l-9.685333 3.754667-10.24 4.096-6.570667 2.688-8.192 3.413333-6.314666 2.688c-2.176 0.938667-4.394667 1.877333-6.528 2.858667l-5.674667 2.474667-5.162667 2.261333-5.248 2.389333-5.418666 2.474667-6.826667 3.2-7.125333 3.370667-7.594667 3.669333-6.4 3.2a1064.746667 1064.746667 0 0 0-301.184 224.682667 6.869333 6.869333 0 0 1-11.946667-4.693334l0.213334-324.949333v-26.368c0-15.317333 7.594667-29.696 20.309333-38.186667A503.978667 503.978667 0 0 1 402.432 42.666667zM844.672 302.677333a1.706667 1.706667 0 0 1-0.256-0.426666l0.256 0.426666 1.706667 3.2-1.706667-3.2zM852.565333 317.568l0.426667 0.853333 0.256 0.426667-0.682667-1.28zM960.853333 500.693333a288.298667 288.298667 0 0 1-127.744 29.653334 288.512 288.512 0 0 1-87.253333-13.397334l-6.016-1.962666a291.498667 291.498667 0 0 1-109.525333-67.541334l-12.8-12.629333-9.173334-9.088-9.984-9.813333-9.6-9.514667-10.197333-10.112-11.904-11.733333-8.704-8.661334-2.901333-2.858666-4.266667-4.181334c-0.725333-0.682667-1.450667-1.322667-2.133333-2.048l-3.242667-3.072-3.626667-3.413333a506.410667 506.410667 0 0 0-104.832-74.197333 303.573333 303.573333 0 0 1 12.245334-5.674667l5.205333-2.389333 5.205333-2.261334c1.877333-0.853333 3.797333-1.706667 5.674667-2.474666l6.528-2.858667 6.314667-2.688 8.192-3.413333a2542.08 2542.08 0 0 1 16.810666-6.784c3.2-1.28 6.442667-2.517333 9.685334-3.712l7.253333-2.773334 12.501333-4.565333 6.4-2.261333 8.874667-3.072 7.338667-2.517334 10.794666-3.541333 11.434667-3.626667a1278.464 1278.464 0 0 1 42.325333-12.330666 265.301333 265.301333 0 0 1 19.797334-4.437334 206.805333 206.805333 0 0 1 91.946666 3.84 179.925333 179.925333 0 0 1 27.818667 10.112 192.768 192.768 0 0 1 21.546667 11.392c2.218667 1.365333 4.352 2.773333 6.528 4.181334a216.405333 216.405333 0 0 1 18.133333 13.781333 201.002667 201.002667 0 0 1 48.128 61.013333l4.906667 9.813334 44.544 88.746666-0.085334-0.213333a275.498667 275.498667 0 0 0 57.898667 83.285333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="logo_wechat-work" unicode="" d="M689.92 117.12a13.184 13.184 0 0 1 1.877333-20.138667l3.797334-3.669333c24.661333-24.704 40.149333-55.04 46.506666-86.869333a49.408 49.408 0 0 1 1.877334-11.136 55.125333 55.125333 0 1 1 58.922666 69.376 169.301333 169.301333 0 0 0-94.293333 52.48 13.184 13.184 0 0 1-18.645333 0zM914.005333 204.288a55.04 55.04 0 0 1-15.786666-33.194667 169.386667 169.386667 0 0 0-52.522667-94.293333 13.184 13.184 0 1 1 20.181333-16.853333 169.344 169.344 0 0 0 90.496 50.346666 50.218667 50.218667 0 0 1 11.178667 1.877334 55.125333 55.125333 0 1 1-53.546667 92.16zM758.570667 360.149333a55.168 55.168 0 0 1 33.152-93.781333 169.386667 169.386667 0 0 0 94.336-52.48 13.226667 13.226667 0 1 1 16.810666 20.138667 169.472 169.472 0 0 0-50.346666 90.538666 48.768 48.768 0 0 1-1.834667 11.178667 55.168 55.168 0 0 1-92.16 24.405333zM731.349333 273.834667l-1.024-0.938667a13.226667 13.226667 0 0 1-1.536-1.834667l-3.669333-3.84a169.216 169.216 0 0 0-86.869333-46.506666 52.608 52.608 0 0 1-11.136-1.834667 55.125333 55.125333 0 1 1 69.376-58.922667 169.472 169.472 0 0 0 52.48 94.293334 13.184 13.184 0 0 1-17.621334 19.584zM398.08 750.165333c-98.986667-10.752-188.970667-53.12-253.354667-119.253333A338.176 338.176 0 0 1 83.2 544.213333c-20.949333-42.666667-31.573333-87.893333-31.573333-134.528 0-60.032 18.261333-119.210667 52.821333-171.136a470.613333 470.613333 0 0 1 72.448-82.858666l-11.861333-93.568c-0.512-1.28-1.024-2.56-1.28-3.882667-0.298667-1.237333-0.384-2.474667-0.512-3.754667-0.042667-0.938667-0.256-1.877333-0.256-2.858666 0-1.024 0.213333-2.005333 0.298666-3.072 1.578667-15.36 14.378667-27.434667 30.208-27.434667 5.504 0 10.581333 1.578667 15.061334 4.138667l0.426666 0.213333 1.92 1.152 28.458667 14.293333 84.693333 42.496c24.32-6.997333 48.512-11.434667 73.984-14.250666a458.624 458.624 0 0 1 102.101334 0.298666c34.773333 3.925333 68.181333 11.946667 99.882666 23.338667a55.082667 55.082667 0 0 0-37.546666 57.6 373.248 373.248 0 0 0-70.784-15.146667 384.384 384.384 0 0 0-85.504-0.256c-2.858667 0.341333-5.76 0.768-8.661334 1.194667a377.728 377.728 0 0 0-56.021333 11.733333 38.272 38.272 0 0 1-30.165333-3.072c-0.853333-0.426667-1.621333-0.768-2.432-1.237333l-69.546667-41.002667-3.029333-1.792h-0.085334c-1.493333-0.896-2.346667-1.28-3.114666-1.28a4.693333 4.693333 0 0 0-4.650667 4.864l2.688 10.794667 3.114667 11.818667 5.077333 19.328 5.632 21.546666a29.226667 29.226667 0 0 1-10.496 32.512 305.621333 305.621333 0 0 0-29.098667 24.405334 284.672 284.672 0 0 0-41.216 48.768 243.712 243.712 0 0 0-41.813333 134.997333c0 36.650667 8.362667 72.234667 24.874667 105.856a271.445333 271.445333 0 0 0 49.365333 69.504C249.514667 638.293333 323.968 673.194667 406.186667 682.112c14.293333 1.536 28.373333 2.346667 41.813333 2.346667 14.122667 0 28.8-0.853333 43.690667-2.56 81.834667-9.258667 155.818667-44.330667 208.341333-98.645334a271.061333 271.061333 0 0 0 49.152-69.674666c16.213333-33.365333 24.448-68.693333 24.448-104.96 0-3.797333-0.213333-7.552-0.426667-11.306667a55.04 55.04 0 0 0 67.669334-7.936c0.938667-0.938667 1.706667-1.962667 2.56-2.944a299.52 299.52 0 0 1-30.122667 156.714667 337.322667 337.322667 0 0 1-61.226667 86.912c-63.914667 66.090667-153.386667 108.672-251.946666 119.893333-17.706667 2.005333-35.242667 2.986667-52.138667 2.986667-16.085333 0-32.853333-0.896-49.92-2.773334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_file-json" unicode="" d="M648.533333 853.333333a42.666667 42.666667 0 0 0 33.322667-16l170.325333-212.906666 1.792-2.346667 0.213334-0.341333 0.426666-0.554667 0.426667-0.768-0.853333 1.322667-1.664 2.261333 2.730666-3.925333 1.152-1.877334a40.021333 40.021333 0 0 0 4.053334-9.941333 41.258667 41.258667 0 0 0 1.109333-5.973333L861.866667 597.333333v-85.333333h42.666666a85.333333 85.333333 0 0 0 85.333334-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333334-85.333333h-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-597.333333a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334h-42.666667a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h426.666666z m128-810.666666h-512v-42.666667h512v42.666667z m128 384h-768v-298.666667h768v298.666667z m-341.333333 341.333333h-298.666667v-256h512V554.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666V768z m85.333333-25.6V640h81.92L648.533333 742.4z m-341.333333-374.698667v-141.056c0-17.749333-3.157333-32.384-9.898667-43.733333-11.690667-19.797333-32.512-29.525333-60.629333-29.525333-27.818667 0-47.957333 7.850667-58.88 24.618666-9.642667 14.848-14.293333 34.346667-14.293333 58.282667v17.066667h61.952v-16.768c0.298667-12.544 1.621333-21.077333 3.413333-24.789334 0.426667-0.810667 1.706667-1.450667 6.4-1.450666 4.48 0 5.76 0.682667 6.4 2.133333 0.810667 1.621333 1.450667 6.4 1.450667 13.568v141.653333H307.2z m277.589333 5.632c29.568 0 53.034667-8.362667 68.992-24.832 21.504-19.584 32.042667-48.341333 32.042667-85.461333 0-36.394667-10.496-65.109333-31.488-84.906667-16.512-17.066667-39.978667-25.386667-69.546667-25.386666-29.568 0-53.034667 8.362667-69.12 24.96-14.08 13.226667-23.466667 30.165333-28.288 50.474666l0.213334-3.626666c0-20.565333-8.106667-38.101333-23.765334-51.626667-15.402667-13.354667-36.565333-19.797333-62.933333-19.797333-26.666667 0-48.341333 6.272-64.597333 19.2-16.853333 13.482667-25.429333 32.256-25.429334 55.210666v12.8h55.594667l-0.426667 0.085334a114.986667 114.986667 0 0 0-23.808 9.344l-4.181333 2.56c-16.085333 11.050667-24.192 28.373333-24.192 50.474666 0 20.053333 7.509333 37.205333 22.186667 50.56 14.634667 13.312 35.328 19.712 61.482666 19.712 22.101333 0 41.386667-5.973333 57.386667-18.005333 16.938667-12.714667 25.898667-31.274667 26.666667-54.613333l0.426666-13.226667H432.64l4.693333-1.237333c9.6-2.816 17.706667-6.272 24.277334-10.453334l4.650666-3.328c8.917333-7.04 15.061333-16.042667 18.346667-26.752a144 144 0 0 0-0.938667 17.578667c0 37.12 10.581333 65.92 31.573334 84.906667 16.554667 17.066667 40.021333 25.386667 69.589333 25.386666zM371.754667 238.933333l1.322666-9.642666c0.853333-6.272 2.389333-10.410667 4.096-12.501334 3.456-4.181333 10.538667-6.698667 22.229334-6.698666 7.765333 0 13.738667 0.853333 17.834666 2.261333 5.802667 2.048 7.637333 4.48 7.637334 9.301333 0 1.621333-0.384 2.261333-1.877334 3.2-3.882667 2.389333-11.050667 4.821333-21.248 7.082667l-19.541333 4.352a319.744 319.744 0 0 0-8.448 2.048l-2.005333 0.554667z m213.034666 76.202667c-11.434667 0-19.925333-3.925333-26.538666-12.117333-7.04-8.746667-10.794667-21.930667-10.794667-39.978667 0-18.048 3.754667-31.232 10.794667-39.978667 6.613333-8.192 15.104-12.074667 26.538666-12.074666s19.84 3.882667 26.368 12.032l2.730667 4.010666c5.12 8.533333 7.850667 20.48 7.850667 36.010667 0 18.005333-3.712 31.189333-10.666667 39.978667-6.485333 8.192-14.890667 12.117333-26.282667 12.117333z m-189.866666 0.341333c-7.552 0-13.013333-1.365333-16.597334-3.797333-2.389333-1.621333-3.242667-3.2-3.242666-6.144 0-1.92 0.426667-2.56 2.346666-3.669333 2.346667-1.322667 9.514667-3.626667 20.608-6.272l21.461334-5.12-0.469334 8.789333c-0.341333 5.376-1.877333 8.874667-4.992 11.349333l-2.56 1.706667a36.309333 36.309333 0 0 1-16.554666 3.157333z m354.688 52.224l3.669333-6.442666 49.493333-86.741334v93.184h61.44V157.866667H805.546667l-3.669334 6.4-51.413333 89.344 0.042667-95.744h-61.44v209.834666h60.586666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_file-JMX" unicode="" d="M648.533333 853.333333a42.666667 42.666667 0 0 0 33.322667-16l170.666667-213.333333 2.730666-3.925333 1.152-1.877334 1.664-3.242666 1.408-3.541334 0.981334-3.157333a41.258667 41.258667 0 0 0 1.109333-5.973333L861.866667 597.333333v-85.333333h42.666666a85.333333 85.333333 0 0 0 85.333334-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333334-85.333333h-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-597.333333a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334h-42.666667a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h426.666666z m128-810.666666h-512v-42.666667h512v42.666667z m128 384h-768v-298.666667h768v298.666667z m-572.16-42.24v-116.181334c0-24.405333-2.218667-43.008-6.528-55.722666-4.309333-12.757333-13.013333-23.509333-26.112-32.384-13.056-8.832-29.824-13.226667-50.218666-13.226667-21.589333 0-38.314667 2.858667-50.176 8.704a63.104 63.104 0 0 0-27.477334 25.6c-6.485333 11.221333-10.282667 25.130667-11.477333 41.642667l63.146667 8.618666c0.128-9.429333 0.938667-16.469333 2.474666-21.034666a22.869333 22.869333 0 0 1 7.893334-11.093334c2.56-1.834667 6.101333-2.730667 10.794666-2.730666 7.381333 0 12.8 2.730667 16.256 8.234666 3.413333 5.504 5.162667 14.762667 5.162667 27.733334v131.84H332.373333z m130.176 0l33.536-130.048 33.408 130.090666h86.613334V170.666667h-53.930667v163.029333L520.32 170.666667H471.466667l-41.728 163.029333V170.666667H375.637333v213.76h86.912z m253.781334 0l37.888-65.706667 36.778666 65.706667h72.021334l-66.517334-103.509334L869.290667 170.666667h-74.24l-42.154667 68.693333-42.24-68.693333h-73.813333l73.813333 111.402666-67.114667 102.4h72.789334zM563.2 768h-298.666667v-256h512V554.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666V768z m85.333333-25.6V640h81.92L648.533333 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_har" unicode="" d="M648.533333 853.333333a42.666667 42.666667 0 0 0 33.322667-16l170.666667-213.333333 2.730666-3.925333 1.152-1.877334 1.664-3.242666 1.408-3.541334 0.981334-3.157333a41.258667 41.258667 0 0 0 1.109333-5.973333L861.866667 597.333333v-85.333333h42.666666a85.333333 85.333333 0 0 0 85.333334-85.333333v-298.666667a85.333333 85.333333 0 0 0-85.333334-85.333333h-42.666666v-85.333334a42.666667 42.666667 0 0 0-42.666667-42.666666h-597.333333a42.666667 42.666667 0 0 0-42.666667 42.666666v85.333334h-42.666667a85.333333 85.333333 0 0 0-85.333333 85.333333v298.666667a85.333333 85.333333 0 0 0 85.333333 85.333333h42.666667V810.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h426.666666z m128-810.666666h-512v-42.666667h512v42.666667z m128 384h-768v-298.666667h768v298.666667z m-660.992-42.24v-74.794667h72.149334v74.837333h66.389333V170.666667H315.690667v86.485333H243.541333V170.666667H177.450667v213.76h66.090666z m313.216 0L637.141333 170.666667h-69.12l-10.538666 35.285333h-75.221334L471.893333 170.666667H404.394667l80.341333 213.76h72.021333z m212.48 0c20.437333 0 36.053333-1.706667 46.805334-5.205334 10.794667-3.498667 19.498667-9.984 26.112-19.498666 6.613333-9.472 9.941333-20.992 9.941333-34.602667 0-11.861333-2.56-22.101333-7.594667-30.72a59.306667 59.306667 0 0 0-20.864-20.906667c-5.632-3.413333-13.354667-6.229333-23.168-8.490666 7.850667-2.602667 13.610667-5.248 17.194667-7.850667 1.834667-1.28 4.266667-3.754667 7.296-7.296l3.285333-3.925333c4.608-5.76 7.68-10.154667 9.258667-13.269334L869.418667 170.666667h-74.666667l-35.285333 65.322666c-4.48 8.448-8.448 13.952-11.946667 16.469334a27.733333 27.733333 0 0 1-16.213333 4.992h-5.802667V170.666667h-66.346667v213.76h110.08z m-249.216-55.381334l-23.466666-76.842666h47.104l-23.637334 76.8z m234.496 12.245334h-29.013333v-43.477334h27.861333c2.986667 0 8.832 0.981333 17.493334 2.944a17.493333 17.493333 0 0 1 10.709333 6.698667 19.754667 19.754667 0 0 1 4.181333 12.373333c0 6.912-2.218667 12.245333-6.570666 15.914667-4.394667 3.712-12.586667 5.546667-24.661334 5.546667zM563.2 768h-298.666667v-256h512V554.666667h-170.666666a42.666667 42.666667 0 0 0-42.666667 42.666666V768z m85.333333-25.6V640h81.92L648.533333 742.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_filter_clear" unicode="" d="M128.192 768h575.616a64 64 0 0 0 44.032-110.464L512 434.304v-354.304L320-64l-0.064 498.304-235.776 223.232a64 64 0 0 0-7.616 84.288l5.12 6.208A64 64 0 0 0 128.256 768z m575.616-64H128.192L384 461.76l-0.064-397.696L448 112.064V461.76L703.872 704zM685.248 256l90.496-90.496L866.304 256l45.248-45.248-90.56-90.496 90.56-90.56-45.248-45.248-90.56 90.56-90.496-90.56-45.248 45.248 90.496 90.56L640 210.752l45.248 45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_filter" unicode="" d="M128 704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-114.304l-272-160V0h-224V429.696L128 589.696V704z m704 0H192v-77.696l272-160V64h96V466.304l272 160V704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file-excel_colorful_ash" unicode="" d="M256 0h640V768H256v-170.666667h213.333333a42.666667 42.666667 0 0 0 42.666667-42.666666v-384a42.666667 42.666667 0 0 0-42.666667-42.666667H256v-128z m554.666667 256a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM221.184 512H175.274667a27.477333 27.477333 0 0 1-22.997334-42.496l65.877334-100.522667-74.666667-112.64A27.690667 27.690667 0 0 1 166.656 213.333333H213.333333a8.533333 8.533333 0 0 1 7.253334 4.053334l56.618666 91.904 56.362667-91.904a8.533333 8.533333 0 0 1 7.253333-4.053334h47.104a27.904 27.904 0 0 1 23.296 43.264L338.133333 367.36l65.706667 102.314667A27.477333 27.477333 0 0 1 380.714667 512H335.402667a8.533333 8.533333 0 0 1-7.424-4.352L279.04 420.138667 228.565333 507.733333a8.533333 8.533333 0 0 1-7.381333 4.266667zM810.666667 426.666667a42.666667 42.666667 0 1 0 0-85.333334h-170.666667a42.666667 42.666667 0 1 0 0 85.333334h170.666667z m0 170.666666a42.666667 42.666667 0 1 0 0-85.333333h-170.666667a42.666667 42.666667 0 1 0 0 85.333333h170.666667zM85.333333 128a42.666667 42.666667 0 0 0-42.666666 42.666667V554.666667a42.666667 42.666667 0 0 0 42.666666 42.666666h85.333334V768a85.333333 85.333333 0 0 0 85.333333 85.333333h640a85.333333 85.333333 0 0 0 85.333333-85.333333v-768a85.333333 85.333333 0 0 0-85.333333-85.333333H256a85.333333 85.333333 0 0 0-85.333333 85.333333v128H85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_font_color" unicode="" d="M482.901333 781.312a32 32 0 0 0 58.197334 0l117.333333-256 39.082667-85.333333 78.250666-170.666667a32 32 0 1 0-58.197333-26.624l-69.674667 151.978667H376.064l-69.632-151.978667a32 32 0 0 0-38.4-17.322667l-4.010667 1.536a32 32 0 0 0-15.786666 42.410667l78.250666 170.666667 39.082667 85.333333 117.333333 256zM512 691.242667L423.765333 498.688l-18.389333-40.021333h213.205333l-18.346666 40.021333L512 691.2z m384-573.909334a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_add_pic" unicode="" d="M562.432 714.666667a32 32 0 1 0 0-64H170.666667a10.666667 10.666667 0 0 1-10.666667-10.666667v-597.333333c0-5.888 4.778667-10.666667 10.666667-10.666667h597.333333a10.666667 10.666667 0 0 1 10.666667 10.666667v405.333333a32 32 0 1 0 64 0V42.666667A74.666667 74.666667 0 0 0 768-32H170.666667A74.666667 74.666667 0 0 0 96 42.666667V640c0 41.258667 33.408 74.666667 74.666667 74.666667h391.765333z m-13.653333-237.44l160-224.64A32 32 0 0 0 682.666667 202.026667H256a32 32 0 0 0-25.6 51.114666l128 171.349334a32 32 0 0 0 48.213333 3.456l35.84-35.754667 53.248 83.626667a32 32 0 0 0 53.034667 1.408z m-24.661334-75.776l-49.109333-77.312a32 32 0 0 0-49.621333-5.418667l-37.930667 37.888-67.626667-90.581333h300.8l-96.512 135.424z m286.421334 402.901333a32 32 0 0 0 32-32V714.666667H896a32 32 0 1 0 0-64h-53.461333v-48.981334a32 32 0 1 0-64 0V650.666667H725.333333a32 32 0 1 0 0 64h53.205334V772.352a32 32 0 0 0 32 32z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_text_underline" unicode="" d="M842.666667 2.090667a32 32 0 1 0 0-64h-682.666667a32 32 0 1 0 0 64h682.666667zM778.666667 810.666667a32 32 0 0 0 32-32v-339.285334a309.333333 309.333333 0 0 0-618.666667 0V778.666667a32 32 0 0 0 64 0v-339.285334a245.333333 245.333333 0 0 1 490.666667 0V778.666667a32 32 0 0 0 32 32z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_text_italic" unicode="" d="M256-42.666667a32 32 0 1 0 0 64h124.970667L576.298667 725.333333H426.666667a32 32 0 0 0 0 64h183.808a31.829333 31.829333 0 0 0 16.170666 0H768A32 32 0 1 0 768 725.333333h-125.312l-195.285333-704H597.333333a32 32 0 1 0 0-64H256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_add_text" unicode="" d="M682.666667 746.666667A32 32 0 1 0 682.666667 682.666667H416v-693.333334a32 32 0 1 0-64 0V682.666667H85.333333a32 32 0 0 0 0 64h597.333334z m256-277.333334a32 32 0 1 0 0-64h-138.666667v-416a32 32 0 1 0-64 0V405.333333H597.333333a32 32 0 1 0 0 64h341.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_align_text_right" unicode="" d="M896 746.666667A32 32 0 1 0 896 682.666667H128a32 32 0 0 0 0 64h768z m0-213.333334a32 32 0 1 0 0-64H298.666667a32 32 0 0 0 0 64h597.333333z m0-213.333333a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h768z m0-213.333333a32 32 0 1 0 0-64H298.666667a32 32 0 1 0 0 64h597.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_align_text_left" unicode="" d="M896 736a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64h768z m-170.666667-213.333333a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64h597.333333z m170.666667-213.333334a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h768z m-170.666667-213.333333a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h597.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_text_bold" unicode="" d="M181.333333 810.666667A32 32 0 0 0 213.333333 842.666667h277.333334c135.168 0 244.650667-109.866667 244.650666-245.333334 0-77.098667-35.456-145.92-90.965333-190.890666A245.248 245.248 0 0 0 821.333333 170.666667c0-135.466667-109.525333-245.333333-244.650666-245.333334H213.333333a32 32 0 0 0-32 32V810.666667z m395.349334-458.666667H245.333333v-362.666667h331.349334A180.992 180.992 0 0 1 757.333333 170.666667a180.992 180.992 0 0 1-180.650666 181.333333z m-86.016 426.666667H245.333333v-362.666667h245.333334A180.992 180.992 0 0 1 671.317333 597.333333 180.992 180.992 0 0 1 490.666667 778.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_align_text_center" unicode="" d="M768 533.333333a32 32 0 1 0 0-64H256a32 32 0 0 0 0 64h512z m128 213.333334A32 32 0 1 0 896 682.666667H128a32 32 0 0 0 0 64h768z m0-426.666667a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h768z m-128-213.333333a32 32 0 1 0 0-64H256a32 32 0 1 0 0 64h512z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_map" unicode="" d="M362.666667-32a31.872 31.872 0 0 0-13.013334 2.773333l-0.426666 0.170667-277.333334 128A32 32 0 0 0 53.333333 128V768a32 32 0 0 0 45.397334 29.056l138.581333-64 23.381333-10.709333 102.4-47.317334 285.653334 122.368a31.317333 31.317333 0 0 0 4.693333 1.621334l-4.693333-1.621334a32 32 0 0 0 8.234666 2.304l1.365334 0.170667a32 32 0 0 0 1.536 0.085333l1.365333 0.042667 2.389333-0.085333a32 32 0 0 0 1.194667-0.085334l0.853333-0.128 2.816-0.512 1.194667-0.298666c1.621333-0.426667 3.157333-0.981333 4.608-1.621334l0.426667-0.213333 132.394666-61.056 144.938667-66.944A32 32 0 0 0 970.666667 640v-640a32 32 0 0 0-45.397334-29.056l-138.282666 63.829333-126.122667 58.24-285.610667-122.453333-1.194666-0.469333a31.786667 31.786667 0 0 0-7.04-1.792l-3.114667-0.256a32 32 0 0 0-1.152-0.042667z m266.666666 751.530667l-234.666666-100.608v-570.325334l234.666666 100.565334V719.530667z m64-1.493334V148.48l213.333334-98.517333V619.562667l-119.253334 55.04a32.597333 32.597333 0 0 0-0.853333 0.341333l-93.226667 43.093333z m-576 0V148.48l213.333334-98.432V619.52L210.602667 674.944l-0.512 0.298667L117.333333 718.037333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_multiple_selection_of_departments" unicode="" d="M149.333333 522.666667v-469.333334c0-5.888 4.778667-10.666667 10.666667-10.666666h554.666667c30.976-3.456 35.84-57.941333 0-64h-554.666667A74.666667 74.666667 0 0 0 85.333333 53.333333v469.333334c15.445333 50.56 61.568 24.533333 64 0zM469.333333 768a32 32 0 1 0 0-64H288a10.666667 10.666667 0 0 1-10.666667-10.666667v-512c0-5.888 4.778667-10.666667 10.666667-10.666666h597.333333a10.666667 10.666667 0 0 1 10.666667 10.666666V320a32 32 0 1 0 64 0v-138.666667a74.666667 74.666667 0 0 0-74.666667-74.666666h-597.333333A74.666667 74.666667 0 0 0 213.333333 181.333333v512C213.333333 734.549333 246.784 768 288 768H469.333333z m288-394.666667a32 32 0 1 0 0-64h-384a32 32 0 1 0 0 64h384z m-21.333333 416a117.333333 117.333333 0 0 0 86.784-196.266666A159.744 159.744 0 0 0 896 458.666667a32 32 0 1 0-64 0 96 96 0 0 1-192 0 32 32 0 1 0-64 0c0 56.362667 29.141333 105.941333 73.173333 134.4a117.333333 117.333333 0 0 0 86.826667 196.266666z m-277.333333-245.333333a32 32 0 1 0 0-64h-85.333334a32 32 0 0 0 0 64h85.333334zM736 725.333333a53.333333 53.333333 0 1 1 0-106.666666 53.333333 53.333333 0 0 1 0 106.666666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_calendar1" unicode="" d="M661.333333 842.666667a32 32 0 0 0 32-32v-32H853.333333c41.258667 0 74.666667-33.408 74.666667-74.666667V42.666667A74.666667 74.666667 0 0 0 853.333333-32H128A74.666667 74.666667 0 0 0 53.333333 42.666667V704c0 41.216 33.450667 74.666667 74.666667 74.666667h160V810.666667a32 32 0 0 0 64 0v-32h277.333333V810.666667a32 32 0 0 0 32 32z m202.666667-384H117.333333V42.666667a10.666667 10.666667 0 0 1 8.234667-10.368L128 32h725.333333a10.666667 10.666667 0 0 1 10.666667 10.666667v416z m-160-256a32 32 0 1 0 0-64h-128a32 32 0 1 0 0 64h128z m-298.666667 0a32 32 0 1 0 0-64h-128a32 32 0 1 0 0 64h128z m298.666667 170.666666a32 32 0 1 0 0-64h-128a32 32 0 1 0 0 64h128z m-298.666667 0a32 32 0 1 0 0-64h-128a32 32 0 1 0 0 64h128z m-117.333333 341.333334H128a10.666667 10.666667 0 0 1-10.666667-10.666667v-181.333333h746.666667V704a10.666667 10.666667 0 0 1-8.234667 10.368L853.333333 714.666667h-160V640a32 32 0 1 0-64 0V714.666667h-277.333333V640a32 32 0 0 0-64 0V714.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_link1" unicode="" d="M629.248 710.485333a160 160 0 0 0 226.261333-226.304l-377.130666-377.130666a224 224 0 0 0-316.757334 316.8l316.757334 316.8a32 32 0 0 0 45.269333-45.226667l-316.8-316.842667a160 160 0 1 1 226.304-226.261333L810.24 529.493333a96 96 0 0 1-135.765333 135.765334L297.386667 288.085333a32 32 0 1 1 45.226666-45.226666l316.8 316.757333a32 32 0 0 0 45.226667-45.226667L387.925333 197.546667a96 96 0 1 0-135.765333 135.765333l377.130667 377.130667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="a-icon_collectbeifen12" unicode="" d="M832 800a96 96 0 0 0 96-96v-640a96 96 0 0 0-96-96h-640a96 96 0 0 0-96 96v640A96 96 0 0 0 192 800h640z m0-64h-640a32 32 0 0 1-32-32v-640c0-17.664 14.336-32 32-32h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32zM682.666667 586.666667a32 32 0 0 0 32-32v-341.333334a32 32 0 0 0-32-32H341.333333a32 32 0 0 0-32 32V554.666667A32 32 0 0 0 341.333333 586.666667h341.333334z m-32-64h-277.333334v-277.333334h277.333334v277.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_department_single_choice" unicode="" d="M437.333333 757.333333a32 32 0 1 0 0-64H128a10.666667 10.666667 0 0 1-10.666667-10.666666v-597.333334c0-5.888 4.778667-10.666667 10.666667-10.666666h768a10.666667 10.666667 0 0 1 10.666667 10.666666v138.666667a32 32 0 1 0 64 0V85.333333A74.666667 74.666667 0 0 0 896 10.666667H128A74.666667 74.666667 0 0 0 53.333333 85.333333V682.666667c0 41.216 33.450667 74.666667 74.666667 74.666666h309.333333zM640 320a32 32 0 1 0 0-64H170.666667a32 32 0 1 0 0 64h469.333333z m106.666667 416a117.333333 117.333333 0 0 0 86.784-196.266667 159.744 159.744 0 0 0 73.216-134.4 32 32 0 1 0-64 0 96 96 0 0 1-192 0 32 32 0 1 0-64 0c0 56.362667 29.141333 105.941333 73.173333 134.4a117.333333 117.333333 0 0 0 86.826667 196.266667zM426.666667 490.666667a32 32 0 1 0 0-64H170.666667a32 32 0 1 0 0 64h256z m320 181.333333a53.333333 53.333333 0 1 1 0-106.666667 53.333333 53.333333 0 0 1 0 106.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_find" unicode="" d="M938.666667 746.666667A32 32 0 1 0 938.666667 682.666667H85.333333a32 32 0 0 0 0 64h853.333334z m-618.666667-341.333334a32 32 0 1 0 0-64H85.333333a32 32 0 1 0 0 64h234.666667z m0-341.333333a32 32 0 1 0 0-64H85.333333a32 32 0 1 0 0 64h234.666667z m352 469.333333a213.333333 213.333333 0 0 0 162.261333-351.829333l127.146667-128a32 32 0 1 0-45.44-45.141333l-130.218667 131.114666A213.333333 213.333333 0 1 0 672 533.333333z m0-64a149.333333 149.333333 0 1 1 0-298.666666 149.333333 149.333333 0 0 1 0 298.666666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_handwritten_signature" unicode="" d="M896 32a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h768zM632.192 790.613333a32 32 0 0 0 45.269333 0l155.818667-155.904a32 32 0 0 0 0-45.226666L392.106667 148.053333a32 32 0 0 0-22.613334-9.386666H213.333333a32 32 0 0 0-32 32v155.306666a32 32 0 0 0 9.386667 22.613334L632.149333 790.613333z m22.656-67.882666L245.333333 312.789333v-110.122666h110.805334l409.258666 409.472-110.549333 110.592z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_button" unicode="" d="M896 586.666667c41.258667 0 74.666667-33.408 74.666667-74.666667v-298.666667A74.666667 74.666667 0 0 0 896 138.666667H128A74.666667 74.666667 0 0 0 53.333333 213.333333V512c0 41.258667 33.408 74.666667 74.666667 74.666667h768z m0-64H128a10.666667 10.666667 0 0 1-10.666667-10.666667v-298.666667c0-5.888 4.778667-10.666667 10.666667-10.666666h768a10.666667 10.666667 0 0 1 10.666667 10.666666V512a10.666667 10.666667 0 0 1-10.666667 10.666667z m-234.666667-128a32 32 0 1 0 0-64H384a32 32 0 1 0 0 64h277.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_select_data" unicode="" d="M405.333333 757.333333c189.994667 0 344.96-50.261333 351.786667-132.992l0.213333-5.674666v-162.090667a245.376 245.376 0 1 0-140.629333-463.274667l8.618667 2.517334-10.325334-2.986667c-59.306667-16-132.565333-24.832-209.664-24.832-194.304 0-352 52.565333-352 138.666667v512c0 86.101333 157.696 138.666667 352 138.666666z m320-362.666666a180.778667 180.778667 0 0 1-134.954666-60.202667 180.48 180.48 0 0 1-43.776-151.978667A181.546667 181.546667 0 0 1 725.333333 32a181.333333 181.333333 0 0 1 0 362.666667z m118.613334-116.053334a32 32 0 0 0 0-45.226666l-117.333334-117.333334a32 32 0 0 0-45.226666 0l-64 64a32 32 0 0 0 45.226666 45.226667l41.386667-41.344 94.72 94.72a32 32 0 0 0 45.226667 0zM117.333333 364.117333V277.333333c0-31.701333 128.853333-74.666667 288-74.666666 25.6 0 50.688 1.024 74.965334 3.029333A79.957333 79.957333 0 0 0 480 213.333333c0 35.413333 7.552 69.632 21.632 100.821334-30.848-3.2-63.232-4.821333-96.298667-4.821334-119.04 0-224.298667 19.712-288 54.784zM405.333333 480c-119.04 0-224.298667 19.712-288 54.784V448c0-31.701333 128.853333-74.666667 288-74.666667 44.202667 0 86.997333 3.114667 126.08 8.96l19.072 3.114667a244.693333 244.693333 0 0 0 140.032 70.826667l2.816 0.341333 0.085334 78.250667C629.674667 499.712 524.373333 480 405.333333 480z m0 213.333333c-159.146667 0-288-42.965333-288-74.666666 0-31.701333 128.853333-74.666667 288-74.666667s288 42.965333 288 74.666667c0 31.701333-128.853333 74.666667-288 74.666666z m132.48-638.165333l-0.213333 0.256-0.085333 0.085333-2.986667 3.626667a246.570667 246.570667 0 0 0-12.245333 16.469333l-2.261334 3.413334a245.930667 245.930667 0 0 0-27.093333 55.594666l-0.682667 2.048a243.925333 243.925333 0 0 0-0.981333 2.986667l-0.810667 2.688c-27.52-2.432-56.064-3.669333-85.12-3.669333-119.04 0-224.298667 19.712-288 54.784V106.666667c0-31.701333 128.853333-74.666667 288-74.666667 45.226667 0 88.874667 3.242667 128.341334 9.258667l14.506666 2.432-3.114666 3.2-7.253334 8.277333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_single_line_text" unicode="" d="M832 800a96 96 0 0 0 96-96v-640a96 96 0 0 0-96-96h-640a96 96 0 0 0-96 96v640A96 96 0 0 0 192 800h640z m0-64h-640a32 32 0 0 1-32-32v-640c0-17.664 14.336-32 32-32h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32z m-362.666667-597.333333a32 32 0 1 0 0 64h10.666667V512c0 3.754667 0.64 7.338667 1.834667 10.666667H373.333333v-32a32 32 0 0 0-27.648-31.701334L341.333333 458.666667a32 32 0 0 0-32 32V554.666667A32 32 0 0 0 341.333333 586.666667h341.333334a32 32 0 0 0 32-32v-64a32 32 0 1 0-64 0v32h-108.501334a31.957333 31.957333 0 0 0 1.834667-10.666667v-309.333333H554.666667a32 32 0 1 0 0-64h-85.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_multiple_choice_of_members" unicode="" d="M405.333333 800a181.333333 181.333333 0 1 0 0-362.666667 181.333333 181.333333 0 0 0 0 362.666667z m0-64a117.333333 117.333333 0 1 1 0-234.666667 117.333333 117.333333 0 0 1 0 234.666667z m262.869334 27.178667a32 32 0 0 0 43.946666 10.88A181.205333 181.205333 0 0 0 800 618.666667a181.205333 181.205333 0 0 0-87.893333-155.392 32 32 0 0 0-33.024 54.784A117.248 117.248 0 0 1 736 618.666667c0 41.642667-21.845333 79.488-56.874667 100.608a32 32 0 0 0-10.922666 43.946666zM452.266667 330.666667c125.909333 0 155.861333-2.432 194.389333-22.101334a202.666667 202.666667 0 0 0 88.576-88.576c19.626667-38.528 22.101333-68.48 22.101333-194.389333v-25.6a32 32 0 0 0-32-32H85.333333a32 32 0 0 0-32 32v25.6c0 125.909333 2.432 155.861333 22.101334 194.389333a202.666667 202.666667 0 0 0 88.576 88.576c38.528 19.626667 68.48 22.101333 194.389333 22.101334h93.866667z m22.954666-64H335.445333c-93.952-0.384-118.869333-3.114667-142.378666-15.104a138.666667 138.666667 0 0 1-60.586667-60.586667c-12.032-23.552-14.762667-48.469333-15.104-142.421333l-0.042667-16.554667h575.957334v5.376c-0.128 99.370667-2.432 127.146667-13.738667 150.869333l-1.322667 2.688a138.666667 138.666667 0 0 1-60.586666 60.586667c-23.552 12.032-48.469333 14.762667-142.421334 15.104z m341.76 27.904a32 32 0 0 0 43.008 13.994666 202.666667 202.666667 0 0 0 88.576-88.576c19.626667-38.528 22.101333-68.48 22.101334-194.389333v-25.6a32 32 0 1 0-64 0v25.6c0 113.066667-2.218667 140.032-15.104 165.333333a138.666667 138.666667 0 0 1-60.586667 60.586667 32 32 0 0 0-13.994667 43.093333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_subform" unicode="" d="M810.666667 842.666667c41.216 0 74.666667-33.450667 74.666666-74.666667v-768A74.666667 74.666667 0 0 0 810.666667-74.666667H213.333333A74.666667 74.666667 0 0 0 138.666667 0V768c0 41.216 33.450667 74.666667 74.666666 74.666667h597.333334z m0-64H213.333333a10.666667 10.666667 0 0 1-10.666666-10.666667v-768c0-5.888 4.778667-10.666667 10.666666-10.666667h597.333334a10.666667 10.666667 0 0 1 10.666666 10.666667V768a10.666667 10.666667 0 0 1-10.666666 10.666667z m-106.666667-576a32 32 0 1 0 0-64h-256a32 32 0 1 0 0 64h256z m0 213.333333a32 32 0 1 0 0-64h-256a32 32 0 1 0 0 64h256z m0 213.333333a32 32 0 1 0 0-64h-256a32 32 0 1 0 0 64h256zM320 554.666667a42.666667 42.666667 0 1 1 0 85.333333 42.666667 42.666667 0 0 1 0-85.333333zM320 341.333333a42.666667 42.666667 0 1 1 0 85.333334 42.666667 42.666667 0 0 1 0-85.333334zM320 128a42.666667 42.666667 0 1 1 0 85.333333 42.666667 42.666667 0 0 1 0-85.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_picture" unicode="" d="M821.333333 810.666667a96 96 0 0 0 96-96v-640a96 96 0 0 0-96-96h-640A96 96 0 0 0 85.333333 74.666667v640A96 96 0 0 0 181.333333 810.666667h640zM367.061333 494.848L149.333333 295.338667v-220.672c0-17.664 14.336-32 32-32h640a32 32 0 0 1 32 32v304L725.077333 474.88a10.666667 10.666667 0 0 1-13.952-1.024L615.68 378.453333l77.141333-66.133333a32 32 0 0 0-41.642666-48.64L381.226667 495.146667a10.666667 10.666667 0 0 1-14.165334-0.256zM853.333333 714.666667a32 32 0 0 1-32 32h-640a32 32 0 0 1-32-32v-332.586667l174.506667 159.957333a74.666667 74.666667 0 0 0 99.029333 1.664l144.042667-123.477333 98.986667 98.901333a74.666667 74.666667 0 0 0 97.578666 6.954667L853.333333 458.666667V714.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_phone" unicode="" d="M810.666667 842.666667c41.258667 0 74.666667-33.408 74.666666-74.666667v-768A74.666667 74.666667 0 0 0 810.666667-74.666667H213.333333A74.666667 74.666667 0 0 0 138.666667 0V768c0 41.216 33.450667 74.666667 74.666666 74.666667h597.333334z m10.666666-618.666667H202.666667V0a10.666667 10.666667 0 0 1 8.234666-10.368L213.333333-10.666667h597.333334a10.666667 10.666667 0 0 1 10.666666 10.666667v224z m-266.666666-85.333333a32 32 0 1 0 0-64h-85.333334a32 32 0 1 0 0 64h85.333334z m256 640H213.333333a10.666667 10.666667 0 0 1-10.666666-10.666667v-480h618.666666V768a10.666667 10.666667 0 0 1-10.666666 10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_local" unicode="" d="M822.912 227.84c92.074667-27.648 147.754667-67.114667 147.754667-121.173333 0-98.688-204.330667-160-458.666667-160S53.333333 7.978667 53.333333 106.666667c0 54.058667 55.68 93.525333 147.754667 121.173333a32 32 0 1 0 18.389333-61.312c-66.858667-20.053333-102.144-45.098667-102.144-59.861333 0-14.762667 35.285333-39.808 102.144-59.861334 76.330667-22.869333 180.778667-36.138667 292.522667-36.138666 111.786667 0 216.192 13.226667 292.522667 36.138666 66.858667 20.053333 102.144 45.098667 102.144 59.861334 0 14.762667-35.285333 39.808-102.144 59.861333a32 32 0 1 0 18.346666 61.312zM512 842.666667c170.666667 0 309.333333-135.253333 309.333333-302.506667 0-101.802667-55.808-201.514667-147.712-296.277333a959.402667 959.402667 0 0 0-144.128-121.344 32 32 0 0 0-34.986666 0 882.133333 882.133333 0 0 0-45.482667 33.152 959.402667 959.402667 0 0 0-98.645333 88.192C258.474667 338.645333 202.666667 438.357333 202.666667 540.117333 202.666667 707.413333 341.333333 842.666667 512 842.666667z m0-64c-135.68 0-245.333333-106.965333-245.333333-238.506667 0-81.621333 48.213333-167.765333 129.621333-251.733333a896.170667 896.170667 0 0 1 115.285333-99.754667l0.426667-0.298667 0.426667 0.298667c4.821333 3.498667 9.898667 7.253333 15.146666 11.264l8.106667 6.229333a896.170667 896.170667 0 0 1 92.032 82.261334c81.408 83.968 129.621333 170.112 129.621333 251.733333 0 131.541333-109.653333 238.506667-245.333333 238.506667z m0-106.666667a138.666667 138.666667 0 1 0 0-277.333333 138.666667 138.666667 0 0 0 0 277.333333z m0-64a74.666667 74.666667 0 1 1 0-149.333333 74.666667 74.666667 0 0 1 0 149.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_dividing_line" unicode="" d="M938.666667 405.333333a32 32 0 1 0 0-64H128a32 32 0 1 0 0 64h810.666667z m-341.333334-298.666666a32 32 0 1 0 0-64h-128a32 32 0 1 0 0 64h128z m341.333334 0a32 32 0 1 0 0-64h-128a32 32 0 1 0 0 64h128z m-341.333334 597.333333A32 32 0 1 0 597.333333 640h-128a32 32 0 1 0 0 64h128z m-341.333333-597.333333A32 32 0 1 0 256 42.666667H128a32 32 0 1 0 0 64h128z m0 597.333333A32 32 0 0 0 256 640H128a32 32 0 0 0 0 64h128z m682.666667 0A32 32 0 1 0 938.666667 640h-128a32 32 0 1 0 0 64h128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_multiline" unicode="" d="M832 800a96 96 0 0 0 96-96v-640a96 96 0 0 0-96-96h-640a96 96 0 0 0-96 96v640A96 96 0 0 0 192 800h640z m0-64h-640a32 32 0 0 1-32-32v-640c0-17.664 14.336-32 32-32h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32zM373.333333 106.666667a32 32 0 1 0 0 64H384V480c0 3.754667 0.64 7.338667 1.834667 10.666667H277.333333v-32a32 32 0 0 0-27.648-31.701334L245.333333 426.666667a32 32 0 0 0-32 32v64A32 32 0 0 0 245.333333 554.666667h341.333334a32 32 0 0 0 32-32v-64a32 32 0 1 0-64 0V490.666667h-108.501334a31.957333 31.957333 0 0 0 1.834667-10.666667V170.666667h10.666667a32 32 0 1 0 0-64h-85.333334zM426.666667 672a32 32 0 1 0 0-64H256a32 32 0 0 0 0 64h170.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_member_single_choice" unicode="" d="M512 800a181.333333 181.333333 0 1 0 0-362.666667 181.333333 181.333333 0 0 0 0 362.666667z m0-64a117.333333 117.333333 0 1 1 0-234.666667 117.333333 117.333333 0 0 1 0 234.666667z m110.933333-405.333333c125.909333 0 155.861333-2.432 194.389334-22.101334a202.666667 202.666667 0 0 0 88.576-88.576c19.626667-38.528 22.101333-68.48 22.101333-194.389333v-25.6a32 32 0 0 0-32-32H128a32 32 0 0 0-32 32v25.6c0 125.909333 2.432 155.861333 22.101333 194.389333a202.666667 202.666667 0 0 0 88.576 88.576c38.528 19.626667 68.48 22.101333 194.389334 22.101334h221.866666z m22.954667-64H378.112c-93.952-0.384-118.869333-3.114667-142.378667-15.104a138.666667 138.666667 0 0 1-60.586666-60.586667c-12.032-23.552-14.762667-48.469333-15.104-142.421333l-0.042667-16.554667h703.957333v5.376c-0.128 99.370667-2.432 127.146667-13.738666 150.869333l-1.322667 2.688a138.666667 138.666667 0 0 1-60.586667 60.586667c-23.552 12.032-48.469333 14.762667-142.421333 15.104z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_radio" unicode="" d="M512 842.666667c253.312 0 458.666667-205.354667 458.666667-458.666667S765.312-74.666667 512-74.666667 53.333333 130.688 53.333333 384 258.688 842.666667 512 842.666667z m0-64a394.666667 394.666667 0 1 1 0-789.333334 394.666667 394.666667 0 0 1 0 789.333334z m0-192a202.666667 202.666667 0 1 0 0-405.333334 202.666667 202.666667 0 0 0 0 405.333334z m0-64a138.666667 138.666667 0 1 1 0-277.333334 138.666667 138.666667 0 0 1 0 277.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_serial_number" unicode="" d="M693.333333 544c41.216 0 74.666667-33.450667 74.666667-74.666667v-384a74.666667 74.666667 0 0 0-74.666667-74.666666h-554.666666A74.666667 74.666667 0 0 0 64 85.333333v384c0 41.216 33.450667 74.666667 74.666667 74.666667h554.666666z m10.666667-256H128V85.333333c0-5.888 4.778667-10.666667 10.666667-10.666666h554.666666a10.666667 10.666667 0 0 1 10.666667 10.666666v202.666667z m-288-64a32 32 0 1 0 0-64h-170.666667a32 32 0 1 0 0 64h170.666667z m170.666667 0a32 32 0 1 0 0-64h-42.666667a32 32 0 1 0 0 64h42.666667z m320 576c41.258667 0 74.666667-33.408 74.666666-74.666667v-384a74.666667 74.666667 0 0 0-74.666666-74.666666h-42.666667a32 32 0 1 0 0 64h42.666667a10.666667 10.666667 0 0 1 10.666666 10.666666V725.333333a10.666667 10.666667 0 0 1-10.666666 10.666667h-554.666667A10.666667 10.666667 0 0 1 341.333333 725.333333v-85.333333a32 32 0 0 0-64 0V725.333333c0 41.258667 33.408 74.666667 74.666667 74.666667h554.666667z m-213.333334-320h-554.666666A10.666667 10.666667 0 0 1 128 469.333333v-117.333333h576V469.333333a10.666667 10.666667 0 0 1-10.666667 10.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_text_recognition" unicode="" d="M128 224a32 32 0 0 0 32-32v-128c0-17.664 14.336-32 32-32h128a32 32 0 1 0 0-64h-128a96 96 0 0 0-96 96v128a32 32 0 0 0 32 32z m768 0a32 32 0 0 0 32-32v-128a96 96 0 0 0-96-96h-128a32 32 0 1 0 0 64h128a32 32 0 0 1 32 32v128a32 32 0 0 0 32 32z m-234.666667 384a32 32 0 1 0 0-64h-117.333333v-394.666667a32 32 0 1 0-64 0V544H362.666667a32 32 0 0 0 0 64h298.666666z m170.666667 192a96 96 0 0 0 96-96v-128a32 32 0 1 0-64 0v128a32 32 0 0 1-32 32h-128a32 32 0 1 0 0 64h128z m-512 0a32 32 0 0 0 0-64h-128a32 32 0 0 1-32-32v-128a32 32 0 0 0-64 0v128A96 96 0 0 0 192 800h128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pull_down_single_choice" unicode="" d="M213.333333 202.666667a117.333333 117.333333 0 1 0 0-234.666667 117.333333 117.333333 0 0 0 0 234.666667z m0-64a53.333333 53.333333 0 1 1 0-106.666667 53.333333 53.333333 0 0 1 0 106.666667z m0 661.333333a117.333333 117.333333 0 1 0 0-234.666667 117.333333 117.333333 0 0 0 0 234.666667z m0-64a53.333333 53.333333 0 1 1 0-106.666667 53.333333 53.333333 0 0 1 0 106.666667z m0-234.666667a117.333333 117.333333 0 1 0 0-234.666666 117.333333 117.333333 0 0 0 0 234.666666z m0-64a53.333333 53.333333 0 1 1 0-106.666666 53.333333 53.333333 0 0 1 0 106.666666z m725.333334-21.333333a32 32 0 1 0 0-64H469.333333a32 32 0 1 0 0 64h469.333334z m0-298.666667a32 32 0 1 0 0-64H469.333333a32 32 0 1 0 0 64h469.333334z m0 597.333334a32 32 0 1 0 0-64H469.333333a32 32 0 1 0 0 64h469.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_hashtag_key" unicode="" d="M832 800a96 96 0 0 0 96-96v-640a96 96 0 0 0-96-96h-640a96 96 0 0 0-96 96v640A96 96 0 0 0 192 800h640z m0-64h-640a32 32 0 0 1-32-32v-640c0-17.664 14.336-32 32-32h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32z m-213.333333-149.333333a32 32 0 0 0 32-32v-32H682.666667a32 32 0 1 0 0-64h-32v-149.333334H682.666667a32 32 0 1 0 0-64h-32V213.333333a32 32 0 1 0-64 0v32h-149.333334V213.333333a32 32 0 1 0-64 0v32H341.333333a32 32 0 1 0 0 64h32v149.333334H341.333333a32 32 0 0 0 0 64h32V554.666667a32 32 0 0 0 64 0v-32h149.333334V554.666667a32 32 0 0 0 32 32z m-32-128h-149.333334v-149.333334h149.333334v149.333334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pull_down_multiple_selection" unicode="" d="M938.666667 416a32 32 0 1 0 0-64H426.666667a32 32 0 1 0 0 64h512z m0-298.666667a32 32 0 1 0 0-64H426.666667a32 32 0 1 0 0 64h512z m0 597.333334a32 32 0 1 0 0-64H426.666667a32 32 0 0 0 0 64h512z m-682.666667-512a32 32 0 0 0 32-32v-170.666667a32 32 0 0 0-32-32H85.333333a32 32 0 0 0-32 32v170.666667a32 32 0 0 0 32 32h170.666667z m-32-64h-106.666667v-106.666667h106.666667v106.666667zM256 501.333333a32 32 0 0 0 32-32v-170.666666a32 32 0 0 0-32-32H85.333333a32 32 0 0 0-32 32v170.666666A32 32 0 0 0 85.333333 501.333333h170.666667z m-32-64h-106.666667v-106.666666h106.666667v106.666666zM256 800a32 32 0 0 0 32-32v-170.666667a32 32 0 0 0-32-32H85.333333A32 32 0 0 0 53.333333 597.333333V768A32 32 0 0 0 85.333333 800h170.666667z m-32-64h-106.666667v-106.666667h106.666667v106.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="order-descending" unicode="" d="M608 736H128v-64h480v64zM768 736v-626.752l137.344 137.408 45.248-45.312-188.672-188.672a33.92 33.92 0 0 0-57.92 23.936V736h64zM128 416h480v-64H128v64zM608 96H128v-64h480v64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_video" unicode="" d="M707.2 400.64a19.2 19.2 0 0 0 0-33.28l-326.4-188.416a19.2 19.2 0 0 0-28.8 16.64V572.48a19.2 19.2 0 0 0 28.8 16.64l326.4-188.48zM416 494.848v-221.696L608 384l-192 110.848zM128 704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704z m64 0v-640h640V704H192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_zoom_in" unicode="" d="M384 448v-128h64V448h128V512H448V640H384v-128H256v-64h128zM608.704 242.048a304.896 304.896 0 1 0 45.248 45.248l225.984-225.984-45.248-45.248-225.984 225.92z m49.152 237.056a240.896 240.896 0 1 1-481.856 0 240.896 240.896 0 0 1 481.792 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="order-ascending" unicode="" d="M768 32V658.752l137.344-137.408 45.248 45.312-188.672 188.672a33.92 33.92 0 0 1-57.92-23.936V32h64zM608 32H128v64h480v-64zM128 352h480v64H128v-64zM608 672H128v64h480v-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_zoom_out" unicode="" d="M576 448H256V512h320v-64zM608.704 242.048a304.896 304.896 0 1 0 45.248 45.248l225.984-225.984-45.248-45.248-225.984 225.92z m49.152 237.056a240.896 240.896 0 1 1-481.856 0 240.896 240.896 0 0 1 481.792 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_usergroup" unicode="" d="M384 832c33.664 0 65.408-8 93.568-22.144l-40.32-52.032a144 144 0 1 1-56.192-277.76v-64A208 208 0 0 0 384 832zM34.56 292.096A821.056 821.056 0 0 0 381.12 369.92v-64c-113.28-0.448-220.352-25.792-317.056-70.656V128h118.848v-64H32a32 32 0 0 0-32 32v140.224c0 23.808 13.12 45.824 34.56 55.872zM640 363.904a208 208 0 1 0 0 416 208 208 0 0 0 0-416z m0 64a144 144 0 1 1 0 288 144 144 0 0 1 0-288zM1024 158.848a61.184 61.184 0 0 1-34.624 55.872A821.12 821.12 0 0 1 640 292.48a821.12 821.12 0 0 1-349.44-77.76 61.184 61.184 0 0 1-34.56-55.872V0a32 32 0 0 1 32-32h704a32 32 0 0 1 32 32v158.848z m-64-1.024V32H320v125.824a757.12 757.12 0 0 0 320 70.656c114.368 0 222.464-25.408 320-70.656z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_wifi" unicode="" d="M649.856 210.944l44.672 45.824c-52.8 53.696-117.056 83.2-183.488 83.2-65.664 0-129.152-28.8-181.568-81.28l44.672-45.824c42.432 42.88 90.88 63.04 136.896 63.04 46.72 0 95.872-20.8 138.816-64.96zM779.392 343.872l44.736 45.824c-87.936 90.56-198.4 140.672-313.024 140.672-113.856 0-223.616-49.408-311.232-138.752l44.736-45.824c77.248 79.36 171.648 120.576 266.496 120.576 95.552 0 190.72-41.92 268.288-122.496zM904.512 472.128l44.736 45.888C827.52 643.84 672.192 713.6 511.104 713.6c-160.384 0-314.88-69.12-436.288-193.792l44.672-45.824C230.336 588.416 369.28 649.664 511.104 649.664c142.464 0 282.24-61.888 393.408-177.536zM576 96a64 64 0 1 0-128 0 64 64 0 0 0 128 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_view_module" unicode="" d="M256 416h448v-64H256v64zM640 256H256v-64h384v64zM128 704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704z m64 0v-128h640V704H192z m0-192v-448h640V512H192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="view-column" unicode="" d="M224 768v-768h64V768h-64z m256-768V768h64v-768h-64z m256 0V768h64v-768h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="view-list" unicode="" d="M896 608H128v64h768v-64zM896 352H128v64h768v-64zM128 96h768v64H128v-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_wallet" unicode="" d="M736 608h128a64 64 0 0 0 64-64V128a64 64 0 0 0-64-64h-704a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64v-96z m-64 96h-512v-96h512V704z m192-160h-704V128h704V544z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_usb" unicode="" d="M480 512h-128V576h128v-64zM544 512h128V576h-128v-64zM256 384V736a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V384a64 64 0 0 0 64-64v-320a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64V320a64 64 0 0 0 64 64z m64 0h384V704H320v-320zM256 320v-320h512V320H256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_user_add" unicode="" d="M512 352a224 224 0 1 1 0 448 224 224 0 0 1 0-448z m0 64a160 160 0 1 0 0 320 160 160 0 0 0 0-320zM736 192.896A817.536 817.536 0 0 1 512 224c-125.888 0-244.864-28.544-352-79.36v-112.64h448v-64H128a32 32 0 0 0-32 32v145.6a61.44 61.44 0 0 0 34.368 55.808A882.24 882.24 0 0 0 512 288c77.44 0 152.384-10.048 224-28.8v-66.304zM816 16V-128h64v144H1024v64h-144V224h-64v-144H672v-64h144z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_swap_right" unicode="" d="M818.752 320H64v-64h827.392a33.92 33.92 0 0 1 24 57.92l-252.8 252.736-45.184-45.312L818.752 320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_user_avatar" unicode="" d="M512 224c79.424 0 155.008-20.032 224-56.32v-71.68h64v73.088a60.224 60.224 0 0 1-31.104 53.632A542.72 542.72 0 0 1 512 288a542.72 542.72 0 0 1-256.896-65.28 60.224 60.224 0 0 1-31.104-53.632V96h64v71.68A478.272 478.272 0 0 0 512 224zM672 512a160 160 0 1 0-320 0 160 160 0 0 0 320 0z m-64 0a96 96 0 1 1-192 0 96 96 0 0 1 192 0zM160 800a64 64 0 0 1-64-64v-704a64 64 0 0 1 64-64h704a64 64 0 0 1 64 64v704a64 64 0 0 1-64 64h-704z m704-64v-704h-704v704h704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_thumb_up" unicode="" d="M640 512h206.08a64 64 0 0 0 62.08-79.552l-96-384a64 64 0 0 0-62.08-48.448H192a64 64 0 0 0-64 64V384a64 64 0 0 0 64 64h128l128 320h128a64 64 0 0 0 64-64v-192zM384 435.648V64h366.08l96 384H576V704H491.328L384 435.648zM320 384H192v-320h128V384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_time_filled" unicode="" d="M512-64A448 448 0 1 1 512 832a448 448 0 0 1 0-896zM480 576h64v-190.4l182.656-182.656-45.248-45.248L480 359.104V576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_tools" unicode="" d="M624 368l35.968-9.856c63.936-17.664 133.632-1.6 182.144 46.912a185.856 185.856 0 0 1 51.648 160.32L826.24 497.728a96 96 0 0 0-135.744 0l-27.2 27.2a96 96 0 0 0 0 135.744l67.648 67.584a185.856 185.856 0 0 1-160.32-51.648 186.368 186.368 0 0 1-46.912-182.144l9.856-35.904-371.456-371.456 90.496-90.56 371.52 371.52z m159.616 413.056c21.12-7.168 41.536-17.088 60.672-29.888L708.48 615.424a32 32 0 0 1 0-45.248l27.2-27.2a32 32 0 0 1 45.248 0l135.744 135.808c12.8-19.136 22.72-39.552 29.824-60.672 29.824-88.32 10.24-188.928-59.136-258.304a250.368 250.368 0 0 0-244.416-63.36l-345.152-345.152a64 64 0 0 0-90.496 0l-90.496 90.496a64 64 0 0 0 0 90.56L461.952 477.44a250.368 250.368 0 0 0 63.36 244.48c69.376 69.312 169.984 88.96 258.304 59.136z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_user_clear" unicode="" d="M512 352a224 224 0 1 1 0 448 224 224 0 0 1 0-448z m0 64a160 160 0 1 0 0 320 160 160 0 0 0 0-320zM672 208.32A819.584 819.584 0 0 1 512 224c-125.888 0-244.864-28.544-352-79.36v-112.64h512v-64H128a32 32 0 0 0-32 32v145.6a61.44 61.44 0 0 0 34.368 55.808A882.24 882.24 0 0 0 512 288c54.656 0 108.16-4.992 160-14.528v-65.152zM729.856-18.752l101.76 101.824-101.76 101.824 45.248 45.248 101.76-101.76 101.888 101.76 45.248-45.248-101.824-101.824 101.76-101.76-45.184-45.312-101.824 101.76L775.04-64l-45.248 45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_time" unicode="" d="M480 640v-280.896L640 192l45.248 45.248L544 385.6V640h-64zM960 384A448 448 0 1 0 64 384a448 448 0 0 0 896 0z m-64 0A384 384 0 1 1 128 384a384 384 0 0 1 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_unfold_less" unicode="" d="M278.784 760L512 524.032l233.28 235.968 45.44-45.056-251.392-254.336a38.4 38.4 0 0 0-54.656 0L233.216 714.944l45.568 45.056zM275.712 10.88L512 247.104l236.288-236.352 45.248 45.248-254.4 254.464a38.4 38.4 0 0 1-54.272 0L230.4 56.064l45.248-45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_thumb_down" unicode="" d="M640 270.656h206.08a64 64 0 0 1 62.08 79.552l-96 384a64 64 0 0 1-62.08 48.448H192a64 64 0 0 1-64-64v-320a64 64 0 0 1 64-64h128l128-320h128a64 64 0 0 1 64 64v192zM384 347.008V718.656h366.08l96-384H576v-256H491.328L384 347.008z m-64 51.648H192v320h128v-320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_user_talk" unicode="" d="M852.992 395.008a256 256 0 0 1 0 361.984l45.312 45.312a320 320 0 0 0 0-452.608l-45.312 45.312zM704 576a224 224 0 1 0-448 0 224 224 0 0 0 448 0z m-64 0a160 160 0 1 1-320 0 160 160 0 0 1 320 0zM861.632 201.408a61.44 61.44 0 0 0 34.368-55.808V0a32 32 0 0 0-32-32h-768A32 32 0 0 0 64 0v145.6a61.44 61.44 0 0 0 34.368 55.808A882.24 882.24 0 0 0 480 288c136.512 0 265.6-31.168 381.632-86.592zM480 224c-125.888 0-244.864-28.544-352-79.36v-112.64h704v112.64a818.24 818.24 0 0 1-352 79.36zM762.496 666.496a128 128 0 0 0 0-180.992l45.248-45.248a192 192 0 0 1 0 271.488l-45.248-45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_tips" unicode="" d="M512 832a317.248 317.248 0 0 1-226.176-93.824A317.248 317.248 0 0 1 192 512c0-88 35.456-168.32 93.76-226.048 19.776-20.288 42.176-37.12 66.24-51.008V128a64 64 0 0 1 64-64h192a64 64 0 0 1 64 64v106.944c24.064 13.824 46.464 30.72 66.24 51.008A317.248 317.248 0 0 1 832 512c0 177.024-142.976 320-320 320zM331.264 693.056A253.248 253.248 0 0 0 512 768c141.696 0 256-114.304 256-256a253.184 253.184 0 0 0-74.944-180.736l-0.512-0.512a245.248 245.248 0 0 0-66.88-48l-17.664-8.896V128h-192V273.856l-17.664 8.832a245.248 245.248 0 0 0-66.88 48.064l-0.512 0.512A253.248 253.248 0 0 0 256 512c0 70.656 28.48 134.784 74.944 180.736l0.32 0.32zM352 0v-64h320v64h-320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_unfold_more" unicode="" d="M745.28 458.24L512 694.144 278.784 458.24l-45.568 44.992 251.52 254.336a38.4 38.4 0 0 0 54.592 0l251.456-254.336-45.504-44.992zM748.288 309.888L512 73.6 275.712 309.888l-45.248-45.248 254.4-254.4a38.4 38.4 0 0 1 54.272 0L793.6 264.64l-45.312 45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_upload" unicode="" d="M239.232 468.608L480 709.504V160h64V709.504l240.896-240.896 45.248 45.248-295.488 295.488a32 32 0 0 1-45.248 0L193.92 513.92l45.312-45.248zM128 192v-128a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64v128h-64v-128H192v128H128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_user" unicode="" d="M736 576a224 224 0 1 0-448 0 224 224 0 0 0 448 0z m-64 0a160 160 0 1 1-320 0 160 160 0 0 1 320 0zM893.632 201.408a61.44 61.44 0 0 0 34.368-55.808V0a32 32 0 0 0-32-32H128a32 32 0 0 0-32 32v145.6a61.44 61.44 0 0 0 34.368 55.808A882.24 882.24 0 0 0 512 288c136.512 0 265.6-31.168 381.632-86.592zM512 224c-125.888 0-244.864-28.544-352-79.36v-112.64h704v112.64A818.24 818.24 0 0 1 512 224z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_usergroup_add" unicode="" d="M847.04512 80v-112h64v112h112v64h-112V256h-64v-112h-112v-64h112zM477.57312 809.856A208 208 0 1 1 381.06112 416v64a144 144 0 1 0 56.128 277.76l40.32 52.032zM381.06112 369.92A821.056 821.056 0 0 1 34.56512 292.032a61.184 61.184 0 0 1-34.624-55.872V96a32 32 0 0 1 32-32h150.848v64H64.00512v107.2a756.992 756.992 0 0 0 317.056 70.656v64zM848.00512 571.904a208 208 0 1 0-416 0 208 208 0 0 0 416 0z m-64 0a144 144 0 1 1-288 0 144 144 0 0 1 288 0zM768.00512 217.664a760.448 760.448 0 0 1-448-59.84V32h448v-64H288.00512A32 32 0 0 0 256.00512 0v158.848c0 23.808 13.12 45.76 34.56 55.872A825.088 825.088 0 0 0 768.00512 282.56V217.6z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_swap" unicode="" d="M80 512h752.512L586.496 751.936l44.672 45.824 298.944-291.584a33.92 33.92 0 0 0-23.68-58.176H80V512zM944 256H193.28l243.84-230.4-43.904-46.528-298.88 282.368A33.92 33.92 0 0 0 117.76 320H944v-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_usergroup_clear" unicode="" d="M477.57312 809.856A208 208 0 1 1 381.06112 416v64a144 144 0 1 0 56.128 277.76l40.32 52.032zM381.06112 369.92A821.056 821.056 0 0 1 34.56512 292.032a61.184 61.184 0 0 1-34.624-55.872V96a32 32 0 0 1 32-32h150.848v64H64.00512v107.2a756.992 756.992 0 0 0 317.056 70.656v64zM848.00512 571.904a208 208 0 1 0-416 0 208 208 0 0 0 416 0z m-64 0a144 144 0 1 1-288 0 144 144 0 0 1 288 0zM704.00512 225.792a757.12 757.12 0 0 1-384-68.032V32h352v-64h-384A32 32 0 0 0 256.00512 0v158.848c0 23.808 13.12 45.76 34.56 55.872A821.12 821.12 0 0 0 704.00512 289.92v-64.192zM840.77312 105.984l-92.736-92.736 45.248-45.248 92.736 92.736 92.736-92.736 45.248 45.248-92.736 92.736 92.8 92.736-45.312 45.248-92.736-92.736-92.736 92.736-45.248-45.248 92.736-92.736z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_user_circle" unicode="" d="M512 320a177.92 177.92 0 1 1 0 355.84A177.92 177.92 0 0 1 512 320z m0 64a113.92 113.92 0 1 0 0 227.84A113.92 113.92 0 0 0 512 384zM512-64A448 448 0 1 1 512 832a448 448 0 0 1 0-896z m319.68 235.2C734.464 225.472 626.24 256 512 256c-114.304 0-222.4-30.464-319.68-84.8a384 384 0 1 0 639.424 0z m-40.448-50.752A382.912 382.912 0 0 0 512 0c-110.08 0-209.28 46.272-279.232 120.448C318.72 166.528 412.992 192 512 192c99.008 0 193.28-25.472 279.232-71.552z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_queue" unicode="" d="M256 704h576v-576h64V704a64 64 0 0 1-64 64H256v-64zM421.312 293.312v-186.624h64V293.312h176v64h-176v176h-64v-176H234.688v-64h186.624zM128 64a64 64 0 0 1 64-64h512a64 64 0 0 1 64 64V576a64 64 0 0 1-64 64H192a64 64 0 0 1-64-64v-512z m64 512h512v-512H192V576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_refresh" unicode="" d="M512 722.496c185.344 0 336.192-151.232 336.192-338.432h61.568c0 220.864-178.112 399.936-397.76 399.936A397.056 397.056 0 0 1 173.44 593.92V726.848H112v-198.784a32 32 0 0 1 32-32h197.568v61.696H223.36A335.744 335.744 0 0 0 512 722.496zM114.304 384.064h61.44c0-187.2 150.912-338.368 336.256-338.368a335.744 335.744 0 0 1 288.64 164.736h-118.208v61.696h197.568a32 32 0 0 0 32-32v-198.848h-61.376v132.928a397.056 397.056 0 0 0-338.56-190.08c-219.712 0-397.76 179.072-397.76 400z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pin" unicode="" d="M801.152 810.24a38.4 38.4 0 0 1-51.904 2.24L490.368 593.984l-49.344 49.344a38.4 38.4 0 0 1-54.336 0L251.968 508.672a38.4 38.4 0 0 1 0-54.336l142.592-142.528-262.912-262.912 45.248-45.248 262.912 262.912 142.528-142.592a38.4 38.4 0 0 1 54.336 0l134.656 134.72a38.4 38.4 0 0 1 0 54.336l-49.28 49.28 218.432 258.944a38.4 38.4 0 0 1-2.176 51.84l-137.152 137.216z m-28.608-61.824l103.872-103.872-241.28-285.888 72.896-72.832-98.56-98.496-294.144 294.208 98.56 98.432 72.768-72.832 285.888 241.28z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_poweroff" unicode="" d="M480 832v-448h64V832h-64zM96 352A416 416 0 0 0 317.952 720l32-55.488a352 352 0 1 1 323.968 0l32.128 55.488A416 416 0 1 0 96 352z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_photo" unicode="" d="M704 384a192 192 0 1 0-384 0 192 192 0 0 0 384 0z m-64 0a128 128 0 1 1-256 0 128 128 0 0 1 256 0zM387.456 768a38.4 38.4 0 0 1-32-17.088L302.848 672H128.64a32.64 32.64 0 0 1-32.64-32.64v-542.72c0-18.048 14.592-32.64 32.64-32.64h766.72a32.64 32.64 0 0 1 32.64 32.64V639.36a32.64 32.64 0 0 1-32.64 32.64h-174.208l-52.608 78.912a38.4 38.4 0 0 1-32 17.088H387.456z m13.696-64h221.696l64-96H864V128h-704V608h177.152l64 96z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_precise_monitor" unicode="" d="M480 800V576h64V800h-64zM398.848 542.4L172.608 768.64l-45.248-45.248 226.24-226.24 45.248 45.248z m226.304 0l226.24 226.24 45.248-45.248-226.24-226.24-45.248 45.248zM576 384a64 64 0 0 0-119.424-32H96v64h360.576A64 64 0 0 0 576 384zM353.6 270.848L127.36 44.608l45.248-45.248 226.24 226.24-45.248 45.248z m316.8 0l226.24-226.24-45.248-45.248-226.24 226.24 45.248 45.248zM928 416H704v-64h224v64z m-448-448V192h64v-224h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_print" unicode="" d="M255.936 768.064v-128h-64c-35.584 0-64-28.416-64-64v-320c0-35.584 28.416-64 64-64h64v-192h512v192h64c35.584 0 64 28.416 64 64v320c0 35.584-28.416 64-64 64h-64v128h-512z m448-128h-384v64h384v-64z m-512-64h640v-320h-64v128h-512v-128h-64v320z m128-512v256h384v-256h-384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_play_circle" unicode="" d="M739.2 400.64a19.2 19.2 0 0 0 0-33.28l-326.4-188.416a19.2 19.2 0 0 0-28.8 16.64V572.48a19.2 19.2 0 0 0 28.8 16.64l326.4-188.48zM512 832a448 448 0 1 0 0-896A448 448 0 0 0 512 832z m0-64a384 384 0 1 1 0-768A384 384 0 0 1 512 768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_play" unicode="" d="M739.2 400.64a19.2 19.2 0 0 0 0-33.28l-326.4-188.416a19.2 19.2 0 0 0-28.8 16.64V572.416a19.2 19.2 0 0 0 28.8 16.64l326.4-188.416z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_remove" unicode="" d="M224 425.6h576v-83.2h-576v83.2z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_server" unicode="" d="M448 560H256v64h192v-64zM96 736A32 32 0 0 0 128 768h768a32 32 0 0 0 32-32l0.064-288a32 32 0 0 0-32-32h-768a32 32 0 0 0-32 32V736z m64.064-256h704V704h-704v-224zM256 144h192v64H256v-64zM96.064 320a32 32 0 0 0 32 32h768a32 32 0 0 0 32-32v-288a32 32 0 0 0-32-32h-768a32 32 0 0 0-32 32V320z m64-256h704V288h-704V64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_rollfront" unicode="" d="M773.504 576l-105.408 105.344 45.248 45.312 160-160a32 32 0 0 0 0-45.312l-160-160-45.248 45.312L773.504 512H402.752a192 192 0 1 1 0-384h320v-64h-320a256 256 0 1 0 0 512h370.752z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_scan" unicode="" d="M768 672H256v-192H192v192a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64v-192h-64v192zM192 288h64v-192h512v192h64v-192a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64v192zM896 416H128v-64h768v64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_rotation" unicode="" d="M128 768h64v-389.312A384.32 384.32 0 0 0 506.688 64H896v-64H192a64 64 0 0 0-64 64V768z m313.6-704A320.384 320.384 0 0 1 192 313.6V64h249.6z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pause_circle" unicode="" d="M448 576H384v-384h64V576zM640 576H576v-384h64V576zM263.104 756.48a448 448 0 1 0 497.792-744.96A448 448 0 0 0 263.104 756.48z m462.208-53.184a384 384 0 1 1-426.624-638.592 384 384 0 0 1 426.624 638.592z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pause" unicode="" d="M448 576H384v-384h64V576zM640 576H576v-384h64V576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pin_filled" unicode="" d="M801.152 810.24a38.4 38.4 0 0 1-51.904 2.24L490.368 593.984l-49.344 49.344a38.4 38.4 0 0 1-54.336 0L251.968 508.672a38.4 38.4 0 0 1 0-54.336l142.592-142.528-262.912-262.912 45.248-45.248 262.912 262.912 142.528-142.592a38.4 38.4 0 0 1 54.336 0l134.656 134.72a38.4 38.4 0 0 1 0 54.336l-49.28 49.28 218.432 258.944a38.4 38.4 0 0 1-2.176 51.84l-137.152 137.216z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_play_circle_filled" unicode="" d="M960 384A448 448 0 1 1 64 384a448 448 0 0 1 896 0z m-257.024-14.592L416.64 204.16a16.832 16.832 0 0 0-25.216 14.592V549.312c0 12.992 14.016 21.12 25.216 14.592l286.336-165.312a16.832 16.832 0 0 0 0-29.184z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_qrcode" unicode="" d="M384 640H256v-128h128V640zM160 768a32 32 0 0 1-32-32v-320a32 32 0 0 1 32-32h320a32 32 0 0 1 32 32v320a32 32 0 0 1-32 32h-320zM192 704h256v-256H192V704zM672 768a32 32 0 0 1-32-32v-192a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32h-192z m32-192V704h128v-128h-128zM640 224a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32h-192a32 32 0 0 0-32 32v192z m64-160h128v128h-128v-128zM160 256a32 32 0 0 1-32-32v-192a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32h-192z m32-64h128v-128H192v128zM896 416h-256v-64h256v64zM544 192v-192h-64v192h64zM544 256V320h-64v-64h64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_previous" unicode="" d="M256 0H192V768h64v-768zM329.536 357.12a32 32 0 0 0 0 53.76L782.656 704a32 32 0 0 0 49.344-26.88v-586.24a32 32 0 0 0-49.408-26.88l-453.12 293.12zM768 149.632V618.368L405.76 384 768 149.632z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_rollback" unicode="" d="M269.248 576l105.408 105.344-45.248 45.312-160-160a32 32 0 0 1 0-45.312l160-160 45.248 45.312L269.248 512H640a192 192 0 0 0 0-384H320v-64h320a256 256 0 1 1 0 512H269.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_play_circle_stroke" unicode="" d="M739.2 400.64a19.2 19.2 0 0 0 0-33.28l-326.4-188.416a19.2 19.2 0 0 0-28.8 16.64V572.48a19.2 19.2 0 0 0 28.8 16.64l326.4-188.48zM448 494.848v-221.696L640 384 448 494.848zM512 832a448 448 0 1 0 0-896A448 448 0 0 0 512 832z m0-64a384 384 0 1 1 0-768A384 384 0 0 1 512 768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_swap_left" unicode="" d="M205.248 320H960v-64H132.672a33.92 33.92 0 0 0-24 57.92l252.736 252.736 45.248-45.248L205.248 320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_stop_circle" unicode="" d="M351.872 544.128h320.256v-320.256H351.872V544.128zM512 832a448 448 0 1 1 0-896A448 448 0 0 1 512 832z m0-64a384 384 0 1 0 0-768A384 384 0 0 0 512 768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_sound" unicode="" d="M256 192l271.552-162.944a32 32 0 0 1 48.448 27.52V711.424a32 32 0 0 1-48.448 27.456L256 576H134.72a38.4 38.4 0 0 1-38.4-38.4L96 230.4a38.4 38.4 0 0 1 38.4-38.4H256z m64 347.776l192 115.2v-541.952l-192 115.2V539.776zM256 256H160l0.256 256H256v-256zM864.96 529.472a383.36 383.36 0 0 1-89.216 124.544l43.648 46.72a447.36 447.36 0 0 0 104.064-145.28c24.128-54.4 36.48-112.64 36.48-171.456 0-58.88-12.352-117.12-36.48-171.456-24.128-54.4-59.52-103.68-104.064-145.28l-43.648 46.72a383.36 383.36 0 0 1 89.216 124.544C885.44 284.8 896 334.208 896 384s-10.496 99.2-31.04 145.472zM736 384c0 55.872-23.04 112.192-68.672 157.056l44.864 45.632c57.28-56.256 87.872-128.832 87.808-202.752-0.064-73.92-30.72-146.496-88.128-202.688l-44.8 45.76c45.696 44.8 68.864 101.12 68.928 156.992z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_setting" unicode="" d="M704 384a192 192 0 1 0-384 0 192 192 0 0 0 384 0z m-64 0a128 128 0 1 1-256 0 128 128 0 0 1 256 0zM512 816l387.968-216v-432L512-48l-387.968 216v432L512 816zM188.032 562.368v-356.736L512 25.28l323.968 180.352V562.368L512 742.72 188.032 562.368z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_share" unicode="" d="M635.648 553.088a148.288 148.288 0 1 1-32.256 55.296l-215.04-125.44a148.288 148.288 0 1 1 0-201.152l215.04-125.376a148.288 148.288 0 1 1 32.32 55.232l-215.04 125.376a148.224 148.224 0 0 1 0 90.624l214.976 125.44z m108.928 184.96a84.288 84.288 0 1 0 0-168.64 84.288 84.288 0 0 0 0 168.576zM351.232 426.368a32.192 32.192 0 0 1 1.92-3.392 83.904 83.904 0 0 0-1.92-84.864 84.224 84.224 0 1 0 0 88.32z m309.12-315.52c0 13.952 3.328 27.072 9.28 38.656a33.28 33.28 0 0 1 4.544 7.744 84.224 84.224 0 0 0 154.752-46.4 84.288 84.288 0 0 0-168.64 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_search" unicode="" d="M608.64 241.984a304.896 304.896 0 1 0 45.312 45.312l226.048-225.92-45.312-45.376-226.048 225.984z m49.088 237.12a240.832 240.832 0 1 1-481.6 0 240.832 240.832 0 0 1 481.6 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_service" unicode="" d="M161.024 488.064a352 352 0 0 0 701.952 0 32 32 0 0 0 1.024-8.064v-256a32 32 0 0 0-1.344-9.344A288 288 0 0 0 576-44.992H512v64h64A224.064 224.064 0 0 1 794.176 192H672a32 32 0 0 0-32 32v256a32 32 0 0 0 32 32h123.52a288.064 288.064 0 0 1-567.04 0H352a32 32 0 0 0 32-32v-256a32 32 0 0 0-32-32H192a32 32 0 0 0-32 32v256a32 32 0 0 0 1.024 8.064zM800 448H704v-192h96V448z m-576 0v-192H320V448H224z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_star" unicode="" d="M610.688 487.68l-98.56 199.68-98.56-199.68-220.48-32L352.64 300.16l-37.632-219.52 197.12 103.68 197.12-103.68-37.632 219.52 159.488 155.52-220.352 32z m319.36 18.24a19.2 19.2 0 0 0 10.688-32.768l-200.384-195.328 47.36-275.84a19.2 19.2 0 0 0-27.904-20.224l-247.68 130.24-247.68-130.24a19.2 19.2 0 0 0-27.904 20.224l47.296 275.84-200.384 195.328a19.2 19.2 0 0 0 10.624 32.768l276.928 40.256 123.84 250.88a19.2 19.2 0 0 0 34.432 0l123.904-250.88 276.928-40.256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_round" unicode="" d="M512 160a224 224 0 1 0 0 448 224 224 0 0 0 0-448zM512 64A320 320 0 1 1 512 704a320 320 0 0 1 0-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_star_filled" unicode="" d="M486.272 779.648a28.8 28.8 0 0 0 51.648 0l115.2-233.472 257.728-37.44a28.8 28.8 0 0 0 16-49.152l-186.496-181.76 43.968-256.64a28.8 28.8 0 0 0-41.792-30.336l-230.4 121.152L281.6-9.152a28.8 28.8 0 0 0-41.792 30.336l44.032 256.64-186.496 181.76a28.8 28.8 0 0 0 16 49.152l257.664 37.44 115.2 233.472z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_shop" unicode="" d="M512 832a160 160 0 0 1-160-160V576h-128a32 32 0 0 1-32-32v-576a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32h-128V672A160 160 0 0 1 512 832z m96-320v-128h64V512H768v-512H256V512h96v-128h64V512h192z m0 64h-192V672a96 96 0 1 0 192 0V576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_stop_circle_filled" unicode="" d="M263.104 756.48a448 448 0 1 0 497.792-744.96A448 448 0 0 0 263.104 756.48zM352 544v-320h320v320h-320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_slash" unicode="" d="M260.288 12.032l448 775.936 55.424-32-448-775.936-55.424 32z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_save" unicode="" d="M704 768l192-192v-512a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h512z m-64-64H384v-96h256V704z m64-26.496V544H320V704H192v-640h128V384h384v-320h128V549.504l-128 128zM640 64V320H384v-256h256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_secured" unicode="" d="M472.96 260.544l228.736 228.8-45.248 45.248L472.96 351.04 367.552 456.448l-45.248-45.248 150.592-150.656zM160 768v-448c0-90.624 47.552-174.656 125.312-221.312L512-37.312l226.688 136A258.048 258.048 0 0 1 864 320V768h-704z m64-448V704h576v-384a194.048 194.048 0 0 0-94.208-166.4L512 37.312 318.208 153.6A194.048 194.048 0 0 0 224 320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_root_list" unicode="" d="M288 576h448v-64h-448V576zM576 416H288v-64H576v64zM192 768a64 64 0 0 1-64-64v-640a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64V704a64 64 0 0 1-64 64H192z m640-64v-640H192V704h640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_menu-application1" unicode="" d="M256 704a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM256 384a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM192 0a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM576 704a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM512 320a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM576 64a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM832 640a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM896 384a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM832 0a64 64 0 1 1 0 128 64 64 0 0 1 0-128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_mobile_vibrate" unicode="" d="M416 64h192v64h-192v-64zM320 800a64 64 0 0 1-64-64V0a64 64 0 0 1 64-64h384a64 64 0 0 1 64 64V736a64 64 0 0 1-64 64H320z m384-64V0H320V736h384zM128 640v-576h64V640H128zM832 640v-576h64V640h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_mirror" unicode="" d="M480 832h64v-896h-64V832zM942.08 100.032a32 32 0 0 0-22.336-34.56c-4.608-1.472-11.2-1.472-24.32-1.472h-213.76c-8.96 0-13.44 0-17.152 0.896a32 32 0 0 0-23.68 23.68C640 92.16 640 96.64 640 105.6V576c0 33.92 0 50.88 2.624 56.96a32 32 0 0 0 50.88 11.008c4.928-4.48 11.904-19.84 25.984-50.816l213.76-470.336c5.44-11.968 8.192-17.92 8.832-22.784zM704 128h156.608L704 472.512V128zM104.32 65.408c4.544-1.408 11.136-1.408 24.32-1.408h213.76c8.96 0 13.44 0 17.088 0.896a32 32 0 0 1 23.68 23.68C384 92.16 384 96.64 384 105.6V576c0 33.92 0 50.88-2.56 56.96a32 32 0 0 1-50.944 11.008c-4.864-4.48-11.904-19.84-25.984-50.816l-213.76-470.336c-5.44-11.968-8.192-17.92-8.768-22.784a32 32 0 0 1 22.272-34.56zM320 472.512V128H163.392L320 472.512z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_move" unicode="" d="M320 832a64 64 0 1 1 0-128 64 64 0 0 1 0 128zM704 832a64 64 0 1 1 0-128 64 64 0 0 1 0 128zM256 512a64 64 0 1 0 128 0 64 64 0 0 0-128 0zM704 576a64 64 0 1 1 0-128 64 64 0 0 1 0 128zM256 256a64 64 0 1 0 128 0 64 64 0 0 0-128 0zM320 64a64 64 0 1 1 0-128 64 64 0 0 1 0 128zM640 256a64 64 0 1 0 128 0 64 64 0 0 0-128 0zM704 64a64 64 0 1 1 0-128 64 64 0 0 1 0 128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_page_first" unicode="" d="M793.92 610.56l-58.88 58.88L449.728 384l285.44-285.44 58.88 58.88L567.296 384l226.56 226.56zM306.88 640v-512h83.2V640h-83.2z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_notification_filled" unicode="" d="M544 766.272V832h-64v-65.728a288 288 0 0 1-256-286.272V192l-57.6-76.8a32 32 0 0 1 25.6-51.2h163.2a160 160 0 0 1 313.6 0H832a32 32 0 0 1 25.6 51.2l-57.6 76.8V480a288 288 0 0 1-256 286.272z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_minus_rectangle1" unicode="" d="M320 352h384v64H320v-64zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_menu_unfold1" unicode="" d="M896 127.104L128.128 128 128 64l768-0.896v64zM544 416H128v-64h416v64zM896 703.104L128.128 704 128 640l768-0.896v64zM642.112 357.952a32 32 0 0 0 0 51.2L844.8 561.152a32 32 0 0 0 51.2-25.6v-304a32 32 0 0 0-51.2-25.6l-202.688 152zM832 295.552v176l-117.312-88L832 295.552z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_page_last" unicode="" d="M230.08 157.44l58.816-58.88L574.336 384l-285.44 285.44-58.88-58.88L456.704 384l-226.56-226.56z m487.04-29.44V640h-83.2v-512h83.2z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_pause_circle_filled" unicode="" d="M960 384A448 448 0 1 0 64 384a448 448 0 0 0 896 0zM384 576v-384h64V576H384z m256 0H576v-384h64V576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_money_circle" unicode="" d="M672 416h-128v-64h128v-64h-128V128h-64V288h-128v64h128v64h-128v64h93.44L359.04 588.032l49.92 39.936L512 499.2l103.04 128.768 49.92-39.936L578.56 480h93.44v-64zM960 384A448 448 0 1 1 64 384a448 448 0 0 1 896 0z m-64 0A384 384 0 1 0 128 384a384 384 0 0 0 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_mail1" unicode="" d="M95.936 640.064a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64v-512a64 64 0 0 0-64-64h-704a64 64 0 0 0-64 64v512z m742.336 0H185.6L512 422.528l326.336 217.6z m-678.336-59.776V128h704V580.288L511.936 345.6l-352 234.688z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_minus_circle_filled1" unicode="" d="M512-64A448 448 0 1 1 512 832a448 448 0 0 1 0-896z m224 416h-448v64h448v-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_more" unicode="" d="M512 640a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM512 320a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM576 64a64 64 0 1 0-128 0 64 64 0 0 0 128 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_menu_fold1" unicode="" d="M128 640.896L895.936 640 896 704 128 704.896v-64zM480 352H896v64H480v-64zM128 64.896L895.936 64 896 128l-768 0.896v-64zM381.888 410.048a32 32 0 0 0 0-51.2L179.2 206.848a32 32 0 0 0-51.2 25.6v304a32 32 0 0 0 51.2 25.6l202.688-152zM192 472.448v-176l117.312 88L192 472.448z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_next" unicode="" d="M768 768h64v-768h-64V768zM694.464 410.88a32 32 0 0 0 0-53.76L241.344 64A32 32 0 0 0 192 90.88V677.12A32 32 0 0 0 241.408 704l453.12-293.12zM256 618.368v-468.736L618.24 384 256 618.368z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_notification" unicode="" d="M544 766.272V832h-64v-65.728a288 288 0 0 1-256-286.272V192l-57.6-76.8a32 32 0 0 1 25.6-51.2h163.2a160 160 0 0 1 313.6 0H832a32 32 0 0 1 25.6 51.2l-57.6 76.8V480a288 288 0 0 1-256 286.272z m-256-595.584V480a224 224 0 1 0 448 0v-309.312L768 128H256l32 42.688zM512 0a96 96 0 0 0-90.56 64h181.12A96 96 0 0 0 512 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_minus_circle1" unicode="" d="M288 352h448v64h-448v-64zM960 384A448 448 0 1 0 64 384a448 448 0 0 0 896 0z m-64 0A384 384 0 1 1 128 384a384 384 0 0 1 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_mobile" unicode="" d="M416 64h192v64h-192v-64zM224 736a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V0a64 64 0 0 0-64-64h-448a64 64 0 0 0-64 64V736z m64 0V0h448V736h-448z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_order_adjustment_column" unicode="" d="M480 352V-64h64V352h298.048l-108.288-108.224 45.248-45.312 162.88 162.88a32 32 0 0 1 0 45.312l-162.88 162.88-45.248-45.312L842.048 416H544V832h-64v-416H182.144l108.224 108.224L245.12 569.6 82.24 406.656a32 32 0 0 1 0-45.312l162.88-162.88 45.248 45.248L182.144 352H480z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_jump" unicode="" d="M146.752 18.752c12.032-11.968 28.288-18.752 45.248-18.752h640a64.064 64.064 0 0 1 64 64V352h-64V64H192V704h288V768H192a64.064 64.064 0 0 1-64-64v-640c0-16.96 6.784-33.28 18.752-45.248zM576 704V768h288a32 32 0 0 0 32-32V448h-64V658.752L557.248 384 512 429.248 786.752 704H576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_lock_off" unicode="" d="M384 192v64h256v-64H384zM288 512V576a224 224 0 1 0 448 0h-64a160 160 0 0 1-320 0v-64H832a32 32 0 0 0 32-32v-448a32 32 0 0 0-32-32H192a32 32 0 0 0-32 32v448A32 32 0 0 0 192 512h96z m-64-448h576V448h-576v-384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_loading" unicode="" d="M512 800a416 416 0 0 1 0-832v104A312 312 0 1 0 824 384H928A416 416 0 0 1 512 800z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_laptop" unicode="" d="M160 128a64 64 0 0 0-64 64V640a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64v-448a64 64 0 0 0-64-64h-704z m0 64h704V640h-704v-448zM960 64H64v-64h896v64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_mail" unicode="" d="M95.936 640.064a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64v-512a64 64 0 0 0-64-64h-704a64 64 0 0 0-64 64v512z m742.336 0H185.6L512 422.528l326.336 217.6z m-678.336-59.776V128h704V580.288L511.936 345.6l-352 234.688z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_minus_rectangle" unicode="" d="M320 352h384v64H320v-64zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_location" unicode="" d="M672 512a160 160 0 1 0-320 0 160 160 0 0 0 320 0z m-64 0a96 96 0 1 1-192 0 96 96 0 0 1 192 0zM535.168-29.952a28.032 28.032 0 0 0-46.336 0L246.784 325.632a320.896 320.896 0 1 0 530.496 0l-242.112-355.584z m189.184 391.616a256.896 256.896 0 1 1-424.704 0L512 49.728l212.352 311.936z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_lock_on" unicode="" d="M384 256v-64h256v64H384zM288 576.64V512H192a32 32 0 0 1-32-32v-448a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32v448A32 32 0 0 1 832 512h-96V576.64a224 224 0 0 1-448 0z m384-64.64h-320V576.64a160 160 0 0 0 320 0V512z m-448-64h576v-384h-576V448z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_link_unlink" unicode="" d="M384 768v-128h64V768H384zM523.328 282.176l-147.072-147.072a80 80 0 0 0-113.152 113.152l147.072 147.072-45.248 45.248-147.072-147.072a144 144 0 0 1 203.648-203.648l147.072 147.072-45.248 45.248zM613.76 372.672l45.312-45.248 147.072 147.072a144 144 0 1 1-203.648 203.648L455.424 531.072l45.248-45.248 147.072 147.072a80 80 0 0 0 113.152-113.152L613.824 372.672zM768 320h128v-64h-128V320zM128 448h128V512H128v-64zM640 128v-128H576v128h64zM750.848 190.4l103.808-103.744-45.312-45.248-103.68 103.68 45.184 45.312zM169.344 681.408l103.808-103.808 45.248 45.248-103.744 103.808-45.312-45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_menu-application" unicode="" d="M256 704a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM256 384a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM192 0a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM576 704a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM512 320a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM576 64a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM832 640a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM896 384a64 64 0 1 0-128 0 64 64 0 0 0 128 0zM832 0a64 64 0 1 1 0 128 64 64 0 0 1 0-128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_minus_circle" unicode="" d="M288 352h448v64h-448v-64zM960 384A448 448 0 1 0 64 384a448 448 0 0 0 896 0z m-64 0A384 384 0 1 1 128 384a384 384 0 0 1 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_logout" unicode="" d="M576 704v-128h64V736a32 32 0 0 1-32 32h-512a32 32 0 0 1-32-32v-704a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32V192H576v-128H128V704h448zM718.848 559.744L862.528 416H384v-64h478.528l-143.68-143.744 45.248-45.248 198.336 198.4a32 32 0 0 1 0 45.248l-198.4 198.336-45.184-45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_link" unicode="" d="M398.848 135.04l135.808 135.808 45.248-45.248-135.808-135.744a160 160 0 0 0-226.24 226.24l135.744 135.808 45.248-45.248-135.744-135.808a96 96 0 0 1 135.744-135.744zM670.4 316.16l-45.248 45.184 135.744 135.808a96 96 0 1 1-135.744 135.744L489.344 497.152l-45.248 45.248 135.808 135.744a160 160 0 0 0 226.24-226.24l-135.744-135.808zM579.84 497.152L398.912 316.096l45.312-45.248 180.992 181.056-45.248 45.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_layers" unicode="" d="M900.672 577.408L512 415.488l-388.736 161.92c-26.24 10.944-26.24 49.792 0 60.736L512 800l388.672-161.92c26.24-10.944 26.24-49.792 0-60.736zM219.328 607.744L512 485.824l292.608 121.92L512 729.664 219.328 607.808zM95.936 446.272v-78.528L512 184.832l415.936 182.848V446.208L512 263.36 95.936 446.272zM95.936 229.12v-78.528L512-32.32l415.936 182.848V229.12L512 46.208 96 229.184z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_login" unicode="" d="M542.528 416L398.848 559.744l45.248 45.248 198.4-198.4a32 32 0 0 0 0-45.248l-198.4-198.336-45.248 45.248L542.528 352H64v64h478.528zM256 576V704h512v-640H256v128H192v-160a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32h-576a32 32 0 0 1-32-32V576h64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_paste" unicode="" d="M704 160H320v-64h384v64zM160 772.992c0 37.44 33.28 59.008 63.68 59.008h339.072a64 64 0 0 0 45.248-18.752L845.248 576a64 64 0 0 0 18.752-45.248v-535.744c0-37.44-33.28-59.008-63.68-59.008h-576.64c-30.4 0-63.68 21.568-63.68 59.008V772.992zM224 768v-768h576V511.168h-256V768h-320z m384-192.832h147.584L608 722.752v-147.584z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_error_circle" unicode="" d="M544 640v-352h-64V640h64zM550.016 224h-76.8v-76.8h76.8v76.8zM960 384A448 448 0 1 1 64 384a448 448 0 0 1 896 0z m-64 0A384 384 0 1 0 128 384a384 384 0 0 0 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_word" unicode="" d="M224 768v-768h192v-64H223.68c-30.4 0-63.68 21.568-63.68 59.008V772.992c0 37.44 33.28 59.008 63.68 59.008h343.68a64 64 0 0 0 45.76-19.2l232.576-237.056a64 64 0 0 0 18.304-44.8V384h-64V511.168h-256V768h-320z m384-41.344v-151.488h148.608L608 726.656zM576 0V288H512V0a64 64 0 0 1 64-64h224a64 64 0 0 1 64 64V288h-64V0h-80V288h-64V0H576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_enter" unicode="" d="M832 640v-384H269.248l105.408 105.344-45.248 45.312-160-160a32 32 0 0 1 0-45.312l160-160 45.248 45.312L269.248 192H832a64 64 0 0 1 64 64V640h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file" unicode="" d="M223.68 832c-30.4 0-63.68-21.568-63.68-59.008v-777.984c0-37.44 33.28-59.008 63.68-59.008h576.64c30.4 0 63.68 21.568 63.68 59.008v535.68A64 64 0 0 1 845.248 576L608 813.248A64 64 0 0 1 562.752 832H223.68zM544 768v-256.832h256V0h-576V768h320z m64-45.248l147.584-147.584H608V722.752z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_fork" unicode="" d="M384 736a32 32 0 0 0 32 32h192a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32h-64v-128h192a64 64 0 0 0 64-64v-64h64a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32h-192a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h64V320h-448v-64h64a32 32 0 0 0 32-32v-192a32 32 0 0 0-32-32h-192a32 32 0 0 0-32 32v192a32 32 0 0 0 32 32h64V320a64 64 0 0 0 64 64h192V512h-64a32 32 0 0 0-32 32v192zM448 576h128V704H448v-128z m-256-384v-128h128v128H192z m512 0v-128h128v128h-128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_copy" unicode="" d="M256 772.992C256 810.432 289.28 832 319.68 832h279.68a64 64 0 0 0 45.76-19.2l232.576-237.056a64 64 0 0 0 18.304-44.8l0.32-407.936c0-37.376-33.28-59.008-63.744-59.008H320c-30.336 0-63.616 21.568-63.616 59.008L256 772.992zM320 768l0.32-640h512L832 511.168H576V768H320z m320-41.344v-151.488h148.608L640 726.656zM128 576v-576.832a64 64 0 0 1 64-64h512v64H192V576H128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_flag" unicode="" d="M556.416 715.392A466.688 466.688 0 0 0 832 721.408v-379.2a566.592 566.592 0 0 1-307.2-14.464l-33.024-11.008A543.168 543.168 0 0 0 192 304.128V681.856a566.592 566.592 0 0 1 307.2 14.4l57.216 19.136zM128 256V733.184c0 17.152 16.832 29.248 33.088 23.808a502.528 502.528 0 0 1 317.824 0l57.28 19.072a530.624 530.624 0 0 0 335.616 0 35.392 35.392 0 0 0 24.192-33.536v-451.648a25.152 25.152 0 0 0-33.088-23.808 502.528 502.528 0 0 1-317.824 0L512 256a607.168 607.168 0 0 0-320-17.472V-64H128v320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_folder" unicode="" d="M96 672a64 64 0 0 0 64 64H357.824l8.32-6.08L490.432 640H864a64 64 0 0 0 64-64v-512a64 64 0 0 0-64-64h-704a64 64 0 0 0-64 64V672z m241.088 0H160V64h704V576H469.632l-8.384 6.08L337.088 672z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_image" unicode="" d="M223.68 832c-30.4 0-63.68-21.568-63.68-59.008v-777.984c0-37.44 33.28-59.008 63.68-59.008h571.776c30.4 0 63.68 21.568 63.68 59.008V530.944a64 64 0 0 1-18.304 44.8L608.256 812.8A64 64 0 0 1 562.56 832H223.68zM224 168.704V768h320v-256.64h251.136v-273.792L672 360.704l-192-192-128 128-128-128z m0-81.408l128 128L439.296 128l-128-128H224v87.296z m448 192l123.136-123.2V0H392.704L672 279.296z m79.488 296.128H608V721.664l143.488-146.24z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_powerpoint" unicode="" d="M224 768v-768H512v-64H223.68c-30.4 0-63.68 21.568-63.68 59.008V772.992c0 37.44 33.28 59.008 63.68 59.008h343.68a64 64 0 0 0 45.76-19.2l232.576-237.056a64 64 0 0 0 18.304-44.8V416h-64V511.168h-256V768h-320z m384-41.344v-151.488h148.608L608 726.656zM800 352h-192V-64h64v160h128a64 64 0 0 1 64 64v128a64 64 0 0 1-64 64z m0-192h-128v128h128v-128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_add" unicode="" d="M256 832c-35.584 0-64-28.416-64-64v-704c0-35.584 28.416-64 64-64h290.304v64H256V768h256v-256h256v-158.976h64V530.752A64 64 0 0 1 813.248 576l-5.248 5.248-0.064 0.128-237.44 237.44a33.792 33.792 0 0 1-18.24 9.472A64 64 0 0 1 530.752 832H256z m466.752-256H576V722.752L722.752 576zM768-64v128h-128v64h128v128h64v-128h128v-64h-128v-128h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_unknown" unicode="" d="M224 768v-768H576v-64H223.68c-30.4 0-63.68 21.568-63.68 59.008V772.992c0 37.44 33.28 59.008 63.68 59.008h338.624a64 64 0 0 0 45.696-19.2l232.576-237.056a64 64 0 0 0 18.304-44.8V416h-64V511.168h-256V768H224z m378.88-41.344v-151.488h148.608L602.88 726.656zM730.88 357.12c-68.48 0-128-52.608-128-121.728h64c0 29.76 26.688 57.664 64 57.664 37.376 0 64-27.904 64-57.664 0-19.2-17.92-42.24-46.016-52.864H748.8c-28.352-11.008-49.856-37.952-49.856-71.168v-42.24h64v42.24c0 4.16 2.688 8.96 8.832 11.392 42.112 16 87.168 56.96 87.168 112.64 0 69.12-59.456 121.664-128 121.664zM730.88 12.8a38.4 38.4 0 1 1 0-76.8 38.4 38.4 0 0 1 0 76.8z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_error_circle_filled" unicode="" d="M960 384A448 448 0 1 1 64 384a448 448 0 0 1 896 0zM544 640v-352h-64V640h64z m-70.784-448h76.8v-76.8h-76.8V192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_help" unicode="" d="M512 736c-121.408 0-224-92.672-224-211.2h64c0 79.104 69.696 147.2 160 147.2s160-68.096 160-147.2c0-56.576-49.6-112-112.64-135.936l-0.192-0.064C513.536 371.2 480 328.32 480 276.48V192h64V276.48c0 22.784 14.72 43.52 38.144 52.544C659.456 358.4 736 431.936 736 524.8c0 118.528-102.592 211.2-224 211.2zM512 128a48 48 0 1 1 0-96 48 48 0 0 1 0 96z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_fullscreen_exit" unicode="" d="M416 525.248V704h64v-256a32 32 0 0 0-32-32H192v64h178.752L137.344 713.344l45.312 45.312L416 525.248zM608 242.752V64h-64V320a32 32 0 0 0 32 32h256v-64h-178.752l233.408-233.344-45.248-45.312L608 242.752z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_pdf" unicode="" d="M224 0V768h320v-256.832h256V416h64V530.944a64 64 0 0 1-18.304 44.8L613.12 812.8a64 64 0 0 1-45.696 19.2h-343.68c-30.464 0-63.744-21.568-63.744-59.008v-777.984c0-37.44 33.28-59.008 63.68-59.008H768v64H224z m532.608 575.168H608V726.656l148.608-151.488zM536.128 320h119.104c30.976 0 56-25.088 56-56v-142.784a56 56 0 0 0-56-56H536.128V320z m48-48v-158.784h71.104a8 8 0 0 1 8 8V264a8 8 0 0 1-8 8H584.128zM320 319.616h119.104c30.976 0 56-25.088 56-56v-67.328a56 56 0 0 0-56-56H368v-76.16H320V319.616z m48-131.328h71.104a8 8 0 0 1 8 8V263.68a8 8 0 0 1-8 8H368v-83.328zM752.256 64.128h48v101.184h103.104v48h-103.104V272h103.104V320h-151.104v-255.872z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_gift" unicode="" d="M224 640c0-36.032 11.904-69.248 32-96H160A32 32 0 0 1 128 512v-512a32 32 0 0 1 32-32h704a32 32 0 0 1 32 32V512a32 32 0 0 1-32 32H768a160 160 0 0 1-256 192A160 160 0 0 1 224 640z m512 0A96 96 0 0 0 640 544H544V640a96 96 0 1 0 192 0z m-256-160V192h64V480H832v-448H192v448h288z m0 64H384A96 96 0 1 0 480 640v-96z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_gender_female" unicode="" d="M512 788.608a224 224 0 0 1-31.168-445.888v-86.848h-128v-64h128v-224h64v224h128v64h-128V342.976A224 224 0 0 1 512 788.608z m0-64a160 160 0 1 0 0-320 160 160 0 0 0 0 320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_home1" unicode="" d="M384 192v-64h256v64H384zM489.344 790.656a32 32 0 0 0 45.312 0l416-416-45.248-45.312L832 402.752V32a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64V402.752L118.656 329.344l-45.312 45.312 416 416zM512 722.752l-256-256V32h512V466.752l-256 256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_heart_filled" unicode="" d="M128 472.768c0 186.496 221.696 284.032 359.168 158.016L512 608l24.832 22.784C674.304 756.8 896 659.2 896 472.768c0-56.832-22.592-111.36-62.72-151.552l-311.936-311.872c-5.12-5.12-13.504-5.12-18.688 0L190.784 321.216A214.336 214.336 0 0 0 128 472.768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_info_circle" unicode="" d="M480.384 128V480h64V128h-64zM550.4 640H473.6v-76.8h76.8V640zM64 384a448 448 0 1 1 896 0A448 448 0 0 1 64 384z m64 0a384 384 0 1 0 768 0A384 384 0 0 0 128 384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_icon" unicode="" d="M224 768v-768h494.976v-64H223.68c-30.4 0-63.68 21.568-63.68 59.008V772.992c0 37.44 33.28 59.008 63.68 59.008h343.68a64 64 0 0 0 45.76-19.2l232.576-237.056a64 64 0 0 0 18.304-44.8V416h-64V511.168h-256V768h-320z m384-192.832h148.608L608 726.656v-151.488zM286.784 320h128v-51.2h-38.4v-153.6h38.4v-51.2h-128v51.2h38.4V268.8h-38.4V320zM576 320H498.688A50.944 50.944 0 0 1 448 268.8v-153.6c0-28.288 22.72-51.2 50.688-51.2H576v51.2H498.688V268.8H576V320zM883.008 268.8V64H832V320h111.552c28.16 0 51.072-22.912 51.072-51.2V64h-51.072V268.8h-60.544zM608 268.16V115.2c0-28.16 22.848-51.008 51.008-51.008h76.544c28.16 0 51.008 22.848 51.008 51.008V268.224a51.008 51.008 0 0 1-51.008 51.008h-76.544a51.008 51.008 0 0 1-51.008-51.008z m51.008-153.024V268.224h76.544v-153.088h-76.544z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_heart" unicode="" d="M512 521.152l68.096 62.464C676.48 671.936 832 603.52 832 472.768c0-39.872-15.872-78.08-44.032-106.24L512 90.432 236.032 366.464A150.336 150.336 0 0 0 192 472.768C192 603.584 347.52 672 443.904 583.68L512 521.152z m-24.832 109.632C349.696 756.8 128 659.2 128 472.768c0-56.832 22.592-111.36 62.72-151.552l311.936-311.872c5.12-5.12 13.504-5.12 18.688 0l311.872 311.872c40.192 40.192 62.784 94.72 62.784 151.552 0 186.496-221.696 284.032-359.168 158.016L512 608l-24.832 22.784z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_history" unicode="" d="M505.984 717.248c188.416 0 339.456-150.208 339.456-333.376 0-183.104-151.04-333.312-339.456-333.312-157.568 0-288.96 104.96-327.808 246.4l-66.112-10.752c44.224-173.696 203.84-302.336 393.92-302.336 224.256 0 406.08 179.136 406.08 400 0 220.928-181.76 400-406.08 400A407.552 407.552 0 0 1 178.56 620.544v106.24H112v-201.408a32 32 0 0 1 32-32h200.128V560.192H217.92a340.288 340.288 0 0 0 288 157.056zM448 544v-184.896l169.344-169.344 45.248 45.248L512 385.6V544H448z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_hourglass" unicode="" d="M512 440.576l256 212.288V736H256v-83.2l256-212.224zM192 622.784V736a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64v-113.28L544 384l288-238.72v-113.28a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64v113.28L480 384 192 622.72z m64-507.648V32h512v83.2L512 327.36l-256-212.288z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_info_circle_filled" unicode="" d="M512-64A448 448 0 1 1 512 832a448 448 0 0 1 0-896zM473.6 640h76.8v-76.8H473.6V640z m6.784-160h64V128h-64V480z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_folder_open" unicode="" d="M160 720.384h251.456L544 614.784h320v64H566.4l-132.608 105.6H160v-64zM160 614.72a64 64 0 0 1-64-64V64a64 64 0 0 1 64-64h704a64 64 0 0 1 64 64V445.12a64 64 0 0 1-64 64H523.2l-132.608 105.6H160z m0-64h208.256l132.544-105.6H864V64h-704V550.72z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_help_circle_filled" unicode="" d="M959.616 384a448 448 0 1 1-896 0 448 448 0 0 1 896 0zM371.392 471.616c0 77.312 62.848 140.224 140.224 140.224 77.44 0 140.288-62.912 140.288-140.224 0-62.08-47.552-110.144-95.04-129.536a21.632 21.632 0 0 1-13.248-20.16v-51.008h-64V321.92c0 35.84 21.76 66.496 52.928 79.36l0.128 0.064c31.68 12.864 55.232 42.048 55.232 70.272 0 41.984-34.24 76.224-76.288 76.224-41.984 0-76.224-34.24-76.224-76.224h-64z m106.496-290.688a33.728 33.728 0 1 0 67.456 0 33.728 33.728 0 0 0-67.456 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_help_circle" unicode="" d="M473.216 153.6a38.4 38.4 0 1 0 76.8 0 38.4 38.4 0 0 0-76.8 0zM511.616 639.616A155.328 155.328 0 0 1 356.48 484.416h64c0 50.24 40.96 91.2 91.2 91.2s91.2-40.96 91.2-91.2c0-34.432-28.416-68.928-65.6-84.032h-0.128c-33.92-14.08-57.472-47.36-57.472-86.272V256h64v58.112c0 12.416 7.36 22.72 17.792 27.008 52.992 21.568 105.408 74.944 105.408 143.296a155.328 155.328 0 0 1-155.2 155.2zM959.616 384a448 448 0 1 1-896 0 448 448 0 0 1 896 0z m-64 0a384 384 0 1 0-768 0 384 384 0 0 0 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_image" unicode="" d="M640 384a128 128 0 1 1 0 256 128 128 0 0 1 0-256z m0 64a64 64 0 1 1 0 128 64 64 0 0 1 0-128zM128 64a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64V704a64 64 0 0 1-64 64H192a64 64 0 0 1-64-64v-640z m64 82.752l192 192L658.752 64H192v82.752z m0 90.496V704h640v-640h-82.752L384 429.248l-192-192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_gender_male" unicode="" d="M832 665.6a38.4 38.4 0 0 1-38.4 38.4H576v-64h152.512l-237.44-237.44a224 224 0 1 1 44.352-46.08L768 588.992V448h64V665.6z m-591.552-553.152a160 160 0 1 0 226.304 226.304 160 160 0 0 0-226.304-226.304z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_fullsreen" unicode="" d="M224 626.752V448h-64V704a32 32 0 0 0 32 32h256v-64H269.248l201.408-201.344-45.312-45.312L224 626.752zM800 141.248V320h64v-256a32 32 0 0 0-32-32H576v64h178.752L553.344 297.344l45.312 45.312 201.344-201.408z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_image_error" unicode="" d="M128 64V384h64v-146.752l192 192L749.248 64H832V704H512V768h320a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64z m256 274.752l-192-192V64h466.752L384 338.752zM768 512a128 128 0 1 0-256 0 128 128 0 0 0 256 0z m-64 0a64 64 0 1 1-128 0 64 64 0 0 1 128 0zM402.048 540.16l-45.248-45.184-90.496 90.496-90.496-90.496-45.312 45.248 90.56 90.496-90.56 90.496 45.312 45.248L266.24 675.968l90.496 90.496 45.248-45.248-90.496-90.496 90.496-90.496z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_folder_add" unicode="" d="M96 704a64 64 0 0 0 64 64h229.76l132.608-96H832a64 64 0 0 0 64-64v-256h-64v256H501.632L369.088 704H160v-576h384v-64h-384a64 64 0 0 0-64 64V704zM768-64v128h-128v64h128v128h64v-128h128v-64h-128v-128h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_file_excel" unicode="" d="M224 768v-768H512v-64H223.68c-30.4 0-63.68 21.568-63.68 59.008V772.992c0 37.44 33.28 59.008 63.68 59.008h343.68a64 64 0 0 0 45.76-19.2l232.576-237.056a64 64 0 0 0 18.304-44.8V416h-64V511.168h-256V768h-320z m384-41.344v-151.488h148.608L608 726.656zM661.504 269.312v53.76h-64v-53.76c0-16.512 5.632-32.512 16-45.44l76.16-94.784-76.16-94.848c-10.368-12.864-16-28.864-16-45.44v-53.76h64v53.76c0 1.92 0.64 3.84 1.92 5.376l67.328 83.84 67.392-83.84c1.216-1.536 1.856-3.392 1.856-5.312v-53.76h64v53.76c0 16.512-5.632 32.512-16 45.44l-76.16 94.72 76.16 94.848c10.368 12.928 16 28.928 16 45.44v53.76h-64v-53.76c0-1.92-0.64-3.84-1.92-5.312l-67.328-83.84-67.328 83.84a8.448 8.448 0 0 0-1.92 5.312z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_forward" unicode="" d="M944.512 408.96a32 32 0 0 0 0-49.92L583.68 70.912a32 32 0 0 0-51.904 24.96V368.96a31.936 31.936 0 0 0-7.808-9.6L180.48 73.28a32 32 0 0 0-52.48 24.576V670.208a32 32 0 0 0 52.48 24.576l343.488-286.208a31.872 31.872 0 0 0 7.808-9.6V672.128a32 32 0 0 0 51.904 24.96l360.832-288z m-348.8 196.608v-443.136L873.344 384 595.776 605.568zM192 601.92v-435.84L453.504 384 192 601.92z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_internet" unicode="" d="M70.4 390.4a441.6 441.6 0 1 0 883.2 0v-12.8a441.6 441.6 0 1 0-883.2 0v12.8z m818.368-38.4h-192a631.232 631.232 0 0 0-125.184-347.328A377.728 377.728 0 0 1 888.768 352z m-192 64h192A377.792 377.792 0 0 1 571.52 763.328 631.232 631.232 0 0 0 696.768 416z m-64.064 0A567.36 567.36 0 0 1 512 735.808 567.36 567.36 0 0 1 391.296 416h241.408z m-305.472-64h-192a377.728 377.728 0 0 1 317.184-347.328A631.296 631.296 0 0 0 327.232 352z m0 64A631.296 631.296 0 0 0 452.48 763.328 377.728 377.728 0 0 1 135.232 416h192z m305.472-64H391.296A567.36 567.36 0 0 1 512 32.192 567.36 567.36 0 0 1 632.704 352z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_check_circle_filled" unicode="" d="M512-64A448 448 0 1 1 512 832a448 448 0 0 1 0-896zM288 370.752l45.248 45.248L448 301.248 690.752 544l45.248-45.248-288-288-160 160z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_right_circle" unicode="" d="M397.248 562.752L576 384l-178.752-178.752 45.248-45.248 224 224-224 224-45.248-45.248zM512-64A448 448 0 1 0 512 832a448 448 0 0 0 0-896z m0 64A384 384 0 1 1 512 768a384 384 0 0 1 0-768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_creditcard" unicode="" d="M224 192h192v64h-192v-64zM960 128V640a64 64 0 0 1-64 64H128a64 64 0 0 1-64-64v-512a64 64 0 0 1 64-64h768a64 64 0 0 1 64 64z m-64 512v-96H128V640h768zM128 128V480h768V128H128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_close_circle_filled" unicode="" d="M960 384A448 448 0 1 1 64 384a448 448 0 0 1 896 0zM362.88 579.328L512 429.44l149.12 149.952 45.312-45.12L557.12 384l149.312-150.272-45.376-45.056L512 338.56l-149.12-150.016-45.312 45.184L466.88 384 317.568 534.208l45.376 45.12z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_circle" unicode="" d="M512 832a448 448 0 1 0 0-896A448 448 0 0 0 512 832z m0-64a384 384 0 1 1 0-768A384 384 0 0 1 512 768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_left_circle" unicode="" d="M626.752 205.248L448 384l178.752 178.752-45.248 45.248-224-224 224-224 45.248 45.248zM512 832a448 448 0 1 0 0-896A448 448 0 0 0 512 832z m0-64a384 384 0 1 1 0-768A384 384 0 0 1 512 768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_left_double" unicode="" d="M834.56 610.56l-58.816 58.88L490.304 384l285.44-285.44 58.88 58.88L608 384l226.56 226.56zM514.56 610.56l-58.816 58.88L170.304 384l285.44-285.44 58.88 58.88L288 384l226.56 226.56z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_right" unicode="" d="M413.44 98.56l-58.816 58.88L581.184 384l-226.56 226.56 58.88 58.88L698.88 384l-285.44-285.44z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_control_platform" unicode="" d="M927.68 624L542.08 846.72a59.968 59.968 0 0 1-60.032 0L96.32 624v-445.376c0-21.44 11.456-41.216 30.016-51.968L512-96l385.728 222.72a59.968 59.968 0 0 1 29.952 51.904V624zM512 420.992L192.256 605.568 512 790.144l319.68-184.576L512 420.992z m32.064-55.488l319.68 184.576v-369.088L544-3.52V365.44z m-64 0v-369.024l-319.744 184.512V550.144L480 365.44z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_close" unicode="" d="M512 325.12l196.864-196.8 58.88 58.88L570.752 384l196.864 196.864-58.816 58.88L512 442.752 315.136 639.68l-58.88-58.88L453.248 384l-196.864-196.864 58.88-58.88L512 325.248z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_check" unicode="" d="M411.776 260.992l398.208 398.272 58.88-58.88-457.088-457.024-285.44 285.44 58.88 58.816 226.56-226.56z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_right_double" unicode="" d="M189.44 157.44l58.816-58.88L533.696 384l-285.44 285.44-58.88-58.88L416 384l-226.56-226.56z m320 0l58.816-58.88L853.696 384l-285.44 285.44-58.88-58.88L736 384l-226.56-226.56z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_check_rectangle_filled" unicode="" d="M128 64a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64V704a64 64 0 0 1-64 64H192a64 64 0 0 1-64-64v-640z m320 233.152l241.6 241.6 45.248-45.248L448 206.656 288.832 365.76l45.312 45.248L448 297.088z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_cloud_upload" unicode="" d="M302.72 495.168l-45.568-5.312C185.408 481.536 128 419.008 128 341.376c0-77.44 56.96-139.648 128-148.352v-64.32c-107.328 8.896-192 100.864-192 212.608 0 109.76 81.28 199.936 185.792 212.16C276.032 676.48 383.552 768 512 768c128.448 0 235.968-91.456 262.208-214.528 104.576-12.16 185.792-102.4 185.792-212.16 0-111.744-84.672-203.712-192-212.608v64.32c71.04 8.704 128 70.912 128 148.288 0 77.696-57.344 140.16-129.152 148.544l-45.632 5.312-9.6 44.928C691.392 634.816 609.024 704 512 704 414.976 704 332.608 634.88 312.32 540.096l-9.6-44.928zM392.96 209.92l86.912 85.248 2.176-327.616 64.64 0.448-2.112 326.464 87.872-85.696 45.696 44.8-144.128 140.544a32 32 0 0 1-44.736 0l-142.08-139.52 45.824-44.672z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_up_circle" unicode="" d="M333.248 269.248L512 448l178.752-178.752 45.248 45.248-224 224-224-224 45.248-45.248zM960 384A448 448 0 1 0 64 384a448 448 0 0 0 896 0z m-64 0A384 384 0 1 1 128 384a384 384 0 0 1 768 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_down_circle" unicode="" d="M690.752 498.752L512 320 333.248 498.752l-45.248-45.248 224-224 224 224-45.248 45.248zM64 384a448 448 0 1 0 896 0A448 448 0 0 0 64 384z m64 0a384 384 0 1 1 768 0A384 384 0 0 1 128 384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_up_rectangle" unicode="" d="M333.248 269.248L512 448l178.752-178.752 45.248 45.248-224 224-224-224 45.248-45.248zM128 704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704z m64 0v-640h640V704H192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_close_rectangle" unicode="" d="M308.352 225.6L466.752 384 308.352 542.4l45.248 45.248L512 429.248l158.4 158.4 45.248-45.248L557.248 384l158.4-158.4-45.248-45.248L512 338.752l-158.4-158.4-45.248 45.248zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_down_rectangle" unicode="" d="M690.752 498.752L512 320 333.248 498.752l-45.248-45.248 224-224 224 224-45.248 45.248zM896 64a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640z m-64 0V704H192v-640h640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_left" unicode="" d="M610.56 669.44l58.816-58.88L442.816 384l226.56-226.56-58.88-58.88L325.12 384l285.44 285.44z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_check_circle" unicode="" d="M288 370.752l160-160 288 288-45.248 45.248L448 301.248 333.248 416l-45.248-45.248zM263.104 756.48a448 448 0 1 0 497.792-744.96A448 448 0 0 0 263.104 756.48z m35.584-691.776a384 384 0 1 1 426.624 638.592 384 384 0 0 1-426.624-638.592z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_right_rectangle" unicode="" d="M397.248 562.752L576 384l-178.752-178.752 45.248-45.248 224 224-224 224-45.248-45.248zM832 768a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640z m0-64H192v-640h640V704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_check_rectangle" unicode="" d="M689.6 538.752L448 297.152l-113.92 113.92-45.248-45.312L448 206.72l286.848 286.848-45.248 45.248zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_close_circle" unicode="" d="M318.72 236.032L466.816 384 318.72 531.968l45.248 45.248L512 429.248l147.968 147.968 45.248-45.248L557.248 384l147.968-147.968-45.248-45.248L512 338.752 364.032 190.72l-45.248 45.248zM512 832a448 448 0 1 0 0-896A448 448 0 0 0 512 832z m0-64a384 384 0 1 1 0-768A384 384 0 0 1 512 768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_cloud" unicode="" d="M302.72 431.296l9.6 44.864C332.672 570.944 415.04 640.064 512 640.064s179.392-69.12 199.68-163.904l9.6-44.864 45.568-5.376C838.656 417.6 896 355.072 896 277.44 896 193.792 829.632 128 750.912 128H273.088C194.368 128.064 128 193.92 128 277.376c0 77.696 57.344 140.16 129.216 148.544l45.568 5.376z m471.488 58.24C747.968 612.672 640.448 704 512 704c-128.448 0-235.968-91.392-262.208-214.528C145.216 477.376 64 387.136 64 277.376c0-117.632 93.76-213.312 209.088-213.312h477.824c115.328 0 209.088 95.68 209.088 213.312 0 109.76-81.28 199.936-185.792 212.16z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_down" unicode="" d="M226.56 482.56l58.88 58.88L512 314.88l226.56 226.56 58.88-58.88L512 197.12 226.56 482.56z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_delete" unicode="" d="M384 128V512h64v-384H384zM576 512v-384h64V512H576zM672 704H896v-64h-64v-640a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64V640H128V704h224V780.8a51.2 51.2 0 0 0 51.2 51.2h217.6a51.2 51.2 0 0 0 51.2-51.2V704z m-256 0h192V768h-192v-64zM256 640v-640h512V640H256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_up" unicode="" d="M797.44 285.44l-58.88-58.88L512 453.12l-226.56-226.56-58.88 58.88L512 570.752l285.44-285.44z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_code" unicode="" d="M572.16 732.288L389.952 52.288l61.824-16.576L633.984 715.712l-61.824 16.576zM137.6 384l219.2-219.2-45.248-45.248L74.24 356.864a38.4 38.4 0 0 0 0 54.272l237.312 237.312 45.248-45.248L137.6 384zM886.144 384l-220.16-217.728 44.928-45.44 238.656 235.84a38.4 38.4 0 0 1 0 54.656l-238.656 235.904-44.992-45.504L886.144 384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_dashboard" unicode="" d="M887.936 581.952L600.128 294.016l-45.312 45.312 288 287.872 45.248-45.248zM513.408 188.672a64 64 0 1 0 0 128 64 64 0 0 0 0-128z m0-64a128 128 0 1 1 0 256 128 128 0 0 1 0-256zM512 672a416 416 0 0 1-341.44-653.696l-52.48-36.608A480 480 0 0 0 734.72 681.344l-29.76-56.704A414.08 414.08 0 0 1 512 672z m416-416a414.08 414.08 0 0 1-46.848 192l56.768 29.568A478.08 478.08 0 0 0 992 256a477.952 477.952 0 0 0-86.08-274.304l-52.48 36.608A413.952 413.952 0 0 1 928 256z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_clear" unicode="" d="M448 640h128V768H448v-128z m192 128v-128h192a64 64 0 0 0 64-64v-128a64 64 0 0 0-54.976-63.36l44.544-311.616a64 64 0 0 0-63.36-73.024H201.792a64 64 0 0 0-63.36 73.024L183.04 384.64A64 64 0 0 0 128 448V576a64 64 0 0 0 64 64h192V768a64 64 0 0 0 64 64h128a64 64 0 0 0 64-64z m136.512-320H832V576H192v-128h584.512z m0-64H247.488l-45.696-320H320v128h64v-128h96v128h64v-128H640v128h64v-128h118.208l-45.696 320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chevron_left_rectangle" unicode="" d="M626.752 205.248L448 384l178.752 178.752-45.248 45.248-224-224 224-224 45.248 45.248zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_cloud_download" unicode="" d="M302.72 495.168l-45.568-5.312C185.408 481.536 128 419.008 128 341.376c0-77.44 56.96-139.648 128-148.352v-64.32c-107.328 8.896-192 100.864-192 212.608 0 109.76 81.28 199.936 185.792 212.16C276.032 676.48 383.552 768 512 768c128.448 0 235.968-91.456 262.208-214.528 104.576-12.16 185.792-102.4 185.792-212.16 0-111.744-84.672-203.712-192-212.608v64.32c71.04 8.704 128 70.912 128 148.288 0 77.696-57.344 140.16-129.152 148.544l-45.632 5.312-9.6 44.928C691.392 634.816 609.024 704 512 704 414.976 704 332.608 634.88 312.32 540.096l-9.6-44.928zM627.008 172.8l-82.816-82.496V384.192H480.128v-293.888l-82.816 82.56-45.312-45.248 137.6-137.088a32 32 0 0 1 45.12 0l137.6 137.088-45.312 45.184z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_desktop" unicode="" d="M160 192h320v-128H192v-64h640v64H544v128h320a64 64 0 0 1 64 64V704a64 64 0 0 1-64 64h-704a64 64 0 0 1-64-64v-448a64 64 0 0 1 64-64z m0 512h704v-448h-704V704z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_ellipsis" unicode="" d="M192 320a64 64 0 1 0 0 128 64 64 0 0 0 0-128zM448 384a64 64 0 1 1 128 0 64 64 0 0 1-128 0zM768 384a64 64 0 1 1 128 0 64 64 0 0 1-128 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_edit" unicode="" d="M696.448 784.832l207.552-207.552 45.248 45.248L741.76 830.08l-45.248-45.248zM150.528 8.768l231.232 46.208 467.072 467.072L641.216 729.6 174.208 262.592l-46.272-231.232a19.2 19.2 0 0 1 22.592-22.592z m490.688 630.4l117.12-117.12-408.128-408.064-146.304-29.312 29.248 146.368 408.064 408.064z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_download" unicode="" d="M784.896 523.904L544 283.072V864h-64v-580.928L239.104 523.904l-45.248-45.248 295.488-295.488a32 32 0 0 1 45.312 0l295.488 295.488-45.248 45.248zM128 192v-128a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64v128h-64v-128H192v128H128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_discount_filled" unicode="" d="M447.168 554.88A75.008 75.008 0 1 0 341.12 448.896 75.008 75.008 0 0 0 447.168 554.88zM128 401.28a64 64 0 0 1 18.752-45.248l378.368-378.368a64 64 0 0 1 90.496 0l302.72 302.72a64 64 0 0 1 0 90.496L539.968 749.248A64 64 0 0 1 494.72 768H128v-366.72z m364.416 198.912a139.008 139.008 0 1 0-196.608-196.608 139.008 139.008 0 0 0 196.608 196.608z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_down" unicode="" d="M512 234.688L256 576h512l-256-341.312z m-25.6-72.576a32 32 0 0 1 51.2 0l320 426.688A32 32 0 0 1 832 640H192a32 32 0 0 1-25.6-51.2l320-426.688z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_backtop" unicode="" d="M127.936 704.064h768v64h-768v-64zM216.128 241.28l263.04 258.24v-553.536h64.64V499.84l267.52-260.928 45.76 44.8-323.2 315.264a32 32 0 0 1-44.8-0.064L170.24 285.952l45.824-44.608z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_right" unicode="" d="M725.376 384L384 128V640l341.376-256z m72.512-25.6a32 32 0 0 1 0 51.2L371.2 729.6A32 32 0 0 1 320 704v-640a32 32 0 0 1 51.2-25.6l426.688 320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_bulletpoint" unicode="" d="M896 704H320v-64h576V704zM224 704H128v-64h96V704zM320 416h576v-64H320v64zM128 416h96v-64H128v64zM320 128h576v-64H320v64zM128 128h96v-64H128v64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_right_small" unicode="" d="M384 576v-384l288 192L384 576z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_add" unicode="" d="M470.4 342.4v-246.4h83.2V342.4h246.4v83.2H553.6V672h-83.2v-246.4H224v-83.2h246.4z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_left" unicode="" d="M298.688 384L640 640v-512L298.688 384z m-72.512 25.6a32 32 0 0 1 0-51.2l426.624-320a32 32 0 0 1 51.2 25.6V704a32 32 0 0 1-51.2 25.6l-426.624-320z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_down_small" unicode="" d="M704 512H320l192-288L704 512z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_left_small" unicode="" d="M672 576v-384L384 384l288 192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="chart-bar" unicode="" d="M480 768v-768h64V768h-64zM160 512v-512h64V512h-64zM800 0v256h64v-256h-64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_arrow_left" unicode="" d="M250.496 352l233.408-233.344-45.312-45.248-296.96 297.024a19.2 19.2 0 0 0 0 27.2l296.96 296.96 45.312-45.184L250.496 416H896v-64H250.496z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_calendar" unicode="" d="M640 704H384V800H320V704H192a64 64 0 0 1-64-64v-576a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64V640a64 64 0 0 1-64 64h-128V800h-64V704zM320 576h64V640h256v-64h64V640h128v-128H192V640h128v-64zM192 448h640v-384H192V448z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chart_pie" unicode="" d="M960 384A448 448 0 1 0 64 384a448 448 0 0 0 896 0z m-65.28-32H480V766.72a384 384 0 1 1 414.72-414.72z m0 64A384.064 384.064 0 0 1 544 766.72V416h350.72z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_arrow_right" unicode="" d="M773.504 416L540.096 649.344l45.248 45.248 297.088-297.024a19.2 19.2 0 0 0 0-27.136l-297.088-297.088-45.248 45.248L773.504 352H128v64h645.504z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_up_small" unicode="" d="M704 224H320L512 512l192-288z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_browse" unicode="" d="M696.32 384a184.32 184.32 0 1 0-368.64 0 184.32 184.32 0 0 0 368.64 0z m-64 0a120.32 120.32 0 1 1-240.64 0 120.32 120.32 0 0 1 240.64 0zM71.488 369.28c86.016-168.96 255.04-273.28 440.832-273.28 185.152 0 354.176 104.32 440.192 273.28L960 384l-7.488 14.72C866.56 567.04 697.472 672 512.32 672c-185.792 0-354.816-104.96-440.832-273.28L64 384l7.488-14.72z m440.832-209.28C355.2 160 212.416 245.12 135.04 384 212.416 522.88 355.2 608 512.32 608c156.48 0 299.264-85.12 377.216-224-77.312-138.88-220.736-224-377.216-224z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_books" unicode="" d="M511.936 302.208l-256-179.2v581.12h512v-581.12l-256 179.2z m0-78.08l269.632-188.8a32 32 0 0 1 50.368 26.24V704.064a64 64 0 0 1-64 64h-512a64 64 0 0 1-64-64v-642.56a32 32 0 0 1 50.368-26.24l269.632 188.8z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_app" unicode="" d="M720 784a192 192 0 1 1 0-384 192 192 0 0 1 0 384z m-128-192a128 128 0 1 0 256 0 128 128 0 0 0-256 0zM128 704a64 64 0 0 0 64 64h224a64 64 0 0 0 64-64v-224a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704z m64 0v-224h224V704H192zM128 288a64 64 0 0 0 64 64h224a64 64 0 0 0 64-64V64a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V288z m64 0V64h224V288H192zM544 288a64 64 0 0 0 64 64H832a64 64 0 0 0 64-64V64a64 64 0 0 0-64-64H608a64 64 0 0 0-64 64V288z m64-224H832V288H608V64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_arrow_up" unicode="" d="M480 645.504L246.656 412.096l-45.248 45.248 297.024 297.088a19.2 19.2 0 0 0 27.136 0l297.088-297.088-45.248-45.248L544 645.504V0h-64V645.504z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_backward" unicode="" d="M79.488 359.04a32 32 0 0 0 0 49.92l360.768 288.064a32 32 0 0 0 51.968-24.96v-273.024a31.936 31.936 0 0 0 7.808 9.6l343.488 286.144a32 32 0 0 0 52.48-24.576v-572.416a32 32 0 0 0-52.48-24.576L500.032 359.424a31.936 31.936 0 0 0-7.808 9.6v-273.088a32 32 0 0 0-51.968-24.96l-360.768 288z m348.8-196.608V605.568L150.656 384l277.504-221.568zM832 166.08v435.84L570.496 384 832 166.08z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_cart" unicode="" d="M64 704h100.864l88.896-533.248a51.2 51.2 0 0 1 50.56-42.752H896v64H315.136L293.76 320h552.576A51.2 51.2 0 0 1 896 358.784l54.4 217.6A51.2 51.2 0 0 1 900.736 640H240.448l-14.208 85.248A51.2 51.2 0 0 1 175.68 768H64v-64z m772.352-320H283.136l-32 192h633.216l-48-192zM304-32a48 48 0 1 1 0 96 48 48 0 0 1 0-96zM820.032-32a48 48 0 1 1 0 96 48 48 0 0 1 0-96z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_attach" unicode="" d="M776.128 649.216a129.088 129.088 0 0 1-181.952-0.512l-461.44-461.44-45.248 45.248 461.44 461.44a193.088 193.088 0 1 0 273.024-273.088l-373.76-373.76A120.576 120.576 0 0 0 277.696 217.6l363.136 363.136 45.248-45.248-363.136-363.136a56.512 56.512 0 1 1 80-80l373.76 373.76a129.088 129.088 0 0 1-0.64 183.104z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="chart" unicode="" d="M288 128V416h64V128h-64zM480 608V128h64V608h-64zM672 128V320h64v-192h-64zM128 704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64V704z m64 0v-640h640V704H192z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chat" unicode="" d="M296.832 224H832V640H192v-503.36L296.832 224z m-137.344-197.76A19.2 19.2 0 0 0 128 40.96V640a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-416a64 64 0 0 0-64-64H320l-160.512-133.76z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_add_rectangle" unicode="" d="M480 192V352H320v64h160V576h64v-160H704v-64H544V192h-64zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_add_circle" unicode="" d="M480 352h-192v64h192v192h64v-192h192v-64h-192v-192h-64v192zM512-64A448 448 0 1 1 512 832a448 448 0 0 1 0-896z m0 64A384 384 0 1 0 512 768a384 384 0 0 0 0-768z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_barcode" unicode="" d="M256 768v-768H128V768h128z m640 0v-768h-128V768h128z m-192 0v-768h-64V768h64zM576 768v-768H448V768h128zM384 768v-768H320V768h64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_arrow_down_rectangle" unicode="" d="M687.744 412.992L544 269.248V608h-64v-338.752L336.256 412.992l-45.248-45.248L512 146.752l220.992 220.992-45.248 45.248zM192 0a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64H192z m0 64h640V704H192v-640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_browse_off" unicode="" d="M689.472 129.28l87.872-87.872 45.248 45.248L201.6 707.648l-45.248-45.248 77.44-77.44a505.664 505.664 0 0 1-162.304-186.24L64 384l7.488-14.72c86.016-168.96 255.04-273.28 440.832-273.28 61.696 0 121.6 11.584 177.152 33.28z m-50.048 50.048a427.008 427.008 0 0 0-127.104-19.328C355.2 160 212.416 245.12 135.04 384a438.72 438.72 0 0 0 144.384 155.264l69.376-69.376a184.32 184.32 0 0 1 248.96-248.96l41.6-41.6z m-241.92 241.92l151.68-151.68a120.32 120.32 0 0 0-151.68 151.68zM952.512 369.28L960 384l-7.488 14.72C866.56 567.04 697.472 672 512.32 672c-54.784 0-108.16-9.088-158.336-26.304l51.2-51.2A428.736 428.736 0 0 0 512.32 608c156.48 0 299.264-85.12 377.216-224a439.552 439.552 0 0 0-129.152-144.704l45.312-45.312a505.216 505.216 0 0 1 146.816 175.36zM696.32 384c0-23.936-4.608-46.784-12.864-67.776l-52.16 52.16a120.32 120.32 0 0 1-134.912 134.912L444.16 555.52A184.32 184.32 0 0 0 696.32 384z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_backtop_rectangle" unicode="" d="M479.872 371.52L380.416 273.92l-45.824 44.672L512.128 492.8 691.2 318.08l-45.696-44.8-101.056 98.56V128h-64.64V371.52zM287.936 544.064h448v64h-448v-64zM191.936 768.064a64 64 0 0 1-64-64v-640a64 64 0 0 1 64-64h640a64 64 0 0 1 64 64v640a64 64 0 0 1-64 64h-640z m640-64v-640h-640v640h640z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_arrow_down" unicode="" d="M544 768v-645.504l233.344 233.344 45.248-45.248-297.024-296.96a19.2 19.2 0 0 0-27.136 0l-297.088 296.96 45.312 45.248L480 122.56V768h64z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_call" unicode="" d="M896 188.352a195.2 195.2 0 0 0-33.152-112.64l-8.064-10.688a129.6 129.6 0 0 0-62.72-48c-17.92-6.656-29.184-8.64-58.176-11.968-124.672-11.648-260.928 46.592-395.52 166.272-89.856 80.128-157.184 180.352-189.568 282.816C135.04 497.472 128 539.072 128 576.768c0 45.184 10.24 84.288 30.72 113.664 19.456 26.752 56.448 48.96 112 69.952a64 64 0 0 0 74.88-22.912l106.624-150.912a64 64 0 0 0-5.76-80.896l-13.888-14.144-16.768-16.256a97.92 97.92 0 0 1-10.56-12.16c-1.472-19.584 19.456-59.968 80.384-122.368l18.176-16.96c56.192-51.84 71.296-56 88.576-44.032l5.76 4.736c6.144 4.672 22.08 15.744 56.192 39.232a64 64 0 0 0 65.984 3.904l15.552-8.192c106.432-56.832 155.008-91.008 159.744-126.08l0.384-4.992z m-64-1.024c0.064-5.248-7.36 2.816-22.72 13.952-22.464 16.256-57.088 36.864-103.488 61.632l-15.168 8.064-50.432-34.816c-1.216-0.768-1.728-1.088-1.536-0.832-55.04-43.2-102.4-31.104-197.952 59.904-73.344 75.008-102.4 131.072-99.328 172.288 1.472 22.592 17.024 43.264 32.128 55.68 6.4 6.144 12.8 12.416 18.432 18.176l8 8.32-106.56 150.848c-44.864-16.96-72.64-33.664-82.56-47.232C198.912 636.16 192 609.792 192 576.768c0-30.72 6.016-65.92 17.792-103.36 28.8-91.072 89.6-181.632 171.136-254.272 122.432-108.928 242.304-160.128 346.368-150.4l16.448 2.048c11.392 1.6 17.792 3.2 25.92 6.208 14.08 5.248 25.088 13.44 34.112 26.56 17.088 20.864 26.24 47.616 27.904 72.96l0.32 10.816z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_caret_up" unicode="" d="M512 533.312L768 192H256l256 341.312z m25.6 72.576a32 32 0 0 1-51.2 0l-320-426.688a32 32 0 0 1 25.6-51.2h640a32 32 0 0 1 25.6 51.2l-320 426.688z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_chart_bubble" unicode="" d="M576 544a192 192 0 1 0-384 0 192 192 0 0 0 384 0z m-64 0a128 128 0 1 1-256 0 128 128 0 0 1 256 0zM896 256a160 160 0 1 0-320 0 160 160 0 0 0 320 0z m-64 0a96 96 0 1 1-192 0 96 96 0 0 1 192 0zM320 128a96 96 0 1 0-192 0 96 96 0 0 0 192 0zM832 608a64 64 0 1 1 0 128 64 64 0 0 1 0-128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_data" unicode="" d="M490.666667 853.333333C738.090667 853.333333 938.666667 652.757333 938.666667 405.333333a42.666667 42.666667 0 0 0-42.666667-42.666666h-362.666667V0a42.666667 42.666667 0 0 0-42.666666-42.666667C243.242667-42.666667 42.666667 157.909333 42.666667 405.333333S243.242667 853.333333 490.666667 853.333333z m384-533.333333a42.666667 42.666667 0 0 0 42.666666-42.666667v-256a42.666667 42.666667 0 0 0-42.666666-42.666666h-256a42.666667 42.666667 0 0 0-42.666667 42.666666v256a42.666667 42.666667 0 0 0 42.666667 42.666667h256zM490.666667 768a362.666667 362.666667 0 0 1-43.050667-722.773333l0.384-0.042667V362.666667a85.333333 85.333333 0 0 0 78.933333 85.12l6.4 0.213333h317.482667v0.384a362.752 362.752 0 0 1-349.269333 319.445333L490.666667 768z m341.333333-533.333333h-170.666667v-170.666667h170.666667v170.666667z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_clue" unicode="" d="M789.333333 810.666667a149.333333 149.333333 0 0 0 42.666667-292.48v-379.605334a181.248 181.248 0 0 0-362.496 0v490.666667a96.085333 96.085333 0 1 1-192.170667 0v-379.434667A149.418667 149.418667 0 0 0 234.666667-42.666667a149.333333 149.333333 0 0 0-42.666667 292.48V629.248a181.418667 181.418667 0 1 0 362.837333 0v-490.666667a95.914667 95.914667 0 0 1 191.829334 0V518.186667A149.418667 149.418667 0 0 0 789.333333 810.666667z m-554.666666-640a64 64 0 1 1 0-128 64 64 0 0 1 0 128z m554.666666 554.666666a64 64 0 1 1 0-128 64 64 0 0 1 0 128z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_business_opportunity" unicode="" d="M512 853.333333c259.2 0 469.333333-210.133333 469.333333-469.333333s-210.133333-469.333333-469.333333-469.333333S42.666667 124.8 42.666667 384 252.8 853.333333 512 853.333333z m0-85.333333a384 384 0 1 1 0-768 384 384 0 0 1 0 768zM414.165333 606.165333L512 508.373333l97.877333 97.792a42.666667 42.666667 0 0 0 56.32 3.541334l4.010667-3.541334a42.666667 42.666667 0 0 0 0-60.330666L593.664 469.333333H640a42.666667 42.666667 0 0 0 0-85.333333h-85.162667v-42.666667H640a42.666667 42.666667 0 0 0 0-85.333333h-85.162667v-85.333333a42.666667 42.666667 0 0 0-85.333333 0v85.333333H384a42.666667 42.666667 0 0 0 0 85.333333h85.504v42.666667H384a42.666667 42.666667 0 0 0 0 85.333333h46.293333L353.834667 545.834667a42.666667 42.666667 0 0 0 60.330666 60.330666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_set_up" unicode="" d="M637.44 851.797333a468.608 468.608 0 0 0 194.090667-108.586666 42.666667 42.666667 0 0 0 9.216-50.133334A85.333333 85.333333 0 0 1 917.333333 570.069333h1.194667a42.666667 42.666667 0 0 0 41.301333-29.866666 471.253333 471.253333 0 0 0 11.946667-235.306667 42.666667 42.666667 0 0 0-45.952-33.877333 85.333333 85.333333 0 0 1-73.770667-139.904 42.666667 42.666667 0 0 0-1.834666-57.088 469.205333 469.205333 0 0 0-204.117334-124.501334 42.666667 42.666667 0 0 0-52.778666 27.904 85.376 85.376 0 0 1-162.645334 0 42.666667 42.666667 0 0 0-52.778666-27.904 469.205333 469.205333 0 0 0-204.117334 124.501334 42.666667 42.666667 0 0 0-1.834666 57.088A85.333333 85.333333 0 0 1 98.133333 271.018667a42.666667 42.666667 0 0 0-45.994666 33.92 471.253333 471.253333 0 0 0 11.946666 235.264 42.666667 42.666667 0 0 0 41.386667 29.866666H106.666667a85.333333 85.333333 0 0 1 76.586666 123.008 42.666667 42.666667 0 0 0 9.216 50.133334A468.608 468.608 0 0 0 386.56 851.797333a42.666667 42.666667 0 0 0 49.408-21.76 85.333333 85.333333 0 0 1 152.149333 0 42.666667 42.666667 0 0 0 49.408 21.76zM380.330667 760.277333a384.341333 384.341333 0 0 1-106.453334-59.605333l-2.176-1.749333 2.389334-10.026667c1.450667-7.296 2.432-14.72 2.901333-22.186667l0.384-11.264a170.709333 170.709333 0 0 0-137.301333-167.424l-1.792-0.256-1.237334-5.205333a384.341333 384.341333 0 0 1-8.618666-66.218667L128 399.445333c0-10.538667 0.426667-20.949333 1.28-31.317333l1.28-13.013333 1.322667-0.213334a170.709333 170.709333 0 0 0 145.237333-160.298666l0.213333-8.533334c0-23.765333-4.906667-46.848-14.08-68.010666l-3.754666-7.893334 9.386666-7.978666a383.914667 383.914667 0 0 1 90.368-55.210667l8.917334-3.626667 4.352 6.485334a170.666667 170.666667 0 0 0 130.56 72.021333l8.917333 0.256a170.666667 170.666667 0 0 0 139.52-72.277333l4.266667-6.485334 8.96 3.626667a383.914667 383.914667 0 0 1 90.410666 55.210667l9.301334 7.978666-3.669334 7.893334a170.112 170.112 0 0 0-13.824 57.898666l-0.298666 10.154667a170.666667 170.666667 0 0 0 145.450666 168.789333l1.28 0.213334 1.365334 13.013333c0.426667 5.162667 0.725333 10.368 0.938666 15.573333l0.298667 15.744c0 28.245333-3.029333 56.064-9.002667 83.114667l-1.28 5.205333-1.749333 0.256a170.752 170.752 0 0 0-137.088 158.890667l-0.213333 8.533333c0 11.306667 1.109333 22.528 3.285333 33.450667l2.346667 10.026667-2.133334 1.749333a383.274667 383.274667 0 0 1-106.24 59.477333l-5.205333-5.717333A170.496 170.496 0 0 0 512 698.112a170.496 170.496 0 0 0-126.72 56.32l-4.992 5.845333zM512 591.445333a192 192 0 1 0 0-384 192 192 0 0 0 0 384z m0-85.333333a106.666667 106.666667 0 1 1 0-213.333333 106.666667 106.666667 0 0 1 0 213.333333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_not_bookmarked" unicode="" d="M473.642667 829.44a42.666667 42.666667 0 0 0 76.544 0.213333l122.154666-246.186666 272.469334-39.722667a42.666667 42.666667 0 0 0 27.050666-69.077333l-3.328-3.626667-198.229333-194.048 47.104-269.653333a42.666667 42.666667 0 0 0-58.026667-46.933334l-4.096 1.962667L512 92.032l-243.242667-129.706667a42.666667 42.666667 0 0 0-62.677333 40.533334l0.554667 4.522666 47.402666 269.610667-198.485333 194.005333a42.666667 42.666667 0 0 0 18.858667 71.765334l4.821333 0.981333 273.92 39.722667 120.533333 245.973333z m38.528-115.242667L419.882667 525.696a42.666667 42.666667 0 0 0-32.213334-23.466667l-210.773333-30.549333 152.874667-149.418667a42.666667 42.666667 0 0 0 12.8-32.725333l-0.64-5.205333-36.138667-205.44 186.112 99.157333a42.666667 42.666667 0 0 0 35.328 2.176l4.821333-2.176 186.24-99.285333-35.84 205.653333a42.666667 42.666667 0 0 0 8.618667 33.92l3.541333 3.84 152.618667 149.546667-209.322667 30.549333a42.666667 42.666667 0 0 0-29.44 18.730667l-2.602666 4.522666-93.696 188.672z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_product" unicode="" d="M531.072 848.810667l426.666667-213.333334 0.981333-0.469333c1.066667-0.597333 2.133333-1.194667 3.157333-1.877333l-4.138666 2.346666a42.709333 42.709333 0 0 0 8.234666-5.333333l1.024-0.896a37.802667 37.802667 0 0 0 6.954667-7.893333 38.485333 38.485333 0 0 0 2.858667-4.949334l0.64-1.28a42.666667 42.666667 0 0 0 1.28-3.029333l-1.92 4.309333a42.965333 42.965333 0 0 0 4.522666-18.730666V170.666667a42.666667 42.666667 0 0 0-23.594666-38.144l-426.666667-213.333334a41.130667 41.130667 0 0 0-4.864-2.133333l4.864 2.133333A42.666667 42.666667 0 0 0 512-85.333333l-2.133333 0.042666a42.666667 42.666667 0 0 0-1.237334 0.085334L512-85.333333a42.922667 42.922667 0 0 0-12.629333 1.877333l-1.493334 0.512a40.32 40.32 0 0 0-4.992 2.133333l-426.666666 213.333334A42.666667 42.666667 0 0 0 42.666667 170.666667V597.674667a42.368 42.368 0 0 0 4.522666 18.773333l0.384 0.725333 0.64 1.237334-1.024-2.005334c0.896 1.877333 1.962667 3.626667 3.114667 5.290667l0.512 0.725333a40.704 40.704 0 0 0 2.602667 3.285334l0.853333 0.853333a38.997333 38.997333 0 0 0 2.645333 2.602667l1.152 0.981333a38.954667 38.954667 0 0 0 7.594667 5.077333l0.597333 0.256 426.666667 213.333334a42.666667 42.666667 0 0 0 38.144 0zM128 528.298667v-331.264l341.333333-170.624v331.221333l-341.333333 170.666667z m768 0l-341.333333-170.666667v-331.221333l341.333333 170.666666V528.298667z m-170.666667 128L394.069333 490.666667 512 431.701333 843.264 597.333333 725.333333 656.298667z m-213.333333 106.666666L180.778667 597.333333 298.666667 538.368 629.930667 704 512 762.965333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_customer" unicode="" d="M405.333333 810.666667a192 192 0 1 0 0-384 192 192 0 0 0 0 384z m0-85.333334a106.666667 106.666667 0 1 1 0-213.333333 106.666667 106.666667 0 0 1 0 213.333333z m253.738667 43.349334a42.666667 42.666667 0 0 0 58.581333 14.506666A191.872 191.872 0 0 0 810.666667 618.666667a191.872 191.872 0 0 0-93.013334-164.565334 42.666667 42.666667 0 0 0-44.032 73.130667A106.581333 106.581333 0 0 1 725.333333 618.666667c0 37.888-19.84 72.234667-51.712 91.434666a42.666667 42.666667 0 0 0-14.506666 58.581334zM452.266667 341.333333c128.042667 0 158.506667-2.474667 199.253333-23.253333a213.333333 213.333333 0 0 0 93.226667-93.226667c20.778667-40.746667 23.253333-71.210667 23.253333-199.253333v-25.6a42.666667 42.666667 0 0 0-42.666667-42.666667H85.333333a42.666667 42.666667 0 0 0-42.666666 42.666667v25.6c0 128.042667 2.474667 158.506667 23.253333 199.253333a213.333333 213.333333 0 0 0 93.226667 93.226667C199.893333 338.858667 230.4 341.333333 358.4 341.333333h93.866667z m22.485333-85.333333H335.914667c-92.16-0.341333-116.522667-2.986667-138.026667-13.952a128 128 0 0 1-55.936-55.936c-10.965333-21.504-13.610667-45.866667-13.909333-138.026667L128 42.666667h554.624v5.418666c-0.298667 88.618667-2.773333 114.56-12.672 135.509334l-1.237333 2.517333a128 128 0 0 1-55.936 55.936c-21.504 10.965333-45.866667 13.610667-138.026667 13.909333z m332.714667 43.434667a42.666667 42.666667 0 0 0 57.386666 18.645333 213.333333 213.333333 0 0 0 93.226667-93.226667c20.778667-40.746667 23.253333-71.210667 23.253333-199.253333v-25.6a42.666667 42.666667 0 0 0-85.333333 0v25.6c0 110.933333-2.133333 137.386667-13.952 160.512a128 128 0 0 1-55.936 55.893333 42.666667 42.666667 0 0 0-18.645333 57.429334z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_home" unicode="" d="M530.474667 801.28l333.141333-266.496a42.666667 42.666667 0 0 0 16-33.28V-31.573333a42.666667 42.666667 0 0 0-37.674667-42.368l-4.992-0.298667H170.666667a42.666667 42.666667 0 0 0-42.666667 42.666667V501.461333a42.666667 42.666667 0 0 0 16 33.322667l333.184 266.538667a42.666667 42.666667 0 0 0 53.290667 0z m-26.666667-87.893333L213.333333 481.024v-469.888l136.746667 0.042667v245.973333a42.666667 42.666667 0 0 0 42.666667 42.666667h222.122666a42.666667 42.666667 0 0 0 42.666667-42.666667l-0.042667-245.973333 136.789334-0.042667V480.981333L503.808 713.386667z m68.352-498.901334h-136.746667v-203.306666h136.746667v203.306666z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_collect" unicode="" d="M550.186667 829.653333l122.154666-246.186666 272.469334-39.722667a42.666667 42.666667 0 0 0 27.050666-69.077333l-3.328-3.626667-198.229333-194.048 47.104-269.653333a42.666667 42.666667 0 0 0-58.026667-46.933334l-4.096 1.962667L512 92.032l-243.242667-129.706667a42.666667 42.666667 0 0 0-62.677333 40.533334l0.554667 4.522666 47.402666 269.610667-198.485333 194.005333a42.666667 42.666667 0 0 0 18.858667 71.765334l4.821333 0.981333 273.92 39.722667 120.533333 245.973333a42.666667 42.666667 0 0 0 76.544 0.213333z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon_search-outline_outlined" unicode="" d="M702.848 132.821333A403.626667 403.626667 0 0 0 448 42.666667a405.333333 405.333333 0 1 0 405.333333 405.333333 403.626667 403.626667 0 0 0-90.154666-254.848l175.914666-175.914667a21.333333 21.333333 0 0 0 0-30.165333l-30.165333-30.165333a21.333333 21.333333 0 0 0-30.165333 0l-175.914667 175.914666zM768 448a320 320 0 1 1-640 0 320 320 0 0 1 640 0z" horiz-adv-x="1024" />
|
||||
|
||||
<glyph glyph-name="icon-alarmclock" unicode="" d="M426.666667 778.24V810.666667a21.333333 21.333333 0 0 0 21.333333 21.333333h128a21.333333 21.333333 0 0 0 21.333333-21.333333v-32.426667c147.2-39.125333 256-177.066667 256-341.248V192h64a21.333333 21.333333 0 0 0 21.333334-21.333333v-42.666667a21.333333 21.333333 0 0 0-21.333334-21.333333h-810.666666A21.333333 21.333333 0 0 0 85.333333 128v42.666667a21.333333 21.333333 0 0 0 21.333334 21.333333H170.666667v244.992C170.666667 601.173333 279.466667 739.114667 426.666667 778.24zM256 192h512v244.906667c0 147.498667-114.602667 267.093333-256 267.093333s-256-119.594667-256-267.093333v-244.906667zM405.333333 42.666667h213.333334a21.333333 21.333333 0 0 0 21.333333-21.333334v-42.666666a21.333333 21.333333 0 0 0-21.333333-21.333334h-213.333334a21.333333 21.333333 0 0 0-21.333333 21.333334v42.666666a21.333333 21.333333 0 0 0 21.333333 21.333334z" horiz-adv-x="1024" />
|
||||
|
||||
</font>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 218 KiB |
BIN
frontend/packages/mobile/src/assets/icon-font/iconfont.ttf
Normal file
BIN
frontend/packages/mobile/src/assets/icon-font/iconfont.woff2
Normal file
68
frontend/packages/mobile/src/assets/style/global.less
Normal file
@@ -0,0 +1,68 @@
|
||||
@import url('./var.less');
|
||||
html,
|
||||
body {
|
||||
padding-bottom: env(safe-area-inset-bottom);
|
||||
/* stylelint-disable-next-line function-no-unknown */
|
||||
padding-bottom: constant(safe-area-inset-bottom);
|
||||
height: 100vh;
|
||||
#app {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* 修改进度条的背景颜色 */
|
||||
#nprogress {
|
||||
.bar {
|
||||
background: var(--primary-8) !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* 单行文本缩略 */
|
||||
.one-line-text {
|
||||
@apply overflow-hidden overflow-ellipsis whitespace-nowrap;
|
||||
}
|
||||
.top-bar {
|
||||
@apply flex items-center;
|
||||
|
||||
gap: 12px;
|
||||
padding: 8px 16px;
|
||||
background-color: var(--text-n10);
|
||||
.half-px-border-bottom();
|
||||
}
|
||||
.crm-form {
|
||||
.van-cell-group {
|
||||
margin: 0;
|
||||
.van-cell {
|
||||
position: relative;
|
||||
&:last-child::before {
|
||||
position: absolute;
|
||||
box-sizing: border-box;
|
||||
content: ' ';
|
||||
pointer-events: none;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
border-bottom: 1px solid var(--van-cell-border-color);
|
||||
transform: scaleY(0.5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// 设置列表下label溢出省略
|
||||
.van-list {
|
||||
.van-radio {
|
||||
.van-radio__label {
|
||||
.one-line-text();
|
||||
}
|
||||
}
|
||||
.van-checkbox {
|
||||
.van-checkbox__label {
|
||||
.one-line-text();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// search (在search组件上写class,会影响到van-search__field的padding-right,导致清除按钮样式异常)
|
||||
.crm-search.van-search {
|
||||
@apply flex-1 !p-0;
|
||||
}
|
||||
5
frontend/packages/mobile/src/assets/style/index.less
Normal file
@@ -0,0 +1,5 @@
|
||||
@import url('@lib/shared/assets/style/themeVariables.less');
|
||||
@import url('./global.less');
|
||||
@import url('./tailwind.less');
|
||||
@import url('./var.less');
|
||||
@import url('./theme.less');
|
||||
6
frontend/packages/mobile/src/assets/style/tailwind.less
Normal file
@@ -0,0 +1,6 @@
|
||||
/* stylelint-disable at-rule-no-unknown */
|
||||
|
||||
/* tailWindCss.less */
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
18
frontend/packages/mobile/src/assets/style/theme.less
Normal file
@@ -0,0 +1,18 @@
|
||||
:root:root {
|
||||
// Component Colors
|
||||
--van-primary-color: @primary-color;
|
||||
--van-success-color: var(--success-green);
|
||||
--van-danger-color: var(--error-red);
|
||||
--van-warning-color: var(--warning-yellow);
|
||||
--van-text-color: var(--text-n1);
|
||||
--van-text-color-2: var(--text-n2);
|
||||
--van-text-color-3: var(--text-n4);
|
||||
--van-tabbar-height: 40px;
|
||||
--van-radius-sm: @border-radius-mini;
|
||||
--van-radius-md: @border-radius-small;
|
||||
--van-radius-lg: @border-radius-medium;
|
||||
--van-tag-radius: @border-radius-mini;
|
||||
}
|
||||
.van-dialog__message {
|
||||
@apply text-left;
|
||||
}
|
||||
81
frontend/packages/mobile/src/assets/style/var.less
Normal file
@@ -0,0 +1,81 @@
|
||||
/** 圆角 **/
|
||||
@border-radius-mini: 3px;
|
||||
@border-radius-small: 6px;
|
||||
@border-radius-medium: 9px;
|
||||
@border-radius-large: 12px;
|
||||
|
||||
@color-white: #fff;
|
||||
@color-text-5: #aeaeb2;
|
||||
|
||||
/** 投影 **/
|
||||
@box-base-shadow: 0 4px 10px -1px rgba(100 103 103 / 15%);
|
||||
@box-middle-shadow: 0 4px 15px 2px rgba(100 103 103 / 10%);
|
||||
@box-large-shadow: 0 6px 35px 6px rgba(100 103 103 / 10%);
|
||||
|
||||
/** 滚动条 **/
|
||||
.crm-scroll-bar() {
|
||||
&::-webkit-scrollbar {
|
||||
@apply bg-transparent;
|
||||
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
@apply hidden;
|
||||
|
||||
border-radius: var(--border-radius-medium);
|
||||
background-color: var(--color-text-input-border);
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
@apply bg-transparent;
|
||||
}
|
||||
&:hover {
|
||||
&::-webkit-scrollbar-thumb {
|
||||
@apply block;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** 0.5px边框 **/
|
||||
.half-px-border-top() {
|
||||
position: relative;
|
||||
&::before {
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
bottom: -50%;
|
||||
left: -50%;
|
||||
border-top: solid 1px var(--van-border-color);
|
||||
content: '';
|
||||
transform: scale(0.5);
|
||||
box-sizing: border-box;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
.half-px-border-bottom() {
|
||||
position: relative;
|
||||
&::after {
|
||||
position: absolute;
|
||||
top: -50%;
|
||||
right: -50%;
|
||||
bottom: -50%;
|
||||
left: -50%;
|
||||
border-bottom: solid 1px var(--van-border-color);
|
||||
content: '';
|
||||
transform: scale(0.5);
|
||||
box-sizing: border-box;
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
|
||||
/** 按钮 **/
|
||||
.crm-button-primary--secondary {
|
||||
border: none !important;
|
||||
color: var(--primary-8) !important;
|
||||
background-color: var(--primary-7) !important;
|
||||
}
|
||||
|
||||
// 溢出省略
|
||||
.one-line-text() {
|
||||
@apply overflow-hidden overflow-ellipsis whitespace-nowrap;
|
||||
}
|
||||
9
frontend/packages/mobile/src/assets/svg/bot.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8.16683 1.33334C8.90321 1.33334 9.50016 1.9303 9.50016 2.66668C9.50016 3.1599 9.23235 3.59058 8.83421 3.82122L8.8335 5.33334H12.5002C13.2365 5.33334 13.8335 5.9303 13.8335 6.66668V13.3333C13.8335 14.0697 13.2365 14.6667 12.5002 14.6667H3.8335C3.09712 14.6667 2.50016 14.0697 2.50016 13.3333V6.66668C2.50016 5.9303 3.09712 5.33334 3.8335 5.33334H7.50016L7.50011 3.82161C7.10161 3.59106 6.8335 3.16018 6.8335 2.66668C6.8335 1.9303 7.43045 1.33334 8.16683 1.33334ZM12.5002 6.66668H3.8335V13.3333H12.5002V6.66668ZM1.50016 8.00001C1.86835 8.00001 2.16683 8.29849 2.16683 8.66668V11.3333C2.16683 11.7015 1.86835 12 1.50016 12C1.13197 12 0.833496 11.7015 0.833496 11.3333V8.66668C0.833496 8.29849 1.13197 8.00001 1.50016 8.00001ZM14.8335 8.00001C15.2017 8.00001 15.5002 8.29849 15.5002 8.66668V11.3333C15.5002 11.7015 15.2017 12 14.8335 12C14.4653 12 14.1668 11.7015 14.1668 11.3333V8.66668C14.1668 8.29849 14.4653 8.00001 14.8335 8.00001ZM9.50016 10.6667L9.57791 10.6712C9.90948 10.7097 10.1668 10.9914 10.1668 11.3333C10.1668 11.7015 9.86836 12 9.50016 12H6.8335L6.75575 11.9955C6.42418 11.957 6.16683 11.6752 6.16683 11.3333C6.16683 10.9651 6.4653 10.6667 6.8335 10.6667H9.50016ZM5.8335 8.00001C6.20169 8.00001 6.50016 8.29849 6.50016 8.66668C6.50016 9.03487 6.20169 9.33334 5.8335 9.33334C5.46531 9.33334 5.16683 9.03487 5.16683 8.66668C5.16683 8.29849 5.46531 8.00001 5.8335 8.00001ZM10.5002 8.00001C10.8684 8.00001 11.1668 8.29849 11.1668 8.66668C11.1668 9.03487 10.8684 9.33334 10.5002 9.33334C10.132 9.33334 9.8335 9.03487 9.8335 8.66668C9.8335 8.29849 10.132 8.00001 10.5002 8.00001Z" fill="url(#paint0_linear_9255_6921)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_9255_6921" x1="8.16683" y1="1.33334" x2="8.16683" y2="14.6667" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#00C261"/>
|
||||
<stop offset="1" stop-color="#3370FF"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.9 KiB |
38
frontend/packages/mobile/src/assets/svg/newClue.svg
Normal file
@@ -0,0 +1,38 @@
|
||||
<svg width="33" height="33" viewBox="0 0 33 33" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<circle cx="9.5" cy="9.5" r="8.5" fill="#FFA200"/>
|
||||
<g filter="url(#filter0_i_4792_17467)">
|
||||
<circle cx="18.5" cy="18.5" r="10.5" fill="#FFFCF6"/>
|
||||
</g>
|
||||
<g filter="url(#filter1_f_4792_17467)">
|
||||
<circle cx="17" cy="17" r="8" fill="#FFA200"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_4792_17467)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20 14.75C20 13.5074 21.0074 12.5 22.25 12.5C23.4926 12.5 24.5 13.5074 24.5 14.75C24.5 15.6334 23.9909 16.3979 23.25 16.7661V20.876C23.25 22.3252 22.0752 23.5 20.626 23.5C19.1769 23.5 18.0021 22.3252 18.0021 20.876V15.126C18.0021 14.7803 17.7218 14.5 17.376 14.5C17.0303 14.5 16.75 14.7803 16.75 15.126V19.2339C17.4909 19.6021 18 20.3666 18 21.25C18 22.4926 16.9926 23.5 15.75 23.5C14.5074 23.5 13.5 22.4926 13.5 21.25C13.5 20.3666 14.0091 19.6021 14.75 19.2339V15.126C14.75 13.6757 15.9257 12.5 17.376 12.5C18.8264 12.5 20.0021 13.6757 20.0021 15.126V20.876C20.0021 21.2206 20.2814 21.5 20.626 21.5C20.9706 21.5 21.25 21.2206 21.25 20.876V16.7661C20.5091 16.3979 20 15.6334 20 14.75ZM15.75 21C15.6119 21 15.5 21.1119 15.5 21.25C15.5 21.3881 15.6119 21.5 15.75 21.5C15.8881 21.5 16 21.3881 16 21.25C16 21.1119 15.8881 21 15.75 21ZM22.25 15C22.3881 15 22.5 14.8881 22.5 14.75C22.5 14.6119 22.3881 14.5 22.25 14.5C22.1119 14.5 22 14.6119 22 14.75C22 14.8881 22.1119 15 22.25 15Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_i_4792_17467" x="8" y="8" width="21" height="22" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="1"/>
|
||||
<feGaussianBlur stdDeviation="1"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 1 0 0 0 0 0.756863 0 0 0 0 0.305882 0 0 0 0.1 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_4792_17467"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_4792_17467" x="1" y="1" width="32" height="32" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="4" result="effect1_foregroundBlur_4792_17467"/>
|
||||
</filter>
|
||||
<filter id="filter2_d_4792_17467" x="13.5" y="12.5" width="11" height="11.1" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="0.1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00986111 0 0 0 0 0.0953724 0 0 0 0 0.295833 0 0 0 0.22 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4792_17467"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4792_17467" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
39
frontend/packages/mobile/src/assets/svg/newContact.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<svg width="31" height="30" viewBox="0 0 31 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M17.85 14.0533C16.35 15.3733 14.4 16.2533 12.15 16.2533C9.89998 16.2533 7.94999 15.3733 6.29999 14.0533C2.54999 15.96 0 18.4533 0 23H24C24 18.4533 21.45 16.1066 17.85 14.0533ZM12 14.4933C15.75 14.4933 18.75 11.4133 18.75 7.74667C18.75 4.08 15.75 1 12 1C8.25 1 5.24999 4.08 5.24999 7.74667C5.24999 11.56 8.39999 14.4933 12 14.4933Z" fill="#3370FF"/>
|
||||
<g filter="url(#filter0_i_4792_17445)">
|
||||
<circle cx="22" cy="20" r="8" fill="#F2F7FF"/>
|
||||
</g>
|
||||
<circle cx="22" cy="20" r="8" stroke="white" stroke-width="0.2"/>
|
||||
<g filter="url(#filter1_f_4792_17445)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.703 16.1098C15.3024 15.8097 16.7069 15.0592 17.85 14.0533C21.45 16.1066 24 18.4533 24 23H13.7517C13.2688 21.9326 13 20.7477 13 19.5C13 18.2949 13.2508 17.1484 13.703 16.1098ZM15.4269 13.5529C15.9931 13.2164 16.5056 12.7996 16.9493 12.3195C16.395 12.6715 15.8842 13.086 15.4269 13.5529Z" fill="#3370FF"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_4792_17445)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.4307 16.25C23.4307 15.5596 22.8711 15 22.1807 15C21.4904 15 20.9307 15.5596 20.9307 16.25V18.9085H18.25C17.5596 18.9085 17 19.4682 17 20.1585C17 20.8489 17.5596 21.4085 18.25 21.4085H20.9307V24.067C20.9307 24.7573 21.4904 25.317 22.1807 25.317C22.8711 25.317 23.4307 24.7573 23.4307 24.067V21.4085H26.1115C26.8018 21.4085 27.3615 20.8489 27.3615 20.1585C27.3615 19.4682 26.8018 18.9085 26.1115 18.9085H23.4307V16.25Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_i_4792_17445" x="13.9" y="11.9" width="16.2" height="16.2" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="1.5"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.2 0 0 0 0 0.439216 0 0 0 0 1 0 0 0 0.1 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_4792_17445"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_4792_17445" x="10" y="9.31946" width="17" height="16.6805" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="1.5" result="effect1_foregroundBlur_4792_17445"/>
|
||||
</filter>
|
||||
<filter id="filter2_d_4792_17445" x="17" y="15" width="10.3615" height="10.417" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="0.1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00986111 0 0 0 0 0.0953724 0 0 0 0 0.295833 0 0 0 0.22 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4792_17445"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4792_17445" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
39
frontend/packages/mobile/src/assets/svg/newCustomer.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<svg width="31" height="37" viewBox="0 0 31 37" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M11.0078 4.93111C11.2952 3.86459 12.3934 3.23053 13.4607 3.5149L29.0416 7.66616C30.1089 7.95053 30.7411 9.04565 30.4537 10.1122L24.8324 30.9728C24.5449 32.0393 23.4467 32.6734 22.3794 32.389L6.79855 28.2378C5.73122 27.9534 5.09896 26.8583 5.38636 25.7918L11.0078 4.93111Z" fill="#00C261"/>
|
||||
<g filter="url(#filter0_i_230_5569)">
|
||||
<rect x="1" y="5.86414" width="21.619" height="24.4281" rx="2" fill="#F2FCF7"/>
|
||||
</g>
|
||||
<rect x="1" y="5.86414" width="21.619" height="24.4281" rx="2" stroke="white" stroke-width="0.2"/>
|
||||
<g filter="url(#filter1_f_230_5569)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.2727 5.8642C11.2604 5.89909 11.2491 5.93447 11.2387 5.97033L5.41364 26.0427C5.10579 27.1036 5.72546 28.1786 6.7977 28.4438L18.2187 31.2694H20.6056C21.7102 31.2694 22.6056 30.374 22.6056 29.2694V7.8642C22.6056 7.39188 22.4419 6.95781 22.1681 6.61563L19.1308 5.8642H11.2727Z" fill="#00C261"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_230_5569)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0595 13.6812C13.0595 12.9908 12.4999 12.4312 11.8095 12.4312C11.1192 12.4312 10.5595 12.9908 10.5595 13.6812V16.3397H7.87878C7.18843 16.3397 6.62878 16.8993 6.62878 17.5897C6.62878 18.28 7.18843 18.8397 7.87878 18.8397H10.5595V21.4982C10.5595 22.1885 11.1192 22.7482 11.8095 22.7482C12.4999 22.7482 13.0595 22.1885 13.0595 21.4982V18.8397H15.7402C16.4306 18.8397 16.9902 18.28 16.9902 17.5897C16.9902 16.8993 16.4306 16.3397 15.7402 16.3397H13.0595V13.6812Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_i_230_5569" x="0.899994" y="5.76413" width="21.819" height="24.6281" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="1.5"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0.760784 0 0 0 0 0.380392 0 0 0 0.1 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_230_5569"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_230_5569" x="0.334686" y="0.864197" width="27.2709" height="35.4052" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="2.5" result="effect1_foregroundBlur_230_5569"/>
|
||||
</filter>
|
||||
<filter id="filter2_d_230_5569" x="6.62878" y="12.4312" width="10.3615" height="10.417" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="0.1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00986111 0 0 0 0 0.0953724 0 0 0 0 0.295833 0 0 0 0.22 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_230_5569"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_230_5569" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
39
frontend/packages/mobile/src/assets/svg/newOpportunity.svg
Normal file
@@ -0,0 +1,39 @@
|
||||
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M4 3C3.44772 3 3 3.44772 3 4C3 4.55228 3.44772 5 4 5H20C20.5523 5 21 4.55228 21 4C21 3.44772 20.5523 3 20 3H4ZM3 6C1.89544 6 1 6.89541 1 8V21C1 22.1046 1.89544 23 3 23H21C22.1046 23 23 22.1046 23 21V8C23 6.89542 22.1046 6 21 6H3ZM10.2071 9.79289C9.81658 9.40237 9.18342 9.40237 8.79289 9.79289C8.40237 10.1834 8.40237 10.8166 8.79289 11.2071L10.0858 12.5H9C8.44772 12.5 8 12.9477 8 13.5C8 14.0523 8.44772 14.5 9 14.5H11V15.5H9C8.44772 15.5 8 15.9477 8 16.5C8 17.0523 8.44772 17.5 9 17.5H11V18.5C11 19.0523 11.4477 19.5 12 19.5C12.5523 19.5 13 19.0523 13 18.5V17.5H15C15.5523 17.5 16 17.0523 16 16.5C16 15.9477 15.5523 15.5 15 15.5H13V14.5H15C15.5523 14.5 16 14.0523 16 13.5C16 12.9477 15.5523 12.5 15 12.5H13.9142L15.2071 11.2071C15.5976 10.8166 15.5976 10.1834 15.2071 9.79289C14.8166 9.40237 14.1834 9.40237 13.7929 9.79289L12 11.5858L10.2071 9.79289Z" fill="#00A6AB"/>
|
||||
<g filter="url(#filter0_i_4792_17498)">
|
||||
<circle cx="22" cy="21" r="7" fill="#F2FBFB"/>
|
||||
</g>
|
||||
<circle cx="22" cy="21" r="7" stroke="white" stroke-width="0.2"/>
|
||||
<g filter="url(#filter1_f_4792_17498)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23 14.0709C22.6734 14.0242 22.3395 14 22 14C18.134 14 15 17.134 15 21C15 21.695 15.1013 22.3663 15.2899 23H21C22.1046 23 23 22.1046 23 21V14.0709Z" fill="#00A6AB"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_4792_17498)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.5349 18.25C23.5349 17.5596 22.9752 17 22.2849 17C21.5945 17 21.0349 17.5596 21.0349 18.25V20.0177H19.25C18.5596 20.0177 18 20.5774 18 21.2677C18 21.9581 18.5596 22.5177 19.25 22.5177H21.0349V24.2854C21.0349 24.9758 21.5945 25.5354 22.2849 25.5354C22.9752 25.5354 23.5349 24.9758 23.5349 24.2854V22.5177H25.3198C26.0101 22.5177 26.5698 21.9581 26.5698 21.2677C26.5698 20.5774 26.0101 20.0177 25.3198 20.0177H23.5349V18.25Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_i_4792_17498" x="14.9" y="13.9" width="14.2" height="14.2" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="1.5"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.2 0 0 0 0 0.439216 0 0 0 0 1 0 0 0 0.1 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_4792_17498"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_4792_17498" x="11" y="10" width="16" height="17" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="2" result="effect1_foregroundBlur_4792_17498"/>
|
||||
</filter>
|
||||
<filter id="filter2_d_4792_17498" x="18" y="17" width="8.56976" height="8.63543" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="0.1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00986111 0 0 0 0 0.0953724 0 0 0 0 0.295833 0 0 0 0.22 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4792_17498"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4792_17498" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
40
frontend/packages/mobile/src/assets/svg/newPlan.svg
Normal file
@@ -0,0 +1,40 @@
|
||||
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1 10.3684C1 9.81612 1.44772 9.36841 2 9.36841H22C22.5523 9.36841 23 9.81612 23 10.3684V21.9474C23 23.081 22.081 24 20.9474 24H3.05263C1.919 24 1 23.081 1 21.9474V10.3684ZM3 11.3684V21.9474C3 21.9764 3.02355 22 3.05263 22H20.9474C20.9765 22 21 21.9764 21 21.9474V11.3684H3Z" fill="#9170FD"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.78949 3C8.78949 2.44772 8.34177 2 7.78949 2C7.23721 2 6.78949 2.44772 6.78949 3V3.57892H3.05263C1.91899 3.57892 1 4.49791 1 5.63155V10.3684C1 10.9207 1.44772 11.3684 2 11.3684V21.9474C2 22.5287 2.47128 23 3.05263 23H20.9474C21.5287 23 22 22.5287 22 21.9474V11.3684C22.5523 11.3684 23 10.9207 23 10.3684V5.63155C23 4.49792 22.081 3.57892 20.9474 3.57892H17.2105V3C17.2105 2.44772 16.7628 2 16.2105 2C15.6582 2 15.2105 2.44772 15.2105 3V3.57892H8.78949V3ZM15.2105 7.21053V5.57892H8.78949V7.21053C8.78949 7.76281 8.34177 8.21053 7.78949 8.21053C7.23721 8.21053 6.78949 7.76281 6.78949 7.21053V5.57892H3.05263C3.02356 5.57892 3 5.60248 3 5.63155V9.36839H21V5.63155C21 5.60247 20.9764 5.57892 20.9474 5.57892H17.2105V7.21053C17.2105 7.76281 16.7628 8.21053 16.2105 8.21053C15.6582 8.21053 15.2105 7.76281 15.2105 7.21053ZM17.9703 14.2334C18.3608 13.8429 18.3608 13.2097 17.9703 12.8192C17.5798 12.4287 16.9466 12.4287 16.5561 12.8192L10.9474 18.4279L8.4966 15.9771C8.10607 15.5866 7.47291 15.5866 7.08238 15.9771C6.69186 16.3676 6.69186 17.0008 7.08238 17.3913L10.2403 20.5492C10.6308 20.9397 11.264 20.9397 11.6545 20.5492L17.9703 14.2334Z" fill="#9170FD"/>
|
||||
<g filter="url(#filter0_i_4792_17631)">
|
||||
<circle cx="22" cy="21" r="7" fill="#F5F2FF"/>
|
||||
</g>
|
||||
<circle cx="22" cy="21" r="7" stroke="white" stroke-width="0.2"/>
|
||||
<g filter="url(#filter1_f_4792_17631)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23 14.0709C22.6734 14.0242 22.3395 14 22 14C18.134 14 15 17.134 15 21C15 21.695 15.1013 22.3663 15.2899 23H21C22.1046 23 23 22.1046 23 21V14.0709Z" fill="#9170FD"/>
|
||||
</g>
|
||||
<g filter="url(#filter2_d_4792_17631)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M23.5349 18.25C23.5349 17.5596 22.9752 17 22.2849 17C21.5945 17 21.0349 17.5596 21.0349 18.25V20.0177H19.25C18.5596 20.0177 18 20.5774 18 21.2677C18 21.9581 18.5596 22.5177 19.25 22.5177H21.0349V24.2854C21.0349 24.9758 21.5945 25.5354 22.2849 25.5354C22.9752 25.5354 23.5349 24.9758 23.5349 24.2854V22.5177H25.3198C26.0101 22.5177 26.5698 21.9581 26.5698 21.2677C26.5698 20.5774 26.0101 20.0177 25.3198 20.0177H23.5349V18.25Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_i_4792_17631" x="14.9" y="13.9" width="14.2" height="14.2" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset/>
|
||||
<feGaussianBlur stdDeviation="1.5"/>
|
||||
<feComposite in2="hardAlpha" operator="arithmetic" k2="-1" k3="1"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.705882 0 0 0 0 0.639216 0 0 0 0 0.984314 0 0 0 1 0"/>
|
||||
<feBlend mode="normal" in2="shape" result="effect1_innerShadow_4792_17631"/>
|
||||
</filter>
|
||||
<filter id="filter1_f_4792_17631" x="11" y="10" width="16" height="17" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="2" result="effect1_foregroundBlur_4792_17631"/>
|
||||
</filter>
|
||||
<filter id="filter2_d_4792_17631" x="18" y="17" width="8.56976" height="8.63543" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="0.1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00986111 0 0 0 0 0.0953724 0 0 0 0 0.295833 0 0 0 0.22 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4792_17631"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4792_17631" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
26
frontend/packages/mobile/src/assets/svg/newRecord.svg
Normal file
@@ -0,0 +1,26 @@
|
||||
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M8 3C6.89543 3 6 3.89543 6 5V18C6 19.1046 6.89543 20 8 20H22C23.1046 20 24 19.1046 24 18V5C24 3.89543 23.1046 3 22 3H8ZM12 7C12 6.44772 12.4477 6 13 6H17C17.5523 6 18 6.44772 18 7C18 7.55228 17.5523 8 17 8H13C12.4477 8 12 7.55228 12 7ZM12 10C12 9.44772 12.4477 9 13 9H17C17.5523 9 18 9.44772 18 10C18 10.5523 17.5523 11 17 11H13C12.4477 11 12 10.5523 12 10Z" fill="#FE9847"/>
|
||||
<path d="M4 13.25H26C26.9665 13.25 27.75 14.0335 27.75 15V26C27.75 26.9665 26.9665 27.75 26 27.75H4C3.0335 27.75 2.25 26.9665 2.25 26V15C2.25 14.0335 3.0335 13.25 4 13.25Z" fill="#FFF5EC" stroke="white" stroke-width="0.5"/>
|
||||
<g filter="url(#filter0_f_4792_17570)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M24 13V22C24 23.1046 23.1046 24 22 24H8C6.89543 24 6 23.1046 6 22V13H24Z" fill="#FE9847"/>
|
||||
</g>
|
||||
<g filter="url(#filter1_d_4792_17570)">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.2748 24.0425C12.303 24.0777 12.3335 24.1117 12.3661 24.1443C12.8543 24.6324 13.6457 24.6324 14.1339 24.1443L20.1443 18.1339C20.6325 17.6457 20.6325 16.8543 20.1443 16.3661C19.6561 15.878 18.8647 15.878 18.3765 16.3661L13.2552 21.4874L11.1339 19.3661C10.6457 18.8779 9.85427 18.8779 9.36612 19.3661C8.87796 19.8542 8.87796 20.6457 9.36612 21.1339L12.2748 24.0425Z" fill="white"/>
|
||||
</g>
|
||||
<defs>
|
||||
<filter id="filter0_f_4792_17570" x="0" y="7" width="30" height="23" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
|
||||
<feGaussianBlur stdDeviation="3" result="effect1_foregroundBlur_4792_17570"/>
|
||||
</filter>
|
||||
<filter id="filter1_d_4792_17570" x="9" y="16" width="11.5104" height="8.61041" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="0.1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix type="matrix" values="0 0 0 0 0.00986111 0 0 0 0 0.0953724 0 0 0 0 0.295833 0 0 0 0.22 0"/>
|
||||
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_4792_17570"/>
|
||||
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_4792_17570" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.4 KiB |
70
frontend/packages/mobile/src/auto-import.d.ts
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
/* eslint-disable */
|
||||
/* prettier-ignore */
|
||||
// @ts-nocheck
|
||||
// noinspection JSUnusedGlobalSymbols
|
||||
// Generated by unplugin-auto-import
|
||||
export {}
|
||||
declare global {
|
||||
const EffectScope: typeof import('vue')['EffectScope']
|
||||
const computed: typeof import('vue')['computed']
|
||||
const createApp: typeof import('vue')['createApp']
|
||||
const customRef: typeof import('vue')['customRef']
|
||||
const defineAsyncComponent: typeof import('vue')['defineAsyncComponent']
|
||||
const defineComponent: typeof import('vue')['defineComponent']
|
||||
const effectScope: typeof import('vue')['effectScope']
|
||||
const getCurrentInstance: typeof import('vue')['getCurrentInstance']
|
||||
const getCurrentScope: typeof import('vue')['getCurrentScope']
|
||||
const h: typeof import('vue')['h']
|
||||
const inject: typeof import('vue')['inject']
|
||||
const isProxy: typeof import('vue')['isProxy']
|
||||
const isReactive: typeof import('vue')['isReactive']
|
||||
const isReadonly: typeof import('vue')['isReadonly']
|
||||
const isRef: typeof import('vue')['isRef']
|
||||
const markRaw: typeof import('vue')['markRaw']
|
||||
const nextTick: typeof import('vue')['nextTick']
|
||||
const onActivated: typeof import('vue')['onActivated']
|
||||
const onBeforeMount: typeof import('vue')['onBeforeMount']
|
||||
const onBeforeUnmount: typeof import('vue')['onBeforeUnmount']
|
||||
const onBeforeUpdate: typeof import('vue')['onBeforeUpdate']
|
||||
const onDeactivated: typeof import('vue')['onDeactivated']
|
||||
const onErrorCaptured: typeof import('vue')['onErrorCaptured']
|
||||
const onMounted: typeof import('vue')['onMounted']
|
||||
const onRenderTracked: typeof import('vue')['onRenderTracked']
|
||||
const onRenderTriggered: typeof import('vue')['onRenderTriggered']
|
||||
const onScopeDispose: typeof import('vue')['onScopeDispose']
|
||||
const onServerPrefetch: typeof import('vue')['onServerPrefetch']
|
||||
const onUnmounted: typeof import('vue')['onUnmounted']
|
||||
const onUpdated: typeof import('vue')['onUpdated']
|
||||
const onWatcherCleanup: typeof import('vue')['onWatcherCleanup']
|
||||
const provide: typeof import('vue')['provide']
|
||||
const reactive: typeof import('vue')['reactive']
|
||||
const readonly: typeof import('vue')['readonly']
|
||||
const ref: typeof import('vue')['ref']
|
||||
const resolveComponent: typeof import('vue')['resolveComponent']
|
||||
const shallowReactive: typeof import('vue')['shallowReactive']
|
||||
const shallowReadonly: typeof import('vue')['shallowReadonly']
|
||||
const shallowRef: typeof import('vue')['shallowRef']
|
||||
const toRaw: typeof import('vue')['toRaw']
|
||||
const toRef: typeof import('vue')['toRef']
|
||||
const toRefs: typeof import('vue')['toRefs']
|
||||
const toValue: typeof import('vue')['toValue']
|
||||
const triggerRef: typeof import('vue')['triggerRef']
|
||||
const unref: typeof import('vue')['unref']
|
||||
const useAttrs: typeof import('vue')['useAttrs']
|
||||
const useCssModule: typeof import('vue')['useCssModule']
|
||||
const useCssVars: typeof import('vue')['useCssVars']
|
||||
const useId: typeof import('vue')['useId']
|
||||
const useModel: typeof import('vue')['useModel']
|
||||
const useSlots: typeof import('vue')['useSlots']
|
||||
const useTemplateRef: typeof import('vue')['useTemplateRef']
|
||||
const watch: typeof import('vue')['watch']
|
||||
const watchEffect: typeof import('vue')['watchEffect']
|
||||
const watchPostEffect: typeof import('vue')['watchPostEffect']
|
||||
const watchSyncEffect: typeof import('vue')['watchSyncEffect']
|
||||
}
|
||||
// for type re-export
|
||||
declare global {
|
||||
// @ts-ignore
|
||||
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||
import('vue')
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<template>
|
||||
<div v-if="actionList?.length || props.showEditButton" class="flex items-center justify-center gap-[16px]">
|
||||
<van-popover
|
||||
v-if="actionList?.length"
|
||||
v-model:show="showPopover"
|
||||
placement="top"
|
||||
:actions="actionList"
|
||||
@select="handleSelect"
|
||||
>
|
||||
<template #reference>
|
||||
<div class="flex w-[100px] items-center">
|
||||
<CrmTextButton
|
||||
color="var(--text-n1)"
|
||||
icon="iconicon_ellipsis"
|
||||
:text="t('common.more')"
|
||||
icon-size="18px"
|
||||
direction="column"
|
||||
class="flex-1"
|
||||
@click="showPopover = true"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</van-popover>
|
||||
|
||||
<van-button
|
||||
v-if="props.showEditButton"
|
||||
type="primary"
|
||||
:plain="true"
|
||||
class="flex-1 !rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
@click="emit('select', 'edit')"
|
||||
>
|
||||
{{ t('common.edit') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
|
||||
import { hasAllPermission, hasAnyPermission } from '@/utils/permission';
|
||||
|
||||
import type { PopoverAction } from 'vant';
|
||||
|
||||
export interface CrmActionButtonsItem extends PopoverAction {
|
||||
permission: string[];
|
||||
key: string;
|
||||
allPermission?: boolean;
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
actions?: CrmActionButtonsItem[]; // 更多操作项
|
||||
showEditButton?: boolean;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'select', actionKey: string): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const actionList = computed(() => {
|
||||
return props.actions?.filter((e) =>
|
||||
e.allPermission ? hasAllPermission(e.permission) : hasAnyPermission(e.permission)
|
||||
);
|
||||
});
|
||||
|
||||
const showPopover = ref(false);
|
||||
|
||||
function handleSelect(action: CrmActionButtonsItem) {
|
||||
showPopover.value = false;
|
||||
emit('select', action.key);
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,53 @@
|
||||
<template>
|
||||
<van-image
|
||||
round
|
||||
:width="props.size"
|
||||
:height="props.size"
|
||||
:src="props.isWord ? 'no-res' : userStore.userInfo?.avatar || 'no-res'"
|
||||
>
|
||||
<template #error>
|
||||
<div
|
||||
v-if="avatarText?.length"
|
||||
:style="{
|
||||
fontSize: `${fontSize}px`,
|
||||
}"
|
||||
>
|
||||
{{ avatarText?.substring(0, 1) }}
|
||||
</div>
|
||||
<CrmIcon
|
||||
v-else
|
||||
name="iconicon_user"
|
||||
:width="`${defaultUserAvatarSize}px`"
|
||||
:height="`${defaultUserAvatarSize}px`"
|
||||
color="var(--text-n2)"
|
||||
/>
|
||||
</template>
|
||||
</van-image>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import CrmIcon from '@/components/pure/crm-icon-font/index.vue';
|
||||
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
isWord?: boolean;
|
||||
size?: number;
|
||||
text?: string;
|
||||
}>(),
|
||||
{
|
||||
isWord: true,
|
||||
size: 40,
|
||||
}
|
||||
);
|
||||
|
||||
const userStore = useUserStore();
|
||||
|
||||
const fontSize = computed(() => Math.floor(props.size * 0.42)); // 比例调节
|
||||
const defaultUserAvatarSize = computed(() => Math.floor(props.size * 0.5)); // 比例调节
|
||||
|
||||
const avatarText = computed(() => (props.isWord ? props.text : userStore.userInfo?.name));
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
@@ -0,0 +1,112 @@
|
||||
<template>
|
||||
<CrmPageWrapper :title="route.query.name?.toString() || ''">
|
||||
<div class="relative h-full bg-[var(--text-n9)] pt-[16px]">
|
||||
<CrmDescription :description="descriptions" />
|
||||
</div>
|
||||
<template v-if="route.query.readonly?.toString() === 'N'" #footer>
|
||||
<CrmActionButtons
|
||||
:show-edit-button="hasAllPermission(['CUSTOMER_MANAGEMENT_CONTACT:UPDATE'])"
|
||||
:actions="actions"
|
||||
@select="handleMoreSelect"
|
||||
/>
|
||||
</template>
|
||||
</CrmPageWrapper>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { showConfirmDialog, showSuccessToast } from 'vant';
|
||||
|
||||
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { sleep } from '@lib/shared/method';
|
||||
|
||||
import CrmDescription from '@/components/pure/crm-description/index.vue';
|
||||
import CrmPageWrapper from '@/components/pure/crm-page-wrapper/index.vue';
|
||||
|
||||
import { deleteCustomerContact } from '@/api/modules';
|
||||
import useFormCreateApi from '@/hooks/useFormCreateApi';
|
||||
import { hasAllPermission } from '@/utils/permission';
|
||||
|
||||
import { CommonRouteEnum } from '@/enums/routeEnum';
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
|
||||
const { descriptions, initFormConfig, initFormDescription } = useFormCreateApi({
|
||||
formKey: FormDesignKeyEnum.CUSTOMER_CONTACT,
|
||||
sourceId: ref(route.query.id?.toString() || ''),
|
||||
needInitDetail: true,
|
||||
});
|
||||
const loading = ref(false);
|
||||
|
||||
function handleDelete() {
|
||||
showConfirmDialog({
|
||||
title: t('contact.deleteTitle'),
|
||||
message: t('contact.deleteTip'),
|
||||
confirmButtonText: t('common.confirmDelete'),
|
||||
confirmButtonColor: 'var(--error-red)',
|
||||
beforeClose: async (action) => {
|
||||
if (action === 'confirm') {
|
||||
try {
|
||||
loading.value = true;
|
||||
await deleteCustomerContact(route.query.id?.toString() || '');
|
||||
showSuccessToast(t('common.deleteSuccess'));
|
||||
await sleep(300);
|
||||
router.back();
|
||||
return Promise.resolve(true);
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
return Promise.resolve(false);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
} else {
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
const actions = ref([
|
||||
{
|
||||
key: 'delete',
|
||||
text: t('common.delete'),
|
||||
color: 'var(--error-red)',
|
||||
permission: ['CUSTOMER_MANAGEMENT_CONTACT:DELETE'],
|
||||
},
|
||||
]);
|
||||
|
||||
function handleEdit(id: string) {
|
||||
router.push({
|
||||
name: CommonRouteEnum.FORM_CREATE,
|
||||
query: {
|
||||
id,
|
||||
formKey: id ? FormDesignKeyEnum.CUSTOMER_CONTACT : FormDesignKeyEnum.CONTACT,
|
||||
needInitDetail: 'Y',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function handleMoreSelect(key: string) {
|
||||
switch (key) {
|
||||
case 'edit':
|
||||
handleEdit(route.query.id?.toString() || '');
|
||||
break;
|
||||
case 'delete':
|
||||
handleDelete();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeMount(async () => {
|
||||
await initFormConfig();
|
||||
initFormDescription();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,282 @@
|
||||
<template>
|
||||
<div class="flex h-full flex-col overflow-hidden bg-[var(--text-n9)]">
|
||||
<div class="top-bar">
|
||||
<van-button
|
||||
v-if="hasAnyPermission(['CUSTOMER_MANAGEMENT_CONTACT:ADD']) && !props.readonly"
|
||||
plain
|
||||
icon="plus"
|
||||
type="primary"
|
||||
size="small"
|
||||
@click="goCreate"
|
||||
>
|
||||
</van-button>
|
||||
<van-search
|
||||
v-model="keyword"
|
||||
shape="round"
|
||||
:placeholder="t('customer.searchContactPlaceholder')"
|
||||
class="crm-search"
|
||||
@search="searchList"
|
||||
@clear="searchList"
|
||||
/>
|
||||
</div>
|
||||
<div v-if="!props.sourceId" class="filter-buttons">
|
||||
<van-button
|
||||
v-for="item of tabList"
|
||||
:key="item.name"
|
||||
round
|
||||
size="small"
|
||||
class="!border-none !px-[16px] !py-[4px] !text-[14px]"
|
||||
:class="
|
||||
activeFilter === item.name
|
||||
? '!bg-[var(--primary-7)] !text-[var(--primary-8)]'
|
||||
: '!bg-[var(--text-n9)] !text-[var(--text-n1)]'
|
||||
"
|
||||
@click="activeFilter = item.name"
|
||||
>
|
||||
{{ item.tab }}
|
||||
</van-button>
|
||||
</div>
|
||||
<CrmList
|
||||
ref="crmListRef"
|
||||
:list-params="listParams"
|
||||
:keyword="keyword"
|
||||
:load-list-api="loadApiMap[props.formKey]"
|
||||
class="p-[16px]"
|
||||
:item-gap="16"
|
||||
:close-init-load="!!props.sourceId ? false : !activeFilter"
|
||||
:transform="transformFormData"
|
||||
:no-page-nation="!!props.sourceId"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<div
|
||||
class="flex w-full items-center gap-[16px] overflow-hidden rounded-[var(--border-radius-small)] bg-[var(--text-n10)] p-[16px]"
|
||||
@click="goDetail(item)"
|
||||
>
|
||||
<CrmAvatar :text="item.name" />
|
||||
<div class="flex flex-1 flex-col gap-[2px] overflow-hidden">
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center gap-[8px] overflow-hidden">
|
||||
<div class="one-line-text text-[16px] text-[var(--text-n1)]">{{ item.name }}</div>
|
||||
<van-tag
|
||||
color="var(--success-5)"
|
||||
text-color="var(--success-green)"
|
||||
class="min-w-[36px] rounded-[var(--border-radius-small)] !p-[2px_6px]"
|
||||
>
|
||||
{{ t('common.normal') }}
|
||||
</van-tag>
|
||||
</div>
|
||||
<CrmTextButton
|
||||
v-if="hasAnyPermission(['CUSTOMER_MANAGEMENT_CONTACT:DELETE']) && !props.readonly"
|
||||
icon="iconicon_delete"
|
||||
icon-size="16px"
|
||||
color="var(--error-red)"
|
||||
@click="() => handleDelete(item.id)"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="flex items-center gap-[4px]">
|
||||
<a :href="`tel:${item.phone}`" class="flex items-center" @click.stop>
|
||||
<CrmIcon name="iconicon_phone_outgoing" width="14px" height="14px" color="var(--primary-8)" />
|
||||
</a>
|
||||
<a :href="`tel:${item.phone}`" class="text-[12px] text-[var(--primary-8)]" @click.stop>
|
||||
{{ item.phone?.replace(/(\d{3})(\d{4})(\d{4})/, '$1 $2 $3') }}
|
||||
</a>
|
||||
<CrmIcon
|
||||
name="iconicon_file_copy"
|
||||
width="12px"
|
||||
height="12px"
|
||||
color="var(--primary-8)"
|
||||
@click.stop="() => handleCopy(item.phone)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</CrmList>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRouter } from 'vue-router';
|
||||
import { useClipboard } from '@vueuse/core';
|
||||
import { showConfirmDialog, showFailToast, showSuccessToast } from 'vant';
|
||||
|
||||
import { CustomerSearchTypeEnum } from '@lib/shared/enums/customerEnum';
|
||||
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { sleep } from '@lib/shared/method';
|
||||
import { CommonList } from '@lib/shared/models/common';
|
||||
|
||||
import CrmIcon from '@/components/pure/crm-icon-font/index.vue';
|
||||
import CrmList from '@/components/pure/crm-list/index.vue';
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
import CrmAvatar from '@/components/business/crm-avatar/index.vue';
|
||||
|
||||
import {
|
||||
deleteCustomerContact,
|
||||
getContactListUnderCustomer,
|
||||
getCustomerContactList,
|
||||
getOpportunityContactList,
|
||||
} from '@/api/modules';
|
||||
import useFormCreateTransform from '@/hooks/useFormCreateTransform';
|
||||
import useHiddenTab from '@/hooks/useHiddenTab';
|
||||
import { hasAnyPermission } from '@/utils/permission';
|
||||
|
||||
import { CommonRouteEnum } from '@/enums/routeEnum';
|
||||
|
||||
export type ContactFormKey =
|
||||
| FormDesignKeyEnum.CUSTOMER_CONTACT
|
||||
| FormDesignKeyEnum.CONTACT
|
||||
| FormDesignKeyEnum.BUSINESS_CONTACT;
|
||||
|
||||
const props = defineProps<{
|
||||
sourceId?: string;
|
||||
customerName?: string;
|
||||
formKey: ContactFormKey;
|
||||
readonly?: boolean;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
const { copy, isSupported } = useClipboard({ legacy: true });
|
||||
|
||||
const loadApiMap: Record<
|
||||
ContactFormKey,
|
||||
(...args: any) => Promise<CommonList<Record<string, any>> | Record<string, any>>
|
||||
> = {
|
||||
[FormDesignKeyEnum.CUSTOMER_CONTACT]: getContactListUnderCustomer,
|
||||
[FormDesignKeyEnum.CONTACT]: getCustomerContactList,
|
||||
[FormDesignKeyEnum.BUSINESS_CONTACT]: getOpportunityContactList,
|
||||
};
|
||||
|
||||
const { transformFormData } = await useFormCreateTransform(
|
||||
props.sourceId ? FormDesignKeyEnum.CUSTOMER_CONTACT : FormDesignKeyEnum.CONTACT
|
||||
);
|
||||
|
||||
const filterButtons = [
|
||||
{
|
||||
name: CustomerSearchTypeEnum.ALL,
|
||||
tab: t('contact.all'),
|
||||
},
|
||||
{
|
||||
name: CustomerSearchTypeEnum.SELF,
|
||||
tab: t('contact.mine'),
|
||||
},
|
||||
{
|
||||
name: CustomerSearchTypeEnum.DEPARTMENT,
|
||||
tab: t('contact.department'),
|
||||
},
|
||||
];
|
||||
|
||||
const { tabList, activeFilter } = useHiddenTab(
|
||||
filterButtons,
|
||||
!props.sourceId ? FormDesignKeyEnum.CONTACT : undefined
|
||||
);
|
||||
|
||||
const crmListRef = ref<InstanceType<typeof CrmList>>();
|
||||
const keyword = ref('');
|
||||
const listParams = computed(() => {
|
||||
return {
|
||||
viewId: activeFilter.value,
|
||||
keyword: keyword.value.trim(),
|
||||
id: props.sourceId,
|
||||
};
|
||||
});
|
||||
|
||||
function handleCopy(val: string) {
|
||||
if (isSupported) {
|
||||
copy(val);
|
||||
showSuccessToast(t('common.copySuccess'));
|
||||
} else {
|
||||
showFailToast(t('common.copyNotSupport'));
|
||||
}
|
||||
}
|
||||
|
||||
function handleDelete(id: string) {
|
||||
showConfirmDialog({
|
||||
title: t('contact.deleteTitle'),
|
||||
message: t('contact.deleteTip'),
|
||||
confirmButtonText: t('common.confirmDelete'),
|
||||
confirmButtonColor: 'var(--error-red)',
|
||||
beforeClose: async (action) => {
|
||||
if (action === 'confirm') {
|
||||
try {
|
||||
await deleteCustomerContact(id);
|
||||
showSuccessToast(t('common.deleteSuccess'));
|
||||
await sleep(300);
|
||||
crmListRef.value?.loadList(true);
|
||||
return Promise.resolve(true);
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
return Promise.resolve(false);
|
||||
}
|
||||
} else {
|
||||
return Promise.resolve(true);
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function goCreate() {
|
||||
router.push({
|
||||
name: CommonRouteEnum.FORM_CREATE,
|
||||
query: {
|
||||
id: props.sourceId,
|
||||
formKey: props.sourceId ? FormDesignKeyEnum.CUSTOMER_CONTACT : FormDesignKeyEnum.CONTACT,
|
||||
initialSourceName: props.customerName,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function goDetail(item: any) {
|
||||
router.push({
|
||||
name: CommonRouteEnum.CONTACT_DETAIL,
|
||||
query: {
|
||||
id: item.id,
|
||||
name: item.name,
|
||||
needInitDetail: 'Y',
|
||||
readonly: props.readonly !== false ? 'Y' : 'N',
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
function loadList() {
|
||||
crmListRef.value?.loadList(true);
|
||||
}
|
||||
|
||||
function searchList() {
|
||||
nextTick(() => {
|
||||
if (props.sourceId) {
|
||||
crmListRef.value?.filterListByKeyword(['name', 'phone']);
|
||||
} else {
|
||||
loadList();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
onActivated(() => {
|
||||
loadList();
|
||||
});
|
||||
|
||||
watch(
|
||||
() => activeFilter.value,
|
||||
() => {
|
||||
nextTick(() => {
|
||||
crmListRef.value?.loadList(true);
|
||||
});
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.filter-buttons {
|
||||
@apply flex;
|
||||
|
||||
gap: 8px;
|
||||
padding: 8px 4px;
|
||||
background-color: var(--text-n10);
|
||||
.half-px-border-bottom();
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,7 @@
|
||||
export default {
|
||||
'contact.deleteTitle': 'Delete this contact?',
|
||||
'contact.deleteTip': 'Once deleted, this contact will not be recoverable. Please proceed with caution!',
|
||||
'contact.all': 'All contacts',
|
||||
'contact.mine': 'My contacts',
|
||||
'contact.department': 'Department contacts',
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
export default {
|
||||
'contact.deleteTitle': '确认删除联系人吗?',
|
||||
'contact.deleteTip': '删除后,将无法查询到该联系人且不可恢复,请谨慎操作!',
|
||||
'contact.all': '全部联系人',
|
||||
'contact.mine': '我的联系人',
|
||||
'contact.department': '部门联系人',
|
||||
};
|
||||
@@ -0,0 +1,249 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="fieldValue"
|
||||
:label="props.label"
|
||||
:name="props.id"
|
||||
:rules="props.rules"
|
||||
is-link
|
||||
readonly
|
||||
:placeholder="props.placeholder || t('common.pleaseSelect')"
|
||||
:disabled="props.disabled"
|
||||
:class="props.class"
|
||||
type="textarea"
|
||||
rows="1"
|
||||
autosize
|
||||
@click="handleClick"
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
<van-popup
|
||||
v-model:show="showPicker"
|
||||
destroy-on-close
|
||||
round
|
||||
position="bottom"
|
||||
safe-area-inset-top
|
||||
safe-area-inset-bottom
|
||||
class="h-[100vh]"
|
||||
>
|
||||
<CrmPageWrapper
|
||||
:title="
|
||||
t('datasource.pickResource', {
|
||||
name: props.dataSourceType ? t(typeLocaleMap[props.dataSourceType]) : '',
|
||||
})
|
||||
"
|
||||
hide-back
|
||||
>
|
||||
<div class="flex h-full flex-col overflow-hidden">
|
||||
<van-search
|
||||
v-model="keyword"
|
||||
class="crm-datasource-search"
|
||||
shape="round"
|
||||
:placeholder="
|
||||
t('datasource.searchPlaceholder', {
|
||||
name: props.dataSourceType ? t(typeLocaleMap[props.dataSourceType]) : '',
|
||||
})
|
||||
"
|
||||
@search="search"
|
||||
/>
|
||||
<div class="flex-1 overflow-hidden px-[16px]">
|
||||
<CrmSelectList
|
||||
v-if="props.dataSourceType"
|
||||
ref="crmSelectListRef"
|
||||
v-model:value="pickerValue"
|
||||
v-model:selected-rows="pickerSelectedRows"
|
||||
:multiple="props.multiple"
|
||||
:keyword="keyword"
|
||||
:list-params="props.listParams"
|
||||
:load-list-api="sourceApi[props.dataSourceType]"
|
||||
:transform="selectListTransform"
|
||||
:no-page-nation="props.noPageNation"
|
||||
></CrmSelectList>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex items-center gap-[16px]">
|
||||
<van-button
|
||||
type="default"
|
||||
class="crm-button-primary--secondary !rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
block
|
||||
@click="onCancel"
|
||||
>
|
||||
{{ t('common.cancel') }}
|
||||
</van-button>
|
||||
<van-button
|
||||
type="primary"
|
||||
class="!rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
block
|
||||
:disabled="!pickerSelectedRows.length"
|
||||
@click="onConfirm"
|
||||
>
|
||||
{{ t('common.confirm') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</template>
|
||||
</CrmPageWrapper>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { FieldDataSourceTypeEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import type { CommonList } from '@lib/shared/models/common';
|
||||
|
||||
import CrmPageWrapper from '@/components/pure/crm-page-wrapper/index.vue';
|
||||
import CrmSelectList from '@/components/business/crm-select-list/index.vue';
|
||||
|
||||
import {
|
||||
getBusinessTitleList,
|
||||
getCustomerOptions,
|
||||
getFieldClueList,
|
||||
getFieldContactList,
|
||||
getFieldContractList,
|
||||
getFieldContractPaymentPlanList,
|
||||
getFieldContractPaymentRecordList,
|
||||
getFieldCustomerList,
|
||||
getFieldInvoiceList,
|
||||
getFieldOpportunityList,
|
||||
getFieldOrderList,
|
||||
getFieldPriceList,
|
||||
getFieldProductList,
|
||||
getFieldQuotationList,
|
||||
getUserOptions,
|
||||
} from '@/api/modules';
|
||||
|
||||
const props = defineProps<{
|
||||
dataSourceType?: FieldDataSourceTypeEnum;
|
||||
placeholder?: string;
|
||||
disabled?: boolean;
|
||||
rules?: FieldRule[];
|
||||
id?: string;
|
||||
label?: string;
|
||||
multiple?: boolean;
|
||||
noPageNation?: boolean;
|
||||
disabledSelection?: (item: Record<string, any>) => boolean;
|
||||
class?: string;
|
||||
listParams?: Record<string, any>;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string | string[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string | string[]>('value', {
|
||||
default: '',
|
||||
});
|
||||
const selectedRows = defineModel<Record<string, any>[]>('selectedRows', {
|
||||
default: [],
|
||||
});
|
||||
|
||||
const fieldValue = ref('');
|
||||
const pickerValue = ref<string[]>([]);
|
||||
const pickerSelectedRows = ref<Record<string, any>[]>([]);
|
||||
const crmSelectListRef = ref<InstanceType<typeof CrmSelectList>>();
|
||||
const showPicker = ref(false);
|
||||
const keyword = ref('');
|
||||
|
||||
const typeLocaleMap = {
|
||||
[FieldDataSourceTypeEnum.CUSTOMER]: 'formCreate.customer',
|
||||
[FieldDataSourceTypeEnum.CONTACT]: 'formCreate.contract',
|
||||
[FieldDataSourceTypeEnum.BUSINESS]: 'formCreate.business',
|
||||
[FieldDataSourceTypeEnum.PRODUCT]: 'formCreate.product',
|
||||
[FieldDataSourceTypeEnum.CLUE]: 'formCreate.clue',
|
||||
[FieldDataSourceTypeEnum.CUSTOMER_OPTIONS]: '',
|
||||
[FieldDataSourceTypeEnum.USER_OPTIONS]: '',
|
||||
[FieldDataSourceTypeEnum.PRICE]: 'formCreate.price',
|
||||
[FieldDataSourceTypeEnum.CONTRACT]: '',
|
||||
[FieldDataSourceTypeEnum.QUOTATION]: 'formCreate.quotation',
|
||||
[FieldDataSourceTypeEnum.CONTRACT_PAYMENT]: '',
|
||||
[FieldDataSourceTypeEnum.CONTRACT_PAYMENT_RECORD]: '',
|
||||
[FieldDataSourceTypeEnum.BUSINESS_TITLE]: 'contract.businessTitle',
|
||||
[FieldDataSourceTypeEnum.ORDER]: 'formCreate.order',
|
||||
[FieldDataSourceTypeEnum.INVOICE]: 'formCreate.invoice',
|
||||
};
|
||||
|
||||
const sourceApi: Record<FieldDataSourceTypeEnum, (data: any) => Promise<CommonList<any>>> = {
|
||||
[FieldDataSourceTypeEnum.BUSINESS]: getFieldOpportunityList,
|
||||
[FieldDataSourceTypeEnum.CLUE]: getFieldClueList,
|
||||
[FieldDataSourceTypeEnum.CONTACT]: getFieldContactList,
|
||||
[FieldDataSourceTypeEnum.CUSTOMER]: getFieldCustomerList,
|
||||
[FieldDataSourceTypeEnum.PRODUCT]: getFieldProductList,
|
||||
[FieldDataSourceTypeEnum.CUSTOMER_OPTIONS]: getCustomerOptions,
|
||||
[FieldDataSourceTypeEnum.USER_OPTIONS]: getUserOptions,
|
||||
[FieldDataSourceTypeEnum.CONTRACT]: getFieldContractList,
|
||||
[FieldDataSourceTypeEnum.PRICE]: getFieldPriceList,
|
||||
[FieldDataSourceTypeEnum.QUOTATION]: getFieldQuotationList,
|
||||
[FieldDataSourceTypeEnum.CONTRACT_PAYMENT]: getFieldContractPaymentPlanList,
|
||||
[FieldDataSourceTypeEnum.CONTRACT_PAYMENT_RECORD]: getFieldContractPaymentRecordList,
|
||||
[FieldDataSourceTypeEnum.BUSINESS_TITLE]: getBusinessTitleList,
|
||||
[FieldDataSourceTypeEnum.ORDER]: getFieldOrderList,
|
||||
[FieldDataSourceTypeEnum.INVOICE]: getFieldInvoiceList,
|
||||
};
|
||||
|
||||
function onConfirm() {
|
||||
showPicker.value = false;
|
||||
selectedRows.value = pickerSelectedRows.value;
|
||||
fieldValue.value = pickerSelectedRows.value.map((item) => item.name).join(';');
|
||||
value.value = props.multiple ? pickerSelectedRows.value.map((item) => item.id) : pickerSelectedRows.value[0].id;
|
||||
emit('change', value.value);
|
||||
}
|
||||
|
||||
function onCancel() {
|
||||
pickerValue.value = Array.isArray(value.value) ? value.value : [value.value];
|
||||
showPicker.value = false;
|
||||
}
|
||||
|
||||
function selectListTransform(item: Record<string, any>) {
|
||||
return {
|
||||
...item,
|
||||
disabled: props.disabledSelection ? props.disabledSelection(item) : false,
|
||||
checked: pickerSelectedRows.value.some((row) => row.id === item.id),
|
||||
};
|
||||
}
|
||||
|
||||
function search() {
|
||||
crmSelectListRef.value?.filterListByKeyword('name');
|
||||
}
|
||||
|
||||
function handleClick() {
|
||||
if (!props.disabled) {
|
||||
showPicker.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => selectedRows.value,
|
||||
(val) => {
|
||||
fieldValue.value = val
|
||||
.filter((e) => value.value.includes(e.id))
|
||||
.map((item) => item.name)
|
||||
.join(';');
|
||||
pickerSelectedRows.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => value.value,
|
||||
(val) => {
|
||||
pickerValue.value = Array.isArray(val) ? val : [val];
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-datasource-search {
|
||||
:deep(.van-cell) {
|
||||
&:last-child::before {
|
||||
@apply !hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,4 @@
|
||||
export default {
|
||||
'datasource.pickResource': 'Pick {name}',
|
||||
'datasource.searchPlaceholder': 'Please enter {name} name',
|
||||
};
|
||||
@@ -0,0 +1,4 @@
|
||||
export default {
|
||||
'datasource.pickResource': '选择{name}',
|
||||
'datasource.searchPlaceholder': '请输入{name}名称',
|
||||
};
|
||||
@@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<van-popup v-model:show="show" destroy-on-close round position="bottom">
|
||||
<div class="relative p-[16px] text-center">
|
||||
<div class="text-[16px] font-semibold">{{ t('crm.fileListPop.title') }}</div>
|
||||
<CrmTextButton
|
||||
icon="iconicon_close"
|
||||
icon-size="24px"
|
||||
color="var(--text-n1)"
|
||||
class="absolute right-[16px] top-[16px]"
|
||||
@click="show = false"
|
||||
/>
|
||||
</div>
|
||||
<div class="flex flex-col gap-[8px] px-[16px] pb-[16px]">
|
||||
<div v-for="file in props.fileList" :key="file.id" class="crm-file-item">
|
||||
<CrmFileIcon :type="file.type" width="40px" height="40px" @click="handlePreview(file)" />
|
||||
<div class="flex flex-1 flex-col gap-[2px] overflow-hidden">
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="one-line-text flex-1">{{ file.name }}</div>
|
||||
<div class="flex items-center gap-[16px]">
|
||||
<!-- <CrmTextButton
|
||||
icon="iconicon_delete"
|
||||
color="var(--error-red)"
|
||||
icon-size="16px"
|
||||
@click="handleDelete(file)"
|
||||
/> -->
|
||||
<CrmTextButton icon="iconicon_download" icon-size="16px" @click="handleDownloadAttachment(file)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-[12px] text-[var(--text-n4)]">
|
||||
{{ `${(file.size / 1024).toFixed(2)} KB` }}
|
||||
</div>
|
||||
<div class="text-[12px] text-[var(--text-n4)]">
|
||||
{{
|
||||
t('crm.fileListPop.uploadAt', {
|
||||
name: file.createUser,
|
||||
time: dayjs(file.createTime).format('YYYY-MM-DD HH:mm:ss'),
|
||||
})
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { showImagePreview, showToast } from 'vant';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { PreviewAttachmentUrl } from '@lib/shared/api/requrls/system/module';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { isDingTalkBrowser, isLarkBrowser, isWeComBrowser } from '@lib/shared/method';
|
||||
|
||||
import CrmFileIcon from '@/components/pure/crm-file-icon/index.vue';
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
|
||||
import { downloadAttachment } from '@/api/modules';
|
||||
|
||||
import { AttachmentInfo } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fileList: AttachmentInfo[];
|
||||
}>();
|
||||
// const emit = defineEmits<{
|
||||
// (e: 'deleteFile', id: string): void;
|
||||
// }>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const show = defineModel<boolean>('show', {
|
||||
required: true,
|
||||
});
|
||||
|
||||
// function handleDelete(file: AttachmentInfo) {
|
||||
// showConfirmDialog({
|
||||
// title: t('crm.fileListPop.deleteTipTitle'),
|
||||
// message: t('crm.fileListPop.deleteTipContent'),
|
||||
// }).then(async () => {
|
||||
// emit('deleteFile', file.id);
|
||||
// });
|
||||
// }
|
||||
|
||||
async function handleDownloadAttachment(file: AttachmentInfo) {
|
||||
if (isWeComBrowser() || isDingTalkBrowser() || isLarkBrowser()) {
|
||||
showToast(t('crm.fileListPop.wxworkDownloadTip'));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const res = await downloadAttachment(file.id);
|
||||
const url = URL.createObjectURL(new Blob([res], { type: 'application/octet-stream' }));
|
||||
const a = document.createElement('a');
|
||||
a.href = url;
|
||||
a.download = file.name;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
document.body.removeChild(a);
|
||||
URL.revokeObjectURL(url);
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
function handlePreview(file: AttachmentInfo) {
|
||||
if (/(jpg|jpeg|png|gif|bmp|webp|svg)$/i.test(file.type)) {
|
||||
showImagePreview({
|
||||
images: [`${PreviewAttachmentUrl}/${file.id}`],
|
||||
closeable: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-file-item {
|
||||
@apply flex w-full items-center overflow-hidden;
|
||||
|
||||
gap: 16px;
|
||||
padding: 8px;
|
||||
border: 1px solid var(--text-n8);
|
||||
border-radius: var(--border-radius-small);
|
||||
background-color: var(--text-n10);
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,7 @@
|
||||
export default {
|
||||
'crm.fileListPop.title': 'Attachments',
|
||||
'crm.fileListPop.deleteTipTitle': 'Are you sure you want to delete this file?',
|
||||
'crm.fileListPop.deleteTipContent': 'This action cannot be undone, please proceed with caution!',
|
||||
'crm.fileListPop.uploadAt': '{name} uploaded at {time}',
|
||||
'crm.fileListPop.wxworkDownloadTip': 'Please open the webpage in a browser to download',
|
||||
};
|
||||
@@ -0,0 +1,7 @@
|
||||
export default {
|
||||
'crm.fileListPop.title': '附件',
|
||||
'crm.fileListPop.deleteTipTitle': '确认删除该文件吗?',
|
||||
'crm.fileListPop.deleteTipContent': '删除后无法恢复,请谨慎操作!',
|
||||
'crm.fileListPop.uploadAt': '{name} 上传于 {time}',
|
||||
'crm.fileListPop.wxworkDownloadTip': '请使用浏览器打开网页后进行下载',
|
||||
};
|
||||
@@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<div class="flex gap-[16px] overflow-hidden">
|
||||
<div class="flex flex-col items-center gap-[4px]">
|
||||
<div class="flex h-[22px] w-[8px] items-center">
|
||||
<div class="h-[8px] w-full rounded-[999px] border border-[var(--primary-8)]"></div>
|
||||
</div>
|
||||
<div class="flex flex-1 justify-center">
|
||||
<div class="h-full w-[1px] bg-[var(--primary-8)]"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-1 flex-col gap-[8px] overflow-hidden">
|
||||
<div class="flex h-[24px] items-center justify-between gap-[16px]">
|
||||
<div class="flex h-[24px] items-center gap-[8px]">
|
||||
<CrmTag
|
||||
v-if="item.converted && isPlan"
|
||||
plain
|
||||
:tag="t('common.hasConvertToRecord')"
|
||||
text-color="var(--primary-8)"
|
||||
color="var(--primary-8)"
|
||||
/>
|
||||
<div>{{ getShowTime(item) }} </div>
|
||||
<div class="text-[14px] font-semibold text-[var(--text-n1)]">
|
||||
{{ (!isPlan ? item.followMethod : item.method) ?? '-' }}
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="isPlan" class="flex items-center">
|
||||
<van-dropdown-menu class="status-select-menu" @click.stop>
|
||||
<van-dropdown-item
|
||||
v-model="status"
|
||||
:disabled="props.readonly || item.converted || !isOwner(item)"
|
||||
:options="statusOptions"
|
||||
@change="changeStatus"
|
||||
/>
|
||||
</van-dropdown-menu>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-1 flex-col gap-[12px] rounded-[var(--border-radius-large)] bg-[var(--text-n10)] p-[16px]">
|
||||
<div class="flex items-center justify-between gap-[16px]">
|
||||
<CrmAvatar :is-word="item.owner !== userStore.userInfo.id" :text="item.ownerName" />
|
||||
<div class="flex flex-1 flex-wrap items-center overflow-hidden">
|
||||
<div class="one-line-text flex-1 text-[16px] font-semibold">{{ item.ownerName }}</div>
|
||||
<div v-if="!props.readonly && isOwner(item)" class="flex items-center gap-[16px]">
|
||||
<CrmTextButton icon="iconicon_delete" color="var(--error-red)" icon-size="16px" @click="emit('delete')" />
|
||||
<CrmTextButton
|
||||
v-if="!isPlan || (isPlan && item.status !== CustomerFollowPlanStatusEnum.CANCELLED)"
|
||||
icon="iconicon_handwritten_signature"
|
||||
color="var(--primary-8)"
|
||||
icon-size="16px"
|
||||
@click="emit('edit')"
|
||||
/>
|
||||
<!-- TODO先不上 -->
|
||||
<!-- <CrmTextButton
|
||||
icon="iconicon_login"
|
||||
color="var(--primary-8)"
|
||||
icon-size="16px"
|
||||
@click="emit('convertToRecord')"
|
||||
/> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="one-line-text rounded-[var(--border-radius-mini)] bg-[var(--text-n9)] p-[12px] text-[12px]">
|
||||
{{ item.content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { CustomerFollowPlanStatusEnum } from '@lib/shared/enums/customerEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import type { FollowDetailItem, StatusTagKey } from '@lib/shared/models/customer';
|
||||
|
||||
import CrmTag from '@/components/pure/crm-tag/index.vue';
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
import CrmAvatar from '@/components/business/crm-avatar/index.vue';
|
||||
|
||||
import { statusMap } from '@/config/follow';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
const props = defineProps<{
|
||||
item: any;
|
||||
type: 'plan' | 'record';
|
||||
readonly?: boolean;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'edit'): void;
|
||||
(e: 'delete'): void;
|
||||
(e: 'change'): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const status = defineModel<StatusTagKey>('value', {
|
||||
default: CustomerFollowPlanStatusEnum.PREPARED,
|
||||
});
|
||||
|
||||
const isPlan = computed(() => {
|
||||
return props.type === 'plan';
|
||||
});
|
||||
|
||||
function getShowTime(item: FollowDetailItem) {
|
||||
const time = 'estimatedTime' in item ? item.estimatedTime : item.followTime;
|
||||
return time ? dayjs(time).format('YYYY-MM-DD') : '-';
|
||||
}
|
||||
|
||||
const statusOptions = computed(() =>
|
||||
Object.values(statusMap).map((e) => ({
|
||||
text: t(e.label),
|
||||
value: e.value,
|
||||
}))
|
||||
);
|
||||
|
||||
const isOwner = (item: FollowDetailItem) => item.owner === userStore.userInfo?.id;
|
||||
|
||||
function changeStatus() {
|
||||
emit('change');
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
.status-select-menu {
|
||||
.van-dropdown-menu__bar {
|
||||
padding-right: 16px;
|
||||
height: 24px !important;
|
||||
border-radius: 4px !important;
|
||||
box-shadow: none !important;
|
||||
.van-dropdown-menu__title {
|
||||
.van-ellipsis {
|
||||
font-size: 14px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<CrmPageWrapper :title="t('common.detail')">
|
||||
<div class="h-full bg-[var(--text-n9)] py-[16px]">
|
||||
<CrmDescription :description="descriptions" />
|
||||
<div class="mt-[16px]">
|
||||
<van-cell-group inset class="p-[16px]">
|
||||
<div class="font-[600]">{{ t('common.communicationContent') }}</div>
|
||||
<div class="mt-[16px] rounded-[var(--border-radius-large)] bg-[var(--text-n9)] p-[16px]">
|
||||
{{ detail.content }}
|
||||
</div>
|
||||
</van-cell-group>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="route.query.readonly?.toString() !== 'true'" #footer>
|
||||
<div class="flex items-center justify-center gap-[16px]">
|
||||
<div class="flex w-[100px] items-center">
|
||||
<CrmTextButton
|
||||
color="var(--text-n1)"
|
||||
icon="iconicon_delete"
|
||||
:text="t('common.delete')"
|
||||
icon-size="18px"
|
||||
direction="column"
|
||||
class="flex-1"
|
||||
@click="handleDelete"
|
||||
/>
|
||||
</div>
|
||||
<van-button
|
||||
v-if="!isPlan || (isPlan && detail.status !== CustomerFollowPlanStatusEnum.CANCELLED)"
|
||||
type="primary"
|
||||
class="flex-1 !rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
plain
|
||||
@click="handleEdit"
|
||||
>
|
||||
{{ t('common.edit') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</template>
|
||||
</CrmPageWrapper>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { showSuccessToast } from 'vant';
|
||||
|
||||
import { CustomerFollowPlanStatusEnum } from '@lib/shared/enums/customerEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import CrmDescription from '@/components/pure/crm-description/index.vue';
|
||||
import CrmPageWrapper from '@/components/pure/crm-page-wrapper/index.vue';
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
|
||||
import { followPlanApiMap, followRecordApiMap, PlanEnumType, RecordEnumType } from '@/config/follow';
|
||||
import useFormCreateApi from '@/hooks/useFormCreateApi';
|
||||
|
||||
import { CommonRouteEnum } from '@/enums/routeEnum';
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
|
||||
const isPlan = computed(() => route.query.formKey?.includes('plan'));
|
||||
const formKey = computed(() => (route.query.formKey?.toString() as RecordEnumType | PlanEnumType) || '');
|
||||
const sourceId = computed(() => route.query.id?.toString() || '');
|
||||
|
||||
const { descriptions, initFormConfig, initFormDescription, detail } = useFormCreateApi({
|
||||
formKey: formKey.value,
|
||||
sourceId,
|
||||
needInitDetail: route.query.needInitDetail === 'Y',
|
||||
});
|
||||
|
||||
onBeforeMount(async () => {
|
||||
await initFormConfig();
|
||||
initFormDescription();
|
||||
});
|
||||
|
||||
async function handleDelete() {
|
||||
try {
|
||||
if (isPlan.value) {
|
||||
await followPlanApiMap.delete?.[formKey.value as PlanEnumType]?.(sourceId.value);
|
||||
} else {
|
||||
await followRecordApiMap.delete?.[formKey.value as RecordEnumType]?.(sourceId.value);
|
||||
}
|
||||
showSuccessToast(t('common.deleteSuccess'));
|
||||
router.back();
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
function handleEdit() {
|
||||
router.push({
|
||||
name: CommonRouteEnum.FORM_CREATE,
|
||||
query: {
|
||||
formKey: formKey.value,
|
||||
id: sourceId.value,
|
||||
needInitDetail: 'Y',
|
||||
},
|
||||
...(detail.value.converted === undefined
|
||||
? {}
|
||||
: {
|
||||
state: {
|
||||
params: JSON.stringify({ converted: detail.value.converted }),
|
||||
},
|
||||
}),
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
:deep(.crm-page-content) {
|
||||
@apply !overflow-hidden;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,112 @@
|
||||
<template>
|
||||
<div class="flex h-full flex-col overflow-hidden bg-[var(--text-n9)]">
|
||||
<div class="top-bar">
|
||||
<van-button v-if="!props.readonly" plain icon="plus" type="primary" size="small" @click="goCreate"> </van-button>
|
||||
<van-search
|
||||
v-model="keyword"
|
||||
shape="round"
|
||||
:placeholder="t('common.pleaseInputKeyword')"
|
||||
class="crm-search"
|
||||
@search="loadList"
|
||||
@clear="loadList"
|
||||
/>
|
||||
</div>
|
||||
<CrmList
|
||||
ref="crmListRef"
|
||||
:keyword="keyword"
|
||||
:load-list-api="followPlanApiMap.list[props.type]"
|
||||
class="p-[16px]"
|
||||
:list-params="{
|
||||
sourceId: props.sourceId,
|
||||
status: CustomerFollowPlanStatusEnum.ALL,
|
||||
}"
|
||||
:item-gap="16"
|
||||
:transform="transformField"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<listItem
|
||||
v-model:value="item.status"
|
||||
:item="item"
|
||||
type="plan"
|
||||
:readonly="props.readonly"
|
||||
@click="goDetail(item)"
|
||||
@delete="handleDelete(item)"
|
||||
@edit="handleEdit(item)"
|
||||
@change="handleChangeStatus(item)"
|
||||
/>
|
||||
</template>
|
||||
</CrmList>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { showSuccessToast } from 'vant';
|
||||
|
||||
import { CustomerFollowPlanStatusEnum } from '@lib/shared/enums/customerEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import type { CustomerFollowPlanListItem, FollowDetailItem, StatusTagKey } from '@lib/shared/models/customer';
|
||||
|
||||
import CrmList from '@/components/pure/crm-list/index.vue';
|
||||
import listItem from './components/listItem.vue';
|
||||
|
||||
import { followPlanApiMap, PlanEnumType } from '@/config/follow';
|
||||
|
||||
import useFollowApi from './useFollowApi';
|
||||
|
||||
const props = defineProps<{
|
||||
type: PlanEnumType;
|
||||
sourceId: string;
|
||||
readonly?: boolean;
|
||||
initialSourceName?: string;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
const keyword = ref('');
|
||||
|
||||
const crmListRef = ref<InstanceType<typeof CrmList>>();
|
||||
|
||||
const { transformField, goCreate, handleEdit, goDetail } = useFollowApi({
|
||||
type: 'followPlan',
|
||||
formKey: props.type,
|
||||
sourceId: props.sourceId,
|
||||
initialSourceName: props.initialSourceName,
|
||||
readonly: props.readonly,
|
||||
});
|
||||
|
||||
async function handleDelete(item: FollowDetailItem) {
|
||||
try {
|
||||
await followPlanApiMap.delete?.[props.type]?.(item.id);
|
||||
showSuccessToast(t('common.deleteSuccess'));
|
||||
crmListRef.value?.loadList(true);
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function handleChangeStatus(item: FollowDetailItem) {
|
||||
try {
|
||||
await followPlanApiMap.changeStatus?.[props.type]?.({
|
||||
id: item.id,
|
||||
status: (item as CustomerFollowPlanListItem).status,
|
||||
});
|
||||
showSuccessToast(t('common.operationSuccess'));
|
||||
crmListRef.value?.loadList(true);
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
function loadList() {
|
||||
nextTick(() => {
|
||||
crmListRef.value?.loadList(true);
|
||||
});
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
loadList,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,94 @@
|
||||
<template>
|
||||
<div class="flex h-full flex-col overflow-hidden bg-[var(--text-n9)]">
|
||||
<div class="top-bar">
|
||||
<van-button v-if="!props.readonly" plain icon="plus" type="primary" size="small" @click="goCreate"> </van-button>
|
||||
<van-search
|
||||
v-model="keyword"
|
||||
shape="round"
|
||||
:placeholder="t('common.pleaseInputKeyword')"
|
||||
class="crm-search"
|
||||
@search="loadList"
|
||||
@clear="loadList"
|
||||
/>
|
||||
</div>
|
||||
<CrmList
|
||||
ref="crmListRef"
|
||||
:keyword="keyword"
|
||||
class="p-[16px]"
|
||||
:item-gap="16"
|
||||
:list-params="{
|
||||
sourceId: props.sourceId,
|
||||
}"
|
||||
:load-list-api="followRecordApiMap.list[props.type]"
|
||||
:transform="transformField"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<listItem
|
||||
:item="item"
|
||||
type="record"
|
||||
:readonly="props.readonly"
|
||||
@click="goDetail(item)"
|
||||
@delete="handleDelete(item)"
|
||||
@edit="handleEdit(item)"
|
||||
/>
|
||||
</template>
|
||||
</CrmList>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { showSuccessToast } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import type { FollowDetailItem } from '@lib/shared/models/customer';
|
||||
|
||||
import CrmList from '@/components/pure/crm-list/index.vue';
|
||||
import listItem from './components/listItem.vue';
|
||||
|
||||
import { followRecordApiMap, RecordEnumType } from '@/config/follow';
|
||||
|
||||
import useFollowApi from './useFollowApi';
|
||||
|
||||
const props = defineProps<{
|
||||
type: RecordEnumType;
|
||||
readonly?: boolean;
|
||||
sourceId: string;
|
||||
initialSourceName?: string;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
const keyword = ref('');
|
||||
|
||||
const crmListRef = ref<InstanceType<typeof CrmList>>();
|
||||
|
||||
const { transformField, goCreate, handleEdit, goDetail } = useFollowApi({
|
||||
type: 'followRecord',
|
||||
formKey: props.type,
|
||||
sourceId: props.sourceId,
|
||||
initialSourceName: props.initialSourceName,
|
||||
readonly: props.readonly,
|
||||
});
|
||||
|
||||
async function handleDelete(item: FollowDetailItem) {
|
||||
try {
|
||||
await followRecordApiMap.delete?.[props.type]?.(item.id);
|
||||
showSuccessToast(t('common.deleteSuccess'));
|
||||
crmListRef.value?.loadList(true);
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
function loadList() {
|
||||
nextTick(() => {
|
||||
crmListRef.value?.loadList(true);
|
||||
});
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
loadList,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,89 @@
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import type { CustomerFollowPlanListItem, FollowDetailItem } from '@lib/shared/models/customer';
|
||||
|
||||
import { PlanEnumType, RecordEnumType } from '@/config/follow';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
import { CommonRouteEnum } from '@/enums/routeEnum';
|
||||
|
||||
export default function useFollowApi(followProps: {
|
||||
type: 'followRecord' | 'followPlan';
|
||||
formKey: PlanEnumType | RecordEnumType;
|
||||
sourceId: string;
|
||||
initialSourceName?: string;
|
||||
readonly?: boolean;
|
||||
}) {
|
||||
const router = useRouter();
|
||||
|
||||
function transformField(item: FollowDetailItem, optionMap?: Record<string, any>) {
|
||||
const methodKey = followProps.type === 'followPlan' ? 'method' : 'followMethod';
|
||||
let followMethod;
|
||||
if (optionMap) {
|
||||
followMethod =
|
||||
optionMap[methodKey]?.find((e: any) => e.id === item[methodKey as keyof FollowDetailItem])?.name || '-';
|
||||
}
|
||||
return {
|
||||
...item,
|
||||
[methodKey]: followMethod,
|
||||
};
|
||||
}
|
||||
|
||||
function goCreate() {
|
||||
router.push({
|
||||
name: CommonRouteEnum.FORM_CREATE,
|
||||
query: {
|
||||
formKey: followProps.formKey,
|
||||
id: followProps.sourceId,
|
||||
initialSourceName: followProps.initialSourceName,
|
||||
},
|
||||
...(followProps.type === 'followPlan'
|
||||
? {
|
||||
state: {
|
||||
params: JSON.stringify({ converted: false }),
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
});
|
||||
}
|
||||
|
||||
function handleEdit(item: FollowDetailItem) {
|
||||
router.push({
|
||||
name: CommonRouteEnum.FORM_CREATE,
|
||||
query: {
|
||||
formKey: followProps.formKey,
|
||||
id: item.id,
|
||||
needInitDetail: 'Y',
|
||||
},
|
||||
...(followProps.type === 'followPlan'
|
||||
? {
|
||||
state: {
|
||||
params: JSON.stringify({ converted: (item as CustomerFollowPlanListItem).converted }),
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
});
|
||||
}
|
||||
|
||||
function goDetail(item: FollowDetailItem) {
|
||||
const userStore = useUserStore();
|
||||
const isOwner = userStore.userInfo.id === item.owner;
|
||||
const readonlyString = followProps.readonly || !isOwner;
|
||||
router.push({
|
||||
name: CommonRouteEnum.FOLLOW_DETAIL,
|
||||
query: {
|
||||
formKey: followProps.formKey,
|
||||
id: item.id,
|
||||
needInitDetail: 'Y',
|
||||
readonly: String(readonlyString),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
transformField,
|
||||
goCreate,
|
||||
handleEdit,
|
||||
goDetail,
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<CrmDataSource
|
||||
:id="props.fieldConfig.id"
|
||||
v-model:value="value"
|
||||
v-model:selected-rows="selectedRows"
|
||||
:data-source-type="props.fieldConfig.dataSourceType as FieldDataSourceTypeEnum"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseSelect')"
|
||||
:disabled="!props.fieldConfig.editable"
|
||||
:list-params="getParams()"
|
||||
:multiple="props.fieldConfig.type === FieldTypeEnum.DATA_SOURCE_MULTIPLE"
|
||||
@change="($event) => emit('change', $event)"
|
||||
>
|
||||
</CrmDataSource>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { OperatorEnum } from '@lib/shared/enums/commonEnum';
|
||||
import { FieldDataSourceTypeEnum, FieldTypeEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import CrmDataSource from '@/components/business/crm-datasource/index.vue';
|
||||
|
||||
import { multipleValueTypeList } from '@cordys/web/src/components/business/crm-form-create/config';
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
formDetail?: Record<string, any>;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string | string[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string | string[]>('value', {
|
||||
default: '',
|
||||
});
|
||||
const selectedRows = ref<Record<string, any>[]>(props.fieldConfig.initialOptions || []);
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.initialOptions,
|
||||
(val) => {
|
||||
selectedRows.value = val as Record<string, any>[];
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
function getParams() {
|
||||
const conditions = props.fieldConfig.combineSearch?.conditions
|
||||
.map((item) => ({
|
||||
value: item.rightFieldCustom ? item.rightFieldCustomValue : props.formDetail?.[item.rightFieldId || ''],
|
||||
operator: item.operator,
|
||||
name: item.leftFieldId ?? '',
|
||||
multipleValue: multipleValueTypeList.includes(item.leftFieldType),
|
||||
}))
|
||||
.filter(
|
||||
(e) => e.operator === OperatorEnum.EMPTY || (e.value !== undefined && e.value !== null && e.value !== '')
|
||||
);
|
||||
|
||||
return {
|
||||
combineSearch: {
|
||||
searchMode: props.fieldConfig.combineSearch?.searchMode,
|
||||
conditions,
|
||||
},
|
||||
};
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,159 @@
|
||||
<template>
|
||||
<van-field
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:required="required"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
>
|
||||
<template #input>
|
||||
<van-uploader
|
||||
v-model="fileList"
|
||||
:before-read="handleBeforeRead"
|
||||
:before-delete="handleBeforeDelete"
|
||||
:after-read="handleAfterRead"
|
||||
:accept="props.fieldConfig.accept || '*/*'"
|
||||
:max-count="props.fieldConfig.onlyOne ? 1 : 10"
|
||||
multiple
|
||||
>
|
||||
<div class="flex items-center gap-[8px]">
|
||||
<div class="flex h-[80px] w-[80px] items-center justify-center bg-[var(--text-n9)]">
|
||||
<CrmIconFont name="iconicon_add" />
|
||||
</div>
|
||||
<div class="flex-1 text-[12px] text-[var(--text-n4)]">
|
||||
{{
|
||||
`${t('formCreate.advanced.uploadFileTip', {
|
||||
type: props.fieldConfig.accept || t('formCreate.advanced.anyType'),
|
||||
size: props.fieldConfig.limitSize || '20MB',
|
||||
})}${t('formCreate.advanced.limitCount', { count: props.fieldConfig.onlyOne ? 1 : 10 })}`
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</van-uploader>
|
||||
</template>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule, showToast, UploaderFileListItem } from 'vant';
|
||||
|
||||
import { PreviewAttachmentUrl } from '@lib/shared/api/requrls/system/module';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { Result } from '@lib/shared/types/axios';
|
||||
|
||||
import CrmIconFont from '@/components/pure/crm-icon-font/index.vue';
|
||||
|
||||
import { uploadTempAttachment } from '@/api/modules';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string[], files: UploaderFileListItem[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const fileKeys = defineModel<string[]>('value', {
|
||||
default: [],
|
||||
});
|
||||
const fileList = ref<UploaderFileListItem[]>([]);
|
||||
const required = computed(() => props.fieldConfig.rules.some((rule) => rule.key === 'required'));
|
||||
|
||||
function handleBeforeRead(file: File | File[]) {
|
||||
if (fileList.value.length > 0) {
|
||||
// 附件上传校验名称重复
|
||||
const isRepeat =
|
||||
fileList.value.filter((item) =>
|
||||
Array.isArray(file) ? file.some((e) => e.name === item.file?.name) : item.file?.name === file.name
|
||||
).length >= 1;
|
||||
if (isRepeat) {
|
||||
showToast(t('formCreate.upload.repeatFileTip'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const maxSize = parseInt(props.fieldConfig.limitSize || '', 10) || 20;
|
||||
const _maxSize = props.fieldConfig.limitSize?.includes('KB') ? maxSize * 1024 : maxSize * 1024 * 1024;
|
||||
if (Array.isArray(file) ? file.some((f) => f.size > _maxSize) : file.size > _maxSize) {
|
||||
showToast(t('formCreate.advanced.overSize', { size: props.fieldConfig.limitSize || '20MB' }));
|
||||
return false;
|
||||
}
|
||||
if (props.fieldConfig.onlyOne) {
|
||||
// 单文件上传时,清空之前的文件(得放到校验文件大小之后,避免文件大小限制后文件丢失)
|
||||
fileList.value = [];
|
||||
fileKeys.value = [];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async function handleAfterRead(file: UploaderFileListItem | UploaderFileListItem[]) {
|
||||
if (Array.isArray(file)) {
|
||||
const requestArr: Promise<Result<string[]>>[] = [];
|
||||
file.forEach((f) => {
|
||||
if (f.file) {
|
||||
requestArr.push(uploadTempAttachment(f.file!));
|
||||
f.status = 'uploading';
|
||||
}
|
||||
});
|
||||
try {
|
||||
const resArr = await Promise.all(requestArr);
|
||||
resArr.forEach((res, index) => {
|
||||
fileKeys.value.push(...res.data);
|
||||
file[index].status = 'done';
|
||||
file[index].content = `${PreviewAttachmentUrl}/${res.data[0]}`;
|
||||
});
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
file.forEach((f) => {
|
||||
if (f.file) {
|
||||
f.status = 'failed';
|
||||
}
|
||||
});
|
||||
}
|
||||
emit('change', fileKeys.value, fileList.value);
|
||||
} else {
|
||||
try {
|
||||
if (file.file) {
|
||||
file.status = 'uploading';
|
||||
const res = await uploadTempAttachment(file.file!);
|
||||
fileKeys.value.push(...res.data);
|
||||
file.status = 'done';
|
||||
file.content = `${PreviewAttachmentUrl}/${res.data[0]}`;
|
||||
emit('change', fileKeys.value, fileList.value);
|
||||
}
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
file.status = 'failed';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleBeforeDelete(file: UploaderFileListItem) {
|
||||
const index = fileList.value.findIndex((item) => item.content === file.content);
|
||||
if (index !== -1) {
|
||||
fileKeys.value = fileKeys.value.filter((key) => `${PreviewAttachmentUrl}/${key}` !== file.content);
|
||||
fileList.value.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.initialOptions,
|
||||
(arr) => {
|
||||
fileList.value =
|
||||
(arr?.map((e) => ({
|
||||
...e,
|
||||
status: 'finished',
|
||||
url: `${PreviewAttachmentUrl}/${e.id}`,
|
||||
content: `${PreviewAttachmentUrl}/${e.id}`,
|
||||
isImage: /(jpg|jpeg|png|gif|bmp|webp|svg)$/i.test(e.type),
|
||||
})) as UploaderFileListItem[]) || [];
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,19 @@
|
||||
import dataSource from './dataSource.vue';
|
||||
import file from './file.vue';
|
||||
import industry from './industry.vue';
|
||||
import link from './link.vue';
|
||||
import location from './location.vue';
|
||||
import phone from './phone.vue';
|
||||
import serialNumber from './serialNumber.vue';
|
||||
import upload from './upload.vue';
|
||||
|
||||
export default {
|
||||
phone,
|
||||
serialNumber,
|
||||
location,
|
||||
dataSource,
|
||||
upload,
|
||||
link,
|
||||
file,
|
||||
industry,
|
||||
};
|
||||
@@ -0,0 +1,71 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="fieldLabel"
|
||||
is-link
|
||||
readonly
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
:placeholder="props.fieldConfig.placeholder || t('formCreate.advanced.selectIndustry')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@click="show = true"
|
||||
/>
|
||||
<van-popup v-model:show="show" round position="bottom">
|
||||
<van-cascader
|
||||
v-model="cascaderValue"
|
||||
:title="props.fieldConfig.placeholder || t('formCreate.advanced.selectIndustry')"
|
||||
:options="industryOptions"
|
||||
:field-names="{ text: 'label', value: 'value', children: 'children' }"
|
||||
@close="show = false"
|
||||
@finish="onConfirm"
|
||||
/>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { getIndustryPath } from '@lib/shared/method';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
import { industryOptions } from '@cordys/web/src/components/pure/crm-industry-select/config';
|
||||
import type { CascaderOption } from 'vant';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', v: string): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const show = ref(false);
|
||||
const cascaderValue = ref<string | number>('');
|
||||
|
||||
const fieldLabel = computed(() => getIndustryPath(value.value));
|
||||
|
||||
function onConfirm({ selectedOptions }: { selectedOptions: CascaderOption[] }) {
|
||||
show.value = false;
|
||||
if (!selectedOptions?.length) return;
|
||||
value.value = cascaderValue.value as string;
|
||||
emit('change', value.value);
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
@@ -0,0 +1,48 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="value"
|
||||
type="textarea"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
:maxlength="1000"
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseInput')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: (string | number)[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,101 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="fieldLabel"
|
||||
is-link
|
||||
readonly
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
:placeholder="props.fieldConfig.placeholder || t('formCreate.advanced.selectLocation')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@click="show = true"
|
||||
/>
|
||||
<van-popup v-model:show="show" round position="bottom">
|
||||
<van-cascader
|
||||
v-model="cascaderValue"
|
||||
:title="props.fieldConfig.placeholder || t('formCreate.advanced.selectLocation')"
|
||||
:options="options"
|
||||
:field-names="{ text: 'label', value: 'value', children: 'children' }"
|
||||
@close="show = false"
|
||||
@finish="onConfirm"
|
||||
/>
|
||||
</van-popup>
|
||||
<van-field
|
||||
v-if="props.fieldConfig.locationType === 'detail'"
|
||||
v-model="detail"
|
||||
type="textarea"
|
||||
label=" "
|
||||
:name="props.fieldConfig.id"
|
||||
:maxlength="200"
|
||||
:placeholder="t('formCreate.advanced.inputLocationDetail')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@update:model-value="handleCityAndDetailChange"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { getCityPath } from '@lib/shared/method';
|
||||
|
||||
import { getCountriesByLevel } from '@cordys/web/src/components/business/crm-city-select/config';
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
import type { CascaderOption } from 'vant';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', v: string): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const show = ref(false);
|
||||
const cascaderValue = ref<string | number>('');
|
||||
const city = ref('');
|
||||
const detail = ref(''); // 详细地址
|
||||
|
||||
const fieldLabel = computed(() => getCityPath(city.value, props.fieldConfig.scope));
|
||||
|
||||
const options = computed<CascaderOption[]>(() => {
|
||||
return getCountriesByLevel(props.fieldConfig.locationType, props.fieldConfig.scope);
|
||||
});
|
||||
|
||||
function handleCityAndDetailChange() {
|
||||
value.value = city.value || detail.value ? `${city.value || ''}-${detail.value || ''}` : '';
|
||||
emit('change', value.value);
|
||||
}
|
||||
|
||||
function onConfirm({ selectedOptions }: { selectedOptions: CascaderOption[] }) {
|
||||
show.value = false;
|
||||
if (!selectedOptions?.length) return;
|
||||
city.value = cascaderValue.value as string;
|
||||
handleCityAndDetailChange();
|
||||
}
|
||||
|
||||
watch(
|
||||
() => value.value,
|
||||
(val) => {
|
||||
if (!val) {
|
||||
city.value = '';
|
||||
detail.value = '';
|
||||
cascaderValue.value = '';
|
||||
return;
|
||||
}
|
||||
const localArr = val.split('-');
|
||||
city.value = localArr[0] || '';
|
||||
cascaderValue.value = localArr[0] || '';
|
||||
detail.value = localArr.slice(1).join('-') || '';
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
</script>
|
||||
@@ -0,0 +1,62 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="value"
|
||||
type="tel"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="mergedRules"
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseInput')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
:maxlength="30"
|
||||
clearable
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule, FieldRuleValidator } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
const mergedRules = computed<FieldRule[]>(() => {
|
||||
const rawRules = (props.fieldConfig.rules as FieldRule[]) || [];
|
||||
const formatRule: FieldRule = {
|
||||
trigger: ['onBlur', 'onChange'],
|
||||
validator: ((val: string) => {
|
||||
if (!val) return Promise.resolve();
|
||||
if (props.fieldConfig.format === '11' && val.replace(/[\s\uFEFF\xA0]+/g, '').length !== 11) {
|
||||
return t('formCreate.phone.lengthValidator', { count: 11 });
|
||||
}
|
||||
}) as FieldRuleValidator,
|
||||
};
|
||||
return [...rawRules, formatRule];
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,22 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="value"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:placeholder="props.fieldConfig.placeholder"
|
||||
disabled
|
||||
>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,141 @@
|
||||
<template>
|
||||
<van-field
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:required="required"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
>
|
||||
<template #input>
|
||||
<van-uploader
|
||||
v-model="fileList"
|
||||
:before-read="handleBeforeRead"
|
||||
:before-delete="handleBeforeDelete"
|
||||
:after-read="handleAfterRead"
|
||||
multiple
|
||||
/>
|
||||
</template>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule, showToast, UploaderFileListItem } from 'vant';
|
||||
|
||||
import { PreviewPictureUrl } from '@lib/shared/api/requrls/system/module';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { Result } from '@lib/shared/types/axios';
|
||||
|
||||
import { uploadTempFile } from '@/api/modules';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string[], files: UploaderFileListItem[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const fileKeys = defineModel<string[]>('value', {
|
||||
default: [],
|
||||
});
|
||||
const fileList = ref<UploaderFileListItem[]>([]);
|
||||
const required = computed(() => props.fieldConfig.rules.some((rule) => rule.key === 'required'));
|
||||
|
||||
function handleBeforeRead(file: File | File[]) {
|
||||
if (fileList.value.length > 0) {
|
||||
// 附件上传校验名称重复
|
||||
const isRepeat =
|
||||
fileList.value.filter((item) =>
|
||||
Array.isArray(file) ? file.some((e) => e.name === item.file?.name) : item.file?.name === file.name
|
||||
).length >= 1;
|
||||
if (isRepeat) {
|
||||
showToast(t('formCreate.upload.repeatFileTip'));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const maxSize = props.fieldConfig.uploadSizeLimit || 20;
|
||||
const _maxSize = maxSize * 1024 * 1024;
|
||||
if (Array.isArray(file) ? file.some((f) => f.size > _maxSize) : file.size > _maxSize) {
|
||||
showToast(t('formCreate.advanced.overSize', { size: maxSize }));
|
||||
return false;
|
||||
}
|
||||
if (props.fieldConfig.uploadLimit === 1) {
|
||||
// 单文件上传时,清空之前的文件(得放到校验文件大小之后,避免文件大小限制后文件丢失)
|
||||
fileList.value = [];
|
||||
fileKeys.value = [];
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
async function handleAfterRead(file: UploaderFileListItem | UploaderFileListItem[]) {
|
||||
if (Array.isArray(file)) {
|
||||
const requestArr: Promise<Result<string[]>>[] = [];
|
||||
file.forEach((f) => {
|
||||
if (f.file) {
|
||||
requestArr.push(uploadTempFile(f.file!));
|
||||
f.status = 'uploading';
|
||||
}
|
||||
});
|
||||
try {
|
||||
const resArr = await Promise.all(requestArr);
|
||||
resArr.forEach((res, index) => {
|
||||
fileKeys.value.push(...res.data);
|
||||
file[index].status = 'done';
|
||||
file[index].content = `${PreviewPictureUrl}/${res.data[0]}`;
|
||||
});
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
emit('change', fileKeys.value, fileList.value);
|
||||
} else {
|
||||
try {
|
||||
if (file.file) {
|
||||
file.status = 'uploading';
|
||||
const res = await uploadTempFile(file.file!);
|
||||
fileKeys.value.push(...res.data);
|
||||
file.status = 'done';
|
||||
file.content = `${PreviewPictureUrl}/${res.data[0]}`;
|
||||
emit('change', fileKeys.value, fileList.value);
|
||||
}
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
file.status = 'failed';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function handleBeforeDelete(file: UploaderFileListItem) {
|
||||
const index = fileList.value.findIndex((item) => item.content === file.content);
|
||||
if (index !== -1) {
|
||||
fileKeys.value = fileKeys.value.filter((key) => `${PreviewPictureUrl}/${key}` !== file.content);
|
||||
fileList.value.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => fileKeys.value,
|
||||
() => {
|
||||
if (fileKeys.value.length === 0) {
|
||||
fileList.value = [];
|
||||
} else if (fileList.value.length !== fileKeys.value.length) {
|
||||
fileKeys.value.forEach((key) => {
|
||||
if (!fileList.value.some((item) => item.content === `${PreviewPictureUrl}/${key}`)) {
|
||||
fileList.value.push({
|
||||
url: `${PreviewPictureUrl}/${key}`,
|
||||
content: `${PreviewPictureUrl}/${key}`,
|
||||
isImage: true,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,49 @@
|
||||
<template>
|
||||
<van-field
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
>
|
||||
<template #input>
|
||||
<van-checkbox-group
|
||||
v-model="value"
|
||||
direction="horizontal"
|
||||
shape="square"
|
||||
class="gap-y-[8px]"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
@change="($event) => emit('change', $event)"
|
||||
>
|
||||
<van-checkbox v-for="item in props.fieldConfig.options" :key="item.value" :name="item.value">
|
||||
{{ item.label }}
|
||||
</van-checkbox>
|
||||
</van-checkbox-group>
|
||||
</template>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: number): void;
|
||||
}>();
|
||||
|
||||
const value = defineModel<any>('value', {
|
||||
default: null,
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val || value.value;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
@@ -0,0 +1,116 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="fieldValue"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
is-link
|
||||
readonly
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseSelect')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@click="handleClick"
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
<van-popup v-model:show="showPicker" destroy-on-close round position="bottom">
|
||||
<van-picker-group
|
||||
:title="t('formCreate.pickDate')"
|
||||
:tabs="
|
||||
props.fieldConfig.dateType === 'datetime'
|
||||
? [t('formCreate.pickDate'), t('formCreate.pickTime')]
|
||||
: [t('formCreate.pickDate')]
|
||||
"
|
||||
:next-step-text="t('formCreate.next')"
|
||||
@confirm="onConfirm"
|
||||
@cancel="showPicker = false"
|
||||
>
|
||||
<van-date-picker
|
||||
v-model="currentDate"
|
||||
:columns-type="props.fieldConfig.dateType === 'month' ? ['year', 'month'] : ['year', 'month', 'day']"
|
||||
/>
|
||||
<van-time-picker
|
||||
v-if="props.fieldConfig.dateType === 'datetime'"
|
||||
v-model="currentTime"
|
||||
:columns-type="['hour', 'minute', 'second']"
|
||||
/>
|
||||
</van-picker-group>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: number): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<number>('value', {
|
||||
default: null,
|
||||
});
|
||||
const fieldValue = computed(() => {
|
||||
if (!value.value) {
|
||||
return undefined;
|
||||
}
|
||||
if (props.fieldConfig.dateType === 'datetime') {
|
||||
return dayjs(value.value).format('YYYY-MM-DD HH:mm:ss');
|
||||
}
|
||||
if (props.fieldConfig.dateType === 'month') {
|
||||
return dayjs(value.value).format('YYYY-MM');
|
||||
}
|
||||
return dayjs(value.value).format('YYYY-MM-DD');
|
||||
});
|
||||
|
||||
const showPicker = ref(false);
|
||||
const currentDate = ref<string[]>([]);
|
||||
const currentTime = ref<string[]>([]);
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
if (val) {
|
||||
const date = dayjs(val);
|
||||
currentDate.value =
|
||||
props.fieldConfig.dateType === 'month'
|
||||
? date.format('YYYY-MM').split('-')
|
||||
: date.format('YYYY-MM-DD').split('-');
|
||||
currentTime.value = date.format('HH:mm:ss').split(':');
|
||||
} else {
|
||||
const date = dayjs();
|
||||
currentDate.value =
|
||||
props.fieldConfig.dateType === 'month'
|
||||
? date.format('YYYY-MM').split('-')
|
||||
: date.format('YYYY-MM-DD').split('-');
|
||||
currentTime.value = date.format('HH:mm:ss').split(':');
|
||||
}
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
function onConfirm() {
|
||||
showPicker.value = false;
|
||||
value.value = dayjs(`${currentDate.value.join('-')} ${currentTime.value.join(':')}`).unix() * 1000;
|
||||
emit('change', value.value);
|
||||
}
|
||||
|
||||
function handleClick() {
|
||||
if (props.fieldConfig.editable) {
|
||||
showPicker.value = true;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,42 @@
|
||||
<template>
|
||||
<div class="mx-[16px] mb-[16px] mt-[16px]">
|
||||
<div
|
||||
v-if="props.fieldConfig.showLabel"
|
||||
class="mb-[8px] font-semibold"
|
||||
:style="{
|
||||
color: fieldConfig.titleColor,
|
||||
}"
|
||||
>
|
||||
{{ props.fieldConfig.name }}
|
||||
</div>
|
||||
<van-divider
|
||||
class="!mb-[4px] !mt-0"
|
||||
:class="props.fieldConfig.dividerClass"
|
||||
:style="{ borderColor: dividerColor }"
|
||||
:dashed="props.fieldConfig.dividerClass === 'divider--dashed'"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
|
||||
const dividerColor = computed(() => {
|
||||
return props.fieldConfig.dividerColor || 'var(--text-n4)';
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.divider--hidden {
|
||||
@apply hidden;
|
||||
}
|
||||
.divider--double {
|
||||
&::before {
|
||||
border-width: 2px 0 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,23 @@
|
||||
import checkbox from './checkbox.vue';
|
||||
import datePicker from './datePicker.vue';
|
||||
import divider from './divider.vue';
|
||||
import inputNumber from './inputNumber.vue';
|
||||
import memberSelect from './memberSelect.vue';
|
||||
import multiplePick from './multiplePick.vue';
|
||||
import pick from './pick.vue';
|
||||
import radio from './radio.vue';
|
||||
import singleText from './singleText.vue';
|
||||
import textarea from './textarea.vue';
|
||||
|
||||
export default {
|
||||
checkbox,
|
||||
radio,
|
||||
inputNumber,
|
||||
textarea,
|
||||
divider,
|
||||
datePicker,
|
||||
singleText,
|
||||
pick,
|
||||
multiplePick,
|
||||
memberSelect,
|
||||
};
|
||||
@@ -0,0 +1,122 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="displayValue"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
type="text"
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseInput')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@blur="onBlur"
|
||||
@focus="onFocus"
|
||||
>
|
||||
<template v-if="props.fieldConfig.numberFormat === 'percent'" #right-icon> % </template>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value?: number | null): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<number | null>('value', {
|
||||
default: null,
|
||||
});
|
||||
|
||||
const displayValue = ref('');
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val || value.value;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
// 失去焦点时:清理非法字符 → 限制小数点 → min/max → 精度 → 千分位
|
||||
function onBlur() {
|
||||
if (!displayValue.value) {
|
||||
value.value = null;
|
||||
emit('change', null);
|
||||
return;
|
||||
}
|
||||
|
||||
// 只保留数字和小数点
|
||||
let clean = displayValue.value.replace(/[^\d.]/g, '');
|
||||
|
||||
// 限制只能有一个小数点
|
||||
const dotIndex = clean.indexOf('.');
|
||||
if (dotIndex !== -1) {
|
||||
clean = clean.substring(0, dotIndex + 1) + clean.substring(dotIndex + 1).replace(/\./g, '');
|
||||
}
|
||||
|
||||
let num = Number(clean);
|
||||
if (Number.isNaN(num)) {
|
||||
value.value = null;
|
||||
emit('change', null);
|
||||
return;
|
||||
}
|
||||
|
||||
// 限制 min/max
|
||||
if (props.fieldConfig.min != null && num < props.fieldConfig.min) {
|
||||
num = props.fieldConfig.min;
|
||||
}
|
||||
if (props.fieldConfig.max != null && num > props.fieldConfig.max) {
|
||||
num = props.fieldConfig.max;
|
||||
}
|
||||
|
||||
if (!props.fieldConfig.max && num > 1000000000) {
|
||||
num = 1000000000;
|
||||
}
|
||||
|
||||
const precision = props.fieldConfig.precision ?? 0;
|
||||
num = Number(num.toFixed(precision));
|
||||
|
||||
// 更新真实值
|
||||
value.value = num;
|
||||
emit('change', num);
|
||||
}
|
||||
|
||||
// 聚焦时:去掉千分位,方便编辑
|
||||
function onFocus() {
|
||||
if (!displayValue.value) return;
|
||||
displayValue.value = displayValue.value.replace(/,/g, '');
|
||||
}
|
||||
|
||||
watch(
|
||||
() => value.value,
|
||||
(val) => {
|
||||
if (val) {
|
||||
// 更新显示值(千分位/小数位)
|
||||
if (props.fieldConfig.numberFormat === 'number' && props.fieldConfig.showThousandsSeparator) {
|
||||
displayValue.value = val.toLocaleString('en-US', {
|
||||
minimumFractionDigits: props.fieldConfig.precision ?? 0,
|
||||
maximumFractionDigits: props.fieldConfig.precision ?? 0,
|
||||
});
|
||||
} else {
|
||||
displayValue.value = String(val);
|
||||
}
|
||||
} else {
|
||||
displayValue.value = '';
|
||||
}
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
@@ -0,0 +1,262 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="fieldValue"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
is-link
|
||||
readonly
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseSelect')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
type="textarea"
|
||||
rows="1"
|
||||
autosize
|
||||
@click="handleClick"
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
<van-popup
|
||||
v-model:show="showPicker"
|
||||
destroy-on-close
|
||||
round
|
||||
position="bottom"
|
||||
safe-area-inset-top
|
||||
safe-area-inset-bottom
|
||||
class="h-[100vh]"
|
||||
>
|
||||
<CrmPageWrapper
|
||||
:title="
|
||||
t('datasource.pickResource', {
|
||||
name: props.fieldConfig.type ? t(typeLocaleMap[props.fieldConfig.type]) : '',
|
||||
})
|
||||
"
|
||||
hide-back
|
||||
>
|
||||
<div class="flex h-full flex-col overflow-hidden">
|
||||
<van-search
|
||||
v-model="keyword"
|
||||
class="crm-datasource-search"
|
||||
shape="round"
|
||||
:placeholder="
|
||||
t('datasource.searchPlaceholder', {
|
||||
name: props.fieldConfig.type ? t(typeLocaleMap[props.fieldConfig.type]) : '',
|
||||
})
|
||||
"
|
||||
@search="search"
|
||||
/>
|
||||
<div class="flex-1 overflow-hidden px-[16px]">
|
||||
<CrmSelectList
|
||||
ref="crmSelectListRef"
|
||||
v-model:value="pickerValue"
|
||||
v-model:selected-rows="pickerSelectedRows"
|
||||
v-model:loading="loading"
|
||||
:data="dataList"
|
||||
:multiple="isMultiple"
|
||||
:keyword="keyword"
|
||||
:transform="selectListTransform"
|
||||
no-page-nation
|
||||
>
|
||||
<template #label="{ item }">
|
||||
<div class="flex flex-col gap-[4px]">
|
||||
<div class="text-[16px]">{{ item.name }}</div>
|
||||
<div v-if="item.pathName" class="text-[14px] text-[var(--text-n2)]">{{ item.pathName }}</div>
|
||||
</div>
|
||||
</template>
|
||||
</CrmSelectList>
|
||||
</div>
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="flex items-center gap-[16px]">
|
||||
<van-button
|
||||
type="default"
|
||||
class="crm-button-primary--secondary !rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
block
|
||||
@click="onCancel"
|
||||
>
|
||||
{{ t('common.cancel') }}
|
||||
</van-button>
|
||||
<van-button
|
||||
type="primary"
|
||||
class="!rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
block
|
||||
:disabled="!pickerSelectedRows.length"
|
||||
@click="onConfirm"
|
||||
>
|
||||
{{ t('common.confirm') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</template>
|
||||
</CrmPageWrapper>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { FieldTypeEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { DeptNodeTypeEnum } from '@lib/shared/enums/systemEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { mapTree } from '@lib/shared/method';
|
||||
import { DeptUserTreeNode } from '@lib/shared/models/system/role';
|
||||
|
||||
import CrmPageWrapper from '@/components/pure/crm-page-wrapper/index.vue';
|
||||
import CrmSelectList from '@/components/business/crm-select-list/index.vue';
|
||||
|
||||
import { getFieldDeptTree, getFieldDeptUerTree } from '@/api/modules';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
needInitDetail?: boolean; // 是否需要初始化详情
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string | string[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string | string[]>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
const fieldValue = ref('');
|
||||
const pickerValue = ref<string[]>([]);
|
||||
const pickerSelectedRows = ref<Record<string, any>[]>(props.fieldConfig.initialOptions || []);
|
||||
const crmSelectListRef = ref<InstanceType<typeof CrmSelectList>>();
|
||||
const showPicker = ref(false);
|
||||
const keyword = ref('');
|
||||
|
||||
const typeLocaleMap: Record<string, any> = {
|
||||
[FieldTypeEnum.MEMBER]: t('formCreate.member'),
|
||||
[FieldTypeEnum.MEMBER_MULTIPLE]: t('formCreate.member'),
|
||||
[FieldTypeEnum.DEPARTMENT]: t('formCreate.department'),
|
||||
[FieldTypeEnum.DEPARTMENT_MULTIPLE]: t('formCreate.department'),
|
||||
};
|
||||
const sourceApi: Partial<Record<FieldTypeEnum, (params?: any) => Promise<DeptUserTreeNode[]>>> = {
|
||||
[FieldTypeEnum.MEMBER]: getFieldDeptUerTree,
|
||||
[FieldTypeEnum.MEMBER_MULTIPLE]: getFieldDeptUerTree,
|
||||
[FieldTypeEnum.DEPARTMENT]: getFieldDeptTree,
|
||||
[FieldTypeEnum.DEPARTMENT_MULTIPLE]: getFieldDeptTree,
|
||||
};
|
||||
const isMultiple = computed(() =>
|
||||
[FieldTypeEnum.MEMBER_MULTIPLE, FieldTypeEnum.DEPARTMENT_MULTIPLE].includes(props.fieldConfig.type)
|
||||
);
|
||||
const dataList = ref<Record<string, any>[]>([]);
|
||||
const loading = ref(false);
|
||||
|
||||
async function loadData() {
|
||||
try {
|
||||
if (props.fieldConfig.type && sourceApi[props.fieldConfig.type]) {
|
||||
loading.value = true;
|
||||
const res = await sourceApi[props.fieldConfig.type]!();
|
||||
const tempArr: Record<string, any>[] = [];
|
||||
mapTree(res, (node) => {
|
||||
node.pathName = node.parent?.pathName
|
||||
? `${node.parent.pathName}${node.children?.length ? `/${node.name}` : ''}`
|
||||
: node.name;
|
||||
if (
|
||||
([FieldTypeEnum.MEMBER, FieldTypeEnum.MEMBER_MULTIPLE].includes(props.fieldConfig.type) &&
|
||||
node.nodeType === DeptNodeTypeEnum.USER) ||
|
||||
[FieldTypeEnum.DEPARTMENT, FieldTypeEnum.DEPARTMENT_MULTIPLE].includes(props.fieldConfig.type)
|
||||
) {
|
||||
tempArr.push({
|
||||
name: node.name,
|
||||
id: node.id,
|
||||
pathName: node.parentId === 'NONE' ? '' : node.pathName,
|
||||
});
|
||||
}
|
||||
return node;
|
||||
});
|
||||
dataList.value = tempArr;
|
||||
}
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
function onConfirm() {
|
||||
showPicker.value = false;
|
||||
fieldValue.value = pickerSelectedRows.value.map((item) => item.name).join(';');
|
||||
value.value = isMultiple.value ? pickerSelectedRows.value.map((item) => item.id) : pickerSelectedRows.value[0].id;
|
||||
emit('change', value.value);
|
||||
}
|
||||
|
||||
function onCancel() {
|
||||
pickerValue.value = Array.isArray(value.value) ? value.value : [value.value];
|
||||
showPicker.value = false;
|
||||
}
|
||||
|
||||
function selectListTransform(item: Record<string, any>) {
|
||||
return {
|
||||
...item,
|
||||
checked: pickerSelectedRows.value.some((row) => row.id === item.id),
|
||||
};
|
||||
}
|
||||
|
||||
function search() {
|
||||
crmSelectListRef.value?.filterListByKeyword('name');
|
||||
}
|
||||
|
||||
function handleClick() {
|
||||
if (props.fieldConfig.editable) {
|
||||
keyword.value = '';
|
||||
showPicker.value = true;
|
||||
nextTick(() => {
|
||||
loadData();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
watch(
|
||||
() => value.value,
|
||||
(val) => {
|
||||
pickerValue.value = Array.isArray(val) ? val : [val];
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(newVal) => {
|
||||
if (!props.needInitDetail) {
|
||||
value.value = newVal;
|
||||
fieldValue.value = (props.fieldConfig.initialOptions || [])
|
||||
.filter((e) => newVal.includes(e.id))
|
||||
.map((item) => item.name)
|
||||
.join(';');
|
||||
}
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.initialOptions,
|
||||
(newVal) => {
|
||||
pickerSelectedRows.value = newVal || [];
|
||||
fieldValue.value = (newVal || [])
|
||||
.filter((e) => (props.needInitDetail ? value.value : props.fieldConfig.defaultValue).includes(e.id))
|
||||
.map((item) => item.name)
|
||||
.join(';');
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-datasource-search {
|
||||
:deep(.van-cell) {
|
||||
&:last-child::before {
|
||||
@apply !hidden;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,116 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="displayValue"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
is-link
|
||||
readonly
|
||||
type="textarea"
|
||||
rows="1"
|
||||
autosize
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseSelect')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
@click="handleClick"
|
||||
>
|
||||
</van-field>
|
||||
<van-popup v-model:show="showPicker" destroy-on-close round position="bottom">
|
||||
<div class="flex h-[var(--van-picker-toolbar-height)] items-center justify-between">
|
||||
<CrmTextButton
|
||||
color="var(--van-picker-cancel-action-color)"
|
||||
:text="t('common.cancel')"
|
||||
class="p-[var(--van-picker-action-padding)] !text-[14px]"
|
||||
@click="showPicker = false"
|
||||
/>
|
||||
<CrmTextButton
|
||||
class="p-[var(--van-picker-action-padding)] !text-[14px]"
|
||||
:text="t('common.confirm')"
|
||||
@click="onConfirm"
|
||||
/>
|
||||
</div>
|
||||
<div class="h-[260px] overflow-auto">
|
||||
<van-checkbox-group v-model="selectedValues">
|
||||
<van-cell-group inset>
|
||||
<van-cell
|
||||
v-for="item in props.fieldConfig.options"
|
||||
:key="item.value"
|
||||
clickable
|
||||
:title="item.label"
|
||||
@click="toggle(item.value as string)"
|
||||
>
|
||||
<template #right-icon>
|
||||
<van-checkbox :name="item.value" shape="square" @click.stop />
|
||||
</template>
|
||||
</van-cell>
|
||||
</van-cell-group>
|
||||
</van-checkbox-group>
|
||||
</div>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string[]>('value', {
|
||||
default: [],
|
||||
});
|
||||
|
||||
const displayValue = computed(() => {
|
||||
return props.fieldConfig.options
|
||||
?.filter((opt) => value.value.includes(opt.value as string))
|
||||
.map((opt) => opt.label)
|
||||
.join(';');
|
||||
});
|
||||
|
||||
const showPicker = ref(false);
|
||||
const selectedValues = ref<string[]>([]);
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
if (Array.isArray(val)) {
|
||||
value.value = val;
|
||||
selectedValues.value = val;
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
function handleClick() {
|
||||
if (props.fieldConfig.editable) {
|
||||
selectedValues.value = [...value.value];
|
||||
showPicker.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
function toggle(val: string) {
|
||||
if (selectedValues.value.includes(val)) {
|
||||
selectedValues.value = selectedValues.value.filter((v) => v !== val);
|
||||
} else {
|
||||
selectedValues.value.push(val);
|
||||
}
|
||||
}
|
||||
|
||||
function onConfirm() {
|
||||
value.value = [...selectedValues.value];
|
||||
emit('change', value.value);
|
||||
showPicker.value = false;
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,92 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="fieldValue"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
is-link
|
||||
readonly
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseSelect')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@click="handleClick"
|
||||
>
|
||||
</van-field>
|
||||
<van-popup v-model:show="showPicker" destroy-on-close round position="bottom">
|
||||
<van-picker
|
||||
:model-value="[value]"
|
||||
:columns="
|
||||
props.fieldConfig.options?.map((item) => ({
|
||||
text: item.label,
|
||||
value: item.value,
|
||||
}))
|
||||
"
|
||||
@cancel="showPicker = false"
|
||||
@confirm="onConfirm"
|
||||
/>
|
||||
</van-popup>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
const showPicker = ref(false);
|
||||
const fieldValue = ref('');
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val || value.value;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => value.value,
|
||||
(val) => {
|
||||
if (props.fieldConfig.options) {
|
||||
const opt = props.fieldConfig.options.find((item) => item.value === val);
|
||||
if (opt) {
|
||||
fieldValue.value = opt.label;
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
|
||||
function onConfirm({ selectedValues, selectedOptions }: any) {
|
||||
showPicker.value = false;
|
||||
[value.value] = selectedValues;
|
||||
fieldValue.value = selectedOptions[0].text;
|
||||
emit('change', selectedValues[0]);
|
||||
}
|
||||
|
||||
function handleClick() {
|
||||
if (props.fieldConfig.editable) {
|
||||
showPicker.value = true;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,48 @@
|
||||
<template>
|
||||
<van-field
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
>
|
||||
<template #input>
|
||||
<van-radio-group
|
||||
v-model="value"
|
||||
direction="horizontal"
|
||||
class="gap-y-[8px]"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
@change="($event) => emit('change', $event)"
|
||||
>
|
||||
<van-radio v-for="item in props.fieldConfig.options" :key="item.value" :name="item.value">
|
||||
{{ item.label }}
|
||||
</van-radio>
|
||||
</van-radio-group>
|
||||
</template>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: number): void;
|
||||
}>();
|
||||
|
||||
const value = defineModel<any>('value', {
|
||||
default: null,
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val || value.value;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
@@ -0,0 +1,47 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="value"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
:maxlength="255"
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseInput')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: string): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,48 @@
|
||||
<template>
|
||||
<van-field
|
||||
v-model="value"
|
||||
type="textarea"
|
||||
:label="props.fieldConfig.showLabel ? props.fieldConfig.name : ''"
|
||||
:name="props.fieldConfig.id"
|
||||
:rules="props.fieldConfig.rules as FieldRule[]"
|
||||
:maxlength="3000"
|
||||
:placeholder="props.fieldConfig.placeholder || t('common.pleaseInput')"
|
||||
:disabled="props.fieldConfig.editable === false"
|
||||
clearable
|
||||
@update:model-value="($event) => emit('change', $event)"
|
||||
>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { FieldRule } from 'vant';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import { FormCreateField } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const props = defineProps<{
|
||||
fieldConfig: FormCreateField;
|
||||
}>();
|
||||
const emit = defineEmits<{
|
||||
(e: 'change', value: (string | number)[]): void;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const value = defineModel<string>('value', {
|
||||
default: '',
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.fieldConfig.defaultValue,
|
||||
(val) => {
|
||||
value.value = val;
|
||||
},
|
||||
{
|
||||
immediate: true,
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,7 @@
|
||||
import advancedComponents from './advanced';
|
||||
import basicComponents from './basic';
|
||||
|
||||
export default {
|
||||
basicComponents,
|
||||
advancedComponents,
|
||||
};
|
||||
@@ -0,0 +1,307 @@
|
||||
<template>
|
||||
<CrmPageWrapper :title="formCreateTitle">
|
||||
<van-form ref="formRef" class="crm-form" required="auto">
|
||||
<van-cell-group inset>
|
||||
<template v-for="item in mobileFieldList" :key="item.id">
|
||||
<component
|
||||
:is="getItemComponent(item.type)"
|
||||
v-if="item.show !== false"
|
||||
:id="item.id"
|
||||
v-model:value="formDetail[item.id]"
|
||||
:field-config="item"
|
||||
:origin-form-detail="originFormDetail"
|
||||
:form-detail="formDetail"
|
||||
:need-init-detail="route.query.needInitDetail === 'Y'"
|
||||
@change="($event: any) => handleFieldChange($event, item)"
|
||||
/>
|
||||
</template>
|
||||
</van-cell-group>
|
||||
</van-form>
|
||||
<template #footer>
|
||||
<div class="flex items-center gap-[16px]">
|
||||
<van-button
|
||||
type="default"
|
||||
class="crm-button-primary--secondary !rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
block
|
||||
:disabled="loading"
|
||||
@click="router.back"
|
||||
>
|
||||
{{ t('common.cancel') }}
|
||||
</van-button>
|
||||
<van-button
|
||||
type="primary"
|
||||
class="!rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
:loading="loading"
|
||||
block
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ route.query.needInitDetail === 'Y' ? t('common.update') : t('common.create') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</template>
|
||||
</CrmPageWrapper>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { FormInstance } from 'vant';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
|
||||
import { FieldRuleEnum, FieldTypeEnum, FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import CrmPageWrapper from '@/components/pure/crm-page-wrapper/index.vue';
|
||||
import CrmFormCreateComponents from '@/components/business/crm-form-create/components';
|
||||
|
||||
import { checkRepeat } from '@/api/modules';
|
||||
import useFormCreateApi from '@/hooks/useFormCreateApi';
|
||||
import useUserStore from '@/store/modules/user';
|
||||
|
||||
import { rules } from '@cordys/web/src/components/business/crm-form-create/config';
|
||||
import { FormCreateField, FormCreateFieldRule } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const formRef = ref<FormInstance>();
|
||||
|
||||
const lastPageParams = window.history.state.params ? JSON.parse(window.history.state.params) : null; // 获取上个页面带过来的表格查询参数
|
||||
|
||||
const {
|
||||
fieldList,
|
||||
formDetail,
|
||||
originFormDetail,
|
||||
loading,
|
||||
formCreateTitle,
|
||||
initFormConfig,
|
||||
initFormDetail,
|
||||
saveForm,
|
||||
initFormShowControl,
|
||||
} = useFormCreateApi({
|
||||
formKey: route.query.formKey as FormDesignKeyEnum,
|
||||
sourceId: ref(route.query.id as string),
|
||||
needInitDetail: route.query.needInitDetail === 'Y',
|
||||
initialSourceName: route.query.initialSourceName as string,
|
||||
otherSaveParams: lastPageParams,
|
||||
});
|
||||
|
||||
const mobileFieldList = computed(() => {
|
||||
return fieldList.value.filter((item) => item.mobile !== false);
|
||||
});
|
||||
|
||||
function getItemComponent(type: FieldTypeEnum) {
|
||||
if (type === FieldTypeEnum.INPUT) {
|
||||
return CrmFormCreateComponents.basicComponents.singleText;
|
||||
}
|
||||
if (type === FieldTypeEnum.TEXTAREA) {
|
||||
return CrmFormCreateComponents.basicComponents.textarea;
|
||||
}
|
||||
if (type === FieldTypeEnum.INPUT_NUMBER) {
|
||||
return CrmFormCreateComponents.basicComponents.inputNumber;
|
||||
}
|
||||
if (type === FieldTypeEnum.DATE_TIME) {
|
||||
return CrmFormCreateComponents.basicComponents.datePicker;
|
||||
}
|
||||
if (type === FieldTypeEnum.RADIO) {
|
||||
return CrmFormCreateComponents.basicComponents.radio;
|
||||
}
|
||||
if (type === FieldTypeEnum.CHECKBOX) {
|
||||
return CrmFormCreateComponents.basicComponents.checkbox;
|
||||
}
|
||||
if (type === FieldTypeEnum.SELECT) {
|
||||
return CrmFormCreateComponents.basicComponents.pick;
|
||||
}
|
||||
if (type === FieldTypeEnum.SELECT_MULTIPLE) {
|
||||
return CrmFormCreateComponents.basicComponents.multiplePick;
|
||||
}
|
||||
if (type === FieldTypeEnum.DIVIDER) {
|
||||
return CrmFormCreateComponents.basicComponents.divider;
|
||||
}
|
||||
if (type === FieldTypeEnum.LOCATION) {
|
||||
return CrmFormCreateComponents.advancedComponents.location;
|
||||
}
|
||||
if (type === FieldTypeEnum.PHONE) {
|
||||
return CrmFormCreateComponents.advancedComponents.phone;
|
||||
}
|
||||
if ([FieldTypeEnum.DATA_SOURCE, FieldTypeEnum.DATA_SOURCE_MULTIPLE].includes(type)) {
|
||||
return CrmFormCreateComponents.advancedComponents.dataSource;
|
||||
}
|
||||
if (type === FieldTypeEnum.SERIAL_NUMBER) {
|
||||
return CrmFormCreateComponents.advancedComponents.serialNumber;
|
||||
}
|
||||
if (
|
||||
[
|
||||
FieldTypeEnum.MEMBER,
|
||||
FieldTypeEnum.MEMBER_MULTIPLE,
|
||||
FieldTypeEnum.DEPARTMENT,
|
||||
FieldTypeEnum.DEPARTMENT_MULTIPLE,
|
||||
].includes(type)
|
||||
) {
|
||||
return CrmFormCreateComponents.basicComponents.memberSelect;
|
||||
}
|
||||
if (type === FieldTypeEnum.PICTURE) {
|
||||
return CrmFormCreateComponents.advancedComponents.upload;
|
||||
}
|
||||
if (type === FieldTypeEnum.LINK) {
|
||||
return CrmFormCreateComponents.advancedComponents.link;
|
||||
}
|
||||
if (type === FieldTypeEnum.ATTACHMENT) {
|
||||
return CrmFormCreateComponents.advancedComponents.file;
|
||||
}
|
||||
if (type === FieldTypeEnum.INDUSTRY) {
|
||||
return CrmFormCreateComponents.advancedComponents.industry;
|
||||
}
|
||||
}
|
||||
|
||||
function handleFieldChange(value: any, item: FormCreateField) {
|
||||
// 控制显示规则
|
||||
if (item.showControlRules?.length) {
|
||||
initFormShowControl();
|
||||
}
|
||||
}
|
||||
|
||||
async function handleSave() {
|
||||
try {
|
||||
await formRef.value?.validate();
|
||||
const result = cloneDeep(formDetail.value);
|
||||
mobileFieldList.value.forEach((item) => {
|
||||
if (item.type === FieldTypeEnum.DATA_SOURCE && Array.isArray(result[item.id])) {
|
||||
// 处理数据源字段,单选传单个值
|
||||
result[item.id] = result[item.id]?.[0];
|
||||
}
|
||||
if (item.type === FieldTypeEnum.PHONE) {
|
||||
// 去空格
|
||||
result[item.id] = result[item.id]?.replace(/[\s\uFEFF\xA0]+/g, '');
|
||||
}
|
||||
});
|
||||
saveForm(result, () => router.back());
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeMount(async () => {
|
||||
await initFormConfig();
|
||||
if (route.query.id && route.query.needInitDetail === 'Y') {
|
||||
initFormDetail();
|
||||
}
|
||||
});
|
||||
|
||||
function getRuleType(item: FormCreateField) {
|
||||
if (
|
||||
item.type === FieldTypeEnum.SELECT_MULTIPLE ||
|
||||
item.type === FieldTypeEnum.CHECKBOX ||
|
||||
item.type === FieldTypeEnum.INPUT_MULTIPLE ||
|
||||
item.type === FieldTypeEnum.MEMBER_MULTIPLE ||
|
||||
item.type === FieldTypeEnum.DEPARTMENT_MULTIPLE ||
|
||||
[FieldTypeEnum.DATA_SOURCE, FieldTypeEnum.DATA_SOURCE_MULTIPLE].includes(item.type) ||
|
||||
item.type === FieldTypeEnum.PICTURE ||
|
||||
item.type === FieldTypeEnum.ATTACHMENT
|
||||
) {
|
||||
return 'array';
|
||||
}
|
||||
if (item.type === FieldTypeEnum.DATE_TIME) {
|
||||
return 'date';
|
||||
}
|
||||
if (item.type === FieldTypeEnum.INPUT_NUMBER) {
|
||||
return 'number';
|
||||
}
|
||||
return 'string';
|
||||
}
|
||||
|
||||
function createValidatorRule(item: FormCreateField, rule: FormCreateFieldRule): FormCreateFieldRule | null {
|
||||
const staticRule: any = cloneDeep(rules.find((e) => e.key === rule.key));
|
||||
if (!staticRule) return null;
|
||||
|
||||
if (staticRule.key === FieldRuleEnum.UNIQUE) {
|
||||
// 唯一性校验
|
||||
staticRule.trigger = 'onBlur';
|
||||
staticRule.validator = async (value: string) => {
|
||||
if (!value.length || formDetail.value[item.id] === originFormDetail.value[item.id]) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const info = await checkRepeat({
|
||||
id: item.id,
|
||||
value,
|
||||
formKey:
|
||||
route.query.formKey !== FormDesignKeyEnum.CUSTOMER_CONTACT
|
||||
? (route.query.formKey as FormDesignKeyEnum)
|
||||
: FormDesignKeyEnum.CONTACT,
|
||||
});
|
||||
if (info.repeat) {
|
||||
return info.name.length
|
||||
? t('formCreate.repeatTip', { name: info.name })
|
||||
: t('formCreate.repeatTipWithoutName');
|
||||
}
|
||||
return true;
|
||||
};
|
||||
} else {
|
||||
staticRule.regex = rule.regex; // 正则表达式(目前没有)是配置到后台存储的,需要读取
|
||||
staticRule.message = t(staticRule.message as string, { value: t(item.name) });
|
||||
staticRule.type = getRuleType(item);
|
||||
staticRule.trigger = 'onBlur';
|
||||
if ([FieldTypeEnum.DATA_SOURCE, FieldTypeEnum.DATA_SOURCE_MULTIPLE].includes(item.type)) {
|
||||
staticRule.trigger = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
return staticRule;
|
||||
}
|
||||
|
||||
watch(
|
||||
() => mobileFieldList.value,
|
||||
() => {
|
||||
mobileFieldList.value.forEach((item) => {
|
||||
if (!formDetail.value[item.id]) {
|
||||
let defaultValue = item.defaultValue || '';
|
||||
if ([FieldTypeEnum.DATE_TIME, FieldTypeEnum.INPUT_NUMBER].includes(item.type)) {
|
||||
defaultValue = Number(defaultValue) || null;
|
||||
}
|
||||
if (getRuleType(item) === 'array') {
|
||||
defaultValue = defaultValue || [];
|
||||
}
|
||||
formDetail.value[item.id] = defaultValue;
|
||||
}
|
||||
const fullRules: FormCreateFieldRule[] = [];
|
||||
(item.rules || []).forEach((rule) => {
|
||||
const staticRule = createValidatorRule(item, rule);
|
||||
if (staticRule) {
|
||||
fullRules.push(staticRule);
|
||||
}
|
||||
});
|
||||
item.rules = fullRules;
|
||||
if ([FieldTypeEnum.MEMBER, FieldTypeEnum.MEMBER_MULTIPLE].includes(item.type) && item.hasCurrentUser) {
|
||||
item.defaultValue = userStore.userInfo.id;
|
||||
item.initialOptions = [
|
||||
...(item.initialOptions || []),
|
||||
{
|
||||
id: userStore.userInfo.id,
|
||||
name: userStore.userInfo.name,
|
||||
},
|
||||
].filter((option, index, self) => self.findIndex((o) => o.id === option.id) === index);
|
||||
} else if (
|
||||
[FieldTypeEnum.DEPARTMENT, FieldTypeEnum.DEPARTMENT_MULTIPLE].includes(item.type) &&
|
||||
item.hasCurrentUserDept
|
||||
) {
|
||||
item.defaultValue = userStore.userInfo.departmentId;
|
||||
item.initialOptions = [
|
||||
...(item.initialOptions || []),
|
||||
{
|
||||
id: userStore.userInfo.departmentId,
|
||||
name: userStore.userInfo.departmentName,
|
||||
},
|
||||
].filter((option, index, self) => self.findIndex((o) => o.id === option.id) === index);
|
||||
}
|
||||
});
|
||||
nextTick(() => {
|
||||
initFormShowControl();
|
||||
});
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
'formCreate.createTitle': 'Create {name}',
|
||||
'formCreate.editTitle': 'Update {name}',
|
||||
'formCreate.customer': 'Account',
|
||||
'formCreate.contract': 'Contact',
|
||||
'formCreate.business': 'Opportunity',
|
||||
'formCreate.product': 'Product',
|
||||
'formCreate.clue': 'Lead',
|
||||
'formCreate.member': 'Member',
|
||||
'formCreate.department': 'Department',
|
||||
'formCreate.price': 'Price Table',
|
||||
'formCreate.quotation': 'Quotation Table',
|
||||
'formCreate.order': 'Order',
|
||||
'formCreate.invoice': 'Invoice',
|
||||
'formCreate.pickDate': 'Pick Date',
|
||||
'formCreate.pickTime': 'Pick Time',
|
||||
'formCreate.next': 'Next',
|
||||
'formCreate.phone.area.china': 'China',
|
||||
'formCreate.phone.area.hongKong': 'Hong Kong, China',
|
||||
'formCreate.phone.area.macau': 'Macau, China',
|
||||
'formCreate.phone.area.taiwan': 'Taiwan, China',
|
||||
'formCreate.phone.lengthValidator': 'Please enter the {count} digit phone number',
|
||||
'formCreate.phone.area.other': 'Other',
|
||||
'formCreate.phone.formatValidator': 'Please enter the phone number in the correct format',
|
||||
'formCreate.repeatTip': 'Duplicate with {name}',
|
||||
'formCreate.repeatTipWithoutName': 'There are duplicate values in the system',
|
||||
'formCreate.upload.repeatFileTip': 'File is duplicated',
|
||||
'formCreate.advanced.overSize': 'File size limit is {size} MB, please re-select the file',
|
||||
'formCreate.advanced.selectLocation': 'Please select an address',
|
||||
'formCreate.advanced.inputLocationDetail': 'Please enter detailed address',
|
||||
'formCreate.advanced.anyType': 'any format',
|
||||
'formCreate.advanced.uploadFileTip': 'Supports {type}, single file size within {size}',
|
||||
'formCreate.advanced.limitCount': ', maximum limit is {count}',
|
||||
'formCreate.advanced.selectIndustry': 'Please select an industry',
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
export default {
|
||||
'formCreate.createTitle': '新建{name}',
|
||||
'formCreate.editTitle': '更新{name}',
|
||||
'formCreate.customer': '客户',
|
||||
'formCreate.contract': '联系人',
|
||||
'formCreate.business': '商机',
|
||||
'formCreate.product': '产品',
|
||||
'formCreate.clue': '线索',
|
||||
'formCreate.member': '成员',
|
||||
'formCreate.department': '部门',
|
||||
'formCreate.price': '价格表',
|
||||
'formCreate.quotation': '报价',
|
||||
'formCreate.order': '订单',
|
||||
'formCreate.invoice': '发票',
|
||||
'formCreate.pickDate': '选择日期',
|
||||
'formCreate.pickTime': '选择时间',
|
||||
'formCreate.next': '下一步',
|
||||
'formCreate.phone.area.china': '中国',
|
||||
'formCreate.phone.area.hongKong': '中国香港',
|
||||
'formCreate.phone.area.macau': '中国澳门',
|
||||
'formCreate.phone.area.taiwan': '中国台湾',
|
||||
'formCreate.phone.lengthValidator': '请输入 {count} 位手机号',
|
||||
'formCreate.phone.area.other': '其它',
|
||||
'formCreate.phone.formatValidator': '请输入正确格式的手机号',
|
||||
'formCreate.repeatTip': '与 {name} 重复',
|
||||
'formCreate.repeatTipWithoutName': '系统中存在重复值',
|
||||
'formCreate.upload.repeatFileTip': '文件重复',
|
||||
'formCreate.advanced.overSize': '文件大小限制为 {size} MB,请重新选择文件',
|
||||
'formCreate.advanced.selectLocation': '请选择地址',
|
||||
'formCreate.advanced.inputLocationDetail': '请输入详细地址',
|
||||
'formCreate.advanced.anyType': '任意格式',
|
||||
'formCreate.advanced.uploadFileTip': '支持 {type},单个大小 {size} 以内',
|
||||
'formCreate.advanced.limitCount': ',最大限制 {count} 个',
|
||||
'formCreate.advanced.selectIndustry': '请选择行业',
|
||||
};
|
||||
@@ -0,0 +1,86 @@
|
||||
<template>
|
||||
<div class="flex h-full flex-col overflow-hidden bg-[var(--text-n9)]">
|
||||
<div class="bg-[var(--text-n10)] p-[8px_16px]">
|
||||
<van-search
|
||||
v-model="keyword"
|
||||
shape="round"
|
||||
:placeholder="t('customer.searchPlaceholder')"
|
||||
class="crm-search"
|
||||
@search="search"
|
||||
@clear="search"
|
||||
/>
|
||||
</div>
|
||||
<CrmList
|
||||
ref="crmListRef"
|
||||
:keyword="keyword"
|
||||
:list-params="{ sourceId: props.sourceId }"
|
||||
:load-list-api="loadListApi"
|
||||
class="p-[16px]"
|
||||
no-page-nation
|
||||
:item-gap="16"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<div
|
||||
class="flex w-full items-center gap-[16px] rounded-[var(--border-radius-small)] bg-[var(--text-n10)] p-[16px]"
|
||||
>
|
||||
<CrmAvatar :text="item.ownerName" />
|
||||
<div class="flex flex-1 flex-col gap-[2px] overflow-hidden">
|
||||
<div class="flex justify-between">
|
||||
<div class="one-line-text flex-1 text-[16px] text-[var(--text-n1)]">{{ item.ownerName }}</div>
|
||||
<CrmTag
|
||||
v-show="item.departmentName?.length"
|
||||
:tag="item.departmentName"
|
||||
color="var(--text-n9)"
|
||||
text-color="var(--text-n1)"
|
||||
class="one-line-text max-w-[50%] rounded-[var(--border-radius-small)] !p-[2px_6px]"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<span class="text-[12px] text-[var(--text-n4)]"> {{ t('header.attributionPeriod') }}</span>
|
||||
<span class="ml-[8px] text-[12px] text-[var(--text-n2)]">
|
||||
{{
|
||||
`${dayjs(item.collectionTime).format('YYYY-MM-DD')} ${t('common.to')} ${dayjs(item.endTime).format(
|
||||
'YYYY-MM-DD'
|
||||
)} `
|
||||
}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</CrmList>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import type { CustomerContractTableParams, HeaderHistoryItem } from '@lib/shared/models/customer';
|
||||
|
||||
import CrmList from '@/components/pure/crm-list/index.vue';
|
||||
import CrmTag from '@/components/pure/crm-tag/index.vue';
|
||||
import CrmAvatar from '@/components/business/crm-avatar/index.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
loadListApi: (data: CustomerContractTableParams) => Promise<HeaderHistoryItem>;
|
||||
sourceId: string; // 资源id
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const crmListRef = ref<InstanceType<typeof CrmList>>();
|
||||
const keyword = ref('');
|
||||
|
||||
function search() {
|
||||
nextTick(() => {
|
||||
crmListRef.value?.filterListByKeyword('ownerName');
|
||||
});
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
search();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,3 @@
|
||||
export default {
|
||||
'header.attributionPeriod': 'Attribution period',
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export default {
|
||||
'header.attributionPeriod': '归属周期',
|
||||
};
|
||||
@@ -0,0 +1,112 @@
|
||||
<template>
|
||||
<div class="crm-message-item">
|
||||
<div class="mb-[4px] flex flex-nowrap items-center justify-between">
|
||||
<div class="flex w-[calc(100%-60px)] flex-nowrap items-center gap-[4px]">
|
||||
<van-tag
|
||||
:color="isSystemMessage ? 'var(--info-5)' : 'var(--warning-5)'"
|
||||
:text-color="isSystemMessage ? 'var(--info-blue)' : 'var(--warning-yellow)'"
|
||||
class="flex-shrink-0 !p-[2px_8px]"
|
||||
>
|
||||
{{ item.type === SystemMessageTypeEnum.SYSTEM_NOTICE ? t('common.system') : t('common.announcementMessage') }}
|
||||
</van-tag>
|
||||
<div class="flex max-w-[calc(100%-40px)] items-center">
|
||||
<van-badge :dot="item.status === SystemMessageStatusEnum.UNREAD" class="w-full">
|
||||
<div
|
||||
:class="` one-line-text w-full crm-message-item-title--${
|
||||
item.status === SystemMessageStatusEnum.UNREAD ? 'normal' : 'read'
|
||||
} font-medium`"
|
||||
>
|
||||
{{
|
||||
item.type === SystemMessageTypeEnum.SYSTEM_NOTICE ? t('common.systemNotification') : item.subject ?? '-'
|
||||
}}
|
||||
</div>
|
||||
</van-badge>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="props.item.status === SystemMessageStatusEnum.UNREAD"
|
||||
class="flex-shrink-0 text-[var(--primary-8)]"
|
||||
@click="setMessageRead"
|
||||
>
|
||||
{{ t('common.signRead') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex flex-col gap-[4px] text-[12px]">
|
||||
<div :class="`break-words message-title--${item.status === SystemMessageStatusEnum.UNREAD ? 'normal' : 'read'}`">
|
||||
{{ item.type === SystemMessageTypeEnum.SYSTEM_NOTICE ? item.contentText : parseMessageContent?.content ?? '-' }}
|
||||
<span
|
||||
v-if="item.type === SystemMessageTypeEnum.ANNOUNCEMENT_NOTICE"
|
||||
class="ml-[8px] cursor-pointer text-[var(--primary-8)]"
|
||||
@click="goUrl"
|
||||
>
|
||||
{{ parseMessageContent?.renameUrl ?? parseMessageContent?.url }}
|
||||
</span>
|
||||
</div>
|
||||
<div class="text-[var(--text-n2)]">
|
||||
{{ dayjs(item.createTime).format('YYYY-MM-DD HH:mm:ss') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import dayjs from 'dayjs';
|
||||
|
||||
import { SystemMessageStatusEnum, SystemMessageTypeEnum } from '@lib/shared/enums/systemEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { openDocumentLink } from '@lib/shared/method/index';
|
||||
import type { MessageCenterItem } from '@lib/shared/models/system/message';
|
||||
|
||||
import { setNotificationRead } from '@/api/modules';
|
||||
import useAppStore from '@/store/modules/app';
|
||||
|
||||
const appStore = useAppStore();
|
||||
const { t } = useI18n();
|
||||
|
||||
const props = defineProps<{
|
||||
item: MessageCenterItem;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'loadList'): void;
|
||||
}>();
|
||||
|
||||
const isSystemMessage = computed(() => props.item.type === SystemMessageTypeEnum.SYSTEM_NOTICE);
|
||||
|
||||
const parseMessageContent = computed(() => JSON.parse(props.item.contentText || '{}'));
|
||||
|
||||
// TODO 跳转过去可能回不来要加提示
|
||||
function goUrl() {
|
||||
const url = parseMessageContent.value?.url;
|
||||
if (url) {
|
||||
openDocumentLink(url);
|
||||
}
|
||||
}
|
||||
|
||||
async function setMessageRead() {
|
||||
if (props.item.status === SystemMessageStatusEnum.READ) return;
|
||||
try {
|
||||
await setNotificationRead(props.item.id);
|
||||
appStore.initMessage();
|
||||
emit('loadList');
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-message-item {
|
||||
padding: 12px 20px;
|
||||
.half-px-border-bottom();
|
||||
}
|
||||
.crm-message-item-title {
|
||||
&--normal {
|
||||
color: var(--text-n1);
|
||||
}
|
||||
&--read {
|
||||
color: var(--text-n4);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,154 @@
|
||||
<template>
|
||||
<CrmList
|
||||
v-if="props.multiple"
|
||||
ref="crmListRef"
|
||||
v-model:model-value="list"
|
||||
v-model:loading="loading"
|
||||
:keyword="props.keyword"
|
||||
:list-params="props.listParams"
|
||||
:load-list-api="props.loadListApi"
|
||||
:transform="props.transform"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<van-checkbox v-model="item.checked" :disabled="item.disabled" @change="handleChange">
|
||||
<slot name="label" :item="item">{{ item.name }}</slot>
|
||||
</van-checkbox>
|
||||
</template>
|
||||
</CrmList>
|
||||
<van-radio-group v-else v-model:model-value="value" shape="dot" class="h-full" @change="handleChange">
|
||||
<CrmList
|
||||
ref="crmListRef"
|
||||
v-model:model-value="list"
|
||||
v-model:loading="loading"
|
||||
:keyword="props.keyword"
|
||||
:list-params="props.listParams"
|
||||
:load-list-api="props.loadListApi"
|
||||
:no-page-nation="props.noPageNation"
|
||||
:transform="props.transform"
|
||||
>
|
||||
<template #item="{ item }">
|
||||
<van-radio :name="item.id" :disabled="item.disabled">
|
||||
<slot name="label" :item="item">{{ item.name }}</slot>
|
||||
</van-radio>
|
||||
</template>
|
||||
</CrmList>
|
||||
</van-radio-group>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { CommonList, TableQueryParams } from '@lib/shared/models/common';
|
||||
|
||||
import CrmList from '@/components/pure/crm-list/index.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
data?: Record<string, any>[];
|
||||
keyword?: string;
|
||||
multiple?: boolean;
|
||||
listParams?: Record<string, any>;
|
||||
noPageNation?: boolean;
|
||||
loadListApi?: (params: TableQueryParams) => Promise<CommonList<Record<string, any>>>;
|
||||
transform?: (item: Record<string, any>, optionMap?: Record<string, any[]>) => Record<string, any>;
|
||||
}>();
|
||||
|
||||
const value = defineModel<string | string[]>('value', {
|
||||
default: '',
|
||||
});
|
||||
const selectedRows = defineModel<Record<string, any>[]>('selectedRows', {
|
||||
default: [],
|
||||
});
|
||||
const loading = defineModel<boolean>('loading', {
|
||||
default: false,
|
||||
});
|
||||
|
||||
const list = ref<Record<string, any>[]>([]);
|
||||
const crmListRef = ref<InstanceType<typeof CrmList>>();
|
||||
|
||||
const selectedMap = ref<Map<string, Record<string, any>>>(new Map()); // 用 Map 来存储所有已选行,避免被过滤掉
|
||||
|
||||
function handleChange() {
|
||||
if (props.multiple) {
|
||||
list.value.forEach((item) => {
|
||||
if (item.checked) {
|
||||
selectedMap.value.set(item.id, item);
|
||||
} else {
|
||||
selectedMap.value.delete(item.id);
|
||||
}
|
||||
});
|
||||
selectedRows.value = Array.from(selectedMap.value.values());
|
||||
value.value = selectedRows.value.map((e) => e.id);
|
||||
} else {
|
||||
selectedRows.value = list.value.filter((e) => e.id === value.value);
|
||||
}
|
||||
}
|
||||
|
||||
function loadList(refresh = false) {
|
||||
crmListRef.value?.loadList(refresh);
|
||||
}
|
||||
|
||||
function filterListByKeyword(keywordKey: string) {
|
||||
crmListRef.value?.filterListByKeyword(keywordKey);
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
if (!props.multiple && Array.isArray(value.value)) {
|
||||
[value.value] = value.value;
|
||||
}
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
if (!props.multiple) {
|
||||
// 单选容器包裹 list 组件导致创建 list 组件时不会触发组件初始化加载,需要手动调用一下
|
||||
nextTick(() => {
|
||||
loadList(true);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
watch(
|
||||
() => props.data,
|
||||
(newData) => {
|
||||
list.value = newData || [];
|
||||
|
||||
list.value.forEach((item) => {
|
||||
item.checked = selectedMap.value.has(item.id);
|
||||
});
|
||||
|
||||
if (!props.loadListApi) {
|
||||
nextTick(() => {
|
||||
loadList(true);
|
||||
});
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
defineExpose({
|
||||
loadList,
|
||||
filterListByKeyword,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
:deep(.van-radio):not(:first-child) {
|
||||
.half-px-border-top();
|
||||
}
|
||||
:deep(.van-radio) {
|
||||
@apply overflow-visible;
|
||||
.van-radio__label,
|
||||
.van-checkbox__label {
|
||||
@apply w-full;
|
||||
|
||||
padding: 16px 16px 16px 0;
|
||||
}
|
||||
}
|
||||
:deep(.van-checkbox) {
|
||||
&:not(:first-child) {
|
||||
.half-px-border-top();
|
||||
}
|
||||
.van-checkbox__label {
|
||||
@apply w-full;
|
||||
|
||||
padding: 16px 16px 16px 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,315 @@
|
||||
<template>
|
||||
<div class="crm-workflow-wrapper">
|
||||
<div class="flex items-center justify-between">
|
||||
<div class="font-semibold text-[var(--text-n1)]"> {{ props.title }}</div>
|
||||
<div
|
||||
v-if="
|
||||
currentStageIndex !== workflowList.length - 1 &&
|
||||
hasAnyPermission(props.operationPermission) &&
|
||||
!props.readonly
|
||||
"
|
||||
class="flex items-center gap-[8px]"
|
||||
>
|
||||
<van-button v-if="props.showErrorBtn" plain type="danger" size="small" @click="handleUpdateStage(failureStage)">
|
||||
{{ t('common.followFailed') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="crm-workflow-step overflow-x-auto">
|
||||
<div
|
||||
v-for="(item, index) of workflowList"
|
||||
:key="item.value"
|
||||
:class="`crm-workflow-item ${index === workflowList.length - 1 ? '' : 'flex-1'} ${
|
||||
workflowList.length === 1 ? 'pl-[16px]' : ''
|
||||
}`"
|
||||
>
|
||||
<div class="relative -left-[16px] flex flex-nowrap items-center justify-center">
|
||||
<div
|
||||
class="crm-workflow-item-line"
|
||||
:class="{
|
||||
'in-progress': index <= currentStageIndex,
|
||||
'invisible': index === 0,
|
||||
'visible': index !== 0,
|
||||
}"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
class="crm-workflow-item-status mx-[8px]"
|
||||
:class="statusClass(index, item)"
|
||||
@click="handleUpdateStage(item.value)"
|
||||
>
|
||||
<CrmIcon
|
||||
v-if="index < currentStageIndex || item.value === failureStage"
|
||||
:name="item.value === failureStage ? 'iconicon_close' : 'iconicon_check'"
|
||||
width="16px"
|
||||
height="16px"
|
||||
:color="
|
||||
item.value === failureStage && currentStage === failureStage ? 'var(--error-red)' : 'var(--primary-8)'
|
||||
"
|
||||
/>
|
||||
<div v-else class="flex items-center justify-center">
|
||||
{{ index + 1 }}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="crm-workflow-item-line"
|
||||
:class="{
|
||||
'in-progress': index < currentStageIndex,
|
||||
'invisible': index === workflowList.length - 1,
|
||||
'visible': index !== workflowList.length - 1,
|
||||
}"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="crm-workflow-item-name one-line-text relative -left-[16px]" :class="statusClass(index, item)">
|
||||
{{
|
||||
item.value === failureStage && props.failureReason ? `${item.label}(${props.failureReason})` : item.label
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRouter } from 'vue-router';
|
||||
import { closeToast, showLoadingToast, showSuccessToast } from 'vant';
|
||||
|
||||
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { ReasonTypeEnum } from '@lib/shared/enums/moduleEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { StageConfigItem } from '@lib/shared/models/opportunity';
|
||||
|
||||
import CrmIcon from '@/components/pure/crm-icon-font/index.vue';
|
||||
|
||||
import { getReasonConfig, updateClueStatus, updateOptStage } from '@/api/modules';
|
||||
import { hasAllPermission, hasAnyPermission } from '@/utils/permission';
|
||||
|
||||
import { CommonRouteEnum } from '@/enums/routeEnum';
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
export interface Options {
|
||||
value: string;
|
||||
label: string;
|
||||
}
|
||||
|
||||
export type WorkStageTypeKey = FormDesignKeyEnum.BUSINESS | FormDesignKeyEnum.CLUE;
|
||||
|
||||
const props = defineProps<{
|
||||
title: string;
|
||||
stageConfigList: StageConfigItem[]; // 阶段列表
|
||||
sourceId: string; // 资源id
|
||||
showConfirmStatus?: boolean; // 是否二次确认更新成功 | 成败
|
||||
formStageKey: WorkStageTypeKey;
|
||||
operationPermission?: string[];
|
||||
showErrorBtn?: boolean;
|
||||
readonly?: boolean;
|
||||
isLimitBack?: boolean; // 是否限制状态往返
|
||||
backStagePermission?: string[];
|
||||
failureReason?: string; // 失败原因
|
||||
afootRollBack?: boolean; // 是否允许从跟进中回退
|
||||
endRollBack?: boolean; // 是否允许从成功或失败回退
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'loadDetail'): void;
|
||||
}>();
|
||||
|
||||
const currentStage = defineModel<string>('stage');
|
||||
|
||||
const updateStageApi = {
|
||||
[FormDesignKeyEnum.BUSINESS]: updateOptStage,
|
||||
[FormDesignKeyEnum.CLUE]: updateClueStatus,
|
||||
};
|
||||
|
||||
const workflowList = computed<Options[]>(() => {
|
||||
return props.stageConfigList.map((item) => ({
|
||||
label: item.name,
|
||||
value: item.id,
|
||||
}));
|
||||
});
|
||||
const enableReason = ref(false);
|
||||
const currentStageIndex = computed(() => workflowList.value.findIndex((e) => e.value === currentStage.value));
|
||||
const failureStage = computed(() => props.stageConfigList.find((e) => e.type === 'END' && e.rate === '0')?.id || '');
|
||||
const successStage = computed(
|
||||
() => props.stageConfigList.find((e) => e.type === 'END' && e.rate === '100')?.id || ''
|
||||
);
|
||||
|
||||
function statusClass(index: number, item: Options) {
|
||||
return {
|
||||
done: index < currentStageIndex.value && item.value !== failureStage.value,
|
||||
current: index === currentStageIndex.value && item.value !== failureStage.value,
|
||||
error: currentStage.value === failureStage.value && item.value === failureStage.value,
|
||||
};
|
||||
}
|
||||
|
||||
const isHasBackPermission = computed(
|
||||
() =>
|
||||
props.backStagePermission &&
|
||||
hasAllPermission(props.backStagePermission) &&
|
||||
currentStage.value === successStage.value
|
||||
);
|
||||
|
||||
async function handleSave(stage: string) {
|
||||
try {
|
||||
showLoadingToast(t('common.updating'));
|
||||
await updateStageApi[props.formStageKey]({
|
||||
id: props.sourceId,
|
||||
stage,
|
||||
});
|
||||
showSuccessToast(t('common.operationSuccess'));
|
||||
emit('loadDetail');
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
} finally {
|
||||
closeToast();
|
||||
}
|
||||
}
|
||||
|
||||
const readonly = computed(() => props.readonly || !hasAnyPermission(props.operationPermission));
|
||||
|
||||
const isDisabledStage = (stage: string) => {
|
||||
const isSameStage = currentStage.value === stage;
|
||||
const isFailureStage = stage === failureStage.value;
|
||||
const isCurrentEndStage = currentStage.value === successStage.value || currentStage.value === failureStage.value;
|
||||
|
||||
const hasPermission = props.backStagePermission && hasAllPermission(props.backStagePermission);
|
||||
|
||||
// 获取当前阶段和目标阶段在流程中的索引
|
||||
const currentIndex = workflowList.value.findIndex((item) => item.value === currentStage.value);
|
||||
const targetIndex = workflowList.value.findIndex((item) => item.value === stage);
|
||||
// 限制回退状态
|
||||
if (props.isLimitBack) {
|
||||
// 当前为成功状态,且目标为失败状态,需要返签权限
|
||||
if (currentStage.value === successStage.value && isFailureStage) {
|
||||
return isSameStage || readonly.value || !hasPermission;
|
||||
}
|
||||
// 当前为完结状态,且目标是进行中状态,需要开启完结阶段回退
|
||||
if (currentStage.value === successStage.value || currentStage.value === failureStage.value) {
|
||||
return isSameStage || readonly.value || !props.endRollBack;
|
||||
}
|
||||
// 当前处于进行中阶段时的处理逻辑
|
||||
if (!isCurrentEndStage) {
|
||||
// 开启则不限制
|
||||
if (props.afootRollBack) {
|
||||
return isSameStage || readonly.value;
|
||||
}
|
||||
// 允许前进到当前阶段的后边的任意阶段 无论是进行中、成功或失败)
|
||||
return isSameStage || readonly.value || targetIndex < currentIndex;
|
||||
}
|
||||
} else {
|
||||
// 不限制回退状态
|
||||
return isSameStage || readonly.value;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
// 更新状态
|
||||
async function handleUpdateStage(stage: string) {
|
||||
if (isDisabledStage(stage)) return;
|
||||
|
||||
if (
|
||||
props.showConfirmStatus &&
|
||||
stage === workflowList.value[workflowList.value.length - 1].value &&
|
||||
enableReason.value
|
||||
) {
|
||||
router.push({
|
||||
name: CommonRouteEnum.WORKFLOW_STAGE,
|
||||
query: {
|
||||
id: props.sourceId,
|
||||
type: props.formStageKey,
|
||||
lastName: workflowList.value[workflowList.value.length - 1].label,
|
||||
isHasBack: isHasBackPermission.value ? 'Y' : 'N',
|
||||
},
|
||||
});
|
||||
return;
|
||||
}
|
||||
await handleSave(stage);
|
||||
}
|
||||
|
||||
async function initReason() {
|
||||
try {
|
||||
const res = await getReasonConfig(ReasonTypeEnum.OPPORTUNITY_FAIL_RS);
|
||||
enableReason.value = res.enable;
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
initReason();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
.crm-workflow-wrapper {
|
||||
padding: 16px;
|
||||
border-radius: @border-radius-large;
|
||||
background: var(--text-n10);
|
||||
.crm-workflow-step {
|
||||
padding: 16px 0;
|
||||
border-radius: var(--border-radius-medium);
|
||||
|
||||
@apply flex flex-nowrap justify-start;
|
||||
.crm-workflow-item {
|
||||
gap: 8px;
|
||||
@apply flex flex-col;
|
||||
.crm-workflow-item-status {
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
line-height: 22px;
|
||||
border: 1px solid var(--text-n4);
|
||||
border-radius: 50%;
|
||||
color: var(--text-n4);
|
||||
@apply flex flex-shrink-0 items-center justify-center font-semibold;
|
||||
&.current {
|
||||
border-color: var(--primary-8);
|
||||
color: var(--text-n10);
|
||||
background: var(--primary-8);
|
||||
}
|
||||
&.done {
|
||||
border-color: var(--primary-7);
|
||||
color: var(--primary-8);
|
||||
background: var(--primary-7);
|
||||
}
|
||||
&.error {
|
||||
border-color: var(--error-red);
|
||||
color: var(--error-red);
|
||||
}
|
||||
}
|
||||
.crm-workflow-item-name {
|
||||
min-width: 78px;
|
||||
color: var(--text-n4);
|
||||
@apply flex w-auto items-center justify-center font-medium;
|
||||
&.current {
|
||||
color: var(--primary-8);
|
||||
@apply font-medium;
|
||||
}
|
||||
&.done {
|
||||
border-color: var(--primary-8);
|
||||
color: var(--text-n1);
|
||||
@apply font-normal;
|
||||
}
|
||||
&.error {
|
||||
color: var(--error-red);
|
||||
@apply font-medium;
|
||||
}
|
||||
}
|
||||
.crm-workflow-item-line {
|
||||
width: auto;
|
||||
min-width: 20px;
|
||||
height: 2px;
|
||||
background: var(--text-n7);
|
||||
|
||||
@apply flex-1;
|
||||
&.in-progress {
|
||||
background: var(--primary-8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,164 @@
|
||||
<template>
|
||||
<CrmPageWrapper :title="route.query.lastName?.toString() || ''">
|
||||
<van-form ref="formRef" required>
|
||||
<van-cell-group inset>
|
||||
<!-- <van-field
|
||||
v-model="form.expectedEndTime"
|
||||
is-link
|
||||
name="datePicker"
|
||||
:label="t('opportunity.endTime')"
|
||||
:placeholder="t('opportunity.selectActualEndTime')"
|
||||
:rules="[{ required: true, message: t('common.notNull', { value: `${t('opportunity.endTime')}` }) }]"
|
||||
@click="selectExpectedEndTime"
|
||||
/>
|
||||
<van-popup v-model:show="showEndTimePicker" destroy-on-close position="bottom">
|
||||
<van-date-picker v-model="currentDate" @confirm="onSelectDateConfirm" @cancel="showEndTimePicker = false" />
|
||||
</van-popup> -->
|
||||
<van-field
|
||||
v-model="form.failureReason"
|
||||
is-link
|
||||
name="picker"
|
||||
:label="t('opportunity.failureReason')"
|
||||
:placeholder="t('opportunity.selectFailureReason')"
|
||||
:rules="[{ required: true, message: t('common.notNull', { value: `${t('opportunity.failureReason')}` }) }]"
|
||||
@click="showReasonPicker = true"
|
||||
/>
|
||||
<van-popup v-model:show="showReasonPicker" destroy-on-close position="bottom">
|
||||
<van-picker
|
||||
v-model="currentReason"
|
||||
:columns="reasonList"
|
||||
@cancel="() => (showReasonPicker = false)"
|
||||
@confirm="onSelectReasonConfirm"
|
||||
/>
|
||||
</van-popup>
|
||||
</van-cell-group>
|
||||
</van-form>
|
||||
<template #footer>
|
||||
<div class="flex items-center gap-[16px]">
|
||||
<van-button
|
||||
type="default"
|
||||
class="crm-button-primary--secondary !rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
block
|
||||
:disabled="loading"
|
||||
@click="router.back"
|
||||
>
|
||||
{{ t('common.cancel') }}
|
||||
</van-button>
|
||||
<van-button
|
||||
type="primary"
|
||||
class="!rounded-[var(--border-radius-small)] !text-[16px]"
|
||||
:loading="loading"
|
||||
block
|
||||
@click="handleSave"
|
||||
>
|
||||
{{ t('common.confirm') }}
|
||||
</van-button>
|
||||
</div>
|
||||
</template>
|
||||
</CrmPageWrapper>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { FormInstance, PickerOption, showSuccessToast } from 'vant';
|
||||
|
||||
import { FormDesignKeyEnum } from '@lib/shared/enums/formDesignEnum';
|
||||
import { ReasonTypeEnum } from '@lib/shared/enums/moduleEnum';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import type { OpportunityStageConfig, UpdateStageParams } from '@lib/shared/models/opportunity';
|
||||
|
||||
import CrmPageWrapper from '@/components/pure/crm-page-wrapper/index.vue';
|
||||
|
||||
import { getOpportunityStageConfig, getReasonConfig, updateClueStatus, updateOptStage } from '@/api/modules';
|
||||
|
||||
import type { WorkStageTypeKey } from './index.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
const updateStageApi: Record<WorkStageTypeKey, (params: UpdateStageParams) => Promise<any>> = {
|
||||
[FormDesignKeyEnum.BUSINESS]: updateOptStage,
|
||||
[FormDesignKeyEnum.CLUE]: updateClueStatus,
|
||||
};
|
||||
|
||||
const stageConfig = ref<OpportunityStageConfig>();
|
||||
async function initStageConfig() {
|
||||
try {
|
||||
stageConfig.value = await getOpportunityStageConfig();
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
const failureStage = computed(() =>
|
||||
stageConfig.value?.stageConfigList.find((e) => e.type === 'END' && e.rate === '0')
|
||||
);
|
||||
const enableReason = ref(false);
|
||||
const reasonList = ref<PickerOption[]>([]);
|
||||
|
||||
const form = ref<{
|
||||
stage: string;
|
||||
failureReason?: string;
|
||||
}>({
|
||||
stage: failureStage.value?.id || '',
|
||||
failureReason: '',
|
||||
});
|
||||
|
||||
const showReasonPicker = ref(false);
|
||||
const currentReason = ref<string[]>([]);
|
||||
function onSelectReasonConfirm({
|
||||
selectedValues,
|
||||
selectedOptions,
|
||||
}: {
|
||||
selectedValues: string[];
|
||||
selectedOptions: { value: string; text: string }[];
|
||||
}) {
|
||||
form.value.failureReason = selectedOptions[0]?.text;
|
||||
currentReason.value = selectedValues;
|
||||
showReasonPicker.value = false;
|
||||
}
|
||||
|
||||
const formRef = ref<FormInstance>();
|
||||
const loading = ref(false);
|
||||
async function handleSave() {
|
||||
try {
|
||||
if (enableReason.value) {
|
||||
await formRef.value?.validate();
|
||||
}
|
||||
loading.value = true;
|
||||
const stageType = route.query.type as WorkStageTypeKey;
|
||||
await updateStageApi[stageType]({
|
||||
id: route.query.id as string,
|
||||
stage: form.value.stage || failureStage.value?.id || '',
|
||||
failureReason: form.value.stage === failureStage.value?.id ? currentReason.value[0] : undefined,
|
||||
});
|
||||
showSuccessToast(t('common.operationSuccess'));
|
||||
router.back();
|
||||
} catch (error) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(error);
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
async function initReason() {
|
||||
try {
|
||||
const { dictList, enable } = await getReasonConfig(ReasonTypeEnum.OPPORTUNITY_FAIL_RS);
|
||||
enableReason.value = enable;
|
||||
reasonList.value = dictList.map((e) => ({ text: e.name, value: e.id }));
|
||||
} catch (e) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(e);
|
||||
}
|
||||
}
|
||||
|
||||
onBeforeMount(() => {
|
||||
initReason();
|
||||
initStageConfig();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
@@ -0,0 +1,131 @@
|
||||
<template>
|
||||
<van-cell-group inset class="h-full">
|
||||
<div class="crm-description flex h-full flex-col gap-[8px] overflow-auto px-[20px] py-[16px]">
|
||||
<div v-for="item of props.description" :key="item.label" class="crm-description-item">
|
||||
<slot :name="item.slotName" :item="item">
|
||||
<div v-if="item.isTitle" class="crm-description-title">{{ item.label }}</div>
|
||||
<template v-else>
|
||||
<div class="crm-description-label">{{ item.label }}</div>
|
||||
<div class="crm-description-value">
|
||||
<slot :name="item.valueSlotName" :item="item">
|
||||
<template v-if="item.isImage">
|
||||
<div v-if="(item.value as string[])?.length === 0">-</div>
|
||||
<template v-else>
|
||||
<van-image
|
||||
v-for="img of item.value"
|
||||
:key="img as string"
|
||||
width="40"
|
||||
height="40"
|
||||
:src="`${PreviewPictureUrl}/${img}`"
|
||||
@click="
|
||||
() => {
|
||||
showImagePreview({
|
||||
images: (item.value as string[]).map((img) => `${PreviewPictureUrl}/${img}`),
|
||||
closeable: true,
|
||||
startPosition: (item.value as string[]).findIndex((image) => image === img),
|
||||
});
|
||||
}
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
</template>
|
||||
<div v-else-if="item.isAttachment" class="text-[var(--primary-8)]" @click="handleAttachmentClick(item)">
|
||||
{{ t('crm.description.attachment', { count: (item.value as any[])?.length }) }}
|
||||
</div>
|
||||
<div v-else-if="item.isLink" class="text-[var(--primary-8)]" @click="openLink(item)">
|
||||
{{ item.value }}
|
||||
</div>
|
||||
<CrmTag v-else-if="Array.isArray(item.value) && item.value?.length" :tag="item.value as any || ''" />
|
||||
<div v-else>{{ getDisplayValue(item.value as string) }}</div>
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
</slot>
|
||||
</div>
|
||||
</div>
|
||||
</van-cell-group>
|
||||
<CrmFileListPop v-model:show="showFileListPop" :file-list="activeFileList" @delete-file="handleDeleteFile" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { showImagePreview } from 'vant';
|
||||
|
||||
import { PreviewPictureUrl } from '@lib/shared/api/requrls/system/module';
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
|
||||
import CrmTag from '@/components/pure/crm-tag/index.vue';
|
||||
import CrmFileListPop from '@/components/business/crm-file-list-pop/index.vue';
|
||||
|
||||
import { AttachmentInfo } from '@cordys/web/src/components/business/crm-form-create/types';
|
||||
|
||||
export interface CrmDescriptionItem {
|
||||
label: string;
|
||||
value?: string | number | (string | number)[] | Record<string, any>[];
|
||||
isTag?: boolean;
|
||||
isImage?: boolean;
|
||||
isTitle?: boolean;
|
||||
slotName?: string;
|
||||
valueSlotName?: string;
|
||||
isAttachment?: boolean;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const props = defineProps<{
|
||||
description: CrmDescriptionItem[];
|
||||
}>();
|
||||
|
||||
const getDisplayValue = (val?: string | number | (string | number)[]) => {
|
||||
if (typeof val === 'number') return val;
|
||||
if (typeof val === 'string' || Array.isArray(val)) return val.length > 0 ? val : '-';
|
||||
return '-';
|
||||
};
|
||||
|
||||
function openLink(item: any) {
|
||||
if (item.fieldInfo.openMode === 'openInCurrent') {
|
||||
window.location.href = item.value;
|
||||
} else {
|
||||
window.open(item.value, '_blank');
|
||||
}
|
||||
}
|
||||
|
||||
const showFileListPop = ref(false);
|
||||
const activeFileList = ref<AttachmentInfo[]>([]);
|
||||
function handleAttachmentClick(item: CrmDescriptionItem) {
|
||||
activeFileList.value = item.value as AttachmentInfo[];
|
||||
showFileListPop.value = true;
|
||||
}
|
||||
|
||||
function handleDeleteFile(id: string) {
|
||||
activeFileList.value = activeFileList.value.filter((file) => file.id !== id);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-description-item {
|
||||
@apply flex;
|
||||
|
||||
gap: 16px;
|
||||
.crm-description-title {
|
||||
margin: 4px 0;
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: var(--text-n1);
|
||||
}
|
||||
.crm-description-label {
|
||||
@apply break-words;
|
||||
|
||||
width: 20%;
|
||||
font-size: 14px;
|
||||
color: var(--text-n2);
|
||||
}
|
||||
.crm-description-value {
|
||||
@apply flex-1;
|
||||
|
||||
font-size: 14px;
|
||||
text-align: justify;
|
||||
color: var(--text-n1);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,3 @@
|
||||
export default {
|
||||
'crm.description.attachment': '{count} attachments',
|
||||
};
|
||||
@@ -0,0 +1,3 @@
|
||||
export default {
|
||||
'crm.description.attachment': '{count}个附件',
|
||||
};
|
||||
@@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<CrmIon :name="iconType" :width="props.width" :height="props.height" />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getFileIconType } from '@lib/shared/method';
|
||||
|
||||
import CrmIon from '@/components/pure/crm-icon-font/index.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
type: string;
|
||||
width: string;
|
||||
height: string;
|
||||
}>();
|
||||
|
||||
const iconType = computed(() => {
|
||||
return getFileIconType(props.type);
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,38 @@
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue';
|
||||
|
||||
interface Props {
|
||||
name: string;
|
||||
color?: string;
|
||||
width?: string;
|
||||
height?: string;
|
||||
content?: number | string;
|
||||
dot?: boolean;
|
||||
}
|
||||
const props = withDefaults(defineProps<Props>(), {
|
||||
name: '',
|
||||
color: '#000',
|
||||
width: '1rem',
|
||||
height: '1rem',
|
||||
dot: false,
|
||||
});
|
||||
const iconName = computed(() => `#${props.name}`);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<van-badge :content="props.content" :dot="props.dot">
|
||||
<svg class="c-icon" aria-hidden="true">
|
||||
<use :xlink:href="iconName" :fill="color" />
|
||||
</svg>
|
||||
</van-badge>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.c-icon {
|
||||
@apply relative;
|
||||
|
||||
width: v-bind(width);
|
||||
height: v-bind(height);
|
||||
color: transparent; // 解决部分图标线条填充色问题
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,120 @@
|
||||
<template>
|
||||
<div class="crm-list-common-item" @click="emit('click', item)">
|
||||
<div class="crm-list-common-item-header">
|
||||
<div class="one-line-text text-[14px] font-semibold text-[var(--text-n1)]">{{ props.item.name }}</div>
|
||||
<CrmTag
|
||||
v-if="item.stageName && !props.hiddenStage"
|
||||
class="flex-shrink-0"
|
||||
:bg-color="getStage(item.stage)?.bgColor"
|
||||
:tag="item.stageName ?? ''"
|
||||
:text-color="getStage(item.stage)?.color"
|
||||
/>
|
||||
</div>
|
||||
<div class="crm-list-common-item-content">
|
||||
<div
|
||||
v-for="desc of item.description"
|
||||
:key="desc.label"
|
||||
class="flex items-start gap-[8px]"
|
||||
:class="desc.fullLine ? 'basis-full' : ''"
|
||||
>
|
||||
<div class="whitespace-nowrap text-[12px] text-[var(--text-n4)]">{{ desc.label }}</div>
|
||||
<div class="break-words break-all text-[12px] text-[var(--text-n1)]">{{ desc.value }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<van-divider v-if="actionList?.length" class="!m-0" />
|
||||
<div v-if="actionList?.length" class="crm-list-common-item-actions">
|
||||
<CrmTextButton
|
||||
v-for="btn of actionList"
|
||||
:key="btn.label"
|
||||
:text="btn.label"
|
||||
:icon="btn.icon"
|
||||
@click="btn.action(item)"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import CrmTextButton from '@/components/pure/crm-text-button/index.vue';
|
||||
|
||||
import useAppStore from '@/store/modules/app';
|
||||
import { hasAllPermission, hasAnyPermission } from '@/utils/permission';
|
||||
|
||||
const appStore = useAppStore();
|
||||
|
||||
export interface CrmListCommonItemActionsItem {
|
||||
label: string;
|
||||
icon: string;
|
||||
permission: string[];
|
||||
allPermission?: boolean;
|
||||
action: (data: any) => void;
|
||||
}
|
||||
const props = defineProps<{
|
||||
item: Record<string, any>;
|
||||
hiddenStage?: boolean;
|
||||
actions?: CrmListCommonItemActionsItem[];
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'click', item: Record<string, any>): void;
|
||||
}>();
|
||||
|
||||
function stageStyle(type: 'success' | 'error' | 'info') {
|
||||
const map = {
|
||||
success: { bgColor: 'var(--success-5)', color: 'var(--success-green)' },
|
||||
error: { bgColor: 'var(--error-5)', color: 'var(--error-red)' },
|
||||
info: { bgColor: 'var(--info-5)', color: 'var(--info-blue)' },
|
||||
};
|
||||
return map[type];
|
||||
}
|
||||
|
||||
function defaultStageStyle() {
|
||||
return stageStyle('info');
|
||||
}
|
||||
|
||||
function getStage(stageId: string): Record<string, string> {
|
||||
const stage = appStore.originStageConfigList.find((item) => item.id === stageId);
|
||||
if (!stage) {
|
||||
return defaultStageStyle();
|
||||
}
|
||||
|
||||
const { type, rate } = stage;
|
||||
if (type === 'END') {
|
||||
if (rate === '100') return stageStyle('success');
|
||||
if (rate === '0') return stageStyle('error');
|
||||
}
|
||||
|
||||
return stageStyle('info');
|
||||
}
|
||||
|
||||
const actionList = computed(() => {
|
||||
return props.actions?.filter((e) =>
|
||||
e.allPermission ? hasAllPermission(e.permission) : hasAnyPermission(e.permission)
|
||||
);
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-list-common-item {
|
||||
@apply flex flex-col;
|
||||
|
||||
padding: 16px 20px;
|
||||
border-radius: var(--border-radius-small);
|
||||
background-color: var(--text-n10);
|
||||
gap: 8px;
|
||||
.crm-list-common-item-header,
|
||||
.crm-list-common-item-content {
|
||||
@apply flex items-center justify-between;
|
||||
}
|
||||
.crm-list-common-item-content {
|
||||
@apply flex-wrap;
|
||||
|
||||
gap: 8px;
|
||||
}
|
||||
.crm-list-common-item-actions {
|
||||
@apply flex w-full items-center justify-between;
|
||||
|
||||
gap: 8px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
145
frontend/packages/mobile/src/components/pure/crm-list/index.vue
Normal file
@@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<div class="h-full overflow-auto" :class="props.class">
|
||||
<van-pull-refresh v-model="refreshing" @refresh="handleRefresh">
|
||||
<van-empty v-if="list.length === 0 && !loading && !error" :description="t('common.noData')" />
|
||||
<van-list
|
||||
v-model:loading="loading"
|
||||
v-model:error="error"
|
||||
:error-text="props.errorText ?? t('common.listLoadErrorTip')"
|
||||
:finished="finished"
|
||||
:finished-text="list.length === 0 ? '' : t('common.listFinishedTip')"
|
||||
class="flex flex-col"
|
||||
:class="`gap-[${itemGap}px]`"
|
||||
@load="loadList"
|
||||
>
|
||||
<template v-for="item in list" :key="item.id">
|
||||
<slot name="item" :item="item"></slot>
|
||||
</template>
|
||||
</van-list>
|
||||
</van-pull-refresh>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { closeToast, showLoadingToast, showSuccessToast } from 'vant';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
|
||||
import { useI18n } from '@lib/shared/hooks/useI18n';
|
||||
import { CommonList } from '@lib/shared/models/common';
|
||||
|
||||
const props = defineProps<{
|
||||
keyword?: string;
|
||||
class?: string;
|
||||
listParams?: Record<string, any>;
|
||||
itemGap?: number;
|
||||
noPageNation?: boolean;
|
||||
errorText?: string;
|
||||
isReturnNativeResponse?: boolean;
|
||||
loadListApi?: (...args: any) => Promise<CommonList<Record<string, any>> | Record<string, any>>;
|
||||
transform?: (item: any, optionMap?: Record<string, any[]>) => Record<string, any>;
|
||||
closeInitLoad?: boolean; // 关闭首次加载
|
||||
notShowLoadingToast?: boolean;
|
||||
}>();
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const loading = defineModel<boolean>('loading', {
|
||||
default: false,
|
||||
});
|
||||
const error = ref(false);
|
||||
const refreshing = ref(false);
|
||||
const finished = ref(false);
|
||||
const list = defineModel<any[]>('modelValue', {
|
||||
default: [],
|
||||
});
|
||||
const currentPage = ref(0);
|
||||
|
||||
const code = ref(0); // 状态码
|
||||
|
||||
const originData = ref<any[]>([]);
|
||||
async function loadList(refresh = false) {
|
||||
if (props.closeInitLoad) return;
|
||||
try {
|
||||
if (!props.loadListApi) {
|
||||
list.value = props.transform ? list.value.map((e: any) => props.transform!(e)) : list.value;
|
||||
originData.value = list.value;
|
||||
finished.value = true;
|
||||
return;
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
if (refresh) {
|
||||
currentPage.value = 1;
|
||||
finished.value = false;
|
||||
} else {
|
||||
currentPage.value += 1;
|
||||
}
|
||||
if (currentPage.value === 1 && !refreshing.value && !props.notShowLoadingToast) {
|
||||
showLoadingToast(t('common.loading'));
|
||||
}
|
||||
const res = await props.loadListApi({
|
||||
keyword: props.keyword,
|
||||
...props.listParams,
|
||||
pageSize: 20,
|
||||
current: currentPage.value,
|
||||
});
|
||||
if (props?.isReturnNativeResponse) {
|
||||
code.value = res.data.code;
|
||||
}
|
||||
const data = props?.isReturnNativeResponse ? res.data.data : res;
|
||||
const resList = props.noPageNation && !data.list ? data : data.list || [];
|
||||
const dataList = props.transform
|
||||
? resList.map((e: Record<string, any>) => props.transform!(e, data.optionMap))
|
||||
: resList;
|
||||
if (refresh) {
|
||||
list.value = dataList;
|
||||
} else {
|
||||
list.value = list.value.concat(dataList);
|
||||
}
|
||||
finished.value = props.noPageNation || data.total <= currentPage.value * 20;
|
||||
error.value = false;
|
||||
originData.value = cloneDeep(dataList);
|
||||
} catch (_error: any) {
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(_error);
|
||||
error.value = true;
|
||||
if (props?.isReturnNativeResponse) {
|
||||
code.value = _error.code;
|
||||
}
|
||||
} finally {
|
||||
loading.value = false;
|
||||
refreshing.value = false;
|
||||
closeToast();
|
||||
}
|
||||
}
|
||||
|
||||
function filterListByKeyword(keywordKeys: string | string[]) {
|
||||
if (!props.keyword?.trim()?.length) {
|
||||
if (props.loadListApi) {
|
||||
loadList(true);
|
||||
} else {
|
||||
list.value = originData.value;
|
||||
}
|
||||
return;
|
||||
}
|
||||
const lowerCaseVal = props.keyword.trim()?.toLowerCase();
|
||||
const keys = Array.isArray(keywordKeys) ? keywordKeys : [keywordKeys];
|
||||
list.value = originData.value.filter((item) => {
|
||||
return keys.some((key) => item[key]?.toString().toLowerCase().includes(lowerCaseVal));
|
||||
});
|
||||
}
|
||||
|
||||
async function handleRefresh() {
|
||||
refreshing.value = true;
|
||||
await loadList(true);
|
||||
showSuccessToast(t('common.refreshSuccess'));
|
||||
}
|
||||
|
||||
defineExpose({
|
||||
loadList,
|
||||
filterListByKeyword,
|
||||
code,
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped></style>
|
||||
@@ -0,0 +1,45 @@
|
||||
<template>
|
||||
<van-nav-bar :title="props.title" class="crm-page-header" fixed>
|
||||
<template #left>
|
||||
<CrmIcon v-if="!props.hideBack" name="iconicon_chevron_left" width="24px" height="24px" @click="handleBack" />
|
||||
</template>
|
||||
<template #right>
|
||||
<slot name="rightSlot" />
|
||||
</template>
|
||||
</van-nav-bar>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import CrmIcon from '@/components/pure/crm-icon-font/index.vue';
|
||||
|
||||
import useAppStore from '@/store/modules/app';
|
||||
|
||||
const props = defineProps<{
|
||||
title: string;
|
||||
hideBack?: boolean;
|
||||
backRouteName?: string;
|
||||
}>();
|
||||
|
||||
const router = useRouter();
|
||||
const appStore = useAppStore();
|
||||
|
||||
function handleBack() {
|
||||
appStore.setManualBack(true);
|
||||
if (props.backRouteName) {
|
||||
router.replace({ name: props.backRouteName });
|
||||
} else {
|
||||
router.back();
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-page-header {
|
||||
height: 48px;
|
||||
:deep(.van-nav-bar__left) {
|
||||
padding: 0 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,41 @@
|
||||
<template>
|
||||
<div class="crm-page-wrapper">
|
||||
<CrmPageHeader :title="props.title" :hide-back="props.hideBack" :back-route-name="props.backRouteName" />
|
||||
<div class="crm-page-content">
|
||||
<slot />
|
||||
</div>
|
||||
<div v-if="$slots.footer" class="crm-page-footer">
|
||||
<slot name="footer" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import CrmPageHeader from '@/components/pure/crm-page-header/index.vue';
|
||||
|
||||
const props = defineProps<{
|
||||
title: string;
|
||||
hideBack?: boolean;
|
||||
backRouteName?: string;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<style lang="less" scoped>
|
||||
.crm-page-wrapper {
|
||||
@apply flex flex-col;
|
||||
|
||||
height: 100%;
|
||||
background-color: var(--text-n10);
|
||||
.crm-page-content {
|
||||
@apply flex flex-1 flex-col;
|
||||
|
||||
overflow: auto;
|
||||
margin-top: 48px;
|
||||
background-color: transparent;
|
||||
}
|
||||
.crm-page-footer {
|
||||
padding: 16px;
|
||||
background-color: var(--text-n10);
|
||||
}
|
||||
}
|
||||
</style>
|
||||