From 9f109f598f6e668e3f2f44e0effdfdc0520bb8c8 Mon Sep 17 00:00:00 2001 From: callmeyan Date: Fri, 31 Mar 2023 10:59:32 +0800 Subject: [PATCH] init --- App.vue | 29 + index.html | 20 + main.js | 50 ++ manifest.json | 72 ++ pages.json | 56 ++ pages/index/index.vue | 157 +++++ pages/order/index.vue | 143 ++++ pages/user/index.vue | 19 + service/api.ts | 1 + static/iconfont/demo.css | 539 +++++++++++++++ static/iconfont/demo_index.html | 947 +++++++++++++++++++++++++++ static/iconfont/iconfont.css | 151 +++++ static/iconfont/iconfont.js | 1 + static/iconfont/iconfont.json | 240 +++++++ static/iconfont/iconfont.ttf | Bin 0 -> 9232 bytes static/iconfont/iconfont.woff | Bin 0 -> 5308 bytes static/iconfont/iconfont.woff2 | Bin 0 -> 4428 bytes static/images/icons/cart.png | Bin 0 -> 2800 bytes static/images/icons/cart_select.png | Bin 0 -> 2926 bytes static/images/icons/order.png | Bin 0 -> 2225 bytes static/images/icons/order_select.png | Bin 0 -> 2307 bytes static/images/icons/user.png | Bin 0 -> 4531 bytes static/images/icons/user_select.png | Bin 0 -> 4774 bytes static/logo.png | Bin 0 -> 4023 bytes uni.scss | 76 +++ 25 files changed, 2501 insertions(+) create mode 100644 App.vue create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/index/index.vue create mode 100644 pages/order/index.vue create mode 100644 pages/user/index.vue create mode 100644 service/api.ts create mode 100644 static/iconfont/demo.css create mode 100644 static/iconfont/demo_index.html create mode 100644 static/iconfont/iconfont.css create mode 100644 static/iconfont/iconfont.js create mode 100644 static/iconfont/iconfont.json create mode 100644 static/iconfont/iconfont.ttf create mode 100644 static/iconfont/iconfont.woff create mode 100644 static/iconfont/iconfont.woff2 create mode 100644 static/images/icons/cart.png create mode 100644 static/images/icons/cart_select.png create mode 100644 static/images/icons/order.png create mode 100644 static/images/icons/order_select.png create mode 100644 static/images/icons/user.png create mode 100644 static/images/icons/user_select.png create mode 100644 static/logo.png create mode 100644 uni.scss diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..e48dc02 --- /dev/null +++ b/App.vue @@ -0,0 +1,29 @@ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..af98bb7 --- /dev/null +++ b/main.js @@ -0,0 +1,50 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' + +try { + function isPromise(obj) { + return ( + !!obj && + (typeof obj === "object" || typeof obj === "function") && + typeof obj.then === "function" + ); + } + + // 统一 vue2 API Promise 化返回格式与 vue3 保持一致 + uni.addInterceptor({ + returnValue(res) { + if (!isPromise(res)) { + return res; + } + return new Promise((resolve, reject) => { + res.then((res) => { + if (res[0]) { + reject(res[0]); + } else { + resolve(res[1]); + } + }); + }); + }, + }); +} catch (error) { } + +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..3acacb5 --- /dev/null +++ b/manifest.json @@ -0,0 +1,72 @@ +{ + "name" : "waimai-app", + "appid" : "", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3" +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..bd06457 --- /dev/null +++ b/pages.json @@ -0,0 +1,56 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + } + }, { + "path": "pages/order/index", + "style": { + "enablePullDownRefresh": false + } + + }, { + "path": "pages/user/index", + "style": { + "enablePullDownRefresh": false + } + + } + ], + "globalStyle": { + "navigationBarTextStyle": "white", + "navigationBarTitleText": "我爱外卖", + "navigationBarBackgroundColor": "#ff5801", + "backgroundColor": "#ff5801" + }, + "uniIdRouter": {}, + "tabBar": { + "color": "#8a8a8a", + "selectedColor": "#ea5a2a", + "borderStyle": "#dddddd", + "backgroundColor": "#ffffff", + "height": "54px", + "fontSize": "13px", + "spacing": "3px", + "list": [{ + "pagePath": "pages/index/index", + "iconPath": "static/images/icons/cart.png", + "selectedIconPath": "static/images/icons/cart_select.png", + "text": "首页" + }, + { + "pagePath": "pages/order/index", + "iconPath": "static/images/icons/order.png", + "selectedIconPath": "static/images/icons/order_select.png", + "text": "订单" + }, + { + "pagePath": "pages/user/index", + "iconPath": "static/images/icons/user.png", + "selectedIconPath": "static/images/icons/user_select.png", + "text": "我的" + } + ] + } +} \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..9c50e5b --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,157 @@ + + + + + \ No newline at end of file diff --git a/pages/order/index.vue b/pages/order/index.vue new file mode 100644 index 0000000..6fb8b77 --- /dev/null +++ b/pages/order/index.vue @@ -0,0 +1,143 @@ + + + + + \ No newline at end of file diff --git a/pages/user/index.vue b/pages/user/index.vue new file mode 100644 index 0000000..8c3b35f --- /dev/null +++ b/pages/user/index.vue @@ -0,0 +1,19 @@ + + + + + diff --git a/service/api.ts b/service/api.ts new file mode 100644 index 0000000..8d6eee2 --- /dev/null +++ b/service/api.ts @@ -0,0 +1 @@ +export const API_URL = 'http://localhost:8080' \ No newline at end of file diff --git a/static/iconfont/demo.css b/static/iconfont/demo.css new file mode 100644 index 0000000..a67054a --- /dev/null +++ b/static/iconfont/demo.css @@ -0,0 +1,539 @@ +/* Logo 字体 */ +@font-face { + font-family: "iconfont logo"; + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); + src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), + url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg'); +} + +.logo { + font-family: "iconfont logo"; + font-size: 160px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* tabs */ +.nav-tabs { + position: relative; +} + +.nav-tabs .nav-more { + position: absolute; + right: 0; + bottom: 0; + height: 42px; + line-height: 42px; + color: #666; +} + +#tabs { + border-bottom: 1px solid #eee; +} + +#tabs li { + cursor: pointer; + width: 100px; + height: 40px; + line-height: 40px; + text-align: center; + font-size: 16px; + border-bottom: 2px solid transparent; + position: relative; + z-index: 1; + margin-bottom: -1px; + color: #666; +} + + +#tabs .active { + border-bottom-color: #f00; + color: #222; +} + +.tab-container .content { + display: none; +} + +/* 页面布局 */ +.main { + padding: 30px 100px; + width: 960px; + margin: 0 auto; +} + +.main .logo { + color: #333; + text-align: left; + margin-bottom: 30px; + line-height: 1; + height: 110px; + margin-top: -50px; + overflow: hidden; + *zoom: 1; +} + +.main .logo a { + font-size: 160px; + color: #333; +} + +.helps { + margin-top: 40px; +} + +.helps pre { + padding: 20px; + margin: 10px 0; + border: solid 1px #e7e1cd; + background-color: #fffdef; + overflow: auto; +} + +.icon_lists { + width: 100% !important; + overflow: hidden; + *zoom: 1; +} + +.icon_lists li { + width: 100px; + margin-bottom: 10px; + margin-right: 20px; + text-align: center; + list-style: none !important; + cursor: default; +} + +.icon_lists li .code-name { + line-height: 1.2; +} + +.icon_lists .icon { + display: block; + height: 100px; + line-height: 100px; + font-size: 42px; + margin: 10px auto; + color: #333; + -webkit-transition: font-size 0.25s linear, width 0.25s linear; + -moz-transition: font-size 0.25s linear, width 0.25s linear; + transition: font-size 0.25s linear, width 0.25s linear; +} + +.icon_lists .icon:hover { + font-size: 100px; +} + +.icon_lists .svg-icon { + /* 通过设置 font-size 来改变图标大小 */ + width: 1em; + /* 图标和文字相邻时,垂直对齐 */ + vertical-align: -0.15em; + /* 通过设置 color 来改变 SVG 的颜色/fill */ + fill: currentColor; + /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示 + normalize.css 中也包含这行 */ + overflow: hidden; +} + +.icon_lists li .name, +.icon_lists li .code-name { + color: #666; +} + +/* markdown 样式 */ +.markdown { + color: #666; + font-size: 14px; + line-height: 1.8; +} + +.highlight { + line-height: 1.5; +} + +.markdown img { + vertical-align: middle; + max-width: 100%; +} + +.markdown h1 { + color: #404040; + font-weight: 500; + line-height: 40px; + margin-bottom: 24px; +} + +.markdown h2, +.markdown h3, +.markdown h4, +.markdown h5, +.markdown h6 { + color: #404040; + margin: 1.6em 0 0.6em 0; + font-weight: 500; + clear: both; +} + +.markdown h1 { + font-size: 28px; +} + +.markdown h2 { + font-size: 22px; +} + +.markdown h3 { + font-size: 16px; +} + +.markdown h4 { + font-size: 14px; +} + +.markdown h5 { + font-size: 12px; +} + +.markdown h6 { + font-size: 12px; +} + +.markdown hr { + height: 1px; + border: 0; + background: #e9e9e9; + margin: 16px 0; + clear: both; +} + +.markdown p { + margin: 1em 0; +} + +.markdown>p, +.markdown>blockquote, +.markdown>.highlight, +.markdown>ol, +.markdown>ul { + width: 80%; +} + +.markdown ul>li { + list-style: circle; +} + +.markdown>ul li, +.markdown blockquote ul>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown>ul li p, +.markdown>ol li p { + margin: 0.6em 0; +} + +.markdown ol>li { + list-style: decimal; +} + +.markdown>ol li, +.markdown blockquote ol>li { + margin-left: 20px; + padding-left: 4px; +} + +.markdown code { + margin: 0 3px; + padding: 0 5px; + background: #eee; + border-radius: 3px; +} + +.markdown strong, +.markdown b { + font-weight: 600; +} + +.markdown>table { + border-collapse: collapse; + border-spacing: 0px; + empty-cells: show; + border: 1px solid #e9e9e9; + width: 95%; + margin-bottom: 24px; +} + +.markdown>table th { + white-space: nowrap; + color: #333; + font-weight: 600; +} + +.markdown>table th, +.markdown>table td { + border: 1px solid #e9e9e9; + padding: 8px 16px; + text-align: left; +} + +.markdown>table th { + background: #F7F7F7; +} + +.markdown blockquote { + font-size: 90%; + color: #999; + border-left: 4px solid #e9e9e9; + padding-left: 0.8em; + margin: 1em 0; +} + +.markdown blockquote p { + margin: 0; +} + +.markdown .anchor { + opacity: 0; + transition: opacity 0.3s ease; + margin-left: 8px; +} + +.markdown .waiting { + color: #ccc; +} + +.markdown h1:hover .anchor, +.markdown h2:hover .anchor, +.markdown h3:hover .anchor, +.markdown h4:hover .anchor, +.markdown h5:hover .anchor, +.markdown h6:hover .anchor { + opacity: 1; + display: inline-block; +} + +.markdown>br, +.markdown>p>br { + clear: both; +} + + +.hljs { + display: block; + background: white; + padding: 0.5em; + color: #333333; + overflow-x: auto; +} + +.hljs-comment, +.hljs-meta { + color: #969896; +} + +.hljs-string, +.hljs-variable, +.hljs-template-variable, +.hljs-strong, +.hljs-emphasis, +.hljs-quote { + color: #df5000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-type { + color: #a71d5d; +} + +.hljs-literal, +.hljs-symbol, +.hljs-bullet, +.hljs-attribute { + color: #0086b3; +} + +.hljs-section, +.hljs-name { + color: #63a35c; +} + +.hljs-tag { + color: #333333; +} + +.hljs-title, +.hljs-attr, +.hljs-selector-id, +.hljs-selector-class, +.hljs-selector-attr, +.hljs-selector-pseudo { + color: #795da3; +} + +.hljs-addition { + color: #55a532; + background-color: #eaffea; +} + +.hljs-deletion { + color: #bd2c00; + background-color: #ffecec; +} + +.hljs-link { + text-decoration: underline; +} + +/* 代码高亮 */ +/* PrismJS 1.15.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre)>code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/static/iconfont/demo_index.html b/static/iconfont/demo_index.html new file mode 100644 index 0000000..d3f131e --- /dev/null +++ b/static/iconfont/demo_index.html @@ -0,0 +1,947 @@ + + + + + iconfont Demo + + + + + + + + + + + + + +
+

+ + +

+ +
+
+
    + +
  • + +
    add
    +
    
    +
  • + +
  • + +
    addition
    +
    
    +
  • + +
  • + +
    browse_fill
    +
    
    +
  • + +
  • + +
    browse
    +
    
    +
  • + +
  • + +
    businesscard
    +
    
    +
  • + +
  • + +
    camera_fill
    +
    
    +
  • + +
  • + +
    camera
    +
    
    +
  • + +
  • + +
    clock_fill
    +
    
    +
  • + +
  • + +
    clock
    +
    
    +
  • + +
  • + +
    close
    +
    
    +
  • + +
  • + +
    coordinates_fill
    +
    
    +
  • + +
  • + +
    coordinates
    +
    
    +
  • + +
  • + +
    delete_fill
    +
    
    +
  • + +
  • + +
    empty
    +
    
    +
  • + +
  • + +
    empty_fill
    +
    
    +
  • + +
  • + +
    enterinto
    +
    
    +
  • + +
  • + +
    enterinto_fill
    +
    
    +
  • + +
  • + +
    mobilephone
    +
    
    +
  • + +
  • + +
    offline_fill
    +
    
    +
  • + +
  • + +
    offline
    +
    
    +
  • + +
  • + +
    other
    +
    
    +
  • + +
  • + +
    redpacket_fill
    +
    
    +
  • + +
  • + +
    redpacket
    +
    
    +
  • + +
  • + +
    packup
    +
    
    +
  • + +
  • + +
    unfold
    +
    
    +
  • + +
  • + +
    addition_fill
    +
    
    +
  • + +
  • + +
    coupon_fill
    +
    
    +
  • + +
  • + +
    telephone
    +
    
    +
  • + +
  • + +
    user
    +
    
    +
  • + +
  • + +
    Buy
    +
    
    +
  • + +
  • + +
    cart-search-fill
    +
    
    +
  • + +
  • + +
    order-success-fill
    +
    
    +
  • + +
  • + +
    location
    +
    
    +
  • + +
+
+

Unicode 引用

+
+ +

Unicode 是字体在网页端最原始的应用方式,特点是:

+
    +
  • 支持按字体的方式去动态调整图标大小,颜色等等。
  • +
  • 默认情况下不支持多色,直接添加多色图标会自动去色。
  • +
+
+

注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)

+
+

Unicode 使用步骤如下:

+

第一步:拷贝项目下面生成的 @font-face

+
@font-face {
+  font-family: 'iconfont';
+  src: url('iconfont.woff2?t=1680225819133') format('woff2'),
+       url('iconfont.woff?t=1680225819133') format('woff'),
+       url('iconfont.ttf?t=1680225819133') format('truetype');
+}
+
+

第二步:定义使用 iconfont 的样式

+
.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+

第三步:挑选相应图标并获取字体编码,应用于页面

+
+<span class="iconfont">&#x33;</span>
+
+
+

"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    + add +
    +
    .icon-add +
    +
  • + +
  • + +
    + addition +
    +
    .icon-addition +
    +
  • + +
  • + +
    + browse_fill +
    +
    .icon-browse_fill +
    +
  • + +
  • + +
    + browse +
    +
    .icon-browse +
    +
  • + +
  • + +
    + businesscard +
    +
    .icon-businesscard +
    +
  • + +
  • + +
    + camera_fill +
    +
    .icon-camera_fill +
    +
  • + +
  • + +
    + camera +
    +
    .icon-camera +
    +
  • + +
  • + +
    + clock_fill +
    +
    .icon-clock_fill +
    +
  • + +
  • + +
    + clock +
    +
    .icon-clock +
    +
  • + +
  • + +
    + close +
    +
    .icon-close +
    +
  • + +
  • + +
    + coordinates_fill +
    +
    .icon-coordinates_fill +
    +
  • + +
  • + +
    + coordinates +
    +
    .icon-coordinates +
    +
  • + +
  • + +
    + delete_fill +
    +
    .icon-delete_fill +
    +
  • + +
  • + +
    + empty +
    +
    .icon-empty +
    +
  • + +
  • + +
    + empty_fill +
    +
    .icon-empty_fill +
    +
  • + +
  • + +
    + enterinto +
    +
    .icon-enterinto +
    +
  • + +
  • + +
    + enterinto_fill +
    +
    .icon-enterinto_fill +
    +
  • + +
  • + +
    + mobilephone +
    +
    .icon-mobilephone +
    +
  • + +
  • + +
    + offline_fill +
    +
    .icon-offline_fill +
    +
  • + +
  • + +
    + offline +
    +
    .icon-offline +
    +
  • + +
  • + +
    + other +
    +
    .icon-other +
    +
  • + +
  • + +
    + redpacket_fill +
    +
    .icon-redpacket_fill +
    +
  • + +
  • + +
    + redpacket +
    +
    .icon-redpacket +
    +
  • + +
  • + +
    + packup +
    +
    .icon-packup +
    +
  • + +
  • + +
    + unfold +
    +
    .icon-unfold +
    +
  • + +
  • + +
    + addition_fill +
    +
    .icon-addition_fill +
    +
  • + +
  • + +
    + coupon_fill +
    +
    .icon-coupon_fill +
    +
  • + +
  • + +
    + telephone +
    +
    .icon-telephone +
    +
  • + +
  • + +
    + user +
    +
    .icon-user +
    +
  • + +
  • + +
    + Buy +
    +
    .icon-Buy +
    +
  • + +
  • + +
    + cart-search-fill +
    +
    .icon-cart-search-fill +
    +
  • + +
  • + +
    + order-success-fill +
    +
    .icon-order-success-fill +
    +
  • + +
  • + +
    + location +
    +
    .icon-location +
    +
  • + +
+
+

font-class 引用

+
+ +

font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。

+

与 Unicode 使用方式相比,具有如下特点:

+
    +
  • 相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。
  • +
  • 因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 fontclass 代码:

+
<link rel="stylesheet" href="./iconfont.css">
+
+

第二步:挑选相应图标并获取类名,应用于页面:

+
<span class="iconfont icon-xxx"></span>
+
+
+

" + iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。

+
+
+
+
+
    + +
  • + +
    add
    +
    #icon-add
    +
  • + +
  • + +
    addition
    +
    #icon-addition
    +
  • + +
  • + +
    browse_fill
    +
    #icon-browse_fill
    +
  • + +
  • + +
    browse
    +
    #icon-browse
    +
  • + +
  • + +
    businesscard
    +
    #icon-businesscard
    +
  • + +
  • + +
    camera_fill
    +
    #icon-camera_fill
    +
  • + +
  • + +
    camera
    +
    #icon-camera
    +
  • + +
  • + +
    clock_fill
    +
    #icon-clock_fill
    +
  • + +
  • + +
    clock
    +
    #icon-clock
    +
  • + +
  • + +
    close
    +
    #icon-close
    +
  • + +
  • + +
    coordinates_fill
    +
    #icon-coordinates_fill
    +
  • + +
  • + +
    coordinates
    +
    #icon-coordinates
    +
  • + +
  • + +
    delete_fill
    +
    #icon-delete_fill
    +
  • + +
  • + +
    empty
    +
    #icon-empty
    +
  • + +
  • + +
    empty_fill
    +
    #icon-empty_fill
    +
  • + +
  • + +
    enterinto
    +
    #icon-enterinto
    +
  • + +
  • + +
    enterinto_fill
    +
    #icon-enterinto_fill
    +
  • + +
  • + +
    mobilephone
    +
    #icon-mobilephone
    +
  • + +
  • + +
    offline_fill
    +
    #icon-offline_fill
    +
  • + +
  • + +
    offline
    +
    #icon-offline
    +
  • + +
  • + +
    other
    +
    #icon-other
    +
  • + +
  • + +
    redpacket_fill
    +
    #icon-redpacket_fill
    +
  • + +
  • + +
    redpacket
    +
    #icon-redpacket
    +
  • + +
  • + +
    packup
    +
    #icon-packup
    +
  • + +
  • + +
    unfold
    +
    #icon-unfold
    +
  • + +
  • + +
    addition_fill
    +
    #icon-addition_fill
    +
  • + +
  • + +
    coupon_fill
    +
    #icon-coupon_fill
    +
  • + +
  • + +
    telephone
    +
    #icon-telephone
    +
  • + +
  • + +
    user
    +
    #icon-user
    +
  • + +
  • + +
    Buy
    +
    #icon-Buy
    +
  • + +
  • + +
    cart-search-fill
    +
    #icon-cart-search-fill
    +
  • + +
  • + +
    order-success-fill
    +
    #icon-order-success-fill
    +
  • + +
  • + +
    location
    +
    #icon-location
    +
  • + +
+
+

Symbol 引用

+
+ +

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇文章 + 这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:

+
    +
  • 支持多色图标了,不再受单色限制。
  • +
  • 通过一些技巧,支持像字体那样,通过 font-size, color 来调整样式。
  • +
  • 兼容性较差,支持 IE9+,及现代浏览器。
  • +
  • 浏览器渲染 SVG 的性能一般,还不如 png。
  • +
+

使用步骤如下:

+

第一步:引入项目下面生成的 symbol 代码:

+
<script src="./iconfont.js"></script>
+
+

第二步:加入通用 CSS 代码(引入一次就行):

+
<style>
+.icon {
+  width: 1em;
+  height: 1em;
+  vertical-align: -0.15em;
+  fill: currentColor;
+  overflow: hidden;
+}
+</style>
+
+

第三步:挑选相应图标并获取类名,应用于页面:

+
<svg class="icon" aria-hidden="true">
+  <use xlink:href="#icon-xxx"></use>
+</svg>
+
+
+
+ +
+
+ + + diff --git a/static/iconfont/iconfont.css b/static/iconfont/iconfont.css new file mode 100644 index 0000000..ef90962 --- /dev/null +++ b/static/iconfont/iconfont.css @@ -0,0 +1,151 @@ +@font-face { + font-family: "iconfont"; /* Project id 3988070 */ + src: url('iconfont.woff2?t=1680227907085') format('woff2'), + url('iconfont.woff?t=1680227907085') format('woff'), + url('iconfont.ttf?t=1680227907085') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-search:before { + content: "\e6e1"; +} + +.icon-add:before { + content: "\e6df"; +} + +.icon-addition:before { + content: "\e6e2"; +} + +.icon-browse_fill:before { + content: "\e6e4"; +} + +.icon-browse:before { + content: "\e6e5"; +} + +.icon-businesscard:before { + content: "\e6e6"; +} + +.icon-camera_fill:before { + content: "\e6e7"; +} + +.icon-camera:before { + content: "\e6e8"; +} + +.icon-clock_fill:before { + content: "\e6e9"; +} + +.icon-clock:before { + content: "\e6ea"; +} + +.icon-close:before { + content: "\e6eb"; +} + +.icon-coordinates_fill:before { + content: "\e6ec"; +} + +.icon-coordinates:before { + content: "\e6ed"; +} + +.icon-delete_fill:before { + content: "\e6f2"; +} + +.icon-empty:before { + content: "\e6f7"; +} + +.icon-empty_fill:before { + content: "\e6f8"; +} + +.icon-enterinto:before { + content: "\e6f9"; +} + +.icon-enterinto_fill:before { + content: "\e6fa"; +} + +.icon-mobilephone:before { + content: "\e70f"; +} + +.icon-offline_fill:before { + content: "\e712"; +} + +.icon-offline:before { + content: "\e713"; +} + +.icon-other:before { + content: "\e714"; +} + +.icon-redpacket_fill:before { + content: "\e71d"; +} + +.icon-redpacket:before { + content: "\e71e"; +} + +.icon-packup:before { + content: "\e749"; +} + +.icon-unfold:before { + content: "\e74a"; +} + +.icon-addition_fill:before { + content: "\e6e0"; +} + +.icon-coupon_fill:before { + content: "\e78c"; +} + +.icon-telephone:before { + content: "\e680"; +} + +.icon-user:before { + content: "\e682"; +} + +.icon-Buy:before { + content: "\e619"; +} + +.icon-cart-search-fill:before { + content: "\e826"; +} + +.icon-order-success-fill:before { + content: "\e833"; +} + +.icon-location:before { + content: "\e83d"; +} + diff --git a/static/iconfont/iconfont.js b/static/iconfont/iconfont.js new file mode 100644 index 0000000..af75904 --- /dev/null +++ b/static/iconfont/iconfont.js @@ -0,0 +1 @@ +window._iconfont_svg_string_3988070='',function(i){var a=(a=document.getElementsByTagName("script"))[a.length-1],l=a.getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var o,t,c,h,e,s=function(a,l){l.parentNode.insertBefore(a,l)};if(l&&!i.__iconfont__svg__cssinject__){i.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}o=function(){var a,l=document.createElement("div");l.innerHTML=i._iconfont_svg_string_3988070,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(a=document.body).firstChild?s(l,a.firstChild):a.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(o,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),o()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(c=o,h=i.document,e=!1,n(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,d())})}function d(){e||(e=!0,c())}function n(){try{h.documentElement.doScroll("left")}catch(a){return void setTimeout(n,50)}d()}}(window); \ No newline at end of file diff --git a/static/iconfont/iconfont.json b/static/iconfont/iconfont.json new file mode 100644 index 0000000..aa4a3ca --- /dev/null +++ b/static/iconfont/iconfont.json @@ -0,0 +1,240 @@ +{ + "id": "3988070", + "name": "waimai", + "font_family": "iconfont", + "css_prefix_text": "icon-", + "description": "", + "glyphs": [ + { + "icon_id": "7008886", + "name": "add", + "font_class": "add", + "unicode": "e6df", + "unicode_decimal": 59103 + }, + { + "icon_id": "7008888", + "name": "addition", + "font_class": "addition", + "unicode": "e6e2", + "unicode_decimal": 59106 + }, + { + "icon_id": "7008895", + "name": "browse_fill", + "font_class": "browse_fill", + "unicode": "e6e4", + "unicode_decimal": 59108 + }, + { + "icon_id": "7008896", + "name": "browse", + "font_class": "browse", + "unicode": "e6e5", + "unicode_decimal": 59109 + }, + { + "icon_id": "7008900", + "name": "businesscard", + "font_class": "businesscard", + "unicode": "e6e6", + "unicode_decimal": 59110 + }, + { + "icon_id": "7008901", + "name": "camera_fill", + "font_class": "camera_fill", + "unicode": "e6e7", + "unicode_decimal": 59111 + }, + { + "icon_id": "7008902", + "name": "camera", + "font_class": "camera", + "unicode": "e6e8", + "unicode_decimal": 59112 + }, + { + "icon_id": "7008903", + "name": "clock_fill", + "font_class": "clock_fill", + "unicode": "e6e9", + "unicode_decimal": 59113 + }, + { + "icon_id": "7008904", + "name": "clock", + "font_class": "clock", + "unicode": "e6ea", + "unicode_decimal": 59114 + }, + { + "icon_id": "7008905", + "name": "close", + "font_class": "close", + "unicode": "e6eb", + "unicode_decimal": 59115 + }, + { + "icon_id": "7008910", + "name": "coordinates_fill", + "font_class": "coordinates_fill", + "unicode": "e6ec", + "unicode_decimal": 59116 + }, + { + "icon_id": "7008911", + "name": "coordinates", + "font_class": "coordinates", + "unicode": "e6ed", + "unicode_decimal": 59117 + }, + { + "icon_id": "7008918", + "name": "delete_fill", + "font_class": "delete_fill", + "unicode": "e6f2", + "unicode_decimal": 59122 + }, + { + "icon_id": "7008928", + "name": "empty", + "font_class": "empty", + "unicode": "e6f7", + "unicode_decimal": 59127 + }, + { + "icon_id": "7008929", + "name": "empty_fill", + "font_class": "empty_fill", + "unicode": "e6f8", + "unicode_decimal": 59128 + }, + { + "icon_id": "7008931", + "name": "enterinto", + "font_class": "enterinto", + "unicode": "e6f9", + "unicode_decimal": 59129 + }, + { + "icon_id": "7008932", + "name": "enterinto_fill", + "font_class": "enterinto_fill", + "unicode": "e6fa", + "unicode_decimal": 59130 + }, + { + "icon_id": "7008970", + "name": "mobilephone", + "font_class": "mobilephone", + "unicode": "e70f", + "unicode_decimal": 59151 + }, + { + "icon_id": "7008973", + "name": "offline_fill", + "font_class": "offline_fill", + "unicode": "e712", + "unicode_decimal": 59154 + }, + { + "icon_id": "7008974", + "name": "offline", + "font_class": "offline", + "unicode": "e713", + "unicode_decimal": 59155 + }, + { + "icon_id": "7008977", + "name": "other", + "font_class": "other", + "unicode": "e714", + "unicode_decimal": 59156 + }, + { + "icon_id": "7008992", + "name": "redpacket_fill", + "font_class": "redpacket_fill", + "unicode": "e71d", + "unicode_decimal": 59165 + }, + { + "icon_id": "7008993", + "name": "redpacket", + "font_class": "redpacket", + "unicode": "e71e", + "unicode_decimal": 59166 + }, + { + "icon_id": "7009048", + "name": "packup", + "font_class": "packup", + "unicode": "e749", + "unicode_decimal": 59209 + }, + { + "icon_id": "7009049", + "name": "unfold", + "font_class": "unfold", + "unicode": "e74a", + "unicode_decimal": 59210 + }, + { + "icon_id": "7008887", + "name": "addition_fill", + "font_class": "addition_fill", + "unicode": "e6e0", + "unicode_decimal": 59104 + }, + { + "icon_id": "10241512", + "name": "coupon_fill", + "font_class": "coupon_fill", + "unicode": "e78c", + "unicode_decimal": 59276 + }, + { + "icon_id": "15838544", + "name": "telephone", + "font_class": "telephone", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "15838547", + "name": "user", + "font_class": "user", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "23929675", + "name": "Buy", + "font_class": "Buy", + "unicode": "e619", + "unicode_decimal": 58905 + }, + { + "icon_id": "34452803", + "name": "cart-search-fill", + "font_class": "cart-search-fill", + "unicode": "e826", + "unicode_decimal": 59430 + }, + { + "icon_id": "34452929", + "name": "order-success-fill", + "font_class": "order-success-fill", + "unicode": "e833", + "unicode_decimal": 59443 + }, + { + "icon_id": "34453026", + "name": "location", + "font_class": "location", + "unicode": "e83d", + "unicode_decimal": 59453 + } + ] +} diff --git a/static/iconfont/iconfont.ttf b/static/iconfont/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0adcca97e1f586f20f3b79d27f5a64f5638c7fa1 GIT binary patch literal 9232 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 SRI~6-JYk|t&85=;0001}z-cZ3 literal 0 HcmV?d00001 diff --git a/static/images/icons/cart.png b/static/images/icons/cart.png new file mode 100644 index 0000000000000000000000000000000000000000..3618885ded9c61f15dd3627945b8d32162c063d0 GIT binary patch literal 2800 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 YUr7+|lG$Zg0000007*qoM6N<$f;0z(3IG5A literal 0 HcmV?d00001 diff --git a/static/images/icons/order.png b/static/images/icons/order.png new file mode 100644 index 0000000000000000000000000000000000000000..623019a8730bfac20ae98f4db829f9464f4e79c2 GIT binary patch literal 2225 zcmV;i2u}BjP)Px-Ye_^wRCr$PooR?9MHa{3%jy~$yavB`EaHfwA|9Y$1eZnG71j@)!}Qc>kBgt? zi#B%mL_}3HU@r{Yl^LTg=m$Ru-pAlIiVog_E21Mhqj-$>qO*#~df>=TRn}Xgw`!=a z$*hdXimb}Xj{Mm5-i!DCzl@B?jO<7RcjQU|%vCln8E`;yb`m%s4oJ=v$XPnBhd3ZP zQy^#Q z@i^TA2C*Ze?}ZS@4-&(+Z?1qWEG(=kl}caQF0x;|Fbq$r)oMezMC#O)DG=ZHFI7`k zL_7xoPVY^KbACzp-xd}YE-sZyuf!z&Y8Zxp*D0#krc^530st3B`G#S5Nv&3Uwfnaq z2%>V>OGNLhsk0E`g*18S_+$n|O1VfxH}^||bH1$oBp|&2bqZ8AZGlaIP`}uScspZk zTDN@@yG(!tL7>i{za%AcxB_X{^&;n7T>-2f)`9rGemNc+alt9jIrx&F7JCWSx@kk>?m zN}Q;Ndr6{Y^?SmzwAf|~1q1;0anApcmB=P>gCO`808TXVDbyI!Rrvd17+x`|b&2*m z%nkrh%LK+p(RxTnfS&>29{})SxmyBtEG{md&}cL+0D!XqU=9F|F>qgI zT2vru^%%LI12S?1%M)-w91uMPOdmPuMa{pJ>mfN~ z5y4%u^18@mmPt)7_0B>fCTW#PyIv6mWxjmn3f5o3kF0c4m|}Kbx1{kq+v46EgzSO+AnavAwKAQ=gpHf)iAEc^fPw1Tw#2D;lGr0v20v02C{S1WDS zG16(T%|aZIh(2yAiUX3fJ9P)d0U2cMj`g*9V!1KI0wM>*!uVx@!@&@R0b)~>QO0sW zMyY;8+YX2WqNjlAeTZJvTw68NjuS!%qyKB~SJ6mkS-F-vIl12vaXn+~>0VPQ<=Kp} z50XRV>^>w-!nS?Xx_*i+Jbr1lT9sOtKxfYr!`&Nx zM8pbX?8V-&zVBby-XdM?m!fu?)7q(`JI;!|Wc7-r14V7T?0KGoamcbkyu^M!Gh6y)jJK zLGIE0`}a@I&(9ywy`Rwi;0z+ZTPl?%W@cuzcc?2okR%uYpw9HC)PBQ42=%S1zK8Go zHz4BONp|X+S78`V)M~XaG;9x=6dH&ojE)#Po6Y9r+}zxcaRS!s^-Z4V-K8P$+ie)e zpTQ_B5JMOpjbAR8%ac)CLrE!bBqE(X?cZ#*TI;LT>c2F=9b!^QASq!iiGzr*BjV)d z&6^K?n@UPKLqxYG35TPBZ<1`|elH@Bj}UPp>fv4x1Zuo^R70${n$70Mxw*N$ zK@d~{U?Iteh|~?Eg0U~jw(qQL5a)=gpwU+2HrwuwMMR&qS}ir8z8jIF78D}dtv(tC z06Jgwc?|$6ob&Gnt;u!|NwtaOphd*^f8D+rdn+vz&AeV2A0J;oH8u5vrhQ*Ct3afb zJBa9V8;Mzpv9DArt(%>leIp|%FEyLZ_5EgMrgc~a5(I&-{<+pPiHz;lnY)g2t}ZLf z4udfzD#ho+Fs#&Swg1@6-zt!Ly?%`6dFnC48k?O#3mm`W%q@4ARoFW*!bAS{wDINCK1{V`F2L znVFg2v#cRgAXz4!RqPljPmYg|SEi<>{+m_1owyE2gu>lW)VD-duU=i*v}sc#YZxlN z0}`XMf}(CLckS9$*}i>yI1CsL$gos4Xvg&s1F?o->VOPGWrH>x5CgG>Vd{VkLuG?D z91sJshGFV}3`1puHXINGv4&ylfDA)rgEsyLUI7)M3z;-S00000NkvXXu0mjf{-F*) literal 0 HcmV?d00001 diff --git a/static/images/icons/order_select.png b/static/images/icons/order_select.png new file mode 100644 index 0000000000000000000000000000000000000000..bd89dbf7ef1a372895dd7a08a36c0edae1e63e52 GIT binary patch literal 2307 zcmV+e3HPx-y-7qtRCr$Pon34kR~5(qXVwla{VvR|6Izi{AlY%!BFY022&IBb@W4kKdA&Qf z3q0`x5>yBwURqv2NPJ1~fOsen+he;Hp`?gLw55#{s;UsRP3&1agoZ+JvR+Eslv1!g zbI`bUYOiN!?#$k?Zzp#iz2}^J&i^-O?)c8`9fCfTQh=1oMkfOeM6r`V1JOVfQ$VqF zbcbjliYcI2I!brQ`Om%Y+NFiXj|035z-`QYRT}+>=oJ9R0GjRE)_wT8pFjIjnmC)` zqb!g{t^64fzE7Z=WD3FH(_q|F8mm7jGp?*yN&;!x)&K(|vWg6gL%^WvxT9H)ktVis zK<4c7JG(%CO;b!#pC$0l9Zvm)q<&f2D+grW?)@decV$`h8?otN(V5=AIb(^9q973K z9DtHo`W;&}ijLdUaTJLGlmc?Lx_f8AFiuOXFE*6t`!{VLpV^d4WNb1(wrg39TKNtl z+QqK%koGOplA!9A_sR$N>fq#SOapc`K0S z;I3Wl7iL8LW!RD7?KVedXV*>YF>}aTTLKN6&h*_fa#^_)$_fQE?DBI2xW#GQFg+=)haG&Y8q5t(a`uE&S1^-l% zaoe3(Nn)r0g!rz~X#H315^vb$;EwI9Np2LPL%qRaQJMbEn;iBPMy-G#!dOGd%%89x4MoPV0m%ngu0oUp~cIMK5DJaR29 zV$fUxAz;pQ+;?Opa+0`B+xiCsJCgVWwz&ebQv3O4ldm0!?TF-4S=o@^=-AwV~3>GLJ2<&L#$Cl0^G7AwEPXmciN(0#_j_#0%FJg;!oy-$U z1JOXTStS)coAn$Lp_IPuRcsDPdseIFmzz06HDS}{qk*JVE+an;BqL$dhSfmQDwmO; z29lAmX~X6R2=lt%ho==}*{{vdo;!*u=$soMG7H(trEv&iy<@+4MgmGN_riad1fUYTdX26E17j{=^P?fuKHFQ zh+>R15Di33fvvobi)AR+ihxBQezoMxB>G)@R2F&;Ny&)8uNiFgn`6@twT3u1RNm7w zT%Sr4`jQ6{Jl9XLg~tUDs>M~+`ZvN16+N( zQ-5?rXAG1-XfOp^q~E-}03ETXN;@c*Y=^XpB?5(khG7_0b7X46V}m)n{E;p!!?}rI21bVlW+Ho)}LyH zF+X5^f*2zVTpu$xwA~V_rK8f^3xxZqe%l)dW3{RlD1Rp3u+8zQKW*p?+xoQs`fD|= zj8c&qQ=V^Bc1%pwPE3;@BI{%ic(8!`{g2JfnhJmzcG=RvqX&MtW86{AooIVYYMu)S!KYak*pE-Jw| zywL3r-f&>%#dZQVYStHs@Dl-n|LFOCCCzqIxdoC4#)`rW{N6BlFl=k61bf;)wNya= zj$!w20^l~7$0&H6eB-;VPEaFl$n-yENv6R>S-l0P7?mwF05 zD#da4nXubc5h!2;``9035_+r85iFuwoOFZtXLWQ)1(J3X$&M;$-})~s0hR5J`*dn3 zVu?L|`CAtHulm`krkHuOm24n~82F@aR-D;P%K+eW6I%mNAnk6qs7_g@`xXO^@M zxj<^Y-(ljfB~2n@`zEp9XO7Jrkqd=>w+%-1TIa-hnfXfv@~^&kU9;4ES+LBoQ)ZH# z#v;N?K676weC1y9Y~NwuqQ5iaJKR{8*Ri`B&Pjg&%wnyg@5B0x~n34 z$fto3_+$cPHJM-;+h@9!h=bQ4EkD*&;b8dt!@emJ1%(-h7M3nlZ=5{yT9!3r3M9+K zvx*%Cg@FezoL{KE=iyWT%WB-!xEe@^!fT;0_~75Kd~5XsKRvdXHH^$JS({NnR$~NE zm{B>hPx`ZAnByRCr$PT@92aMRmTn-LFDwED05>K{vTJg3^1hNhmW+Jl05Qg#2mq%e z;)MY4q9KjMUCewF0DM|&{SQNGqY~SZ0ECFv2?)&mGDLiSrJhu*#LQnq#7_!1N~w=m zWK&zU!wLuyoe2OJ1AwfCQ7E!%b||GjakzvzEPxQvZ)HHd@^E$B)9yzyVD4CI`IZzA zW6X;XQC7t32JGk$0N_Dpen9?4QS<;aAA^WT%U=LE8UW<)pyfJd-l4U=Yfwg^^_K*Y zty{OQY&05M5b+N~1v`lDZbZBh06v9?5ANT;|A9`YBPSjg$R;~3VA+%*_h5`r?{Vf2j^$7Dna*}B@8dq)FwCUcmg4a#Ief#z! zA9>`Fi_J|7Vp_FAbn8MN&H;#u(XpR(hm(PnxDX+U@q&N=dr}#NBT93Cw&k zGrt1>ey*rVW`0O({lq%Osud6-`ZfR@=MiwDQtFC2J24Di)6>&uMNzc#AjM@~Gv854 z{c2q@)CLFc{6j>P_tc$;_|Z6y zzf^bo!p|794H4g70Ls-`>o-+tyAmLo*7l194X#m2eW8j#d3Cbw@vQ*xy8!UGK;8n# zyX$z__O@rOy_K0oFXk-Fd~y{naV0>A=mU8wbVPhx9LJXj4p{9G=%HrGCF`d!+%%j7xbM&q_iR2~9+w1Av#5?N|=| zWlE{SlTw*>vdd$U*>|l{s+5td3Lt+404_`4kD2+DK~5OGgF!@Me|SQfLGsZeVkeH{ zKljmvJ}06s0Bp*k|AI{*-(g;5iaqZh3jjrz(tXUlMr-}eI^-rIdBLCN;+3Z9Iqi0PcSt+IfLLp{ zF>~M9o0)IaTK`T+V?LV9#43(!P6q{M{=S%Bwbp;{<0a3HF=9)<1rdKahyMLasW*i1 z^3f2{IRJ25&V+qe9LJaXc*yf$K#1s{T^6-8O<&w@xBo7rF&~X*b^J&v^>`l-*K;EJ zApjiZdKN{|x>l>@d@q)5%Ub(hW_AI5k5cM6A^d^>nVz0r6GhRT4u+ppN{O>uEyWnK z2N9k2?I?;)YPDLTH!EGb-R=w1G|gL8Ta{9mm1gRwKt$&Ofb*`Crs+%C?e^z=?F0d0 zt(|6O?O>*rQsiqSvC*&m1ioYzE#u@FCf<131${Yw?j(ZH(q1RhY`_rtNp%G%6F#- z!pazPhs#{R%ok{_ZwX=&Ktx3QT{a>_+!V*L_^IUqMT6>es)ZPlre6QB} zS;3472#H88ufOLYd4p2w{dKgF0g|_EeOoE@v_V(MJOCULMuvzVi{sd*+9=gOB6=SH z{DGs=!rr}m$9L}BDRK-{j4|It#AiB~)M~%6);^b+|IyVKrPNquKqSBt5yj>IkdoOJ z-Zs$a^i(Dy0|3g!lbN40s1~`~?LIY4Q)g^p6h$lR^oZ$nI!BFiH9L zfIhL+YJH{dzF2GTU}l#Fpm4Ppt`H&;+qgIu98wk*7LMP%d2^-NTGa6(6@OOm3Z>M> zGJ}`b2jL-+S#ccKqN(ncso-8!*asgVP8UjXHqcr>TxMWGX^BX-!dK_fGxOdkir(y7 zq1M{d(lmV!B0fEjSCS+z9acnC!JX%3rBtpbXC**ZtXT1j8#ivOi##+0YnL~ms zWwLxjtd(P9V+Z`N=I7^EXWC-9Bl+A{Yjcox^@)h&M((nK3IKK%H^y-+H|wDlB9d5>Hv@p=KB==vbnlM3tb}=j5z%)6;K{wu z2RioVT@35i^d2m0=Mik2!p zmP91SPkDEoUb=Gi3X*_eN3+?yd}3lkE^@ULW6YBgQC3J_8Ax>^+=$4fT)aJwW69t% zaIw~&kf!NYM9g(u9=H)d1M!-_qArg{YwgL*>~j2A7)ZI80n(>_XXgD{>&N)}Sxk|+ z>3pc@u8_k)e2c#)KW3JhDE~{5nfa7#@0R`B7nnF(;RT5Jr*RzrMX9Ni5occGVl46v(8Gv$Wuwv9J~1)TX9g(K z_U!EJlaeI4B(vN5R(It~W2e(Oa(sMT?l+M`K5t04*J7CEJru|1-creZ##(y;Gk@5n zn(k>}dlW@iR@Lz4ft6`~#hJpF8smdXsn?bPJ=@}QeY27zInI~w(F;h{h(t^E*|pO& zeQKHfB%auk#lAlrMbYb8t(K@phE}@W?uBWZUIze0tL0jy)P^!bSZik_L5-u%T}mm} zMez{QAV7>U8WE>^8)4?xYpo@kDyR_Ar##2n2M}>xohg}$1j|gV5^$6I9z(=ZwjXQl z9#?juP`gVgASY(w&xfLkxI2zxaWeK6YwaX67ez1C=3U|yriXxtM49Q#)_{ojHk-}0 zmtK15zx((WxsrxD`vn0af*4~Yvs<63lbK(mwU*OTZpn_f;uEzZhp4jg$u~%$&x?#$ zS^h&tYON)1#an^_A)>r^3-8P}#@t$P@q4h@Y(6jaDC_M}MFKe@ zFDxvG!Z9xt;uTu!kL9s1S{(r3jb~ZpTLuuhndb$a+R4eu|8z0UTOAqg*`Yasg8>o7M3fiOws&l7Y<2G} z?{qrR`1rV(dhp zk|bH3H{*sp?z!xzrlua(Xf(tE**A$W=Mdvr9m5Oy%s|Ntiw0&sLu)Oub_a?lWcck$ zslPm217FlG5s4GvyIeHQX7d>bYlc0BwBd$DXM-$Rsq+#Cd_gI-M(8@7&iMHFxXd({ z5AdEA0+g6@4Tvn%2R*OAWBHPx&!h(eI<;I`;EQ5J+RsuwrdD1g|1rg<)@|%u^zpIpz zui}h+AtK2mEcTV&BF=ib33enk`I4q*66qwLd$ZXTJy4kx;sVmpk`UL8aEWBl2RFTE zVPRoi)jaW)SBOZEEo%WKB$fC9p%GEVaqRL!uX{WP=I2S7;o|?ZBuUl{;te?vAlcR> znV@r1-t|f?Ns6`B?;d!xmVkjV=0Zf2%WzO(=1T_63qLR*87QH7-i7>CN+~f=jeH>@ zQ3y&%xVO}`71siYNE?{%T{8BZ(`vPX60vwkVaNpAwr%^R`T2RL?y9G0udO^()Y<^a zR*E<8J2PK7H#Zm8mC7l!qgCkgLc$N`Rd@dPS^>#cN=W|qe~Y51)oQhJ)!9`Bu&z2; zeqKq&=1YuFYugk zvS&&WGi|*NY5LH>FMd`MN#xB0Fcy5zE5okn_BX`yW|-f zAlW-b^1{opF)tN)uT0k?;`MPHI}?HVrfk{g*4lHKS%8pVNRd?H7Y&-<{jjW%#YQCo zvLrJuNJ-u&A0mEULZlJ#t~id15;lhn;vqDd->rPU@8y!>FO-3#5SOiN*xTz+SIA;# zvpn(Lil5CBzg_ui+h^nxsY)sFH4ZLB^t9}gu96Q?{G$3|Hhj!PH#Ijm*Q%P&-N*mn z=Su>}L93;X4@>?O03@I9;!lp+2fi=J%(DMW9(eh?_zT@GUE}uu^TU$8Jzf6vYW|v8 z(iP$WX8Gg9J%e&s0a=tq5(YFHjWd~9T=;{&C0J%(_R!vgh_@$6@`=#gx;3`lf1nvA z^D4Y018SquI4=Vy$lI?%JK}{YAlw>~DYOFr%2h^Uh2%*u`5qDR{LDR5tc>zIBzIRp z&n1pfEPwYS;x1<1<;!~*z;kFMBMpeF*Aj>-z(i4WEHf{Hv}h7u9QgawG(GTtQEsZC zjp_i5A9a8X(AP&r)n!0N45np3mH`>D5g0LXmRHC!AR{&cBPP!B3K=m#{ufTgIL>3b R+(ZBX002ovPDHLkV1mq7!VLfb literal 0 HcmV?d00001 diff --git a/static/images/icons/user_select.png b/static/images/icons/user_select.png new file mode 100644 index 0000000000000000000000000000000000000000..630bd62c519ab5ebcaaf8a2b1d314442849e9550 GIT binary patch literal 4774 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 AYXATM literal 0 HcmV?d00001 diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a GIT binary patch literal 4023 zcmaJ^c|25Y`#+XyC`+5OUafkYqmlSEl)+V zC53EJB$S8m@9Vz4*Y&-Yb3W(3Y;(d~fM1#)0003Cvn<7K1}HtM`$d{YenwQ;C^-S(Bw!dKGPRQ{5d$=<+Bb^=&62=9 zyT3g7ffNAnXPh^N0JjBz*>4v5+kn2(URc+5KlGCVF`&OikMw zfqqB8XK2+;V}LL3B>(G>)mVo1y5YXue4A!H*}eQbcg`t##g9HFply&`y$2%Ui`qzhj;o^=JbnXrW48s;xu1fDr z0))La)fp=QkX*N#V0eTJXiqO11AyvJlBY^iBrIQo0Kg>g;^BKnJ9a%2Wz`F2Ka;Jl zm*B>3H!<9`zg|z+c>6eWFMqydnvs-!J))2I(LEmNyxo~2!VjOpv<0SyMNVCup-60Z zm&|RDtd8R2HEIU!!OA0Ic6-G4K{`MZ8S%UjEL!s#vj{vLBWeqI(M&DkE;aT|aziV8 zRiTRN#GNwykvPx{R==`-rP>^pa`AyJ&s**Q!zU$j(pO&Q(YolGLT=2o0>3Wlhx?Gs z#|6b*$3F$ofzT`QIA#}2(Cg}Z?5V5KrtX)WrInh*aTCsP#{@V|*7<0lm`r^xmJQm^ z9n0J^3p#yCxWPX>G11)F(iv5vIIHkbqzdH37jX&JZ~&5AV*OAtL}axw*aLAt(b-!Vf)wRw=S8((e`~WLqlDBobRbj)NXB zS>W`fibSDA>uYN*&&Ml75iep!E%^%eV~SElj=}K;6TCNXs2gYG-L`En&3y~H9fP=W z(t?;5Xalv2F5ROUkg3?7C5~z>QYq|tok{Q}toT5u=~a9mBKDc4zfSM=`?OF-lS(V+pE1(m&x$HE_9vj;Cy)b@OiPMS0bs1 zRL9h?)T!I{4m1aY9>(pR_IDhF?wocEy=CU`m(5ry-&^rJJ*Bb^PfNARJ1{|*1e;FV zGljKhHo|}41Rg|1n&m~I3+-_gFQww-#b2u97o3fIsg67|%6`|aJX{~F&RPa;TayWd zp0l(=(QbROypp_fCeOBW3BJ5PJg@UU`&fs3hd{?U6&@7>mHWNEWnN`rWk>r%`fK|= z=BRVxb2I(y07{Nwj&jZtf{0iN;H%QAvaO1&8VKn8tp5f#! zN#ZlRm)#|IR8144l_=#8)5guWCE`B$T_;p_&0iWR+1=_>mDK1{*kw_8pi=2ewD%Z1 zSVG^6Mc(Vd()@@Y^wYz75Yz{X8jD_x*B)w5@yqn8>U#Kw-qzNvJjm)}wamur^knR_o)EvaGVkz%1gB=%{GIq3%OVcBFpT?D{PKZ079tIh|$fvf?svxl^`nuZV1~ zE?xILl^)O*=ufGhDH_pyUfNjteA>xd#yg*uvj~^Cbv&_EBt0-)!j4#crI>Uhq&0Oy z`b$;!qc=;1Sx>VD%ia^;erQ9!2)(mrrJ5zv;`SWLHu^Td;yik`Z7ioatGHn?aSD1m z@U+Y6wVHj_e`PD>_Noz^2O3?6Yg*5_BlMB@A05*?`Y-jlZ-m^4uDw+Y8A8@7g!P7H zgzZ?*UDN&1x{>g`ZiMkweBs14cdln#6I?YHr7!-)nyY$73 zckv0h$WfEY^%7rYR&g4G-pZL>Vy{3sVkc#OsI@6s?(5whAJqvO5)LEZTD6>Rdkl&h zHusOIlp{!GNUVm69y+XkTlKT;Lp%Ce`igQdYushcyC!}iq4eq#-2van)Ie{RuRq2g zH=9+-th`-$F*y3W=|Z{)eb0Wrxy$2?eT~S=V>Iq5|4fbS@l5+PI<90O)5aZFv- z{-7I*`r#90Z5HrSgU=dsgpnk5?TNyom7_`TM^@+iv+q@OQnFLB3o!zOw1-FDsZ|`T zu=YA~Bw1jbF-d$SlN|kOWn5vEwm2Z>A8FZD_z+WWBPebOEjbeGD(MZ=TPSr~@YnLZU)h_#alQiZu;syu@U^WCAXKCKVZHf%!^8wGMR7*MP@UWP13nuk#~M$mU% z$uszs);TA=a{4!`8Qm`Sn+rdD>w9SLzQ0p-yTPboznqn+ASr#=Td7#J^gVESP9li^ zi{+qONJ8-4_1gZ8&pUnyeZKH;^FF?wIQ-qc-o5j=ix69oFFJQK<>#B|k#6%g^Bx5= zg}8(qIXM{t>6)*e9mylb4~qA6z6x{v$(W(tnHt&{T|3_Cyxupzb2YZJuAEW2NM+wC zy^Cm4Xp*b$U?3N6t(SESgt9ByRYOfRav2BL4L5BTyMExBieFo==ue&BT!*e)T3lo5 zDDLL`TT0PQo#}RDFM1G`iU*85$sTyH1rh6w$KbJ^jI%9xJpkZ2Ot5#RJ6l;IaAcw? zc1uS!m`LHE0YJ|nn1aRm;pt!xyf=Y_gs`91LBIr0B*Y1BrDjDz;e80`5Gvj-jfh?28eh%7933UC(#hWNXRd{2+nv*426JysnGq9kiSVeTiJk7WGWsE zSJhI%!8FvtM|D(Ta2<7RO=YmU8cYkSrU`}VsK7K3oKsT`{QH1#yiq;95Ev7)-@Z6A zB*ceKry!uvpr9btAPrSA)tiIW(SfR|L)Fz)I2tN628oUhRw2<8{#Y=<({NM*g-#%o zz*`ov9^?Qz62f8ncL+p^mDN9nNwnXI;-m~3jHN(fs%lUoaVxH0+B7-_|6dyas!g+J zQ1DO;o<-jJ7|Hhj9zgQ@T40Nl&|EJ)8M4T?#8vfJ1oXI~g0G`C@dMc;A zjqo=rI2*RN7A8ja!Tlbd0QX!*+E1x@K*^ZD{)%J_pe^QRp=+j?jCO1cZN?ryPlN&29$7&Ac>xMM*DwQ*NxtIV%NlmI`lJr2JVZ!|SUM)s{m5-r-hrCim zGEunpTX?76P{|0K32-Ym!wnJFjcNAROWZ-AL8+J1F_-(QHNzMCON{8s2|iO0D*vNr zQhflINtwvCi<$Z|n(_I*HbSmD?h6-!bQZ5=hQ8L&m)|I~)%u)gyCW_QRg`w5P~OC1 z%uCbu%`2nB5zR=>{took!+yKEDi`b>pzAf)^KDGtUM8R*t#G@mH2=PKe4(Ipz-y*c zc~Kzl;GA)s+53_RGg-}F1`$4QjX29!BLu$pn{&KmMu86HO}Y2@q{Jb7v=N}{+PQWx zHF2LIb9qiO+DI~r+eb9ubK7oh6KFdUL6e;9wKv_RvXh$HuqHw)inh2kQGM>}%G4V% zmjkEYsw}?{m%gW>#P7wTXwk}cZO--qydYul`!3w~l(JgX@=yG7|6z{6kO^>c^P;zI zAmO}-iEA~6%U7@PbJN4EXW!v;|5owjl2$w4ZZqafWPCshmRxS}7Zwlg(*rDz;hg}s SYs}WS&%*SCNx89m_