first commit
This commit is contained in:
1
moehu/moehu_admin/.pydio
Normal file
1
moehu/moehu_admin/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
6609d405-8ad0-44e8-83f7-6534eb4bf75b
|
||||
0
moehu/moehu_admin/README.md
Normal file
0
moehu/moehu_admin/README.md
Normal file
9
moehu/moehu_admin/babel.config.js
Normal file
9
moehu/moehu_admin/babel.config.js
Normal file
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
||||
1
moehu/moehu_admin/bin/.pydio
Normal file
1
moehu/moehu_admin/bin/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
55d0c799-794b-47f5-b30f-2aeda081f5f4
|
||||
1
moehu/moehu_admin/bin/config/.pydio
Normal file
1
moehu/moehu_admin/bin/config/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
540faacb-8c40-430c-858c-b9cd6218e349
|
||||
94
moehu/moehu_admin/bin/config/index.js
Normal file
94
moehu/moehu_admin/bin/config/index.js
Normal file
@@ -0,0 +1,94 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
module.exports = {
|
||||
pageConfig: (name) => {
|
||||
return `
|
||||
import "@pageLess/${ name }.less";
|
||||
import { Component } from 'vue-property-decorator';
|
||||
import { ${ name }Logic } from "@logic/page/${ name }.logic";
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
|
||||
@Component
|
||||
export default class ${ name } extends VueCustomize {
|
||||
private logic: ${ name }Logic<${ name }> = new ${ name }Logic(this);
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '${ name }',
|
||||
isLogin: true
|
||||
};
|
||||
|
||||
public async created() {
|
||||
await this.logic.StartUp();
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render() {
|
||||
return (
|
||||
<div class="${ name }">
|
||||
${ name }
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
`
|
||||
},
|
||||
logicConfig: (name) => {
|
||||
return `
|
||||
import { BaseLogic } from "@logic/Base.logic";
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { Methods, VueCustomize } from "@logic/Base.type";
|
||||
import { UserServiceImpl } from "@impl/User.service.impl";
|
||||
|
||||
export class ${ name }Logic<T extends VueCustomize> extends BaseLogic implements Methods {
|
||||
|
||||
@Autowired
|
||||
public readonly UserServiceImpl!: UserServiceImpl;
|
||||
|
||||
constructor(_: T) {
|
||||
super();
|
||||
this._ = _;
|
||||
}
|
||||
|
||||
public async StartUp(): Promise<void> {
|
||||
|
||||
}
|
||||
}
|
||||
`
|
||||
},
|
||||
serviceConfig: (name) => {
|
||||
return `
|
||||
export interface ${ name }Service {
|
||||
IndexClass(params: object): Promise<any>;
|
||||
}
|
||||
`
|
||||
},
|
||||
implPathConfig: (name) => {
|
||||
return `
|
||||
import { ${ name }Service } from "@service/${ name }.service";
|
||||
import { Injectable } from "@ann/Ioc.annotation";
|
||||
import { GET } from "@ann/Http.annotation";
|
||||
|
||||
@Injectable()
|
||||
export class ${ name }ServiceImpl implements ${ name }Service {
|
||||
|
||||
@GET({ useHandle: false })
|
||||
public async IndexClass(params: object): Promise<any> { }
|
||||
|
||||
}
|
||||
`
|
||||
},
|
||||
lessConfig: (name) => {
|
||||
return `
|
||||
@import "../mixin/index";
|
||||
|
||||
.${ name } {
|
||||
}
|
||||
`
|
||||
}
|
||||
}
|
||||
105
moehu/moehu_admin/bin/tinit
Executable file
105
moehu/moehu_admin/bin/tinit
Executable file
@@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env node
|
||||
const { program } = require('commander');
|
||||
const packageConfig = require("../package.json");
|
||||
const fs = require("fs");
|
||||
const path = require('path');
|
||||
const Config = require("./config");
|
||||
|
||||
var isWin = /^win/.test(process.platform);
|
||||
const RootPath = process.cwd();
|
||||
|
||||
program
|
||||
.requiredOption('-t, --file-type <type>', '文件类型: [page,logic,service,impl,less]')
|
||||
.option('-n, --file-name <name>', '被创建的文件名称')
|
||||
.option('-i, --is-create <is>', '是否为 -t 参数自动创建相关文件类型', false);
|
||||
|
||||
program.version(packageConfig.version, '-v, --version', '显示当前的版本');
|
||||
|
||||
program.parse(process.argv);
|
||||
|
||||
// 存储终端的参数
|
||||
let programOptions = program.opts();
|
||||
let OtherFileType = program.parse(process.argv).args
|
||||
|
||||
// tsx 页面路径
|
||||
let PagePath = isWin ? `${RootPath}\\src\\application\\page\\${UpperCase(programOptions.fileName)}.tsx` :`${RootPath}/src/application/page/${UpperCase(programOptions.fileName)}.tsx`;
|
||||
// logic 页面路径
|
||||
let LogicPath = isWin ? `${RootPath}\\src\\application\\logic\\page\\${UpperCase(programOptions.fileName)}.logic.ts` : `${RootPath}/src/application/logic/page/${UpperCase(programOptions.fileName)}.logic.ts`;
|
||||
// service 页面路径
|
||||
let ServicePath = isWin ? `${RootPath}\\src\\core\\service\\${UpperCase(programOptions.fileName)}.service.ts` : `${RootPath}/src/core/service/${UpperCase(programOptions.fileName)}.service.ts`;
|
||||
// Impl 页面路径
|
||||
let ImplPath = isWin ? `${RootPath}\\src\\core\\service\\impl\\${UpperCase(programOptions.fileName)}.service.impl.ts` : `${RootPath}/src/core/service/impl/${UpperCase(programOptions.fileName)}.service.impl.ts`;
|
||||
// Less 页面路径
|
||||
let LessPath = isWin ? `${RootPath}\\src\\application\\assets\\less\\page\\${UpperCase(programOptions.fileName)}.less` : `${RootPath}/src/application/assets/less/page/${UpperCase(programOptions.fileName)}.less`;
|
||||
|
||||
// 需要创建的文件类型
|
||||
let FileList = ['page', 'logic', 'service', 'impl', 'less'];
|
||||
|
||||
// 是否需要为 controller 联合创建所有文件
|
||||
if (programOptions.isCreate) {
|
||||
FileList.forEach(val => replaceTplText(val));
|
||||
console.log("成功创建文件...");
|
||||
} else {
|
||||
// 循环创建多个文件
|
||||
if (OtherFileType.length !=0 ) {
|
||||
[...OtherFileType, programOptions.fileType].forEach(v => replaceTplText(v))
|
||||
} else {
|
||||
replaceTplText(programOptions.fileType)
|
||||
}
|
||||
console.log("成功创建文件...");
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换模板的内容,并将内容写入文件。
|
||||
*/
|
||||
let FileText = ""
|
||||
function replaceTplText (action) {
|
||||
switch (action) {
|
||||
case 'page':
|
||||
fs.writeFileSync(PagePath, Config.pageConfig(UpperCase(programOptions.fileName)));
|
||||
break;
|
||||
case 'logic':
|
||||
fs.writeFileSync(LogicPath, Config.logicConfig(UpperCase(programOptions.fileName)));
|
||||
break;
|
||||
case 'service':
|
||||
fs.writeFileSync(ServicePath, Config.serviceConfig(UpperCase(programOptions.fileName)));
|
||||
break;
|
||||
case 'impl':
|
||||
fs.writeFileSync(ImplPath, Config.implPathConfig(UpperCase(programOptions.fileName)));
|
||||
break;
|
||||
case 'less':
|
||||
fs.writeFileSync(LessPath, Config.lessConfig(UpperCase(programOptions.fileName)));
|
||||
break;
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 单词首字母大写
|
||||
* @param str
|
||||
* @returns {void | string | *}
|
||||
* @constructor
|
||||
*/
|
||||
function UpperCase (str) {
|
||||
return str.replace(str[0],str[0].toUpperCase())
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取文件内容
|
||||
* @param path
|
||||
* @returns {*}
|
||||
* @constructor
|
||||
*/
|
||||
function GetFileText (path) {
|
||||
return (fs.readFileSync( pathJoin(path), 'utf-8' )).toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 拼接路径
|
||||
* @param paths
|
||||
* @returns {string}
|
||||
*/
|
||||
function pathJoin (paths) {
|
||||
return path.join(__dirname, paths)
|
||||
}
|
||||
29
moehu/moehu_admin/gulpfile.js
Normal file
29
moehu/moehu_admin/gulpfile.js
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
const gulp = require('gulp');
|
||||
const exec = require('child_process').exec;
|
||||
|
||||
/**
|
||||
* 执行 vue-cli-service route 命令进行路由编译
|
||||
*/
|
||||
gulp.task('AutoCompileRouter', function (cb) {
|
||||
return exec('npm run route', (err, stdout, stderr) => {
|
||||
if (err) {
|
||||
console.log("编译失败: ", err);
|
||||
cb(err)
|
||||
} else {
|
||||
console.log("编译成功");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* 监听 page 所有文件的修改,自动触发 AutoCompileRouter 任务
|
||||
*/
|
||||
gulp.task('auto', function () {
|
||||
gulp.watch('src/application/page/**/*', gulp.parallel('AutoCompileRouter'));
|
||||
});
|
||||
|
||||
gulp.task('default', gulp.parallel('auto'));
|
||||
13
moehu/moehu_admin/move.sh
Executable file
13
moehu/moehu_admin/move.sh
Executable file
@@ -0,0 +1,13 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 需要被复制的文件
|
||||
form_path=dist/
|
||||
|
||||
# 被复制去的地方
|
||||
to_path=/Users/bmy/Desktop/moehu/moehu-backend/static/admin
|
||||
|
||||
|
||||
cp -R ${form_path} ${to_path}
|
||||
|
||||
echo "打包成功..."
|
||||
echo "已复制到后端静态资源文件夹..."
|
||||
30150
moehu/moehu_admin/package-lock.json
generated
Normal file
30150
moehu/moehu_admin/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
56
moehu/moehu_admin/package.json
Normal file
56
moehu/moehu_admin/package.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"name": "tsx-vue-class-api",
|
||||
"version": "1.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"start": "concurrently \"npm run route && npm run serve\" \"gulp\" ",
|
||||
"serve": "cross-env NODE_ENV=dev vue-cli-service serve",
|
||||
"build": "cross-env NODE_ENV=production vue-cli-service build --report-json",
|
||||
"route": "vue-cli-service route",
|
||||
"analyzer": "webpack-bundle-analyzer ./dist/report.json",
|
||||
"online": "serve -s ./dist"
|
||||
},
|
||||
"bin": {
|
||||
"tinit": "./bin/tinit"
|
||||
},
|
||||
"dependencies": {
|
||||
"axios": "^0.21.1",
|
||||
"core-js": "^3.6.5",
|
||||
"element-ui": "^2.15.2",
|
||||
"vue": "^2.6.11",
|
||||
"vue-class-component": "^7.2.3",
|
||||
"vue-property-decorator": "^8.4.2",
|
||||
"vue-router": "^3.2.0",
|
||||
"vuex": "^3.4.0",
|
||||
"vuex-class": "^0.3.2",
|
||||
"isarray": "^2.0.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/isarray": "^2.0.0",
|
||||
"@babel/generator": "^7.11.4",
|
||||
"@babel/parser": "^7.11.4",
|
||||
"@babel/types": "^7.11.0",
|
||||
"@vue/cli-plugin-babel": "~4.5.0",
|
||||
"@vue/cli-plugin-router": "~4.5.0",
|
||||
"@vue/cli-plugin-typescript": "~4.5.0",
|
||||
"@vue/cli-plugin-vuex": "~4.5.0",
|
||||
"@vue/cli-service": "~4.5.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"commander": "^6.2.0",
|
||||
"compression-webpack-plugin": "^5.0.1",
|
||||
"es6-promise": "^4.2.8",
|
||||
"glob": "^7.1.3",
|
||||
"gulp": "^4.0.2",
|
||||
"less": "^3.0.4",
|
||||
"less-loader": "^5.0.0",
|
||||
"pify": "^4.0.1",
|
||||
"reflect-metadata": "^0.1.13",
|
||||
"serve": "^14.2.1",
|
||||
"typescript": "~3.9.3",
|
||||
"uglifyjs-webpack-plugin": "^2.2.0",
|
||||
"vue-cli-plugin-tsx-autorouter": "^1.3.8",
|
||||
"vue-template-compiler": "^2.6.11",
|
||||
"webpack-bundle-analyzer": "^3.8.0",
|
||||
"yamljs": "^0.3.0"
|
||||
}
|
||||
}
|
||||
1
moehu/moehu_admin/public/.pydio
Normal file
1
moehu/moehu_admin/public/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
80c1fe48-83e8-4d0e-93ef-09dd797f83ba
|
||||
1
moehu/moehu_admin/public/fonts/.pydio
Normal file
1
moehu/moehu_admin/public/fonts/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
2d531665-9a96-4802-97bf-000766273abd
|
||||
1
moehu/moehu_admin/public/img/.pydio
Normal file
1
moehu/moehu_admin/public/img/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
cdcb6e7e-d20d-4a44-996f-9894d2269d49
|
||||
326
moehu/moehu_admin/public/img/Designer.svg
Normal file
326
moehu/moehu_admin/public/img/Designer.svg
Normal file
@@ -0,0 +1,326 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 723.8 427.5" style="enable-background:new 0 0 723.8 427.5;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st1{fill:#E5E5E5;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st2{fill:none;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st3{fill:#E5E5E5;}
|
||||
.st4{fill:none;stroke:#E5E5E5;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st5{fill:#BDBDBD;}
|
||||
.st6{fill:#CDCDCD;}
|
||||
.st7{fill:#DEDEDE;}
|
||||
.st8{fill:#EEEEEE;}
|
||||
.st9{fill:#14223C;}
|
||||
.st10{fill:#ACACAC;}
|
||||
.st11{fill:none;stroke:#E5E5E5;stroke-width:2;stroke-miterlimit:10;}
|
||||
.st12{fill:none;stroke:#DBDBDB;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st13{opacity:0.3;}
|
||||
.st14{opacity:0.3;fill:#ACACAC;enable-background:new ;}
|
||||
.st15{opacity:0.3;fill:#E5E5E5;enable-background:new ;}
|
||||
.st16{opacity:0.17;fill:#ACACAC;enable-background:new ;}
|
||||
.st17{fill:none;stroke:#FFFFFF;stroke-linecap:square;stroke-miterlimit:10;}
|
||||
</style>
|
||||
<title>Designer</title>
|
||||
<g>
|
||||
<g id="Layer_2_1_">
|
||||
<g id="Layer_1-2">
|
||||
<path class="st0" d="M394.8,397.1c1.3,0.7,1.8,2.2,1.1,3.5c-0.2,0.4-0.5,0.7-0.9,1l-38.2,24.8l0,0l-2.1-3.3l-20.8-32.2l-5.3-8.1
|
||||
l-39.5-61l-1.2-1.8L273,297l-0.1-0.2L262.7,281l39.2,2.3l1,2l17.4,36.5l24.6,51.6l4.2,8.8l6.3,13.2c3.9,8.6,12.1,8,19,4.8
|
||||
l7.5-3.3c2.7-1.2,5.7-1.6,8.6-1.1C392,396,393.4,396.4,394.8,397.1L394.8,397.1z"/>
|
||||
<polygon class="st1" points="349,382.1 333.8,390.9 328.5,382.8 344.8,373.3 "/>
|
||||
<path class="st2" d="M371.9,394.9"/>
|
||||
<line class="st2" x1="351.2" y1="386.8" x2="347.6" y2="389.2"/>
|
||||
<line class="st2" x1="353.2" y1="392.3" x2="349.7" y2="394.3"/>
|
||||
<line class="st2" x1="355.8" y1="397" x2="352.3" y2="399"/>
|
||||
<path class="st2" d="M395,401.5l-38.3,24.8l-2.1-3.3l40.1-26l0,0c1.3,0.6,1.8,2.2,1.1,3.5C395.7,401,395.4,401.3,395,401.5z"/>
|
||||
<rect x="128.8" y="246.7" class="st3" width="357.6" height="9.5"/>
|
||||
<path class="st4" d="M447.1,224.4v90.6c0,6.1,4.9,11,11,11l0,0h107.8c6.1,0,11-4.9,11-11l0,0"/>
|
||||
<path class="st4" d="M564.8,285.7h46.6c1.1,0,2,0.9,2,2v24.8c0,1.1-0.9,2-2,2h-46.6c-1.1,0-2-0.9-2-2v-24.8
|
||||
C562.8,286.6,563.7,285.7,564.8,285.7z"/>
|
||||
<path class="st4" d="M603.2,292.3h3.6c0.6,0,1,0.4,1,1v13.5c0,0.6-0.4,1-1,1h-3.6c-0.6,0-1-0.4-1-1v-13.5
|
||||
C602.2,292.8,602.6,292.3,603.2,292.3z"/>
|
||||
<path class="st4" d="M592,292.3h3.6c0.6,0,1,0.4,1,1v13.5c0,0.6-0.4,1-1,1H592c-0.6,0-1-0.4-1-1v-13.5
|
||||
C591,292.8,591.4,292.3,592,292.3z"/>
|
||||
<path class="st4" d="M585.1,304.4L585.1,304.4l-6-10.6l0,0c-0.5-1.2-2-1.8-3.2-1.2c-0.6,0.3-1,0.7-1.3,1.3l-5.9,10.5l0,0
|
||||
c-0.2,0.3-0.2,0.7-0.2,1.1c0,1.4,1.1,2.5,2.5,2.5l0,0h12c1.3,0,2.4-1.1,2.4-2.4C585.3,305.1,585.2,304.7,585.1,304.4L585.1,304.4
|
||||
z"/>
|
||||
<line class="st4" x1="576.9" y1="314.9" x2="576.9" y2="307.9"/>
|
||||
<path class="st1" d="M368.9,90h148.5c1.2,0,2.2,1,2.2,2.2v105.5c0,1.2-1,2.2-2.2,2.2H368.9c-1.2,0-2.2-1-2.2-2.2V92.2
|
||||
C366.7,91,367.7,90,368.9,90z"/>
|
||||
<path class="st1" d="M356.9,90h154.5c1.2,0,2.2,1,2.2,2.2v105.5c0,1.2-1,2.2-2.2,2.2H356.9c-1.2,0-2.2-1-2.2-2.2V92.2
|
||||
C354.7,91,355.7,90,356.9,90z"/>
|
||||
<path class="st0" d="M505.7,191h-142c-1.1,0-2-0.9-2-2v-89c0-1.1,0.9-2,2-2h142c1.1,0,2,0.9,2,2v89
|
||||
C507.7,190.1,506.8,191,505.7,191z"/>
|
||||
<path class="st3" d="M382.8,115.6h57.5c0.8,0,1.5,0.7,1.5,1.5v40.7c0,0.8-0.7,1.5-1.5,1.5h-57.5c-0.8,0-1.5-0.7-1.5-1.5v-40.7
|
||||
C381.4,116.3,382,115.6,382.8,115.6z"/>
|
||||
<path class="st0" d="M377.8,110.5h57.5c0.8,0,1.5,0.7,1.5,1.5v40.7c0,0.8-0.7,1.5-1.5,1.5h-57.5c-0.8,0-1.5-0.7-1.5-1.5V112
|
||||
C376.3,111.2,376.9,110.5,377.8,110.5z"/>
|
||||
<path class="st1" d="M376.3,112v3.6h60.4V112c0-0.8-0.7-1.5-1.5-1.5h-57.5C376.9,110.5,376.3,111.2,376.3,112z"/>
|
||||
<rect x="381.4" y="121.3" class="st5" width="9.7" height="17"/>
|
||||
<rect x="395" y="121.3" class="st6" width="9.7" height="17"/>
|
||||
<rect x="408.5" y="121.3" class="st7" width="9.7" height="17"/>
|
||||
<rect x="422.1" y="121.3" class="st8" width="9.7" height="17"/>
|
||||
<rect x="381.4" y="142.3" class="st8" width="50.4" height="7"/>
|
||||
<path class="st3" d="M435,133.9h57.5c0.8,0,1.5,0.7,1.5,1.5v40.7c0,0.8-0.7,1.5-1.5,1.5H435c-0.8,0-1.5-0.7-1.5-1.5v-40.7
|
||||
C433.5,134.6,434.2,133.9,435,133.9z"/>
|
||||
<path class="st0" d="M429.9,128.8h57.5c0.8,0,1.5,0.7,1.5,1.5V171c0,0.8-0.7,1.5-1.5,1.5h-57.5c-0.8,0-1.5-0.7-1.5-1.5v-40.7
|
||||
C428.4,129.5,429.1,128.8,429.9,128.8z"/>
|
||||
<path class="st1" d="M428.4,130.3v3.6h60.4v-3.6c0-0.8-0.7-1.5-1.5-1.5h-57.5C429.1,128.8,428.4,129.5,428.4,130.3z"/>
|
||||
<rect x="433.5" y="139.6" class="st5" width="9.7" height="17"/>
|
||||
<rect x="447.1" y="139.6" class="st6" width="9.7" height="17"/>
|
||||
<rect x="460.7" y="139.6" class="st7" width="9.7" height="17"/>
|
||||
<rect x="474.2" y="139.6" class="st8" width="9.7" height="17"/>
|
||||
<rect x="433.5" y="160.6" class="st8" width="50.4" height="7"/>
|
||||
<rect x="416.9" y="200" class="st1" width="47" height="33.7"/>
|
||||
<path class="st1" d="M405.7,233.7h52V200h-47v28.8C410.7,231.5,408.5,233.7,405.7,233.7C405.7,233.7,405.7,233.7,405.7,233.7z"/>
|
||||
<rect x="410.7" y="200" class="st9" width="47" height="6.8"/>
|
||||
<path class="st2" d="M405.7,233.7h52V200h-47v28.8C410.7,231.5,408.5,233.7,405.7,233.7C405.7,233.7,405.7,233.7,405.7,233.7z"/>
|
||||
<polygon class="st0" points="239.4,113.5 215.7,132.9 213.5,130.7 236.7,110.2 "/>
|
||||
<rect x="327.8" y="226.1" class="st0" width="98.5" height="7.6"/>
|
||||
<path class="st0" d="M359.4,124.8l-11.8,10.8l0.2,0.1l6,5.1l0,0l0.3,0.3l0.2,0.2c1.8,1.7,1.9,4.5,0.4,6.3l-0.3,0.3l-5.1,6
|
||||
c-1.9,2.2-4.7,3.3-7.6,2.8l-4.2,5.2l-0.3,0.3l-2.7,3.3l-28.2,34.8c-3.3,4.1-8.8,5.6-13.8,3.9l-55.2-19.3c-4.6-1.7-7-6.7-5.3-11.3
|
||||
s6.7-7,11.3-5.3l0,0l52.4,18.6l28.5-30.7l2.9-3.1l4.2-4.5c5.2-4.9-0.7-3.7,0-5l13.4-28.3c0.7-1.4,2.3-1.9,3.7-1.2
|
||||
c1,0.5,1.6,1.5,1.5,2.6c0,0.4-0.1,0.8-0.3,1.1l-6.8,14l-0.6,1.3l1-0.9l12.3-11.3c1.1-1,2.9-0.9,3.9,0.2c0.5,0.5,0.7,1.2,0.7,1.9
|
||||
C360.2,123.6,359.9,124.3,359.4,124.8z"/>
|
||||
<path class="st0" d="M317.5,104l12.5-11c1.8-1.6,4.5-1.4,6.1,0.4l47.8,54c1.6,1.8,1.4,4.5-0.4,6.1l-12.5,11
|
||||
c-1.8,1.6-4.5,1.4-6.1-0.4l-47.8-54C315.6,108.3,315.7,105.6,317.5,104z"/>
|
||||
|
||||
<rect x="324" y="102.2" transform="matrix(0.7491 -0.6625 0.6625 0.7491 11.8717 246.6514)" class="st10" width="15" height="11"/>
|
||||
|
||||
<rect x="333.4" y="112.8" transform="matrix(0.7491 -0.6625 0.6625 0.7491 7.1974 255.5444)" class="st5" width="15" height="11"/>
|
||||
|
||||
<rect x="342.8" y="123.4" transform="matrix(0.7491 -0.6625 0.6625 0.7491 2.5173 264.4269)" class="st6" width="15" height="11"/>
|
||||
|
||||
<rect x="352.2" y="134" transform="matrix(0.7491 -0.6625 0.6625 0.7491 -2.1603 273.3162)" class="st7" width="15" height="11"/>
|
||||
|
||||
<rect x="361.6" y="144.6" transform="matrix(0.7491 -0.6625 0.6625 0.7491 -6.8412 282.2117)" class="st8" width="15" height="11"/>
|
||||
<path class="st0" d="M264.1,157.8l-5.6,16.2c-1.6,4.7-17.3,9.9-22,8.3l3.3-14.5c0,0,5.3,1.4,6.8-2.7l3.5-10.1"/>
|
||||
<rect x="499.4" y="246.7" class="st1" width="26" height="179.7"/>
|
||||
<rect x="423.7" y="246.7" class="st0" width="75.8" height="179.7"/>
|
||||
<rect x="102.8" y="246.7" class="st1" width="26" height="179.7"/>
|
||||
<rect x="89.8" y="246.7" class="st0" width="13" height="179.7"/>
|
||||
<rect x="39.8" y="233.7" class="st0" width="510" height="13"/>
|
||||
<rect x="549.8" y="233.7" class="st1" width="65.9" height="13"/>
|
||||
<polygon class="st0" points="231.2,241.4 243.6,229.1 235.7,245.9 "/>
|
||||
<path class="st3" d="M200.7,308.2h24.7l0,0l0,0c0,6.1-4.9,11-11,11h-2.7C205.6,319.2,200.7,314.3,200.7,308.2L200.7,308.2
|
||||
L200.7,308.2z"/>
|
||||
<rect x="207.1" y="308.2" class="st3" width="11.7" height="108.5"/>
|
||||
<path class="st3" d="M262.8,426.4L262.8,426.4L262.8,426.4h-99.5l0,0l0,0c0-6.5,5.2-11.7,11.7-11.7H251
|
||||
C257.5,414.7,262.8,419.9,262.8,426.4C262.8,426.4,262.8,426.4,262.8,426.4z"/>
|
||||
<path class="st3" d="M185.2,321.5h14.7c1.2,0,2.2,1,2.2,2.2v0c0,1.2-1,2.2-2.2,2.2h-14.7c-1.2,0-2.2-1-2.2-2.2v0
|
||||
C183,322.5,184,321.5,185.2,321.5z"/>
|
||||
<line class="st11" x1="192.5" y1="323.7" x2="210" y2="323.7"/>
|
||||
<path class="st1" d="M300.2,296.9c0,0-100.9,1.2-101.4,1.1c-1-0.1-2-0.3-2.9-0.6c-2.5-0.9-4.7-2.4-6.6-4.3
|
||||
c-11-10.9-11.3-28.6-1.2-40.3c3.3-3.9,6.6-7.5,9-9.8l5.3-5.6c6.6-6.9,10.8-15.8,11.9-25.4c0.5-4.8,1.9-9.4,3.9-13.8l11.4-24
|
||||
c2.6-5.5,8.9-8.1,14.6-6c7.3,2.7,14.4,5.3,14.4,5.3c-0.5,1.7-0.8,3.5-0.8,5.3c0,4.2,1.3,8.3,3.7,11.8l0.6,12.3
|
||||
c0.4,9-4.2,17.6-12,22.1c-4.2,2.5-7.6,6.2-9.7,10.7l-0.3,0.6L238,241l-2.3,4.9l-1.6,3.5c-1.1,2.5,0,5.5,2.5,6.6
|
||||
c0.3,0.1,0.6,0.2,0.9,0.3l11.4,2.7l41.1,12c3.4,0.8,6.5,2.7,8.8,5.3c0.4,0.4,0.7,0.9,1.1,1.4l0.2,0.3c1.5,2.2,2.4,4.6,2.8,7.2
|
||||
C303.3,289.3,302.4,293.5,300.2,296.9z"/>
|
||||
<path class="st1" d="M231.3,231.7"/>
|
||||
<path class="st12" d="M238.6,178.6l-11.4,23.9c-1.6,3.4-2.6,6.9-3,10.6c-1.3,11.7-6.4,22.6-14.6,31.1l-5.3,5.6l-0.2,0.2
|
||||
c-0.2,0.2-0.7,0.7-1.3,1.3c-6.7,7.1-8.4,17.5-4.3,26.4c2.6,5.5,7.5,10,16.5,10c15,0,41.4-0.1,58.6-0.2c5.1,0,9.2,4.1,9.3,9.2
|
||||
c0,0,0,0,0,0.1l0,0"/>
|
||||
<path class="st0" d="M258.5,173.5c0.1-0.3,0.2-0.7,0.3-1"/>
|
||||
<path class="st0" d="M258.5,173.5"/>
|
||||
|
||||
<ellipse transform="matrix(0.5122 -0.8589 0.8589 0.5122 14.6302 256.638)" class="st1" cx="233.2" cy="115.4" rx="16.2" ry="16.2"/>
|
||||
<path class="st1" d="M227.2,104.8c1.8-1,3.9-1.6,6-1.6"/>
|
||||
<path class="st1" d="M233.2,127.6"/>
|
||||
<path class="st1" d="M282.2,116.7l-16.4,16.4h-9.6c-2.7,0-4.8,2.2-4.8,4.8c0,2.7,2.2,4.8,4.8,4.8l-12.8,12.8
|
||||
c-10.5-10.9-10.2-28.3,0.7-38.9C254.7,106.5,271.6,106.5,282.2,116.7z"/>
|
||||
<path class="st1" d="M260.5,112.9c0.8-0.1,1.6-0.1,2.4-0.1"/>
|
||||
<path class="st1" d="M260.5,112.9"/>
|
||||
<path class="st1" d="M257.4,113.4"/>
|
||||
<path class="st1" d="M248,118.2c0.8-0.6,1.6-1.2,2.4-1.7c2.2-1.4,4.6-2.4,7.1-3"/>
|
||||
<path class="st0" d="M290.4,136.3c0,15.2-12.4,27.5-27.5,27.4c-7.3,0-14.3-2.9-19.5-8.1l12.8-12.8c-2.7,0-4.8-2.2-4.8-4.8
|
||||
c0-2.7,2.2-4.8,4.8-4.8h9.6l16.4-16.4C287.5,121.9,290.4,128.9,290.4,136.3L290.4,136.3z"/>
|
||||
<polyline class="st2" points="294.4,144.5 294.4,133.1 294.4,124.8 "/>
|
||||
<line class="st2" x1="294.4" y1="133.1" x2="265.8" y2="133.1"/>
|
||||
<path class="st2" d="M245.6,317.3"/>
|
||||
<path class="st2" d="M90.8,321.7"/>
|
||||
<path class="st2" d="M238,312.9"/>
|
||||
<path class="st0" d="M267.4,422.4c0.8,1.3,0.3,2.9-1,3.7c-0.4,0.2-0.9,0.4-1.4,0.4l-45.4-0.1l0.1-0.1l1.3-3.9l12.3-36.1l3.3-9.7
|
||||
l18.7-54.9l8.2-24.5l36.7-0.3l-43.3,79.7l-5.3,9.7l-8.7,15.9c-2.2,3.9-0.8,8.8,3.1,11c0.6,0.4,1.3,0.6,2,0.8l0.7,0.1l8.1,1.3
|
||||
C261.2,416.1,265.1,418.7,267.4,422.4L267.4,422.4z"/>
|
||||
<rect x="256.2" y="142.8" class="st0" width="3.8" height="12.8"/>
|
||||
<path class="st0" d="M241.6,233.2l-1.4,3.3l-2,4.6L238,241l-29-12.7c1.4-2.5,2.5-5.1,3.4-7.9L241.6,233.2z"/>
|
||||
<line class="st2" x1="643.2" y1="426.4" x2="689.1" y2="426.4"/>
|
||||
<line class="st2" x1="46.1" y1="426.4" x2="636.2" y2="426.4"/>
|
||||
<line class="st2" x1="694.2" y1="426.4" x2="698.2" y2="426.4"/>
|
||||
<path class="st0" d="M342.3,150.8c1.9-1.9,2.5-4.8,1.5-7.3c-0.1-0.4-0.3-0.7-0.5-1.1l5.6-2.3c1.4-0.6,2.1-2.2,1.5-3.6
|
||||
c-0.6-1.4-2.2-2.1-3.6-1.5c0,0,0,0,0,0l-11.7,4.8c-1.3,0.5-2.4,1.4-3.1,2.6c-1.8,2.8-1.2,6.6,1.3,8.7"/>
|
||||
<path class="st2" d="M239.5,115.7c-0.9-0.2-1.8-0.6-2.5-1.1c-0.9-0.6-1.6-1.3-2.1-2.3c-0.5-0.8-0.8-1.7-1-2.7"/>
|
||||
<polygon class="st0" points="212.6,133.8 215.7,132.9 213.5,130.7 "/>
|
||||
<path class="st0" d="M259.6,96.2L237,114.6c-0.9-0.6-1.6-1.3-2.1-2.3l22-19.4c0.5-0.5,1.4-0.4,1.9,0.1c0,0,0,0,0,0l1,1.2
|
||||
C260.2,94.8,260.2,95.7,259.6,96.2C259.6,96.2,259.6,96.2,259.6,96.2z"/>
|
||||
<line class="st2" x1="255" y1="94.6" x2="257.5" y2="97.9"/>
|
||||
<polygon class="st1" points="256.9,376.6 251.6,386.3 233.3,386.3 236.6,376.6 "/>
|
||||
<path class="st2" d="M351.9,431.8"/>
|
||||
<line class="st2" x1="248.3" y1="391.3" x2="243.1" y2="391.3"/>
|
||||
<line class="st2" x1="245.3" y1="396.3" x2="240.1" y2="396.3"/>
|
||||
<line class="st2" x1="243.3" y1="401.3" x2="238.1" y2="401.3"/>
|
||||
<path class="st2" d="M295.7,186.9l-3.5,3.5"/>
|
||||
<path class="st1" d="M391.9,233.7h-27.7c0-7.7,6.2-13.9,13.9-13.9S391.9,226,391.9,233.7C391.9,233.7,391.9,233.7,391.9,233.7z"
|
||||
/>
|
||||
<path class="st0" d="M352,222.9l34-9.2c1.4-0.4,2.8,0.5,3.2,1.9c0,0,0,0,0,0l0,0c0.4,1.4-0.5,2.8-1.8,3.1l-23.3,7L352,222.9z"/>
|
||||
<path class="st0" d="M385.7,233.7h-38.8l-54.7-0.1h-1.3l-1.2-0.1c-1.6-0.3-3.1-1-4.3-2.1l-2.1-1.9l-44.8-39.7
|
||||
c-3.6-3.2-3.9-8.8-0.7-12.5s8.8-3.9,12.5-0.7l41.1,38.2c1.7,1.5,3.8,2.5,6.1,2.7l48,5.6c2,0.3,4,0.2,6-0.4l11.7-3.1
|
||||
c2.3-0.6,4.8-0.4,7,0.6l7.4,3.3c0.7,0.3,1.7,0.9,2.8,1.4c2.6,1.4,4.5,4,5.1,6.9L385.7,233.7z"/>
|
||||
<line class="st2" x1="304" y1="218.5" x2="288.9" y2="216.8"/>
|
||||
<path class="st1" d="M422.5,226.1h13l0,0v7.6l0,0h-20.6l0,0l0,0C414.9,229.5,418.3,226.1,422.5,226.1z"/>
|
||||
<path class="st1" d="M496.5,233.7h40.7c3.1-1.8,4.2-5.7,2.5-8.9c-0.6-1-1.4-1.9-2.5-2.5h-40.7V233.7z"/>
|
||||
<path class="st0" d="M482.2,233.7h25.3c3.1-1.8,4.2-5.7,2.5-8.9c-0.6-1-1.4-1.9-2.5-2.5h-25.3c3.1,1.8,4.2,5.7,2.5,8.9
|
||||
C484,232.2,483.2,233.1,482.2,233.7L482.2,233.7z"/>
|
||||
<path class="st1" d="M503.6,222.4h40.7c3.1-1.8,4.2-5.7,2.5-8.9c-0.6-1-1.4-1.9-2.5-2.5h-40.7V222.4z"/>
|
||||
<path class="st0" d="M489.3,222.4h25.3c3.1-1.8,4.2-5.7,2.5-8.9c-0.6-1-1.4-1.9-2.5-2.5h-25.3c3.1,1.8,4.2,5.7,2.5,8.9
|
||||
C491.2,220.9,490.4,221.8,489.3,222.4z"/>
|
||||
<path class="st1" d="M258.6,306.6c-0.1,0.1-0.3,0.3-0.5,0.4c-1,0.8-2.2,1.2-3.4,1.2h-78.4c-1.3,0-2.6-0.1-3.8-0.4
|
||||
c-7.3-1.5-13-7.4-14.3-14.8l-17.3-96.9c-0.5-3,1.4-5.8,4.4-6.4c0,0,0,0,0,0c0.3-0.1,0.7-0.1,1-0.1h21c0,0,15.2,107.6,21.2,107.6
|
||||
h66.1c2.9-0.1,5.4,2.1,5.7,5v0.1C260.3,303.9,259.7,305.5,258.6,306.6z"/>
|
||||
<path class="st0" d="M267.6,306.6c-0.1,0.1-0.3,0.3-0.5,0.4c-1,0.8-2.2,1.2-3.4,1.2h-66.4c-1.3,0-2.6-0.1-3.8-0.4
|
||||
c-7.3-1.5-13-7.4-14.3-14.8l-17.3-96.9c-0.5-3,1.4-5.8,4.4-6.4c0,0,0,0,0,0c0.3-0.1,0.7-0.1,1-0.1c2.7,0,4.9,1.9,5.4,4.5
|
||||
l15.3,85.7l0.2,0.9l1.1,6.2c1.1,5.9,6.2,10.2,12.2,10.2h62.1c2.9-0.1,5.4,2.1,5.7,5v0.1C269.4,303.9,268.8,305.5,267.6,306.6z"/>
|
||||
<g class="st13">
|
||||
<rect y="108.5" class="st14" width="160.9" height="37.2"/>
|
||||
</g>
|
||||
<rect class="st3" width="168.9" height="6"/>
|
||||
<rect y="151.8" class="st3" width="160.9" height="6"/>
|
||||
<rect x="4.5" y="17.1" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="25.8" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="34.6" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="43.4" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="52.2" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="60.9" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="69.7" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="78.5" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="4.5" y="87.2" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="88.4" y="17.1" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="25.8" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="34.6" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="43.4" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="52.2" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="60.9" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="69.7" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="78.5" class="st15" width="67.9" height="4.1"/>
|
||||
<rect x="88.4" y="87.2" class="st15" width="67.9" height="4.1"/>
|
||||
<rect y="12" class="st15" width="160.9" height="89.9"/>
|
||||
<rect y="96.2" class="st15" width="160.9" height="5.6"/>
|
||||
<path class="st3" d="M165.7,99.7V85c0-1.2,1-2.2,2.2-2.2l0,0c1.2,0,2.2,1,2.2,2.2v14.7c0,1.2-1,2.2-2.2,2.2l0,0
|
||||
C166.7,101.9,165.7,100.9,165.7,99.7z"/>
|
||||
<line class="st11" x1="167.9" y1="92.4" x2="167.9" y2="0"/>
|
||||
<g class="st13">
|
||||
<rect x="553.8" y="91.3" class="st14" width="160.9" height="54.4"/>
|
||||
</g>
|
||||
<rect x="553.8" class="st3" width="168.9" height="6"/>
|
||||
<rect x="553.8" y="151.8" class="st3" width="160.9" height="6"/>
|
||||
<rect x="558.3" y="17.1" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="558.3" y="25.8" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="558.3" y="34.6" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="558.3" y="43.4" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="558.3" y="52.2" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="558.3" y="60.9" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="558.3" y="69.7" class="st15" width="75.5" height="4.1"/>
|
||||
<rect x="642.2" y="17.1" class="st15" width="68" height="4.1"/>
|
||||
<rect x="642.2" y="25.8" class="st15" width="68" height="4.1"/>
|
||||
<rect x="642.2" y="34.6" class="st15" width="68" height="4.1"/>
|
||||
<rect x="642.2" y="43.4" class="st15" width="68" height="4.1"/>
|
||||
<rect x="642.2" y="52.2" class="st15" width="68" height="4.1"/>
|
||||
<rect x="642.2" y="60.9" class="st15" width="68" height="4.1"/>
|
||||
<rect x="642.2" y="69.7" class="st15" width="68" height="4.1"/>
|
||||
<rect x="553.8" y="12" class="st15" width="160.9" height="72.7"/>
|
||||
<rect x="553.8" y="79" class="st15" width="160.9" height="5.6"/>
|
||||
<path class="st3" d="M719.5,99.7V85c0-1.2,1-2.2,2.2-2.2l0,0c1.2,0,2.2,1,2.2,2.2v14.7c0,1.2-1,2.2-2.2,2.2l0,0
|
||||
C720.4,101.9,719.5,100.9,719.5,99.7z"/>
|
||||
<line class="st11" x1="721.6" y1="92.4" x2="721.6" y2="0"/>
|
||||
<path class="st1" d="M265.1,426.4h-45.5l1.3-3.9h46.3l0,0c0.7,1.2,0.4,2.8-0.8,3.5C266.1,426.3,265.6,426.4,265.1,426.4z"/>
|
||||
<polygon class="st1" points="337.1,162.2 334.4,165.5 324.2,156.2 327.1,153.1 "/>
|
||||
<line class="st2" x1="231.6" y1="238.2" x2="235.1" y2="230.4"/>
|
||||
<line class="st2" x1="239.7" y1="237.3" x2="236.7" y2="235.9"/>
|
||||
<line class="st2" x1="147.2" y1="201.4" x2="156.2" y2="201.4"/>
|
||||
<line class="st2" x1="147.9" y1="207.3" x2="156.9" y2="207.3"/>
|
||||
<polygon class="st16" points="641.1,385.4 689.2,385.4 682.5,426.4 647.8,426.4 "/>
|
||||
<rect x="637.7" y="374.9" class="st3" width="54.9" height="5.4"/>
|
||||
<line class="st11" x1="665.1" y1="374.9" x2="665.1" y2="281.5"/>
|
||||
<path class="st16" d="M686.3,341.9h11.2l0,0l0,0c0,9.1-7.4,16.5-16.5,16.5c0,0,0,0,0,0h-11.1l0,0l0,0
|
||||
C669.9,349.3,677.2,341.9,686.3,341.9z"/>
|
||||
<path class="st16" d="M660.4,358.4h-11.2c-9.1,0-16.5-7.4-16.5-16.5l0,0l0,0h11.2C653,341.9,660.4,349.3,660.4,358.4L660.4,358.4
|
||||
L660.4,358.4L660.4,358.4z"/>
|
||||
<path class="st16" d="M683.1,321.9h9l0,0l0,0c0,7.3-5.9,13.2-13.2,13.2l0,0h-9l0,0l0,0C669.9,327.8,675.8,321.9,683.1,321.9
|
||||
L683.1,321.9z"/>
|
||||
<path class="st16" d="M660.4,335.1h-9c-7.3,0-13.2-5.9-13.2-13.2l0,0l0,0l0,0h9C654.5,321.9,660.4,327.8,660.4,335.1L660.4,335.1
|
||||
L660.4,335.1L660.4,335.1z"/>
|
||||
<path class="st16" d="M679.1,305.8h6.3l0,0l0,0c0,5.1-4.1,9.3-9.3,9.3l0,0h-6.3l0,0l0,0C669.9,310,674,305.8,679.1,305.8
|
||||
L679.1,305.8z"/>
|
||||
<path class="st16" d="M660.4,315.1h-6.3c-5.1,0-9.3-4.1-9.3-9.3c0,0,0,0,0,0l0,0l0,0h6.3C656.3,305.8,660.4,310,660.4,315.1
|
||||
C660.4,315.1,660.4,315.1,660.4,315.1L660.4,315.1L660.4,315.1z"/>
|
||||
<path class="st16" d="M676,291.3h4.2l0,0l0,0c0,3.4-2.7,6.1-6.1,6.1l0,0h-4.2l0,0l0,0C669.9,294.1,672.6,291.3,676,291.3
|
||||
L676,291.3z"/>
|
||||
<path class="st16" d="M660.4,297.5h-4.2c-3.4,0-6.1-2.7-6.1-6.1v0l0,0l0,0h4.2C657.7,291.3,660.4,294.1,660.4,297.5L660.4,297.5
|
||||
L660.4,297.5L660.4,297.5z"/>
|
||||
<polygon class="st0" points="592.9,209 592.2,213.6 589,233.7 572.2,233.7 569,213.6 568.2,209 "/>
|
||||
<path class="st1" d="M594.9,186.8v2.7c0,2.8-2.2,5-5,5h-0.7c-2.2,0-4.1,1.8-4.1,4.1V209H576v-4.5c0-1-0.8-1.8-1.8-1.9h-2.9
|
||||
c-2.8,0-5-2.2-5-5v-2.9c0-1.7,1.4-3,3-3c1.7,0,3,1.4,3,3c0,1-0.1,1.9,0.9,1.9h1c1,0,1.8-0.9,1.8-1.9c0,0,0,0,0,0v-15.6
|
||||
c0-2.4,1.7-4.4,4.1-4.7c2.5-0.2,4.7,1.6,5,4.1c0,0.1,0,0.3,0,0.4v8.3c0,0.7,0.5,1.2,1.2,1.2h0.7c1.1,0,2-0.8,2-1.8c0,0,0,0,0-0.1
|
||||
c0-1.7,1.3-3,3-3c0.1,0,0.1,0,0.2,0C593.8,183.9,594.9,185.2,594.9,186.8z"/>
|
||||
<polygon class="st0" points="592.9,209 592.2,213.6 569,213.6 568.2,209 "/>
|
||||
<rect x="102.8" y="246.6" class="st3" width="26" height="9.5"/>
|
||||
<path class="st17" d="M235.4,187.1"/>
|
||||
<path class="st17" d="M221.3,221.9"/>
|
||||
<path class="st0" d="M56.9,226.5H39.4c-2,0-3.6,1.6-3.6,3.6l0,0v4.9c0,2,1.4,3.6,3.4,3.8c2,0.1,3.7-1.4,3.8-3.4
|
||||
c0-0.1,0-0.1,0-0.2v-1.5h15.2"/>
|
||||
<path class="st0" d="M60.5,211.1H103c8.4,0,15.3,6.8,15.3,15.3l0,0v7.4l0,0H60.5l0,0V211.1L60.5,211.1z"/>
|
||||
<path class="st0" d="M56.1,221.4H44.2v-15.2c0-1.2,1-2.2,2.2-2.2c0.5,0,1,0.2,1.4,0.5l8.2,6.6L56.1,221.4z"/>
|
||||
<path class="st0" d="M64.9,221.4h11.8v-15.2c0-1.2-1-2.2-2.2-2.2c-0.5,0-1,0.2-1.4,0.5l-8.2,6.6L64.9,221.4z"/>
|
||||
<path class="st0" d="M55.6,211.1h9.9c6.3,0,11.3,5.1,11.3,11.3l0,0c0,6.3-5.1,11.3-11.3,11.3h-9.9c-6.3,0-11.3-5.1-11.3-11.3l0,0
|
||||
C44.2,216.1,49.3,211.1,55.6,211.1z"/>
|
||||
<line class="st2" x1="53.4" y1="212.1" x2="53.4" y2="213.4"/>
|
||||
<line class="st2" x1="57.1" y1="211.1" x2="57.1" y2="215.4"/>
|
||||
<line class="st2" x1="60.8" y1="211.1" x2="60.8" y2="213.4"/>
|
||||
<polyline class="st2" points="48.5,221.4 52.7,221.4 51.1,219.8 "/>
|
||||
<polyline class="st2" points="65,221.4 60.9,221.4 60.8,219.8 "/>
|
||||
<path class="st0" d="M113.7,233.7h7.4c1.2,0,2.2,1,2.2,2.2v25.8c0,4,3.2,7.2,7.2,7.2h2.1c2,0,3.6-1.6,3.6-3.6l0,0l0,0
|
||||
c0-2-1.6-3.6-3.6-3.6h0l0,0c-1.2,0-2.1-0.9-2.1-2.1v-26c0-4-3.2-7.2-7.2-7.2h0l0,0l0,0h-6"/>
|
||||
<path class="st0" d="M85.3,226.5H67.8c-2,0-3.6,1.6-3.6,3.6l0,0v4.9c0,2,1.4,3.6,3.4,3.8c2,0.1,3.7-1.4,3.8-3.4
|
||||
c0-0.1,0-0.1,0-0.2v-1.5h15.2"/>
|
||||
<path class="st1" d="M83.7,226.5c0,0,0.6-3.2,3.2-3.2"/>
|
||||
<line class="st2" x1="55.2" y1="225.4" x2="59.2" y2="225.4"/>
|
||||
<path class="st2" d="M80.7,211.1h0.4c4.8,0,8.7,3.9,8.7,8.7l0,0"/>
|
||||
<path class="st2" d="M88.3,211.1h0.4c4.8,0,8.7,3.9,8.7,8.7l0,0"/>
|
||||
<path class="st2" d="M95.9,211.1h0.4c4.8,0,8.7,3.9,8.7,8.7l0,0"/>
|
||||
<line class="st2" x1="127.3" y1="255.9" x2="129.5" y2="255.9"/>
|
||||
<line class="st2" x1="127.3" y1="250.6" x2="129.5" y2="250.6"/>
|
||||
<polygon class="st9" points="482.9,165.7 486.8,180.6 490.8,178 494.8,175.4 "/>
|
||||
|
||||
<rect x="490.9" y="174.9" transform="matrix(0.8407 -0.5416 0.5416 0.8407 -18.7816 294.8061)" class="st9" width="1.4" height="8.8"/>
|
||||
<rect x="423.7" y="246.7" class="st0" width="75.8" height="48.3"/>
|
||||
<rect x="450.3" y="266.2" class="st1" width="27.1" height="5.5"/>
|
||||
<rect x="445.7" y="266.2" class="st0" width="27.1" height="5.5"/>
|
||||
<rect x="423.7" y="295" class="st0" width="75.8" height="48.1"/>
|
||||
<rect x="450.3" y="314.3" class="st1" width="27.1" height="5.5"/>
|
||||
<rect x="445.7" y="314.3" class="st0" width="27.1" height="5.5"/>
|
||||
<rect x="450.3" y="362.4" class="st1" width="27.1" height="5.5"/>
|
||||
<rect x="445.7" y="362.4" class="st0" width="27.1" height="5.5"/>
|
||||
<rect x="499.5" y="246.7" class="st3" width="26" height="9.7"/>
|
||||
<rect x="435" y="85.1" class="st1" width="4.9" height="4.3"/>
|
||||
<rect x="431.6" y="85.1" class="st1" width="4.9" height="4.3"/>
|
||||
<circle class="st1" cx="435.7" cy="75.3" r="10.1"/>
|
||||
<path class="st1" d="M435.6,75.3c0,2-1.2,3.8-3.1,4.5c-0.6,0.2-1.2,0.4-1.8,0.3c-2.7,0-4.9-2.2-4.9-4.9c0-2.7,2.2-4.9,4.9-4.9
|
||||
c0.6,0,1.2,0.1,1.8,0.3C434.4,71.5,435.6,73.3,435.6,75.3z"/>
|
||||
<path class="st0" d="M435.6,75.3c-0.7,1.7-2.6,2.5-4.3,1.8c-1.7-0.7-2.5-2.6-1.8-4.3c0.5-1.3,1.7-2.1,3.1-2.1
|
||||
C434.4,71.5,435.6,73.3,435.6,75.3z"/>
|
||||
<line class="st2" x1="507.9" y1="195.6" x2="496.5" y2="195.6"/>
|
||||
<path class="st0" d="M465.4,396.4l4.7,30h-54.2c-2.6,0-4.7-2.1-4.7-4.7l0,0v-25.3c0-6,4.8-10.8,10.8-10.8c0,0,0,0,0,0h32.6
|
||||
C460.5,385.6,465.4,390.4,465.4,396.4z"/>
|
||||
<path class="st0" d="M474.7,390v5.7c0-2.6-2.1-4.7-4.6-4.7c-0.2,0-0.3,0-0.5,0c-2.4,0.3-4.2,2.4-4.2,4.8v4.7
|
||||
c0,6-4.8,10.8-10.8,10.8H417c-6,0-10.8-4.8-10.8-10.8l0,0v-5c0-5.6,4.5-10.1,10.1-10.1h0h54C472.8,385.6,474.7,387.6,474.7,390
|
||||
C474.7,390,474.7,390,474.7,390z"/>
|
||||
<path class="st0" d="M470,385.5L470,385.5c2.6,0,4.7,2.1,4.7,4.7v31.7c0,2.6-2.1,4.7-4.7,4.7l0,0c-2.6,0-4.7-2.1-4.7-4.7v-31.7
|
||||
C465.4,387.6,467.5,385.5,470,385.5z"/>
|
||||
<path class="st0" d="M431.1,411.5h14.4l0,0l0,0c0,2.8-2.2,5-5,5h-4.4C433.3,416.5,431.1,414.3,431.1,411.5L431.1,411.5
|
||||
L431.1,411.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 24 KiB |
1
moehu/moehu_admin/public/img/Engineer.svg
Normal file
1
moehu/moehu_admin/public/img/Engineer.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 18 KiB |
1
moehu/moehu_admin/public/img/Main.svg
Normal file
1
moehu/moehu_admin/public/img/Main.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 22 KiB |
319
moehu/moehu_admin/public/img/Normal.svg
Normal file
319
moehu/moehu_admin/public/img/Normal.svg
Normal file
@@ -0,0 +1,319 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 702 431.4" style="enable-background:new 0 0 702 431.4;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:none;stroke:#E5E5E5;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st1{fill:#E5E5E5;}
|
||||
.st2{fill:none;stroke:#E5E5E5;stroke-width:2;stroke-miterlimit:10;}
|
||||
.st3{fill:#E5E5E5;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st4{fill:#FFFFFF;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st5{fill:none;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st6{fill:none;stroke:#14223C;stroke-width:1.74;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st7{fill:#14223C;}
|
||||
.st8{fill:none;stroke:#14223C;stroke-width:2;stroke-linejoin:round;}
|
||||
.st9{fill:#FFFFFF;stroke:#14223C;stroke-width:1.84;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st10{fill:#EEEEEE;}
|
||||
.st11{fill:none;}
|
||||
.st12{fill:#FFFFFF;}
|
||||
.st13{opacity:0.48;fill:#E5E5E5;enable-background:new ;}
|
||||
.st14{opacity:0.36;}
|
||||
.st15{opacity:0.3;fill:#E5E5E5;enable-background:new ;}
|
||||
|
||||
.st16{opacity:0.5;fill:none;stroke:#E5E5E5;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;enable-background:new ;}
|
||||
.st17{opacity:0.4;fill:#E5E5E5;enable-background:new ;}
|
||||
.st18{opacity:0.21;fill:#E5E5E5;enable-background:new ;}
|
||||
.st19{fill:#FFFFFF;stroke:#14223C;stroke-width:1.97;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st20{fill:#E5E5E5;stroke:#FFFFFF;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
.st21{fill:none;stroke:#E5E5E5;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;}
|
||||
.st22{fill:#CECECE;stroke:#14223C;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;}
|
||||
</style>
|
||||
<title>Normal</title>
|
||||
<g id="Layer_2_1_">
|
||||
<g id="Layer_1-2">
|
||||
<path class="st0" d="M170.2,308.2H278c6.1,0,11-4.9,11-11l0,0"/>
|
||||
<path class="st0" d="M276.9,268h46.6c1.1,0,2,0.9,2,2v24.8c0,1.1-0.9,2-2,2h-46.6c-1.1,0-2-0.9-2-2V270
|
||||
C274.9,268.8,275.8,268,276.9,268z"/>
|
||||
<path class="st0" d="M315.3,274.6h3.6c0.6,0,1,0.4,1,1v13.5c0,0.6-0.4,1-1,1h-3.6c-0.6,0-1-0.4-1-1v-13.5
|
||||
C314.3,275,314.7,274.6,315.3,274.6z"/>
|
||||
<path class="st0" d="M304,274.6h3.6c0.6,0,1,0.4,1,1v13.5c0,0.6-0.4,1-1,1H304c-0.6,0-1-0.4-1-1v-13.5
|
||||
C303,275,303.5,274.6,304,274.6z"/>
|
||||
<path class="st0" d="M297.1,286.6L297.1,286.6l-6-10.6l0,0c-0.5-1.2-2-1.8-3.2-1.2c-0.6,0.3-1,0.7-1.3,1.3l-5.9,10.5l0,0
|
||||
c-0.2,0.3-0.2,0.7-0.2,1.1c0,1.4,1.1,2.5,2.4,2.5h0h12c1.3,0,2.4-1.1,2.4-2.4C297.4,287.3,297.3,287,297.1,286.6L297.1,286.6z"/>
|
||||
<line class="st0" x1="289" y1="297.2" x2="289" y2="290.1"/>
|
||||
<path class="st1" d="M502.6,430.4L502.6,430.4L502.6,430.4h-99.5l0,0l0,0c0-6.5,5.3-11.7,11.7-11.7h76.1
|
||||
C497.3,418.7,502.6,423.9,502.6,430.4z"/>
|
||||
<path class="st1" d="M440,316.5h24.7l0,0l0,0c0,6.1-4.9,11-11,11H451C445,327.5,440,322.5,440,316.5L440,316.5L440,316.5z"/>
|
||||
<rect x="446.5" y="316.5" class="st1" width="11.7" height="108.5"/>
|
||||
<path class="st1" d="M424.5,329.8h14.7c1.2,0,2.2,1,2.2,2.2v0c0,1.2-1,2.2-2.2,2.2h-14.7c-1.2,0-2.2-1-2.2-2.2v0
|
||||
C422.4,330.8,423.3,329.8,424.5,329.8z"/>
|
||||
<line class="st2" x1="431.9" y1="332" x2="449.4" y2="332"/>
|
||||
<path class="st3" d="M523,192.1l-20,124.3H396.7c-3,0-5.5-2.5-5.5-5.5s2.5-5.5,5.5-5.5h65.5l27.4-113.4L523,192.1z"/>
|
||||
<path class="st3" d="M503,316.5L503,316.5z"/>
|
||||
<path class="st4" d="M525,192.1h-2l-17.2,107.2c-0.6,3.6-3.6,6.2-7.2,6.2h-37.6c-2.9,0-5.4,2.1-5.7,5c-0.3,3,2,5.7,5,6
|
||||
c0.2,0,0.3,0,0.5,0h41.9h0.4l0,0h0.3h0.6l0.5-0.1l0.6-0.1l0.6-0.1l0.5-0.1l0.6-0.2l0.5-0.2l0.5-0.2l0.5-0.2l0.4-0.2l0.6-0.3
|
||||
l0.2-0.1c1.9-1.2,3.5-2.9,4.5-4.9c0.6-1.2,1.1-2.5,1.3-3.8c0-0.1,0-0.2,0.1-0.3l0,0l16.2-105.7c0.6-3.6-1.8-7-5.4-7.6
|
||||
C525.7,192.1,525.4,192.1,525,192.1z"/>
|
||||
<path class="st4" d="M350.3,211.8h-11c-1.7,0-3,1.3-3,3s1.3,3,3,3h6.5"/>
|
||||
<path class="st4" d="M489.8,172.7l-32.4,31l-7.8,8.4l-3.8,3.9l1.4,21.1l-21.4,0.2l-6.5,0.1c-7.8,0.2-14.2-6-14.4-13.7
|
||||
c0-0.4-0.1-0.7-0.2-1.1c0.1-1.5,0.5-3,1.1-4.4c0.2-0.4,0.4-0.8,0.6-1.2V217l4.4-4.7l1.1-1.1l28.1-29.7l3-3.3
|
||||
c3.3-3.5,7.8-5.5,12.6-5.5L489.8,172.7z"/>
|
||||
<line class="st2" x1="441.5" y1="215.3" x2="423.7" y2="200.1"/>
|
||||
<path class="st4" d="M450,214.8c0.9-1.6,1.1-3.5,0.4-5.2l-6.9,7.3C446.5,217.2,448.8,216.6,450,214.8z"/>
|
||||
<path class="st5" d="M506,231.7"/>
|
||||
<path class="st4" d="M462.5,172.7h29.6c6.6,0,12.4,4.6,13.9,11.1c0.4,1.5,0.5,3,0.3,4.5c0,0.1,5.6,2.5,5.6,2.6l-9.9,46.9
|
||||
l-2.2,25.7l-0.3,3.1l-0.9,10.4l-0.6,8.3c-0.9,11.5-10.5,20.3-22,20.4h-74.7l13.2-29.8h4.6c0,0,0-0.1,0-0.1c-0.3-3-0.2-6.1,0.4-9.1
|
||||
c0.5-2.4,1.2-4.8,2.2-7l0.9-2.1L446,205l-1.4-1.4"/>
|
||||
|
||||
<ellipse transform="matrix(0.3608 -0.9326 0.9326 0.3608 82.3969 563.3206)" class="st1" cx="452.2" cy="221.5" rx="14.3" ry="9.7"/>
|
||||
<path class="st4" d="M417.2,275.6"/>
|
||||
<path class="st5" d="M483.3,231.6"/>
|
||||
<path class="st5" d="M468.1,246.9"/>
|
||||
<path class="st4" d="M417.2,275.6"/>
|
||||
<path class="st3" d="M485.5,172.7h6.6l-29.5,15.8c-0.9,0.5-2,0.2-2.5-0.7c-0.1-0.2-0.2-0.4-0.2-0.6l-0.7-4.3c0,0-1-5.7-1.5-9
|
||||
l-0.1-0.4v-0.7L485.5,172.7z"/>
|
||||
<path class="st4" d="M480.6,144.7V173l-14.2,7.7c-0.9,0.5-2,0.2-2.5-0.7c-0.1-0.2-0.2-0.4-0.2-0.6c-0.3-1.9-0.8-4.5-1.1-6.4v-28.3
|
||||
H480.6z"/>
|
||||
<path class="st4" d="M470,227.3L470,227.3c0,1.9-1.5,3.4-3.4,3.4h-5.1c-1.9,0-3.4-1.5-3.4-3.4v0c0-1.9,1.5-3.4,3.4-3.4h5.1
|
||||
C468.5,223.9,470,225.5,470,227.3z"/>
|
||||
<path class="st4" d="M495.1,203.7l7.8,8.4l3.8,3.9l0.7,0.8l19.3,20.6l6.5,0.1c7.8,0.2,14.2-6,14.4-13.7c0-0.4,0.1-0.7,0.2-1.1
|
||||
c-0.1-1.5-0.5-3-1.1-4.4c-0.2-0.4-0.4-0.8-0.6-1.2V217l-4.4-4.7l-1.1-1.1l-28.2-29.7l-3-3.3c-3.3-3.5-7.8-5.5-12.6-5.5h-4.7"/>
|
||||
<path class="st4" d="M523,213.4l-15.1,3.3l-0.5,0.1l-41,10.2l-2.4,10l63.4,0.6l6.4,0.1c7.6,0.2,13.9-5.8,14.1-13.4
|
||||
c0-0.5,0-1,0-1.5c-0.1-1.7-0.6-3.4-1.4-5c-0.1-0.2-0.2-0.4-0.3-0.6c-1.1-1.9-9.7-10.4-9.7-10.4"/>
|
||||
<path class="st4" d="M484.5,230.7c-0.6,0.6-1.4,1-2.3,1c-0.9,0-1.7-0.4-2.3-1l-4.7-4.7l-4.7,4.7c-0.6,0.6-1.4,1-2.3,1
|
||||
c-1.8,0-3.3-1.5-3.3-3.3c0-0.9,0.3-1.7,1-2.3l7.2-7.2c0.6-0.6,1.4-1,2.2-1c0.8,0.1,1.6,0.4,2.2,1l0.9,0.9l6.2,6.2
|
||||
C485.8,227.4,485.8,229.4,484.5,230.7z"/>
|
||||
<path class="st4" d="M490.7,230.7c-0.6,0.6-1.4,1-2.3,1c-0.9,0-1.7-0.4-2.3-1l-4.7-4.7l-4.7,4.7c-0.6,0.6-1.4,1-2.3,1
|
||||
c-1.8,0-3.3-1.5-3.3-3.3c0-0.9,0.3-1.7,1-2.3l7.2-7.2c0.6-0.6,1.4-1,2.2-1c0.8,0.1,1.6,0.4,2.2,1l0.9,0.9l6.2,6.2
|
||||
C491.9,227.4,491.9,229.4,490.7,230.7z"/>
|
||||
<path class="st4" d="M494.9,232.8c-0.6,0.6-1.4,1-2.3,1c-0.9,0-1.7-0.4-2.3-1l-4.7-4.7l-4.7,4.7c-0.6,0.6-1.4,1-2.3,1
|
||||
c-1.8,0-3.3-1.5-3.3-3.3c0-0.9,0.3-1.7,1-2.3l7.2-7.2c0.6-0.6,1.4-1,2.2-1c0.8,0.1,1.6,0.4,2.2,1l0.9,0.9l6.2,6.2
|
||||
C496.1,229.4,496.1,231.5,494.9,232.8z"/>
|
||||
<path class="st4" d="M498.8,236.6c-0.6,0.6-1.4,1-2.3,1c-0.9,0-1.7-0.4-2.3-1l-4.7-4.7l-4.7,4.7c-0.6,0.6-1.4,1-2.3,1
|
||||
c-1.8,0-3.3-1.5-3.3-3.3c0-0.9,0.3-1.7,1-2.3l7.2-7.2c0.6-0.6,1.4-1,2.2-1c0.8,0.1,1.6,0.4,2.2,1l0.9,0.9l6.2,6.2
|
||||
C500,233.3,500,235.3,498.8,236.6z"/>
|
||||
<rect x="530.7" y="237.7" class="st3" width="148.6" height="12.9"/>
|
||||
<path class="st5" d="M541.4,325.6"/>
|
||||
<line class="st5" x1="97" y1="430.4" x2="70" y2="430.4"/>
|
||||
<polyline class="st5" points="701,430.4 679.4,430.4 664.3,430.4 643.3,430.4 628.2,430.4 172.9,430.4 157.8,430.4 136.8,430.4
|
||||
121.7,430.4 103,430.4 "/>
|
||||
<path class="st5" d="M311.8,435.7"/>
|
||||
<polygon class="st3" points="423.6,417.1 403.7,417.1 387.4,348.1 407.3,348.1 "/>
|
||||
<rect x="374.4" y="425.1" class="st4" width="51.2" height="5"/>
|
||||
<path class="st4" d="M425.6,425.1h-50.5c0-3.5,1.6-5.8,5.7-7.5l21.6-7.5h19.8L425.6,425.1z"/>
|
||||
<line class="st6" x1="374.4" y1="430.1" x2="374.4" y2="428.1"/>
|
||||
<line class="st6" x1="381.4" y1="430.1" x2="381.4" y2="428.1"/>
|
||||
<line class="st6" x1="387.4" y1="430.1" x2="387.4" y2="428.1"/>
|
||||
<line class="st6" x1="394.4" y1="430.1" x2="394.4" y2="428.1"/>
|
||||
<line class="st6" x1="400.4" y1="430.1" x2="400.4" y2="428.1"/>
|
||||
<line class="st6" x1="407.4" y1="430.1" x2="407.4" y2="428.1"/>
|
||||
<line class="st6" x1="413.4" y1="430.1" x2="413.4" y2="428.1"/>
|
||||
<line class="st6" x1="420.4" y1="430.1" x2="420.4" y2="428.1"/>
|
||||
<path class="st3" d="M392.3,425.1h-17.9c-0.1-2.2,0.9-4.3,2.6-5.5c1.3-1,3-1.5,4.6-1.5h3.6C389.2,418.1,392.3,421.2,392.3,425.1z"
|
||||
/>
|
||||
<path class="st4" d="M387.9,415.1h3.9c1.9,0,3.7,0.7,5,2.1l0,0"/>
|
||||
<path class="st4" d="M396.6,412.1h4.8c1.9,0,3.7,0.7,5,2.1l0,0"/>
|
||||
<path class="st4" d="M421.9,275.5l-40,0.1c-9.6,0-17.3,7.8-17.3,17.4c0,1.3,0.2,2.7,0.5,3.9l25,105.8h30l-23-97.2h59.8"/>
|
||||
<path class="st2" d="M435.3,298.5h-40.4c-2.9,0-5.2,2.4-5.1,5.2c0,0.4,0.1,0.8,0.1,1.2l23.4,96.8"/>
|
||||
<polygon class="st3" points="377,419.7 362.9,405.6 405.9,335.7 420,349.8 "/>
|
||||
|
||||
<rect x="352.7" y="390.7" transform="matrix(0.4594 -0.8882 0.8882 0.4594 -177.7909 540.502)" class="st4" width="5" height="51.2"/>
|
||||
<path class="st4" d="M379.1,425.9l-44.9-23.2c1.6-3.1,4.1-4.4,8.5-4.1l22.6,3.3l17.2,8.9L379.1,425.9z"/>
|
||||
<line class="st6" x1="331.3" y1="406.8" x2="332.2" y2="405"/>
|
||||
<line class="st6" x1="337.5" y1="410" x2="338.4" y2="408.2"/>
|
||||
<line class="st6" x1="342.8" y1="412.8" x2="343.7" y2="411"/>
|
||||
<line class="st6" x1="349" y1="416" x2="349.9" y2="414.2"/>
|
||||
<line class="st6" x1="354.4" y1="418.8" x2="355.3" y2="417"/>
|
||||
<line class="st6" x1="360.6" y1="422" x2="361.5" y2="420.2"/>
|
||||
<line class="st6" x1="365.9" y1="424.7" x2="366.8" y2="423"/>
|
||||
<line class="st6" x1="372.1" y1="427.9" x2="373" y2="426.2"/>
|
||||
<path class="st3" d="M349.5,410.6l-15.9-8.2c0.9-2,2.7-3.4,4.9-3.7c1.7-0.3,3.3,0,4.8,0.8l3.2,1.6
|
||||
C349.9,403,351.3,407.2,349.5,410.6L349.5,410.6z"/>
|
||||
<path class="st4" d="M350.2,399.7l3.4,1.8c1.7,0.9,2.9,2.3,3.5,4.1l0,0"/>
|
||||
<path class="st4" d="M359.2,401l4.3,2.2c1.7,0.9,2.9,2.3,3.5,4.1l0,0"/>
|
||||
<path class="st4" d="M457.2,275.5c-5.5,0.2-12.9-0.3-17.8,0.1c-5.4,0.5-10.2,3.5-13.1,8.1l-61.5,98.8l25.6,14.8l56.9-92h10"/>
|
||||
<path class="st3" d="M165.1,84.7h154.5c1.2,0,2.2,1,2.2,2.2v115.5c0,1.2-1,2.2-2.2,2.2H165.1c-1.2,0-2.2-1-2.2-2.2V86.9
|
||||
C162.9,85.7,163.9,84.7,165.1,84.7z"/>
|
||||
<path class="st4" d="M237.6,84.7h-60.5c-1.2,0-2.2,1-2.2,2.2l0,0v115.5c0,1.2,1,2.2,2.2,2.2c0,0,0,0,0,0h154.5
|
||||
c1.2,0,2.2-1,2.2-2.2V86.9c0-1.2-1-2.2-2.2-2.2L237.6,84.7"/>
|
||||
<path class="st4" d="M182.9,92.7h142c1.1,0,2,0.9,2,2v89c0,1.1-0.9,2-2,2h-142c-1.1,0-2-0.9-2-2v-89
|
||||
C180.9,93.6,181.7,92.7,182.9,92.7z"/>
|
||||
<path class="st1" d="M187.8,136.3h57.5c0.8,0,1.5,0.7,1.5,1.5v40.7c0,0.8-0.7,1.5-1.5,1.5h-57.5c-0.8,0-1.5-0.7-1.5-1.5v-40.7
|
||||
C186.4,137,187,136.3,187.8,136.3z"/>
|
||||
<path class="st4" d="M192.9,131.2h57.5c0.8,0,1.5,0.7,1.5,1.5v40.7c0,0.8-0.7,1.5-1.5,1.5h-57.5c-0.8,0-1.5-0.7-1.5-1.5v-40.7
|
||||
C191.4,131.9,192.1,131.2,192.9,131.2z"/>
|
||||
<path class="st3" d="M251.9,132.7v3.6h-60.4v-3.6c0-0.8,0.7-1.5,1.5-1.5h0h57.5C251.2,131.2,251.9,131.9,251.9,132.7z"/>
|
||||
<path class="st3" d="M218.9,204.7h47l0,0v33l0,0h-42c-2.8,0-5-2.2-5-5V204.7L218.9,204.7z"/>
|
||||
<path class="st3" d="M282.9,237.7h-47c-2.8,0-5-2.2-5-5v-28h47v28C277.9,235.5,280.1,237.7,282.9,237.7z"/>
|
||||
<rect x="230.9" y="204.7" class="st7" width="47" height="6"/>
|
||||
<line class="st5" x1="504.1" y1="213.4" x2="525.4" y2="195.1"/>
|
||||
<path class="st8" d="M522.6,192.3"/>
|
||||
<path class="st8" d="M501.3,210.5"/>
|
||||
<path class="st4" d="M415.8,212.3l-38.8,9.2c-1.2,0.3-2.5-0.2-3.2-1.2l-5.1-7.2c-0.6-0.8-1.5-1.3-2.5-1.3h-7.4l-9.1,2.4
|
||||
c-1,0.3-1.7,1.2-1.7,2.2l-0.6,17.8c0,1.2,0.4,2.4,1.2,3.4l83.2-0.1"/>
|
||||
<path class="st4" d="M359.4,201v34.8c0,0.9-0.7,1.6-1.6,1.6c0,0,0,0,0,0H343c-0.9,0-1.6-0.7-1.6-1.6c0,0,0,0,0,0V201
|
||||
c0-3.5,2.1-6.7,5.2-8.2v-15.4c0-0.9,0.7-1.6,1.6-1.6c0,0,0,0,0,0h4.4c0.9,0,1.6,0.7,1.6,1.6c0,0,0,0,0,0v15.4
|
||||
C357.4,194.3,359.4,197.5,359.4,201z"/>
|
||||
<path class="st4" d="M348.9,175.9l3.6,0c1.1,0,2,0.9,2,2l0,1.1l0,0l-7.6-0.1l0,0l0-1.1C346.9,176.7,347.8,175.9,348.9,175.9z"/>
|
||||
<rect x="341.4" y="204.7" class="st3" width="18" height="20.1"/>
|
||||
<path class="st4" d="M366.5,211.9h-11c-1.7,0-3,1.3-3,3s1.3,3,3,3h4c-2.7,2.7-2.7,7,0,9.7c1.3,1.3,3,2,4.9,2"/>
|
||||
|
||||
<rect x="612.4" y="199.8" transform="matrix(0.318 -0.9481 0.9481 0.318 234.6699 728.791)" class="st3" width="22.9" height="3"/>
|
||||
<path class="st3" d="M610,202.6h15.6c1.4,0,2.6,1.2,2.6,2.6V235c0,1.4-1.2,2.6-2.6,2.6H610c-1.4,0-2.6-1.2-2.6-2.6v-29.9
|
||||
C607.5,203.7,608.6,202.6,610,202.6z"/>
|
||||
<circle class="st4" cx="617.8" cy="220.1" r="5.6"/>
|
||||
<rect x="121.7" y="237.6" class="st4" width="410.1" height="13"/>
|
||||
<path class="st4" d="M371.7,214.4"/>
|
||||
<polyline class="st5" points="431.7,237.4 439.8,219.2 420.1,202.4 "/>
|
||||
<path class="st4" d="M416.8,229.9h90.9l0,0v7.6l0,0h-98.5l0,0l0,0C409.2,233.3,412.6,229.9,416.8,229.9L416.8,229.9z"/>
|
||||
<path class="st3" d="M503.9,229.9h13.8c1.3,0,2.3,1.1,2.3,2.4v5.3l0,0h-23.7l0,0l0,0C496.3,233.3,499.7,229.9,503.9,229.9
|
||||
C503.9,229.9,503.9,229.9,503.9,229.9z"/>
|
||||
<path class="st4" d="M341.1,237.6h4.8c1.8,0,3.2-1.4,3.2-3.2l0,0V221c0-1.8-1.4-3.2-3.2-3.2l0,0h-6.6L341.1,237.6z"/>
|
||||
<path class="st3" d="M388.2,229c0,3.2-1.2,6.3-3.3,8.7h-7.6c4.8-1.1,7.8-5.8,6.8-10.6c-0.6-2.6-2.3-4.9-4.8-6.1l5.1-1.2
|
||||
C386.9,222.2,388.3,225.5,388.2,229z"/>
|
||||
<polyline class="st4" points="398.8,301.7 397.1,305.5 394.5,303.6 "/>
|
||||
<line class="st5" x1="447.3" y1="305.5" x2="448.5" y2="303.6"/>
|
||||
<path class="st4" d="M512,283.7"/>
|
||||
<path class="st2" d="M493.7,267.6l-1.5,18.8c-0.6,7.3-6.7,12.9-14,13h-28.7c-2.8,0-5.4,1.4-6.9,3.8l-56.5,90.6"/>
|
||||
<path class="st3" d="M500.4,257.4l-0.5,6l-0.3,3.1h-80c0.5-2.4,1.2-4.8,2.2-7l0.9-2.1L500.4,257.4z"/>
|
||||
<line class="st5" x1="438.9" y1="261.9" x2="447.8" y2="261.9"/>
|
||||
<path class="st2" d="M479.1,267.5c0,4.6-0.1,12.5,13.5,12.5"/>
|
||||
<path class="st2" d="M501.3,210.5"/>
|
||||
<path class="st2" d="M423.7,200.1"/>
|
||||
<line class="st2" x1="502.3" y1="209.7" x2="521.8" y2="192.9"/>
|
||||
<polygon class="st4" points="207.9,250.6 157.8,430.4 121.7,430.4 171.9,250.6 "/>
|
||||
<polygon class="st3" points="223,250.6 172.9,430.4 136.8,430.4 187,250.6 "/>
|
||||
<polygon class="st3" points="664.3,430.4 628.2,430.4 578,250.6 614.1,250.6 "/>
|
||||
<polygon class="st4" points="679.4,430.4 643.3,430.4 593.1,250.6 629.2,250.6 "/>
|
||||
<path class="st9" d="M586.7,207.4c0.7,2.4-2.6,5.5-4.5,6.1s-1.8-1.6-2.5-4s2.6-5.5,4.5-6.1S585.9,205.1,586.7,207.4z"/>
|
||||
<path class="st4" d="M558,207.2c3.4,1.3,4.9,5.4,4.3,7s-3.1-0.1-6.4-1.3s-4.9-5.4-4.3-7S554.7,205.9,558,207.2z"/>
|
||||
<path class="st4" d="M567.6,208.5c-1.8,3.1-6.2,3.9-7.6,3.1s0.6-3,2.4-6.1s6.2-3.9,7.6-3.1S569.4,205.4,567.6,208.5z"/>
|
||||
<path class="st4" d="M591.1,212.8c-3.3,1.3-7.3-0.8-7.9-2.3s2.4-2,5.7-3.3s7.3,0.8,7.9,2.3S594.4,211.5,591.1,212.8z"/>
|
||||
<path class="st4" d="M578.1,212.4c-2.8-2.2-3-6.7-2-8s2.9,1,5.7,3.3s3,6.7,2,8S580.9,214.6,578.1,212.4z"/>
|
||||
<path class="st4" d="M571.8,212c-3.6-0.2-6.3-3.7-6.2-5.3s3-0.9,6.5-0.7s6.3,3.7,6.2,5.3S575.4,212.2,571.8,212z"/>
|
||||
<path class="st4" d="M599.3,210.5c0,13.4-10.9,24.3-24.3,24.3c-13.4,0-24.3-10.9-24.3-24.3H599.3z"/>
|
||||
<path class="st4" d="M583,233.4v4.1h-16v-4.1C572.2,235.2,577.8,235.2,583,233.4z"/>
|
||||
<path class="st4" d="M540.3,231.5c3.8-1.2,6.6,3.1,6.7,4.8s-2.9,1.1-6.5,1.2s-6.6-3.1-6.7-4.8S536.9,232.6,540.3,231.5z"/>
|
||||
<line class="st5" x1="607.5" y1="206.6" x2="628.2" y2="206.6"/>
|
||||
<line class="st5" x1="607.5" y1="233.4" x2="628.2" y2="233.4"/>
|
||||
<line class="st5" x1="496.5" y1="202.6" x2="495.1" y2="203.7"/>
|
||||
<path class="st10" d="M680.1,171.4V86.9h-56.9v84.5H680.1z M673.1,164.4h-42.9V93.9h42.9L673.1,164.4z"/>
|
||||
<path class="st10" d="M612.1,128.4V43.9h-56.9v84.5H612.1z M605.1,121.4h-42.9V50.9h42.9L605.1,121.4z"/>
|
||||
<line class="st5" x1="197" y1="169.5" x2="246" y2="169.5"/>
|
||||
<circle class="st3" cx="208" cy="169.5" r="2"/>
|
||||
<polyline class="st11" points="210,151.5 210,151.5 227,151.5 "/>
|
||||
<path class="st1" d="M239,153.5c2.6,0,4.5,3.4,1.4,6H238c0-2.2-1.8-4-4-4s-4,1.8-4,4h-16c0-2.2-1.8-4-4-4s-4,1.8-4,4h-0.4
|
||||
c-2.5,0-4.6-2.1-4.6-4.6l0,0v-1.4h6.9l3.1-10h15l3.1,10H239z"/>
|
||||
<path class="st12" d="M224.5,145.5h-12.1l-2.5,8h17L224.5,145.5z"/>
|
||||
<circle class="st1" cx="210" cy="159.5" r="3"/>
|
||||
<circle class="st1" cx="234" cy="159.5" r="3"/>
|
||||
<path class="st1" d="M266.8,108.4h73.6c1,0,1.9,0.8,1.9,1.9v52.2c0,1-0.8,1.9-1.9,1.9h-73.6c-1,0-1.9-0.8-1.9-1.9v-52.2
|
||||
C265,109.2,265.8,108.4,266.8,108.4z"/>
|
||||
<path class="st4" d="M273.4,101.8H347c1,0,1.9,0.8,1.9,1.9v52.2c0,1-0.8,1.9-1.9,1.9h-73.6c-1,0-1.9-0.8-1.9-1.9v-52.2
|
||||
C271.5,102.7,272.4,101.8,273.4,101.8z"/>
|
||||
<path class="st3" d="M348.9,103.7v4.7h-77.3v-4.7c0-1,0.8-1.9,1.9-1.9H347C348,101.9,348.8,102.7,348.9,103.7z"/>
|
||||
<rect x="277.9" y="112.4" class="st1" width="64" height="5.1"/>
|
||||
<rect x="277.9" y="120.1" class="st13" width="17.9" height="33.3"/>
|
||||
<rect x="330.4" y="120.1" class="st13" width="11.5" height="11.5"/>
|
||||
<rect x="330.4" y="134.2" class="st13" width="11.5" height="11.5"/>
|
||||
<rect x="330.4" y="148.3" class="st13" width="11.5" height="5.1"/>
|
||||
<rect x="299.7" y="120.1" class="st1" width="26.9" height="16.6"/>
|
||||
<rect x="299.7" y="139.3" class="st1" width="26.9" height="14.1"/>
|
||||
<circle class="st3" cx="348.3" cy="102.2" r="6.4"/>
|
||||
<g class="st14">
|
||||
<path class="st7" d="M290.6,136.6h-3v10h-3.4v-10h-1.9v-1.6l1.9-0.9v-0.9c-0.1-1.1,0.3-2.3,1.1-3.1c1-0.7,2.2-1.1,3.4-1
|
||||
c1.1,0,2.1,0.2,3.2,0.5l-0.9,2.5c-0.6-0.2-1.3-0.3-1.9-0.3c-0.4,0-0.8,0.1-1.1,0.4c-0.2,0.3-0.3,0.7-0.3,1.1v0.8h3L290.6,136.6z"
|
||||
/>
|
||||
</g>
|
||||
<rect x="191" y="104.5" class="st1" width="19" height="18"/>
|
||||
<rect x="214" y="104.5" class="st1" width="19" height="18"/>
|
||||
<rect x="237" y="104.5" class="st1" width="19" height="18"/>
|
||||
<rect x="265" y="170.5" class="st1" width="55" height="9"/>
|
||||
<path class="st15" d="M400.2,0c-18.5,0-33.5,15-33.5,33.5s15,33.5,33.5,33.5s33.5-15,33.5-33.5S418.7,0,400.2,0z M400.2,60.1
|
||||
c-14.7,0-26.6-11.9-26.6-26.6s11.9-26.6,26.6-26.6c14.7,0,26.6,11.9,26.6,26.6c0,0,0,0,0,0C426.7,48.2,414.8,60.1,400.2,60.1z"/>
|
||||
<polyline class="st16" points="416.1,24.4 400.6,35.3 391.8,28.2 "/>
|
||||
<rect y="36.5" class="st17" width="122.3" height="95.3"/>
|
||||
<rect y="137.8" class="st18" width="122.3" height="51.7"/>
|
||||
<rect y="22.5" class="st1" width="122.3" height="7"/>
|
||||
<rect y="196.5" class="st1" width="122.3" height="7"/>
|
||||
<path class="st3" d="M494.4,130.7c-1.3,3.3-2,6.7-2,10.2v0.2c-1.1-0.2-2.3-0.3-3.4-0.2h-0.9c-8.3,0-26.1,0.3-33.9,0.6
|
||||
c-2.3,0.1-3.8,0.1-3.8,0.2l0,0c-1-7.8-3.2-14.6-6.1-22.6c-0.9-2.5-1.4-4.9-0.4-7.2c0,0,0.1-0.3,0.3-0.7c1.5-3.7,3.8-6.9,6.7-9.7
|
||||
c0.1-0.1,0.2-0.2,0.4-0.4l1.6,2.3l1.2,1.8l3.4,4.8c0.2,0.3,0.5,0.7,0.7,1l0.2,0.3c0.1,0.1,0.2,0.2,0.2,0.3l0,0
|
||||
c6,7.4,15.1,11.4,24.6,10.7c3-0.2,5.9-0.8,8.7-1.9c0.5-0.3,1.1-0.5,1.6-0.7c1.8-0.6,2.9-0.6,3.3,0.2
|
||||
C497.6,121.3,496.5,124.7,494.4,130.7z"/>
|
||||
<path class="st19" d="M494.6,141.1l-45.9,0.4c-2.8,0.1-5.2-2.2-5.3-5v-0.3c0-2.8,2.3-5.1,5.2-5.1l45.9-0.4c2.8-0.1,5.2,2.2,5.3,5
|
||||
v0.3C499.7,138.8,497.4,141.1,494.6,141.1C494.6,141.1,494.6,141.1,494.6,141.1z"/>
|
||||
<path class="st4" d="M492.2,144.2c0.3,11.6-8.8,21.3-20.5,21.7c-11.6,0.3-21.3-8.8-21.7-20.5c0-0.3,0-0.5,0-0.8l-0.1-5.9l-0.1-7.8
|
||||
l-0.1-8.1c0-0.9,0-1.7,0.1-2.6c1.2-10.6,10.1-18.6,20.7-18.7h0.2c11.6,0,21,9.3,21.1,20.9l0.1,7.9L492.2,144.2z"/>
|
||||
<path class="st4" d="M480.6,145.4c-0.2,5.1-4.6,9.1-9.7,8.8c-4.7-0.2-8.5-3.9-8.8-8.7L480.6,145.4z"/>
|
||||
<path class="st5" d="M455.8,132.1c0.6-3,3.3-5.2,6.3-5.1"/>
|
||||
<path class="st5" d="M479.2,127c3-0.6,6,1,7.1,3.9"/>
|
||||
<path class="st7" d="M461.9,134.7c-0.7,0-1.3-0.6-1.3-1.3c0-0.7,0.6-1.3,1.3-1.3s1.3,0.6,1.3,1.3
|
||||
C463.2,134.1,462.7,134.6,461.9,134.7L461.9,134.7z"/>
|
||||
<path class="st7" d="M461.9,131.1L461.9,131.1c-1.3,0.1-2.2,1.2-2.2,2.5c0.1,1.2,1,2.1,2.2,2.2l0,0c1.3-0.1,2.2-1.2,2.2-2.5
|
||||
C464,132,463.1,131.1,461.9,131.1z"/>
|
||||
<path class="st7" d="M480.5,134.5c-0.7,0-1.3-0.6-1.3-1.3c0-0.7,0.6-1.3,1.3-1.3c0.7,0,1.3,0.6,1.3,1.3
|
||||
C481.8,133.9,481.2,134.5,480.5,134.5L480.5,134.5z"/>
|
||||
<path class="st7" d="M480.5,130.9L480.5,130.9c-1.3,0.1-2.2,1.2-2.2,2.5c0.1,1.2,1,2.1,2.2,2.2l0,0c1.3-0.1,2.2-1.2,2.2-2.5
|
||||
C482.5,131.9,481.6,130.9,480.5,130.9z"/>
|
||||
<path class="st4" d="M493.5,119.8c-0.5,0.2-1.1,0.5-1.6,0.7C492.4,120.2,493,120,493.5,119.8z"/>
|
||||
<path class="st3" d="M498.1,112.7c-3.5-9.5-11.6-16.5-21.5-18.5c-0.3-0.1-0.7-0.1-1-0.2c-0.7-0.1-1.4-0.2-2.1-0.3
|
||||
c-0.8-0.1-1.7-0.1-2.6-0.1h-0.3c-5.7,0-11.4,1.8-16.1,5c-1.2,0.8-2.3,1.7-3.3,2.6c-0.1,0.1-0.2,0.2-0.4,0.4
|
||||
c-2.9,2.7-5.2,6-6.7,9.7c1-2.6,3.5-4.3,6.4-4.3c4.6,0,8.1,4.8,8.1,4.8c8,10,18.8,14.3,30.4,9.8c4.5-1.6,9.9,1,5.4,9.2
|
||||
C496.2,126.3,501.1,120.9,498.1,112.7z"/>
|
||||
<path class="st20" d="M494.8,115.7c-1-2.7-2.4-5.3-4.2-7.6"/>
|
||||
<path class="st5" d="M481.4,118.5c-4.4,0-8.7-1.2-12.6-3.3"/>
|
||||
<path class="st5" d="M461.9,121.5c-7.3-7.3-6.1-11.8-6.1-12.6c0,0-3.1,5.1-1.3,9.7"/>
|
||||
<path class="st5" d="M441.1,113c0.9-3.2,4.4-4.9,4.4-4.9s-0.3-1.9-3-1.9"/>
|
||||
<line class="st2" x1="468.7" y1="158.8" x2="473.6" y2="158.8"/>
|
||||
<line class="st21" x1="61.2" y1="139.2" x2="61.2" y2="154.3"/>
|
||||
<circle class="st21" cx="61.2" cy="160.5" r="6.2"/>
|
||||
<path class="st4" d="M323.1,227.3h-16.9c-2.7,0-5.4,1.1-7.3,3.1l-7,7.1h31.2L323.1,227.3z"/>
|
||||
<path class="st4" d="M330.6,237.5c0-5.6-4.6-10.2-10.2-10.2l0,0h-6.7c-2.7,0-5.4,1.1-7.3,3.1l-7,7.1L330.6,237.5L330.6,237.5z"/>
|
||||
<path class="st3" d="M323.6,227.3h-0.7c-2.7,0-5.4,1.1-7.3,3.1l-7,7.1h25.2C333.8,231.9,329.3,227.3,323.6,227.3z"/>
|
||||
<line class="st5" x1="201.5" y1="415" x2="325.4" y2="415"/>
|
||||
<path class="st4" d="M199.9,406.2"/>
|
||||
<path class="st4" d="M219.6,415h-23.8c-2.1,0-4-0.9-5.4-2.4c-1.6-1.6-3.3-3.4-4.5-4.7c-0.3-0.4-0.3-1.1,0.2-1.4
|
||||
c0.2-0.1,0.3-0.2,0.5-0.2h20.1c0.9,0,1.9,0.4,2.5,1.1c1.2,1.3,3.2,3.5,5,5.2C215.5,414.1,217.5,415,219.6,415z"/>
|
||||
<path class="st4" d="M307.3,415H331c2.1,0,4-0.9,5.4-2.4c1.6-1.6,3.3-3.4,4.5-4.7c0.3-0.4,0.2-1.1-0.2-1.4
|
||||
c-0.1-0.1-0.3-0.2-0.5-0.2h-20.1c-0.9,0-1.8,0.4-2.5,1.1c-1.2,1.3-3.2,3.5-5,5.2C311.3,414.1,309.3,415,307.3,415z"/>
|
||||
<path class="st7" d="M197.1,410.9c0.2,0.4,0,0.7-0.4,0.7c-0.5,0-0.9-0.3-1.2-0.7c-0.2-0.4,0-0.7,0.4-0.7
|
||||
C196.4,410.3,196.9,410.5,197.1,410.9z"/>
|
||||
<path class="st7" d="M201.8,410.9c0.2,0.4,0,0.7-0.4,0.7c-0.5,0-0.9-0.3-1.2-0.7c-0.2-0.4,0-0.7,0.4-0.7
|
||||
C201.1,410.3,201.5,410.5,201.8,410.9z"/>
|
||||
<path class="st7" d="M206.4,410.9c0.2,0.4,0,0.7-0.4,0.7c-0.5,0-0.9-0.3-1.2-0.7c-0.2-0.4,0-0.7,0.4-0.7
|
||||
C205.7,410.3,206.2,410.5,206.4,410.9z"/>
|
||||
<path class="st3" d="M237.2,426c0,2.4-1.9,4.3-4.3,4.3c0,0,0,0,0,0h-4.3v-8.7h4.3C235.2,421.7,237.2,423.6,237.2,426
|
||||
C237.2,426,237.2,426,237.2,426z"/>
|
||||
<circle class="st22" cx="228.5" cy="426" r="4.3"/>
|
||||
<line class="st5" x1="228.5" y1="426" x2="206.3" y2="426"/>
|
||||
<path class="st22" d="M214.9,426c0,2.4-1.9,4.3-4.3,4.3c0,0,0,0,0,0h-4.3v-8.7h4.3C213,421.7,214.9,423.6,214.9,426
|
||||
C214.9,426,214.9,426,214.9,426z"/>
|
||||
<circle class="st4" cx="206.3" cy="426" r="4.3"/>
|
||||
<circle class="st7" cx="206.3" cy="426" r="1"/>
|
||||
<line class="st5" x1="220.5" y1="425.9" x2="220.5" y2="415"/>
|
||||
<polygon class="st4" points="211.6,418.3 223.6,418.3 225.6,415 209.6,415 "/>
|
||||
<polygon class="st22" points="215.7,418.3 227.7,418.3 229.7,415 213.7,415 "/>
|
||||
<path class="st3" d="M324.9,426c0,2.4-1.9,4.3-4.3,4.3c0,0,0,0,0,0h-4.3v-8.7h4.3C323,421.7,324.9,423.6,324.9,426
|
||||
C324.9,426,324.9,426,324.9,426z"/>
|
||||
<circle class="st22" cx="316.3" cy="426" r="4.3"/>
|
||||
<line class="st5" x1="316.3" y1="426" x2="294" y2="426"/>
|
||||
<path class="st22" d="M302.7,426c0,2.4-1.9,4.3-4.3,4.3c0,0,0,0,0,0H294v-8.7h4.3C300.7,421.6,302.7,423.6,302.7,426
|
||||
C302.7,426,302.7,426,302.7,426z"/>
|
||||
<circle class="st4" cx="294" cy="426" r="4.3"/>
|
||||
<circle class="st7" cx="294" cy="426" r="1"/>
|
||||
<line class="st5" x1="308.3" y1="425.9" x2="308.3" y2="415"/>
|
||||
<polygon class="st4" points="299.3,418.3 311.3,418.3 313.3,415 297.3,415 "/>
|
||||
<polygon class="st22" points="303.4,418.3 315.4,418.3 317.4,415 301.4,415 "/>
|
||||
<path class="st4" d="M175.8,233.1h27.5c1.2,0,2.2,1,2.2,2.2l0,0c0,1.2-1,2.2-2.2,2.2h-27.5c-1.2,0-2.2-1-2.2-2.2l0,0
|
||||
C173.6,234.1,174.6,233.1,175.8,233.1z"/>
|
||||
<path class="st5" d="M147.3,233.2c1-6.5,6.6-11.3,13.1-11.3c0.6,0,1.3,0,1.9,0.1"/>
|
||||
<path class="st5" d="M161.2,230c-2.9-0.4-5.6,1.6-6,4.5"/>
|
||||
<path class="st5" d="M147.3,233.2c1-6.5,6.6-11.3,13.1-11.3c0.6,0,1.3,0,1.9,0.1"/>
|
||||
<path class="st5" d="M151.2,233.9c0.8-5.1,5.5-8.6,10.6-7.9"/>
|
||||
<path class="st5" d="M161.2,230c-2.9-0.4-5.6,1.6-6,4.5"/>
|
||||
<path class="st4" d="M160.8,233.1h17.5c1.2,0,2.2,1,2.2,2.2l0,0c0,1.2-1,2.2-2.2,2.2h-17.5c-1.2,0-2.2-1-2.2-2.2l0,0
|
||||
C158.6,234.1,159.6,233.1,160.8,233.1z"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 24 KiB |
BIN
moehu/moehu_admin/public/img/ic_launcher.png
Executable file
BIN
moehu/moehu_admin/public/img/ic_launcher.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 330 KiB |
24
moehu/moehu_admin/public/index.html
Normal file
24
moehu/moehu_admin/public/index.html
Normal file
@@ -0,0 +1,24 @@
|
||||
<!--
|
||||
~ Copyright (c) 2020. bmy
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge" http-equiv="X-UA-Compatible">
|
||||
<meta content="width=device-width,initial-scale=1.0" name="viewport">
|
||||
<link rel="shortcut icon" href="./img/ic_launcher.png">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
|
||||
Please enable it to continue.</strong>
|
||||
</noscript>
|
||||
<div id="app"></div>
|
||||
<% for (var i in htmlWebpackPlugin.options.cdn) { %>
|
||||
<script src="<%= htmlWebpackPlugin.options.cdn[i] %>"></script>
|
||||
<% } %>
|
||||
</body>
|
||||
</html>
|
||||
1
moehu/moehu_admin/src/.pydio
Normal file
1
moehu/moehu_admin/src/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
d38103c0-1b4f-4056-8f24-e9769593047c
|
||||
1
moehu/moehu_admin/src/application/.pydio
Normal file
1
moehu/moehu_admin/src/application/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
7d659fa3-af36-43d8-9a4d-a9c9071622dd
|
||||
19
moehu/moehu_admin/src/application/App.tsx
Normal file
19
moehu/moehu_admin/src/application/App.tsx
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import "@less/imports.less"
|
||||
import { Component } from 'vue-property-decorator';
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class App extends VueCustomize {
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div id={"app"}>
|
||||
<router-view/>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
1
moehu/moehu_admin/src/application/assets/.pydio
Normal file
1
moehu/moehu_admin/src/application/assets/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
7ad717d3-5fad-430c-9382-30e07b0ae447
|
||||
1
moehu/moehu_admin/src/application/assets/less/.pydio
Normal file
1
moehu/moehu_admin/src/application/assets/less/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
6c556179-e51f-4b64-b18f-679334a8c45f
|
||||
@@ -0,0 +1 @@
|
||||
6483db00-c72e-4434-92d4-5cfdcb231e5a
|
||||
461
moehu/moehu_admin/src/application/assets/less/common/normalize.less
vendored
Normal file
461
moehu/moehu_admin/src/application/assets/less/common/normalize.less
vendored
Normal file
@@ -0,0 +1,461 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
body,ul,li,p,h1,h2,h3,h4,h5,h6,img,input,button {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
::-webkit-scrollbar { display: none }
|
||||
html, body, #app {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
line-height: 1.15; /* 2 */
|
||||
-ms-text-size-adjust: 100%; /* 3 */
|
||||
-webkit-text-size-adjust: 100%; /* 3 */
|
||||
}
|
||||
|
||||
body {
|
||||
line-height: 1.5;
|
||||
font-size: 16px;
|
||||
width: 100%;
|
||||
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
||||
background-color: #fafafa;
|
||||
color: rgba(0, 0, 0, 0.87);
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
article,
|
||||
aside,
|
||||
footer,
|
||||
header,
|
||||
nav,
|
||||
section {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
* 1. Add the correct display in IE.
|
||||
*/
|
||||
|
||||
figcaption,
|
||||
figure,
|
||||
main { /* 1 */
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct margin in IE 8.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in Firefox.
|
||||
* 2. Show the overflow in Edge and IE.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box; /* 1 */
|
||||
height: 0; /* 1 */
|
||||
overflow: visible; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Remove the gray background on active links in IE 10.
|
||||
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
|
||||
*/
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
background-color: transparent; /* 1 */
|
||||
-webkit-text-decoration-skip: objects; /* 2 */
|
||||
user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the outline on focused links when they are also active or hovered
|
||||
* in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline-width: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Remove the bottom border in Firefox 39-.
|
||||
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: none; /* 1 */
|
||||
text-decoration: underline; /* 2 */
|
||||
text-decoration: underline dotted; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: inherit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font weight in Chrome, Edge, and Safari.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bolder;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inheritance and scaling of font size in all browsers.
|
||||
* 2. Correct the odd `em` font sizing in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: monospace, monospace; /* 1 */
|
||||
font-size: 1em; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font style in Android 4.3-.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct background and color in IE 9-.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background-color: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` elements from affecting the line height in
|
||||
* all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
*/
|
||||
|
||||
audio,
|
||||
video {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in iOS 4-7.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the border on images inside links in IE 10-.
|
||||
*/
|
||||
|
||||
img {
|
||||
border-style: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the overflow in IE.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* 1. Change the font styles in all browsers (opinionated).
|
||||
* 2. Remove the margin in Firefox and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
font-family: sans-serif; /* 1 */
|
||||
font-size: 100%; /* 1 */
|
||||
line-height: 1.15; /* 1 */
|
||||
margin: 0; /* 2 */
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the overflow in IE.
|
||||
* 1. Show the overflow in Edge.
|
||||
*/
|
||||
|
||||
button,
|
||||
input { /* 1 */
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inheritance of text transform in Edge, Firefox, and IE.
|
||||
* 1. Remove the inheritance of text transform in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select { /* 1 */
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
|
||||
* controls in Android 4.
|
||||
* 2. Correct the inability to style clickable types in iOS and Safari.
|
||||
*/
|
||||
|
||||
button,
|
||||
html [type="button"], /* 1 */
|
||||
[type="reset"],
|
||||
[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner border and padding in Firefox.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
[type="button"]::-moz-focus-inner,
|
||||
[type="reset"]::-moz-focus-inner,
|
||||
[type="submit"]::-moz-focus-inner {
|
||||
border-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Restore the focus styles unset by the previous rule.
|
||||
*/
|
||||
|
||||
button:-moz-focusring,
|
||||
[type="button"]:-moz-focusring,
|
||||
[type="reset"]:-moz-focusring,
|
||||
[type="submit"]:-moz-focusring {
|
||||
outline: 1px dotted ButtonText;
|
||||
}
|
||||
|
||||
/**
|
||||
* Change the border, margin, and padding in all browsers (opinionated).
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the text wrapping in Edge and IE.
|
||||
* 2. Correct the color inheritance from `fieldset` elements in IE.
|
||||
* 3. Remove the padding so developers are not caught out when they zero out
|
||||
* `fieldset` elements in all browsers.
|
||||
*/
|
||||
|
||||
legend {
|
||||
box-sizing: border-box; /* 1 */
|
||||
color: inherit; /* 2 */
|
||||
display: table; /* 1 */
|
||||
max-width: 100%; /* 1 */
|
||||
padding: 0; /* 3 */
|
||||
white-space: normal; /* 1 */
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct display in IE 9-.
|
||||
* 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
progress {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the default vertical scrollbar in IE.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Add the correct box sizing in IE 10-.
|
||||
* 2. Remove the padding in IE 10-.
|
||||
*/
|
||||
|
||||
[type="checkbox"],
|
||||
[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct the cursor style of increment and decrement buttons in Chrome.
|
||||
*/
|
||||
|
||||
[type="number"]::-webkit-inner-spin-button,
|
||||
[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the odd appearance in Chrome and Safari.
|
||||
* 2. Correct the outline style in Safari.
|
||||
*/
|
||||
|
||||
[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
outline-offset: -2px; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
|
||||
*/
|
||||
|
||||
[type="search"]::-webkit-search-cancel-button,
|
||||
[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct the inability to style clickable types in iOS and Safari.
|
||||
* 2. Change font properties to `inherit` in Safari.
|
||||
*/
|
||||
|
||||
::-webkit-file-upload-button {
|
||||
-webkit-appearance: button; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
}
|
||||
|
||||
/* Interactive
|
||||
========================================================================== */
|
||||
|
||||
/*
|
||||
* Add the correct display in IE 9-.
|
||||
* 1. Add the correct display in Edge, IE, and Firefox.
|
||||
*/
|
||||
|
||||
details, /* 1 */
|
||||
menu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add the correct display in all browsers.
|
||||
*/
|
||||
|
||||
summary {
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
/* Scripting
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 9-.
|
||||
*/
|
||||
|
||||
canvas {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the correct display in IE.
|
||||
*/
|
||||
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Hidden
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Add the correct display in IE 10-.
|
||||
*/
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
// 重置ui框架css
|
||||
.el-header {
|
||||
padding: 0 !important;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
right: 0;
|
||||
z-index: 999;
|
||||
}
|
||||
.el-main {
|
||||
margin-top: 60px;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.el-aside {
|
||||
height: calc(100vh - 60px);
|
||||
position: fixed;
|
||||
top: 60px;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
ul {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.el-menu-item.is-active {
|
||||
color: #fff !important;
|
||||
background: #0397ff !important;
|
||||
}
|
||||
.is-opened {
|
||||
.el-menu--inline {
|
||||
background: #f6f3f3 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.demo-form-inline {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 60px;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
|
||||
.el-form--inline .el-form-item {
|
||||
margin-right: 20px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.el-dialog__body {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
.list {
|
||||
.el-image__error {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
fecce3f1-9507-4380-b0b9-f9f672478d06
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
@import "../mixin/index";
|
||||
|
||||
.ElTabs {
|
||||
.TabsFather {
|
||||
overflow-x: scroll;
|
||||
width: 100%;
|
||||
position: fixed;
|
||||
z-index: 101;
|
||||
white-space: normal;
|
||||
overflow-y: hidden;
|
||||
.TabsTitle {
|
||||
display: flex;
|
||||
height: 45px;
|
||||
line-height: 45px;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #dcdfe5;
|
||||
.active {
|
||||
background: #fff;
|
||||
border-bottom: none !important;
|
||||
height: 46px;
|
||||
i, span {
|
||||
color: #0397ff !important;
|
||||
}
|
||||
}
|
||||
li {
|
||||
flex-shrink: 0;
|
||||
background-color: #fff;
|
||||
padding: 0 20px;
|
||||
border-left: 1px solid #e4e7ed;
|
||||
cursor: pointer;
|
||||
&:hover {
|
||||
i, span {
|
||||
font-size: 15px;
|
||||
color: #0397ff !important;
|
||||
}
|
||||
}
|
||||
&:last-child {
|
||||
border-right: 1px solid #e4e7ed;
|
||||
}
|
||||
i {
|
||||
margin-right: 5px;
|
||||
transition: all 0.1s;
|
||||
}
|
||||
span {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #303133;
|
||||
transition: all 0.3s;
|
||||
}
|
||||
.el-icon-close {
|
||||
margin-left: 8px;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.TabsContent {
|
||||
padding-top: 58px;
|
||||
padding-left: 15px;
|
||||
padding-bottom: 15px;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
.page_header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 4px 0;
|
||||
height: 40px;
|
||||
border-bottom: 1px solid #eee;
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 15px;
|
||||
i {
|
||||
font-size: 16px;
|
||||
}
|
||||
h1 {
|
||||
margin-left: 16px;
|
||||
font-size: 20px;
|
||||
margin-right: 12px;
|
||||
margin-bottom: 0;
|
||||
color: #000000d9;
|
||||
}
|
||||
span {
|
||||
margin-right: 12px;
|
||||
color: #00000073;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
.UserVerifyList {
|
||||
.demo-table-expand {
|
||||
font-size: 0;
|
||||
}
|
||||
.demo-table-expand label {
|
||||
width: 90px;
|
||||
color: #99a9bf;
|
||||
}
|
||||
.demo-table-expand .el-form-item {
|
||||
margin-right: 0;
|
||||
margin-bottom: 0;
|
||||
width: 25%;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
// 公共css
|
||||
@import "./common/normalize";
|
||||
@import "./common/resetUi";
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
abc73d06-f4f8-4c7b-8470-4d782dea1301
|
||||
312
moehu/moehu_admin/src/application/assets/less/mixin/color.less
Normal file
312
moehu/moehu_admin/src/application/assets/less/mixin/color.less
Normal file
@@ -0,0 +1,312 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
// 公共css样式,可以在 页面组件中直接使用变量名称
|
||||
@theme-color: #0397ff;
|
||||
@test-color: yellow;
|
||||
|
||||
@red50: #ffebee;
|
||||
@red100: #ffcdd2;
|
||||
@red200: #ef9a9a;
|
||||
@red300: #e57373;
|
||||
@red400: #ef5350;
|
||||
@red500: #f44336;
|
||||
@red600: #e53935;
|
||||
@red700: #d32f2f;
|
||||
@red800: #c62828;
|
||||
@red900: #b71c1c;
|
||||
@redA100: #ff8a80;
|
||||
@redA200: #ff5252;
|
||||
@redA400: #ff1744;
|
||||
@redA700: #d50000;
|
||||
@red: @red500;
|
||||
|
||||
@pink50: #fce4ec;
|
||||
@pink100: #f8bbd0;
|
||||
@pink200: #f48fb1;
|
||||
@pink300: #f06292;
|
||||
@pink400: #ec407a;
|
||||
@pink500: #e91e63;
|
||||
@pink600: #d81b60;
|
||||
@pink700: #c2185b;
|
||||
@pink800: #ad1457;
|
||||
@pink900: #880e4f;
|
||||
@pinkA100: #ff80ab;
|
||||
@pinkA200: #ff4081;
|
||||
@pinkA400: #f50057;
|
||||
@pinkA700: #c51162;
|
||||
@pink: @pink500;
|
||||
|
||||
@purple50: #f3e5f5;
|
||||
@purple100: #e1bee7;
|
||||
@purple200: #ce93d8;
|
||||
@purple300: #ba68c8;
|
||||
@purple400: #ab47bc;
|
||||
@purple500: #9c27b0;
|
||||
@purple600: #8e24aa;
|
||||
@purple700: #7b1fa2;
|
||||
@purple800: #6a1b9a;
|
||||
@purple900: #4a148c;
|
||||
@purpleA100: #ea80fc;
|
||||
@purpleA200: #e040fb;
|
||||
@purpleA400: #d500f9;
|
||||
@purpleA700: #aa00ff;
|
||||
@purple: @purple500;
|
||||
|
||||
@deepPurple50: #ede7f6;
|
||||
@deepPurple100: #d1c4e9;
|
||||
@deepPurple200: #b39ddb;
|
||||
@deepPurple300: #9575cd;
|
||||
@deepPurple400: #7e57c2;
|
||||
@deepPurple500: #673ab7;
|
||||
@deepPurple600: #5e35b1;
|
||||
@deepPurple700: #512da8;
|
||||
@deepPurple800: #4527a0;
|
||||
@deepPurple900: #311b92;
|
||||
@deepPurpleA100: #b388ff;
|
||||
@deepPurpleA200: #7c4dff;
|
||||
@deepPurpleA400: #651fff;
|
||||
@deepPurpleA700: #6200ea;
|
||||
@deepPurple: @deepPurple500;
|
||||
|
||||
@indigo50: #e8eaf6;
|
||||
@indigo100: #c5cae9;
|
||||
@indigo200: #9fa8da;
|
||||
@indigo300: #7986cb;
|
||||
@indigo400: #5c6bc0;
|
||||
@indigo500: #3f51b5;
|
||||
@indigo600: #3949ab;
|
||||
@indigo700: #303f9f;
|
||||
@indigo800: #283593;
|
||||
@indigo900: #1a237e;
|
||||
@indigoA100: #8c9eff;
|
||||
@indigoA200: #536dfe;
|
||||
@indigoA400: #3d5afe;
|
||||
@indigoA700: #304ffe;
|
||||
@indigo: @indigo500;
|
||||
|
||||
@blue50: #e3f2fd;
|
||||
@blue100: #bbdefb;
|
||||
@blue200: #90caf9;
|
||||
@blue300: #64b5f6;
|
||||
@blue400: #42a5f5;
|
||||
@blue500: #2196f3;
|
||||
@blue600: #1e88e5;
|
||||
@blue700: #1976d2;
|
||||
@blue800: #1565c0;
|
||||
@blue900: #0d47a1;
|
||||
@blueA100: #82b1ff;
|
||||
@blueA200: #448aff;
|
||||
@blueA400: #2979ff;
|
||||
@blueA700: #2962ff;
|
||||
@blue: @blue500;
|
||||
|
||||
@lightBlue50: #e1f5fe;
|
||||
@lightBlue100: #b3e5fc;
|
||||
@lightBlue200: #81d4fa;
|
||||
@lightBlue300: #4fc3f7;
|
||||
@lightBlue400: #29b6f6;
|
||||
@lightBlue500: #03a9f4;
|
||||
@lightBlue600: #039be5;
|
||||
@lightBlue700: #0288d1;
|
||||
@lightBlue800: #0277bd;
|
||||
@lightBlue900: #01579b;
|
||||
@lightBlueA100: #80d8ff;
|
||||
@lightBlueA200: #40c4ff;
|
||||
@lightBlueA400: #00b0ff;
|
||||
@lightBlueA700: #0091ea;
|
||||
@lightBlue: @lightBlue500;
|
||||
|
||||
@cyan50: #e0f7fa;
|
||||
@cyan100: #b2ebf2;
|
||||
@cyan200: #80deea;
|
||||
@cyan300: #4dd0e1;
|
||||
@cyan400: #26c6da;
|
||||
@cyan500: #00bcd4;
|
||||
@cyan600: #00acc1;
|
||||
@cyan700: #0097a7;
|
||||
@cyan800: #00838f;
|
||||
@cyan900: #006064;
|
||||
@cyanA100: #84ffff;
|
||||
@cyanA200: #18ffff;
|
||||
@cyanA400: #00e5ff;
|
||||
@cyanA700: #00b8d4;
|
||||
@cyan: @cyan500;
|
||||
|
||||
@teal50: #e0f2f1;
|
||||
@teal100: #b2dfdb;
|
||||
@teal200: #80cbc4;
|
||||
@teal300: #4db6ac;
|
||||
@teal400: #26a69a;
|
||||
@teal500: #009688;
|
||||
@teal600: #00897b;
|
||||
@teal700: #00796b;
|
||||
@teal800: #00695c;
|
||||
@teal900: #004d40;
|
||||
@tealA100: #a7ffeb;
|
||||
@tealA200: #64ffda;
|
||||
@tealA400: #1de9b6;
|
||||
@tealA700: #00bfa5;
|
||||
@teal: @teal500;
|
||||
|
||||
@green50: #e8f5e9;
|
||||
@green100: #c8e6c9;
|
||||
@green200: #a5d6a7;
|
||||
@green300: #81c784;
|
||||
@green400: #66bb6a;
|
||||
@green500: #4caf50;
|
||||
@green600: #43a047;
|
||||
@green700: #388e3c;
|
||||
@green800: #2e7d32;
|
||||
@green900: #1b5e20;
|
||||
@greenA100: #b9f6ca;
|
||||
@greenA200: #69f0ae;
|
||||
@greenA400: #00e676;
|
||||
@greenA700: #00c853;
|
||||
@green: @green500;
|
||||
|
||||
@lightGreen50: #f1f8e9;
|
||||
@lightGreen100: #dcedc8;
|
||||
@lightGreen200: #c5e1a5;
|
||||
@lightGreen300: #aed581;
|
||||
@lightGreen400: #9ccc65;
|
||||
@lightGreen500: #8bc34a;
|
||||
@lightGreen600: #7cb342;
|
||||
@lightGreen700: #689f38;
|
||||
@lightGreen800: #558b2f;
|
||||
@lightGreen900: #33691e;
|
||||
@lightGreenA100: #ccff90;
|
||||
@lightGreenA200: #b2ff59;
|
||||
@lightGreenA400: #76ff03;
|
||||
@lightGreenA700: #64dd17;
|
||||
@lightGreen: @lightGreen500;
|
||||
|
||||
@lime50: #f9fbe7;
|
||||
@lime100: #f0f4c3;
|
||||
@lime200: #e6ee9c;
|
||||
@lime300: #dce775;
|
||||
@lime400: #d4e157;
|
||||
@lime500: #cddc39;
|
||||
@lime600: #c0ca33;
|
||||
@lime700: #afb42b;
|
||||
@lime800: #9e9d24;
|
||||
@lime900: #827717;
|
||||
@limeA100: #f4ff81;
|
||||
@limeA200: #eeff41;
|
||||
@limeA400: #c6ff00;
|
||||
@limeA700: #aeea00;
|
||||
@lime: @lime500;
|
||||
|
||||
@yellow50: #fffde7;
|
||||
@yellow100: #fff9c4;
|
||||
@yellow200: #fff59d;
|
||||
@yellow300: #fff176;
|
||||
@yellow400: #ffee58;
|
||||
@yellow500: #ffeb3b;
|
||||
@yellow600: #fdd835;
|
||||
@yellow700: #fbc02d;
|
||||
@yellow800: #f9a825;
|
||||
@yellow900: #f57f17;
|
||||
@yellowA100: #ffff8d;
|
||||
@yellowA200: #ffff00;
|
||||
@yellowA400: #ffea00;
|
||||
@yellowA700: #ffd600;
|
||||
@yellow: @yellow500;
|
||||
|
||||
@amber50: #fff8e1;
|
||||
@amber100: #ffecb3;
|
||||
@amber200: #ffe082;
|
||||
@amber300: #ffd54f;
|
||||
@amber400: #ffca28;
|
||||
@amber500: #ffc107;
|
||||
@amber600: #ffb300;
|
||||
@amber700: #ffa000;
|
||||
@amber800: #ff8f00;
|
||||
@amber900: #ff6f00;
|
||||
@amberA100: #ffe57f;
|
||||
@amberA200: #ffd740;
|
||||
@amberA400: #ffc400;
|
||||
@amberA700: #ffab00;
|
||||
@amber: @amber500;
|
||||
|
||||
@orange50: #fff3e0;
|
||||
@orange100: #ffe0b2;
|
||||
@orange200: #ffcc80;
|
||||
@orange300: #ffb74d;
|
||||
@orange400: #ffa726;
|
||||
@orange500: #ff9800;
|
||||
@orange600: #fb8c00;
|
||||
@orange700: #f57c00;
|
||||
@orange800: #ef6c00;
|
||||
@orange900: #e65100;
|
||||
@orangeA100: #ffd180;
|
||||
@orangeA200: #ffab40;
|
||||
@orangeA400: #ff9100;
|
||||
@orangeA700: #ff6d00;
|
||||
@orange: @orange500;
|
||||
|
||||
@deepOrange50: #fbe9e7;
|
||||
@deepOrange100: #ffccbc;
|
||||
@deepOrange200: #ffab91;
|
||||
@deepOrange300: #ff8a65;
|
||||
@deepOrange400: #ff7043;
|
||||
@deepOrange500: #ff5722;
|
||||
@deepOrange600: #f4511e;
|
||||
@deepOrange700: #e64a19;
|
||||
@deepOrange800: #d84315;
|
||||
@deepOrange900: #bf360c;
|
||||
@deepOrangeA100: #ff9e80;
|
||||
@deepOrangeA200: #ff6e40;
|
||||
@deepOrangeA400: #ff3d00;
|
||||
@deepOrangeA700: #dd2c00;
|
||||
@deepOrange: @deepOrange500;
|
||||
|
||||
@brown50: #efebe9;
|
||||
@brown100: #d7ccc8;
|
||||
@brown200: #bcaaa4;
|
||||
@brown300: #a1887f;
|
||||
@brown400: #8d6e63;
|
||||
@brown500: #795548;
|
||||
@brown600: #6d4c41;
|
||||
@brown700: #5d4037;
|
||||
@brown800: #4e342e;
|
||||
@brown900: #3e2723;
|
||||
@brown: @brown500;
|
||||
|
||||
@blueGrey50: #eceff1;
|
||||
@blueGrey100: #cfd8dc;
|
||||
@blueGrey200: #b0bec5;
|
||||
@blueGrey300: #90a4ae;
|
||||
@blueGrey400: #78909c;
|
||||
@blueGrey500: #607d8b;
|
||||
@blueGrey600: #546e7a;
|
||||
@blueGrey700: #455a64;
|
||||
@blueGrey800: #37474f;
|
||||
@blueGrey900: #263238;
|
||||
@blueGrey: @blueGrey500;
|
||||
|
||||
@grey50: #fafafa;
|
||||
@grey100: #f5f5f5;
|
||||
@grey200: #eeeeee;
|
||||
@grey300: #e0e0e0;
|
||||
@grey400: #bdbdbd;
|
||||
@grey500: #9e9e9e;
|
||||
@grey600: #757575;
|
||||
@grey700: #616161;
|
||||
@grey800: #424242;
|
||||
@grey900: #212121;
|
||||
@grey: @grey500;
|
||||
|
||||
@black: #000000;
|
||||
@white: #ffffff;
|
||||
|
||||
@transparent: rgba(0, 0, 0, 0);
|
||||
@fullBlack: rgba(0, 0, 0, 1);
|
||||
@darkBlack: rgba(0, 0, 0, 0.87);
|
||||
@lightBlack: rgba(0, 0, 0, 0.54);
|
||||
@minBlack: rgba(0, 0, 0, 0.26);
|
||||
@faintBlack: rgba(0, 0, 0, 0.12);
|
||||
@fullWhite: rgba(255, 255, 255, 1);
|
||||
@darkWhite: rgba(255, 255, 255, 0.87);
|
||||
@lightWhite: rgba(255, 255, 255, 0.54);
|
||||
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* Copyright (c) 2023. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
@import "./color";
|
||||
@import "./mixin";
|
||||
@@ -0,0 +1,28 @@
|
||||
.clearfix() {
|
||||
&:after,
|
||||
&:before {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
|
||||
.no-scrollbar() {
|
||||
&::-webkit-scrollbar {
|
||||
display: none !important;
|
||||
width: 0 !important;
|
||||
height: 0 !important;
|
||||
-webkit-appearance: none;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.ellipsis() {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
c67fda0b-542b-44a1-ba7c-eb12fea41623
|
||||
11
moehu/moehu_admin/src/application/assets/less/page/Home.less
Normal file
11
moehu/moehu_admin/src/application/assets/less/page/Home.less
Normal file
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
@import "../mixin/index";
|
||||
|
||||
.home {
|
||||
h1 {
|
||||
color: @theme-color;
|
||||
}
|
||||
}
|
||||
116
moehu/moehu_admin/src/application/assets/less/page/Login.less
Normal file
116
moehu/moehu_admin/src/application/assets/less/page/Login.less
Normal file
@@ -0,0 +1,116 @@
|
||||
@import "../mixin/index";
|
||||
|
||||
/deep/.el-popconfirm__main {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.login {
|
||||
display: flex;
|
||||
height: 100vh;
|
||||
.login_img {
|
||||
flex: 1;
|
||||
background: @theme-color;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
position: relative;
|
||||
.circular {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
background: #36a7f5;
|
||||
border-radius: 100%;
|
||||
position: absolute;
|
||||
top: -30px;
|
||||
left: -30px;
|
||||
}
|
||||
.banner {
|
||||
width: 400px;
|
||||
.banner_title {
|
||||
text-align: center;
|
||||
color: @red50;
|
||||
margin-top: 20px;
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.login_input {
|
||||
flex: 2;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
.center {
|
||||
max-width: 392px;
|
||||
.login_text {
|
||||
color: #4a5761;
|
||||
font-size: 19px;
|
||||
border: 0;
|
||||
margin-bottom: 50px;
|
||||
font-width: 400;
|
||||
small {
|
||||
color: #4a5761;
|
||||
font-size: 15px;
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
.login_form {
|
||||
position: relative;
|
||||
input {
|
||||
width: 100%;
|
||||
padding: 19px 30px;
|
||||
border-radius: 100px;
|
||||
text-align: left;
|
||||
background-color: #ffffff;
|
||||
border: 0;
|
||||
font-size: 15px;
|
||||
color: @theme-color;
|
||||
-webkit-box-shadow: 0 6px 12px 0 rgba(18, 113, 179, 0.14);
|
||||
-moz-box-shadow: 0 6px 12px 0 rgba(18, 113, 179, 0.14);
|
||||
box-shadow: 0 6px 20px 0 rgba(18, 113, 179, 0.15);
|
||||
transition: all 0.3s ease 0.0s;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.LoginSubmit {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 10px;
|
||||
.login_button {
|
||||
text-align: center;
|
||||
border: 0;
|
||||
color: #ffffff;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
padding: 10px 20px;
|
||||
width: 60px;
|
||||
border-radius: 100px;
|
||||
background-color: @theme-color;
|
||||
box-shadow: 0 12px 32px 0 #008ef2b0;
|
||||
outline: none;
|
||||
transition: all 0.3s ease 0.0s;
|
||||
cursor: pointer;
|
||||
i {
|
||||
margin-left: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
width: 70px;
|
||||
background-color: #0080d9;
|
||||
}
|
||||
}
|
||||
.reg_text {
|
||||
color: #abb4bc;
|
||||
font-size: 14px;
|
||||
span {
|
||||
color: @theme-color;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
@import "../mixin/index";
|
||||
|
||||
.OpusDialog {
|
||||
h1 {
|
||||
padding-bottom: 15px;
|
||||
border-bottom: 1px solid #dcdfe6;
|
||||
}
|
||||
.action {
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
}
|
||||
.info {
|
||||
.info_main {
|
||||
margin-bottom: 15px;
|
||||
background: #f4f3f3;
|
||||
padding-top: 10px;
|
||||
padding-left: 10px;
|
||||
border-radius: 6px;
|
||||
padding-bottom: 15px;
|
||||
.title {
|
||||
font-size: 18px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
.list {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
padding-left: 20px;
|
||||
|
||||
li {
|
||||
width: 25%;
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
span {
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
width: 80px;
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
@import "../mixin/index";
|
||||
|
||||
.UserAudit {
|
||||
}
|
||||
|
||||
1
moehu/moehu_admin/src/application/components/.pydio
Normal file
1
moehu/moehu_admin/src/application/components/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
fd2dac7f-22d2-4fa7-a925-6e1ca3c6cf69
|
||||
@@ -0,0 +1 @@
|
||||
0b70460d-6edd-4320-bbe3-42b7efe8c083
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
import { Component, Vue, Prop } from "vue-property-decorator";
|
||||
import { Getter, Mutation } from 'vuex-class';
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class ElAside extends VueCustomize {
|
||||
@Prop() public readonly status!: boolean;
|
||||
@Getter('GettersAsideMenu') private readonly AsideMenu!: Array<any>
|
||||
@Getter('GettersTabsActive') private readonly TabsActive!: Array<any>
|
||||
@Mutation('SET_TABCONTENT') private SetContent!: any;
|
||||
@Mutation('SET_TABACTIVE') private SetActive!: any;
|
||||
|
||||
private OpenMenu(key: string, keyPath: string): void {
|
||||
this.SetContent(key);
|
||||
this.SetActive(key);
|
||||
this.$router.push(key)
|
||||
}
|
||||
|
||||
mounted() {
|
||||
// 刷新后获取当前路由地址然后激活对应菜单
|
||||
this.SetActive(this.$route.path)
|
||||
}
|
||||
|
||||
protected render () {
|
||||
return (
|
||||
<el-menu
|
||||
defaultActive={this.TabsActive}
|
||||
collapse={this.status}
|
||||
unique-opened={true}
|
||||
on-select={this.OpenMenu}
|
||||
class="el-menu-vertical-demo">
|
||||
{
|
||||
this.AsideMenu.map((v,i)=>{
|
||||
return v.children.length == 0
|
||||
? (
|
||||
<el-menu-item index={v.web_href}>
|
||||
<i class={v.icon}></i>
|
||||
<span slot="title">{v.web_title}</span>
|
||||
</el-menu-item>
|
||||
)
|
||||
: (
|
||||
<el-submenu index={v.web_href}>
|
||||
<template slot="title">
|
||||
<i class={v.icon}></i>
|
||||
<span>{v.web_title}</span>
|
||||
</template>
|
||||
<el-menu-item-group>
|
||||
{
|
||||
v.children.map((t:any,j:number) => {
|
||||
return (
|
||||
<el-menu-item index={t.web_href}>
|
||||
<i class={t.icon}></i>
|
||||
<span>{t.web_title}</span>
|
||||
</el-menu-item>
|
||||
)
|
||||
})
|
||||
}
|
||||
</el-menu-item-group>
|
||||
</el-submenu>
|
||||
)
|
||||
})
|
||||
}
|
||||
</el-menu>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
import { Component } from "vue-property-decorator";
|
||||
import { LoginResponse } from "@service/User.service";
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class ElHeader extends VueCustomize {
|
||||
private defaultActive: string = '';
|
||||
private UserInfo!: LoginResponse['user_info'];
|
||||
private isOpen: boolean = false; // false 展开,true 合上
|
||||
|
||||
private created() {
|
||||
this.UserInfo = this.$getStorage("user_info");
|
||||
}
|
||||
|
||||
protected render () {
|
||||
return (
|
||||
<el-menu
|
||||
defaultActive={this.defaultActive}
|
||||
class="el-menu-demo"
|
||||
mode="horizontal"
|
||||
background-color="#545c64"
|
||||
text-color="#fff"
|
||||
active-text-color="#ffd04b">
|
||||
<el-menu-item>
|
||||
<h3>萌弧App管理后台</h3>
|
||||
</el-menu-item>
|
||||
|
||||
<el-menu-item title={this.isOpen ? '展开' : '折叠'} onClick={() => {
|
||||
this.isOpen = !this.isOpen
|
||||
this.$emit("openChange", this.isOpen)
|
||||
}}>
|
||||
<i style={{ color: '#fff' }}
|
||||
class={this.isOpen ? 'el-icon-s-unfold' : 'el-icon-s-fold'}></i>
|
||||
</el-menu-item>
|
||||
|
||||
<el-submenu index="2" style={{ float: 'right' }}>
|
||||
<template slot="title">
|
||||
<i class="el-icon-user-solid"></i>
|
||||
{this.UserInfo.admin_user_name}
|
||||
</template>
|
||||
<el-menu-item >
|
||||
<i class="el-icon-edit"></i>
|
||||
<span slot="title">修改密码</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="3-2" on-click={()=>{
|
||||
this.$confirm('确定退出当前后台吗?', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
localStorage.clear()
|
||||
setTimeout(()=>{
|
||||
this.$router.replace('/login')
|
||||
},300)
|
||||
}).catch(() => {});
|
||||
}}>
|
||||
<i class="el-icon-switch-button"></i>
|
||||
<span slot="title">退出登录</span>
|
||||
</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-menu>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import "@componentsLess/ElTabs.less"
|
||||
import { Component, Prop } from "vue-property-decorator";
|
||||
import { Mutation } from 'vuex-class';
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class ElTabs extends VueCustomize {
|
||||
|
||||
@Prop({ default: [] }) public readonly tabsData!: Array<any>;
|
||||
|
||||
@Mutation('SET_TABACTIVE')
|
||||
private SetActive!: any;
|
||||
|
||||
@Mutation('SET_REMOVETABS')
|
||||
private RemoveTab!: any;
|
||||
|
||||
/**
|
||||
* 会导致 Computed property was assigned to but it has no setter.
|
||||
* 所以需要使用computed重写setter即可
|
||||
* @constructor
|
||||
*/
|
||||
get TabsActive() {
|
||||
return this.$store.getters.GettersTabsActive
|
||||
}
|
||||
set TabsActive(val) {}
|
||||
|
||||
/**
|
||||
* 删除tabs
|
||||
* @param targetName
|
||||
*/
|
||||
public async removeTab(targetName: string): Promise<void> {
|
||||
this.RemoveTab(targetName)
|
||||
await this.$router.push(this.TabsActive)
|
||||
}
|
||||
|
||||
render () {
|
||||
return (
|
||||
<div class="ElTabs">
|
||||
<div class="TabsFather">
|
||||
<ul class="TabsTitle">
|
||||
{
|
||||
this.tabsData.map((v,index)=>{
|
||||
return (
|
||||
<li class={v.url == this.TabsActive ? 'active': ''}
|
||||
on-click={async ()=> {
|
||||
this.SetActive(v.url)
|
||||
await this.$router.push(v.url)
|
||||
}}>
|
||||
<i class={v.icon}></i>
|
||||
<span>{v.title}</span>
|
||||
{
|
||||
v.closable
|
||||
? <i class="el-icon-close" on-click={async (e:Event)=>{
|
||||
e.stopPropagation()
|
||||
await this.removeTab(v.url)
|
||||
}}>
|
||||
</i>
|
||||
: null
|
||||
}
|
||||
</li>
|
||||
)
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
<div class="TabsContent">
|
||||
{ this.$slots.default }
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
28
moehu/moehu_admin/src/application/components/HelloWorld.tsx
Normal file
28
moehu/moehu_admin/src/application/components/HelloWorld.tsx
Normal file
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import { Component, Prop, Vue } from 'vue-property-decorator';
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class HelloWorld extends VueCustomize {
|
||||
|
||||
@Prop({ default : 'default value' }) public readonly msg!: string;
|
||||
|
||||
private mounted() {
|
||||
}
|
||||
|
||||
private showAlert() {
|
||||
alert("showAlert")
|
||||
}
|
||||
|
||||
private render() {
|
||||
return (
|
||||
<div class="hello">
|
||||
<h1>{ this.msg }</h1>
|
||||
<h2 onClick={ () => this.showAlert() }>HelloWorld组件点击事件:{ this.msg }</h2>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
29
moehu/moehu_admin/src/application/components/PageHeader.tsx
Normal file
29
moehu/moehu_admin/src/application/components/PageHeader.tsx
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Component, Prop, Vue } from 'vue-property-decorator';
|
||||
import "@componentsLess/PageHeader.less";
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
@Component
|
||||
export default class PageHeader extends VueCustomize {
|
||||
|
||||
@Prop({ default : '' }) public readonly title!: string;
|
||||
@Prop({ default : '' }) public readonly subtitle!: string;
|
||||
|
||||
private mounted() {
|
||||
}
|
||||
|
||||
|
||||
private render() {
|
||||
return (
|
||||
<div class="page_header">
|
||||
<i class="el-icon-back"></i>
|
||||
<h1>{ this.title }</h1>
|
||||
<span>{ this.subtitle }</span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
336
moehu/moehu_admin/src/application/components/UserVerifyList.tsx
Normal file
336
moehu/moehu_admin/src/application/components/UserVerifyList.tsx
Normal file
@@ -0,0 +1,336 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Component, Prop, Vue } from 'vue-property-decorator';
|
||||
import "@componentsLess/PageHeader.less";
|
||||
import "@componentsLess/UserVerifyList.less";
|
||||
import PageHeader from "./PageHeader";
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { UserServiceImpl } from '@/core/service/impl/User.service.impl';
|
||||
import { UserVerifyRes } from "@service/type/res/UserVerify.res";
|
||||
import { OpusRes, UserInfoResponseModel } from "@service/type/res/Opus.res";
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class UserVerifyList extends VueCustomize {
|
||||
|
||||
@Autowired
|
||||
public readonly UserServiceImpl!: UserServiceImpl;
|
||||
|
||||
|
||||
@Prop({default: ''}) public readonly title!: string;
|
||||
@Prop({default: ''}) public readonly subtitle!: string;
|
||||
@Prop({default: ''}) public readonly type!: string;
|
||||
|
||||
public filter: any = {
|
||||
user_id: null,
|
||||
user_verify_status: null,
|
||||
type: this.type,
|
||||
page: 1,
|
||||
count: 10,
|
||||
};
|
||||
|
||||
public total_page: number = 0;
|
||||
|
||||
public VerifyList: Array<UserVerifyRes> = [];
|
||||
public userItemInfo!: UserInfoResponseModel;
|
||||
|
||||
|
||||
private created() {
|
||||
this.GetVerifyList()
|
||||
}
|
||||
|
||||
private async GetVerifyList(): Promise<void> {
|
||||
let res = await this.UserServiceImpl.UserVerifyList(this.filter);
|
||||
this.VerifyList = res.result;
|
||||
this.total_page = res.total_page;
|
||||
}
|
||||
|
||||
private async SetUserReview(user_verify_status: number, row: UserVerifyRes): Promise<void> {
|
||||
let res = await this.UserServiceImpl.UserReview({
|
||||
user_verify_status: user_verify_status,
|
||||
user_verify_id: row.user_verify_id
|
||||
});
|
||||
await this.GetVerifyList();
|
||||
}
|
||||
|
||||
private async GetUserItemInfo(row: any): Promise<void> {
|
||||
this.userItemInfo = await this.UserServiceImpl.UserItemInfo({
|
||||
user_verify_id: row.user_verify_id
|
||||
});
|
||||
this.$forceUpdate();
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ShowColumn(): JSX.Element | undefined {
|
||||
switch (this.type) {
|
||||
case "avatar":
|
||||
return <el-table-column
|
||||
prop="user_head_img"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <el-image width="100%" preview-src-list={ [data.row.user_head_img] } src={ data.row.user_head_img } alt=""></el-image>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="头像">
|
||||
</el-table-column>
|
||||
break;
|
||||
|
||||
case "nickname":
|
||||
return <el-table-column
|
||||
prop="user_nickname"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <span>{ data.row.user_nickname }</span>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="昵称">
|
||||
</el-table-column>
|
||||
break;
|
||||
|
||||
case "signature":
|
||||
return <el-table-column
|
||||
prop="user_autograph"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <span>{ data.row.user_autograph }</span>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="签名">
|
||||
</el-table-column>
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public render(): JSX.Element {
|
||||
return (
|
||||
<div class="UserVerifyList">
|
||||
<PageHeader title={ this.title } subtitle={ this.subtitle }></PageHeader>
|
||||
<el-form inline={ true } onInput={ () => {
|
||||
} } model={ this.filter } class="demo-form-inline">
|
||||
|
||||
<el-form-item label="用户id">
|
||||
<el-input clearable vModel={ this.filter.user_id } placeholder="请输入用户id"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="审核状态">
|
||||
<el-select clearable
|
||||
onChange={ () => this.filter.page = 1 }
|
||||
vModel={ this.filter.user_verify_status }
|
||||
placeholder="请选择审核状态">
|
||||
<el-option label="等待审核" value="0"></el-option>
|
||||
<el-option label="审核驳回" value="-1"></el-option>
|
||||
<el-option label="审核通过" value="1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" onClick={ () => this.GetVerifyList() }>查询
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
data={ this.VerifyList }
|
||||
border stripe
|
||||
row-key={(row:any) => {
|
||||
return row.user_verify_id
|
||||
}}
|
||||
on-expand-change={async (expandedRows: UserVerifyRes, expanded: Array<UserVerifyRes>) => {
|
||||
if (expanded.length != 0) {
|
||||
await this.GetUserItemInfo(expandedRows)
|
||||
}
|
||||
}}
|
||||
default-sort={ {prop: 'user_id', order: 'ascending'} }
|
||||
style="width: 100%">
|
||||
<el-table-column
|
||||
type="expand" {
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return (
|
||||
<el-form label-position="left" inline class="demo-table-expand">
|
||||
<el-form-item label="用户编号">
|
||||
<span>{ this.userItemInfo?.user_id }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户手机">
|
||||
<span>{ this.userItemInfo?.user_phone }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="真实姓名">
|
||||
<span>{ this.userItemInfo?.user_real_name }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户头像">
|
||||
<el-image style="width: 50px; height: 50px" src={ this.userItemInfo?.user_head_img } preview-src-list={[this.userItemInfo?.user_head_img]}>
|
||||
</el-image>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户昵称">
|
||||
<span>{ this.userItemInfo?.user_nickname }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户性别">
|
||||
<span>{ this.userItemInfo?.user_sex }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="身份证号">
|
||||
<span>{ this.userItemInfo?.user_id_card }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="个性签名">
|
||||
<span>{ this.userItemInfo?.user_autograph }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子邮箱">
|
||||
<span>{ this.userItemInfo?.user_email }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="银行卡号">
|
||||
<span>{ this.userItemInfo?.user_bank_card }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="兴趣爱好">
|
||||
<span>{ this.userItemInfo?.user_work }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="uid">
|
||||
<span>{ this.userItemInfo?.user_uid }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="注册时间">
|
||||
<span>{ this.userItemInfo?.user_reg_time }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="出生日期">
|
||||
<span>{ this.userItemInfo?.user_birthday }</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户星座">
|
||||
<span>{ this.userItemInfo?.user_constellation || '无'}</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="280"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
switch (data.row.user_verify_status) {
|
||||
case 0:
|
||||
return (
|
||||
<span>
|
||||
<el-tag style={ {marginRight: '5px'} }
|
||||
effect="dark"
|
||||
onClick={async () => {
|
||||
await this.SetUserReview(1, data.row)
|
||||
}}
|
||||
type="success">
|
||||
通过审核
|
||||
</el-tag>
|
||||
<el-tag
|
||||
effect="dark"
|
||||
onClick={async () => {
|
||||
await this.SetUserReview(-1, data.row)
|
||||
}}
|
||||
type="danger">
|
||||
拒绝通过
|
||||
</el-tag>
|
||||
</span>
|
||||
)
|
||||
break;
|
||||
case -1:
|
||||
return <el-tag type="danger">
|
||||
<i class="el-icon-circle-close" style="margin-right: 5px"></i>
|
||||
审核驳回 无需操作
|
||||
</el-tag>
|
||||
break;
|
||||
case 1:
|
||||
return <el-tag type="success">
|
||||
<i class="el-icon-circle-check" style="margin-right: 5px"></i>
|
||||
通过审核 无需操作
|
||||
</el-tag>
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
width="140"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
switch (data.row.user_verify_status) {
|
||||
case 0:
|
||||
return <el-tag type="info">
|
||||
<i class="el-icon-time" style="margin-right: 5px"></i>
|
||||
等待审核
|
||||
</el-tag>
|
||||
break;
|
||||
case -1:
|
||||
return <el-tag type="danger">
|
||||
<i class="el-icon-circle-close" style="margin-right: 5px"></i>
|
||||
审核驳回
|
||||
</el-tag>
|
||||
break;
|
||||
case 1:
|
||||
return <el-tag type="success">
|
||||
<i class="el-icon-circle-check" style="margin-right: 5px"></i>
|
||||
通过审核
|
||||
</el-tag>
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="审核状态">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="user_verify_id"
|
||||
sortable
|
||||
width="140"
|
||||
label="编号">
|
||||
</el-table-column>
|
||||
|
||||
{this.ShowColumn()}
|
||||
|
||||
<el-table-column
|
||||
prop="user_verify_time"
|
||||
label="修改时间">
|
||||
</el-table-column>
|
||||
|
||||
|
||||
</el-table>
|
||||
|
||||
<br/>
|
||||
<el-pagination background
|
||||
layout="prev, pager, next"
|
||||
page-size={ this.filter.count }
|
||||
current-page={ this.filter.page }
|
||||
on-current-change={ (page: number) => {
|
||||
this.filter.page = page;
|
||||
this.GetVerifyList()
|
||||
} }
|
||||
page-count={ this.total_page }>
|
||||
</el-pagination>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
1
moehu/moehu_admin/src/application/logic/.pydio
Normal file
1
moehu/moehu_admin/src/application/logic/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
8a01bf21-c8df-46f5-833e-e10765370d79
|
||||
44
moehu/moehu_admin/src/application/logic/Base.logic.ts
Normal file
44
moehu/moehu_admin/src/application/logic/Base.logic.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { UserServiceImpl } from "@impl/User.service.impl";
|
||||
import { VueCustomize } from "@logic/Base.type";
|
||||
|
||||
/**
|
||||
* logic 层的父类
|
||||
* 主要实现 页面公共参数和ajax方法的地方
|
||||
*/
|
||||
export class BaseLogic {
|
||||
|
||||
@Autowired
|
||||
public readonly UserServiceImpl!: UserServiceImpl;
|
||||
|
||||
// 保存Vue对象
|
||||
public _!: VueCustomize;
|
||||
|
||||
public page: number = 1;
|
||||
public total_page: number = 1;
|
||||
public count: number = 10;
|
||||
|
||||
// $refs 类型
|
||||
public $refs!: { [key: string]: Vue | Element | Vue[] | Element[] };
|
||||
public $confirm!: any;
|
||||
public $message!: any;
|
||||
// 请求的总页数
|
||||
public TotalCount!: string;
|
||||
|
||||
// 请求参数
|
||||
public PageParams: { limit: number, page: number } = {
|
||||
limit : 10, page : 1
|
||||
}
|
||||
|
||||
/**
|
||||
* 【页面中公共的多次被用到的接口】可以在这个父类中定义,
|
||||
* 子类logic中直接使用,避免方法的冗余
|
||||
* @constructor
|
||||
*/
|
||||
public async DepartmentListRequest(): Promise<void> {
|
||||
}
|
||||
}
|
||||
30
moehu/moehu_admin/src/application/logic/Base.type.ts
Normal file
30
moehu/moehu_admin/src/application/logic/Base.type.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright (c) 2023. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Vue } from 'vue-property-decorator';
|
||||
|
||||
// 组件中路由元信息的类型
|
||||
export interface RouterMeta {
|
||||
title?: string,
|
||||
isLogin?: boolean
|
||||
}
|
||||
|
||||
// 对 logic 的部分通用变量和方法进行约束的接口
|
||||
export interface Methods {
|
||||
StartUp(): Promise<void>;
|
||||
PageLeave?(): Promise<void>;
|
||||
}
|
||||
|
||||
// tsx组件中一些方法找不到声明文件,需要在这里定义
|
||||
export class VueCustomize extends Vue {
|
||||
$setToken!: (token: string) => void
|
||||
$test!: () => string
|
||||
$formatDate!: (data: number) => string
|
||||
$isLogin!: () => void
|
||||
$setStorage!: (key: String, data: any) => void
|
||||
$getStorage!: (key: String) => any
|
||||
}
|
||||
|
||||
1
moehu/moehu_admin/src/application/logic/page/.pydio
Normal file
1
moehu/moehu_admin/src/application/logic/page/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
dd998a9d-003b-4f90-a1d7-75dc6485a20c
|
||||
@@ -0,0 +1,72 @@
|
||||
|
||||
import { BaseLogic } from "@logic/Base.logic";
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { Methods, VueCustomize } from "@logic/Base.type";
|
||||
import { ToolServiceImpl } from "@impl/Tool.service.impl";
|
||||
|
||||
import { UpdateListParams, UpdateListResponseModel } from "@service/type/res/Tool.res";
|
||||
|
||||
export class AppVsersionLogic<T extends VueCustomize> extends BaseLogic implements Methods {
|
||||
|
||||
@Autowired
|
||||
public toolServiceImpl!: ToolServiceImpl;
|
||||
|
||||
public params: UpdateListParams = {
|
||||
count: this.count,
|
||||
page: this.page,
|
||||
update_version: '',
|
||||
update_force: ''
|
||||
}
|
||||
|
||||
public updateList: Array<UpdateListResponseModel> = [];
|
||||
|
||||
public isShowAddNewUpdate: boolean = false;
|
||||
public updateForce: boolean = false;
|
||||
|
||||
public addNewsuUpdate: UpdateListResponseModel = {
|
||||
update_version: "",
|
||||
update_version_code: null,
|
||||
update_down_url: "",
|
||||
update_content: "",
|
||||
update_force: 0
|
||||
}
|
||||
|
||||
constructor(_: T) {
|
||||
super();
|
||||
this._ = _;
|
||||
}
|
||||
|
||||
|
||||
public async StartUp(): Promise<void> {
|
||||
await this.GetUpdateList();
|
||||
}
|
||||
|
||||
// apk上传接口
|
||||
public async UploadFile(file: File): Promise<void> {
|
||||
var formdata = new FormData();
|
||||
formdata.append("file", file);
|
||||
let res = await this.toolServiceImpl.UploadFile(formdata);
|
||||
console.log("====== res: ", res)
|
||||
this.addNewsuUpdate.update_down_url = res.img_url;
|
||||
}
|
||||
|
||||
// 发布新的app版本
|
||||
public async SetaddNewsuUpdate(): Promise<void> {
|
||||
let res = await this.toolServiceImpl.addNewUpdate(this.addNewsuUpdate);
|
||||
await this.GetUpdateList()
|
||||
this.isShowAddNewUpdate = false;
|
||||
}
|
||||
|
||||
// 获取app版本列表
|
||||
public async GetUpdateList(): Promise<void> {
|
||||
let res = await this.toolServiceImpl.UpdateList(this.params);
|
||||
this.updateList = res.result;
|
||||
console.log(res)
|
||||
}
|
||||
|
||||
public async deleteUpdate(item: UpdateListResponseModel): Promise<void> {
|
||||
console.log(item)
|
||||
await this.toolServiceImpl.deleteUpdate(item);
|
||||
await this.GetUpdateList()
|
||||
}
|
||||
}
|
||||
41
moehu/moehu_admin/src/application/logic/page/Home.logic.ts
Normal file
41
moehu/moehu_admin/src/application/logic/page/Home.logic.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { UserServiceImpl } from "@impl/User.service.impl";
|
||||
import { BaseLogic } from "@logic/Base.logic";
|
||||
import { Methods, VueCustomize } from "@logic/Base.type";
|
||||
|
||||
export class HomeLogic<T extends VueCustomize> extends BaseLogic implements Methods {
|
||||
|
||||
@Autowired
|
||||
public readonly UserServiceImpl!: UserServiceImpl;
|
||||
|
||||
public title: string = "12222";
|
||||
public List: any = [
|
||||
{ id : 1, name : '2222' },
|
||||
{ id : 1, name : '32434' }
|
||||
];
|
||||
|
||||
constructor(_: T) {
|
||||
super();
|
||||
this._ = _
|
||||
}
|
||||
|
||||
/**
|
||||
* 在这里面调用需要打开页面就执行的ajax请求
|
||||
* @constructor
|
||||
*/
|
||||
public async StartUp(): Promise<void> {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 请求首页数据
|
||||
*/
|
||||
public async getData(): Promise<void> {
|
||||
}
|
||||
}
|
||||
43
moehu/moehu_admin/src/application/logic/page/Login.logic.ts
Normal file
43
moehu/moehu_admin/src/application/logic/page/Login.logic.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
|
||||
import { BaseLogic } from "@logic/Base.logic";
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { UserServiceImpl } from "@impl/User.service.impl";
|
||||
import { LoginParams } from "@service/User.service";
|
||||
import { Methods, VueCustomize } from "@logic/Base.type";
|
||||
|
||||
export class LoginLogic<T extends VueCustomize> extends BaseLogic implements Methods {
|
||||
|
||||
public Banner: Array<{ img: string, title: string }> = [
|
||||
{ img: './img/Main.svg', title: '欢迎登录,萌弧App管理后台' },
|
||||
{ img: './img/Normal.svg', title: '您可以输入账号密码进行登录' },
|
||||
{ img: './img/Engineer.svg', title: '或者注册一个新的管理员账号' },
|
||||
]
|
||||
|
||||
public UserLoginParams: LoginParams = {
|
||||
admin_user_name: "moehu",
|
||||
admin_user_pwd: "111",
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public readonly UserService!: UserServiceImpl;
|
||||
|
||||
constructor(_: T) {
|
||||
super();
|
||||
this._ = _;
|
||||
}
|
||||
|
||||
public async StartUp(): Promise<void> {
|
||||
|
||||
}
|
||||
|
||||
public async UserLogin (): Promise<void> {
|
||||
// let res = await this.UserService.Login(this.UserLoginParams);
|
||||
// this._.$setStorage('token', res.user_token);
|
||||
this._.$setStorage('token', "234323erfdwerfg");
|
||||
// this._.$setStorage('user_info', res.user_info);
|
||||
this._.$setStorage('user_info', {
|
||||
admin_user_name: '张三'
|
||||
});
|
||||
await this._.$router.replace("/home")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { OpusAuditServiceImpl } from "@impl/OpusAudit.service.impl";
|
||||
import { BaseLogic } from "@logic/Base.logic";
|
||||
import { Methods, VueCustomize } from "@logic/Base.type";
|
||||
import { OpusRes } from "@service/type/res/Opus.res";
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res";
|
||||
|
||||
export class OpusAuditLogic<T extends VueCustomize> extends BaseLogic implements Methods {
|
||||
|
||||
@Autowired
|
||||
public opusAuditServiceImpl!: OpusAuditServiceImpl;
|
||||
|
||||
public opus: PaginationRes<Array<OpusRes>>['result'] = [];
|
||||
public dialogVisible: boolean = false;
|
||||
public OpusInfo!: OpusRes;
|
||||
|
||||
public filter: any = {
|
||||
opus_title : null,
|
||||
opus_status : null,
|
||||
opus_type : null,
|
||||
opus_original: null,
|
||||
};
|
||||
|
||||
|
||||
constructor(_: T) {
|
||||
super();
|
||||
this._ = _
|
||||
}
|
||||
|
||||
|
||||
public async StartUp(): Promise<void> {
|
||||
await this.GetOpusAuditList()
|
||||
}
|
||||
|
||||
public async GetOpusAuditList(): Promise<void> {
|
||||
let res = await this.opusAuditServiceImpl.OpusAudit(Object.assign(
|
||||
{ page: this.page, count: this.count },
|
||||
this.filter
|
||||
));
|
||||
this.opus = res.result;
|
||||
this.total_page = res.total_page;
|
||||
console.log(this.opus)
|
||||
console.log(this.total_page)
|
||||
}
|
||||
|
||||
public async GetOpusInfo(row: OpusRes): Promise<void> {
|
||||
let res = await this.opusAuditServiceImpl.OpusInfo({
|
||||
opus_id: row.opus_id
|
||||
});
|
||||
this.OpusInfo = res
|
||||
this.dialogVisible = true;
|
||||
console.log(res)
|
||||
}
|
||||
|
||||
public async Approved(id: number, status: number): Promise<void> {
|
||||
let res = await this.opusAuditServiceImpl.Approved({
|
||||
opus_id : id,
|
||||
opus_status: status
|
||||
});
|
||||
await this.GetOpusAuditList()
|
||||
}
|
||||
|
||||
}
|
||||
1
moehu/moehu_admin/src/application/page/.pydio
Normal file
1
moehu/moehu_admin/src/application/page/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
81055864-41a3-4c95-8c2a-f77a23f0849a
|
||||
58
moehu/moehu_admin/src/application/page/index.tsx
Normal file
58
moehu/moehu_admin/src/application/page/index.tsx
Normal file
@@ -0,0 +1,58 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import "@pageLess/Login.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { LoginLogic } from "@logic/page/Login.logic";
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import ElHeader from "@components/Element/ElHeader";
|
||||
import ElAside from "@components/Element/ElAside";
|
||||
import ElTabs from "@components/Element/ElTabs";
|
||||
import { Getter } from 'vuex-class';
|
||||
|
||||
@Component
|
||||
export default class Index extends VueCustomize {
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: 'layout',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
private OpenStatus:boolean = false;
|
||||
|
||||
@Getter('GettersTabsContentArr')
|
||||
private TabsContent!: Array<any>;
|
||||
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="layout">
|
||||
<el-container>
|
||||
<el-header>
|
||||
<ElHeader onOpenChange={(status: boolean) => this.OpenStatus = status}></ElHeader>
|
||||
</el-header>
|
||||
<el-container>
|
||||
<el-aside width={this.OpenStatus ? '66px' : '200px'}>
|
||||
<ElAside status={this.OpenStatus}></ElAside>
|
||||
</el-aside>
|
||||
<el-main style={{ marginLeft: this.OpenStatus ? '64px' : '200px' }}>
|
||||
<ElTabs tabsData={this.TabsContent} style={{ width: this.OpenStatus ? 'calc(100vw - 64px)' : 'calc(100vw - 200px)' }}>
|
||||
<router-view/>
|
||||
</ElTabs>
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
1
moehu/moehu_admin/src/application/page/index/.pydio
Normal file
1
moehu/moehu_admin/src/application/page/index/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
3182c384-9c79-4c5c-ae6c-c94e10a7e6aa
|
||||
@@ -0,0 +1 @@
|
||||
c58aea25-67d9-4744-a639-ee3eb357fb0d
|
||||
@@ -0,0 +1,515 @@
|
||||
import "@pageLess/OpusAudit.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import PageHeader from "@components/PageHeader";
|
||||
import { OpusAuditLogic } from "@logic/page/OpusAudit.logic";
|
||||
import { OpusRes, TagsResponseModel } from "@service/type/res/Opus.res";
|
||||
|
||||
//TODO 进入详情 + 审核
|
||||
//TODO 列表页面分页
|
||||
@Component
|
||||
export default class OpusAudit extends VueCustomize {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '作品审核',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
// 抽离组件所有逻辑到独立类,解耦页面和数据
|
||||
private logic: OpusAuditLogic<OpusAudit> = new OpusAuditLogic(this);
|
||||
|
||||
public async created() {
|
||||
await this.logic.StartUp();
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
public OpusInfo(): JSX.Element {
|
||||
return (
|
||||
<el-dialog
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
title: (data: any) => {
|
||||
return <div class="OpusDialog">
|
||||
<h1>作品【{this.logic.OpusInfo?.opus_title}】详情:</h1>
|
||||
{/*<div class="action">*/}
|
||||
{/* <el-button type="success" size="small" >*/}
|
||||
{/* 通过审核*/}
|
||||
{/* </el-button>*/}
|
||||
{/* <el-button size="small">*/}
|
||||
{/* 拒绝审核*/}
|
||||
{/* </el-button>*/}
|
||||
{/*</div>*/}
|
||||
</div>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
show-close={false}
|
||||
visible={this.logic.dialogVisible}
|
||||
width="70%">
|
||||
<div class="info">
|
||||
<div class="info_main">
|
||||
<div class="title">1:作品主数据</div>
|
||||
<ul class="list">
|
||||
<li>
|
||||
<span>作品标题:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_title}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>作品介绍:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_introduce}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>发布时间:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_introduce}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>点赞数量:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_satisfied}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>浏览数量:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_see}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>关注数量:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_follow}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>收藏数量:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_collection}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>作品主图:</span>
|
||||
<div class="content">
|
||||
<el-image
|
||||
style="width: 50px;height: 50px; "
|
||||
src={this.logic.OpusInfo?.opus_img}
|
||||
preview-src-list={[this.logic.OpusInfo?.opus_img]}>
|
||||
</el-image>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>审核状态:</span>
|
||||
<div class="content">{
|
||||
this.logic.OpusInfo?.opus_status == 0
|
||||
? '等待审核'
|
||||
: this.logic.OpusInfo?.opus_status - 1
|
||||
? '审核驳回' : '审核通过'
|
||||
}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>作品分类:</span>
|
||||
<div class="content">{
|
||||
this.logic.OpusInfo?.opus_type == 1
|
||||
? '推荐'
|
||||
: this.logic.OpusInfo?.opus_type == 2
|
||||
? '排行' : '关注'
|
||||
}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>是否原创:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_original == 1 ? '原创' : '非原创'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>公开范围:</span>
|
||||
<div class="content">{
|
||||
this.logic.OpusInfo?.opus_jurisdiction == 1
|
||||
? '所有人'
|
||||
: this.logic.OpusInfo?.opus_jurisdiction == 2
|
||||
? '好友' : '不公开'
|
||||
}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>允许编辑:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.opus_is_edit == 1 ? '开启编辑' : '关闭编辑'}</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="info_main">
|
||||
<div class="title">2:作品图集</div>
|
||||
<div class="list">
|
||||
{
|
||||
this.logic.OpusInfo?.opus_imgs.length == 0 ? '暂无图片' :
|
||||
this.logic.OpusInfo?.opus_imgs.map((v,i) => {
|
||||
return (
|
||||
<el-image
|
||||
style="width: 50px;margin-right: 10px"
|
||||
src={v.img_url}
|
||||
preview-src-list={this.logic.OpusInfo?.opus_imgs.map(v => v.img_url)}>
|
||||
</el-image>
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="info_main">
|
||||
<div class="title">3:用户信息</div>
|
||||
<ul class="list">
|
||||
<li>
|
||||
<span>用户编号:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_id}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>真实姓名:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_real_name || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>用户昵称:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_nickname || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>用户性别:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_sex || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>用户手机:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_phone || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>身份证号:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_id_card || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>用户邮箱:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_email || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>银行卡号:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_bank_card || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>兴趣爱好:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_work || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>头像地址:</span>
|
||||
<div class="content">
|
||||
<el-image
|
||||
style="width: 50px; height: 50px"
|
||||
src={this.logic.OpusInfo?.user_info?.user_head_img}
|
||||
preview-src-list={[this.logic.OpusInfo?.user_info?.user_head_img]}>
|
||||
</el-image>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<span>唯一uid:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_uid.substring(0,10)+'..' || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>注册时间:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_reg_time.substring(0,19) || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>用户生日:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_birthday || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>用户星座:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_constellation || '用户未填写'}</div>
|
||||
</li>
|
||||
<li>
|
||||
<span>个人签名:</span>
|
||||
<div class="content">{this.logic.OpusInfo?.user_info?.user_autograph || '用户未填写'}</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="info_main">
|
||||
<div class="title">4:作品标签</div>
|
||||
<div class="list">
|
||||
{
|
||||
this.logic.OpusInfo?.tags.length == 0 ? '暂无数据' :
|
||||
this.logic.OpusInfo?.tags.map((v,i) => {
|
||||
return (
|
||||
<el-tag style="margin-right: 10px;" effect="plain">{v.tags_title}</el-tag>
|
||||
)
|
||||
})
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" onClick={() => {
|
||||
this.logic.dialogVisible = false
|
||||
}}>确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
)
|
||||
}
|
||||
|
||||
public InfoLink(row: OpusRes): JSX.Element {
|
||||
return <el-tag effect="plain" type="info" style={{marginLeft: '5px'}} onClick={
|
||||
async () => await this.logic.GetOpusInfo(row)
|
||||
}>查看详情</el-tag>
|
||||
}
|
||||
|
||||
protected render() {
|
||||
return (
|
||||
<div class="OpusAudit">
|
||||
|
||||
{ this.OpusInfo() }
|
||||
|
||||
<PageHeader title="作品审核" subtitle="对用户发布的作品进行审核管理"></PageHeader>
|
||||
|
||||
{/*bug地址:https://github.com/ElemeFE/element/issues/20286*/ }
|
||||
<el-form inline={ true } onInput={ () => {} } model={ this.logic.filter } class="demo-form-inline">
|
||||
|
||||
<el-form-item label="作品标题">
|
||||
<el-input clearable vModel={ this.logic.filter.opus_title } placeholder="作品标题"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="作品状态">
|
||||
<el-select clearable
|
||||
onChange={() => this.logic.page = 1}
|
||||
vModel={ this.logic.filter.opus_status }
|
||||
placeholder="请选择作品状态">
|
||||
<el-option label="等待审核" value="0"></el-option>
|
||||
<el-option label="审核驳回" value="-1"></el-option>
|
||||
<el-option label="审核通过" value="1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="作品分类">
|
||||
<el-select clearable
|
||||
vModel={ this.logic.filter.opus_type }
|
||||
onChange={() => this.logic.page = 1}
|
||||
placeholder="请选择作品分类">
|
||||
<el-option label="推荐" value="1"></el-option>
|
||||
<el-option label="排行" value="2"></el-option>
|
||||
<el-option label="关注" value="3"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="作品原创">
|
||||
<el-select clearable
|
||||
vModel={ this.logic.filter.opus_original }
|
||||
onChange={() => this.logic.page = 1}
|
||||
placeholder="请选择作品原创">
|
||||
<el-option label="原创" value="1"></el-option>
|
||||
<el-option label="非原创" value="0"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary"
|
||||
onClick={ () => this.logic.GetOpusAuditList() }>查询
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
data={ this.logic.opus }
|
||||
border
|
||||
stripe
|
||||
default-sort={{prop: 'opus_id', order: 'ascending'}}
|
||||
style="width: 100%">
|
||||
<el-table-column
|
||||
fixed="left"
|
||||
label="操作"
|
||||
width="280"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
switch (data.row.opus_status) {
|
||||
case 0:
|
||||
return (
|
||||
<span>
|
||||
<el-tag style={{marginRight: '5px'}}
|
||||
effect="dark"
|
||||
onClick={ async () => {
|
||||
await this.logic.Approved(data.row.opus_id, 1);
|
||||
}}
|
||||
type="success">
|
||||
通过审核
|
||||
</el-tag>
|
||||
<el-tag
|
||||
effect="dark"
|
||||
onClick={ async () => {
|
||||
await this.logic.Approved(data.row.opus_id, -1);
|
||||
}}
|
||||
type="danger">
|
||||
拒绝通过
|
||||
</el-tag>
|
||||
{ this.InfoLink(data.row) }
|
||||
</span>
|
||||
)
|
||||
break;
|
||||
case -1:
|
||||
return this.InfoLink(data.row)
|
||||
break;
|
||||
case 1:
|
||||
return this.InfoLink(data.row)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
switch (data.row.opus_status) {
|
||||
case 0:
|
||||
return <el-tag type="info">
|
||||
<i class="el-icon-time" style="margin-right: 5px"></i>
|
||||
等待审核
|
||||
</el-tag>
|
||||
break;
|
||||
case -1:
|
||||
return <el-tag type="danger">
|
||||
<i class="el-icon-circle-close" style="margin-right: 5px"></i>
|
||||
审核驳回
|
||||
</el-tag>
|
||||
break;
|
||||
case 1:
|
||||
return <el-tag type="success">
|
||||
<i class="el-icon-circle-check" style="margin-right: 5px"></i>
|
||||
通过审核
|
||||
</el-tag>
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
width="120"
|
||||
label="审核状态">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_id"
|
||||
sortable
|
||||
label="编号">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_title"
|
||||
label="标题"
|
||||
width="180">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_introduce"
|
||||
label="介绍">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <el-image onClick={ () => {
|
||||
console.log(data.row.opus_img)
|
||||
} } width="100%" preview-src-list={ [data.row.opus_img] } src={ data.row.opus_img }
|
||||
alt=""></el-image>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="封面图">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_time"
|
||||
label="发布时间">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <span>
|
||||
{
|
||||
data.row.opus_type == 1 ? '推荐'
|
||||
: data.row.opus_type == 2 ? '排行' : '关注'
|
||||
}
|
||||
</span>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="作品分类">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_original"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <el-tag type={ data.row.opus_original ? "success" : "danger" }>
|
||||
{
|
||||
data.row.opus_original == 1 ? '原创' : '非原创'
|
||||
}
|
||||
</el-tag>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="是否原创">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_see"
|
||||
sortable
|
||||
label="浏览量">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_follow"
|
||||
sortable
|
||||
label="关注数量">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_collection"
|
||||
sortable
|
||||
label="收藏数量">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opus_satisfied"
|
||||
sortable
|
||||
label="点赞数量">
|
||||
</el-table-column>
|
||||
|
||||
|
||||
</el-table>
|
||||
|
||||
<br />
|
||||
<el-pagination background
|
||||
layout="prev, pager, next"
|
||||
page-size={this.logic.count}
|
||||
current-page={this.logic.page}
|
||||
on-current-change={(page: number) => {
|
||||
this.logic.page = page;
|
||||
this.logic.GetOpusAuditList()
|
||||
}}
|
||||
page-count={this.logic.total_page}>
|
||||
</el-pagination>
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
// import "@pageLess/OpusAudit.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class ReportAudit extends VueCustomize {
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '作品举报审核',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
public async created() {
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="ReportAudit">
|
||||
作品举报审核
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
e239ec2b-5e97-41fc-8875-2606f85175ad
|
||||
@@ -0,0 +1,235 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import "@pageLess/Login.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import { AppVsersionLogic } from '@/application/logic/page/AppVsersionLogic';
|
||||
import PageHeader from "@components/PageHeader";
|
||||
|
||||
@Component
|
||||
export default class AppVsersion extends VueCustomize {
|
||||
private logic: AppVsersionLogic<AppVsersion> = new AppVsersionLogic(this);
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: 'App版本管理',
|
||||
isLogin: true
|
||||
};
|
||||
|
||||
public async created() {
|
||||
await this.logic.StartUp();
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
public AddNewUpdate(): JSX.Element {
|
||||
return (
|
||||
<el-dialog
|
||||
title="发布新版本"
|
||||
destroy-on-close={true}
|
||||
show-close={false}
|
||||
visible={this.logic.isShowAddNewUpdate}
|
||||
width="40%">
|
||||
|
||||
<el-form ref="form" label-width="100px">
|
||||
|
||||
<el-form-item label="App版本号">
|
||||
<el-input vModel={this.logic.addNewsuUpdate.update_version} placeholder="请输入App版本号,例如:1.0.2"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="版本号整型">
|
||||
<el-input vModel={this.logic.addNewsuUpdate.update_version_code} placeholder="请输入版本号整型,例如:102"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="App安装地址">
|
||||
<el-upload
|
||||
class="upload-demo"
|
||||
action="/"
|
||||
on-preview="handlePreview"
|
||||
multiple={false}
|
||||
accept = ".apk"
|
||||
http-request={(param: any) => {
|
||||
this.logic.UploadFile(param.file)
|
||||
}}
|
||||
limit={1}
|
||||
file-list={[]}>
|
||||
<el-button type="primary">请选择Apk安装包<i class="el-icon-upload el-icon--right"></i></el-button>
|
||||
<div slot="tip" class="el-upload__tip">只能上传apk文件,且不超过500MB</div>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="App更新介绍">
|
||||
<el-input type="textarea" rows={5} vModel={this.logic.addNewsuUpdate.update_content} placeholder="请输入App更新介绍,多行请换行。例如:\n1:完善XXX功能\n2: 实现xxx功能"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否强制更新">
|
||||
<el-switch
|
||||
on-change={(e:any) => {
|
||||
e
|
||||
? this.logic.addNewsuUpdate.update_force = 1
|
||||
: this.logic.addNewsuUpdate.update_force = 0
|
||||
console.log(this.logic.addNewsuUpdate.update_force)
|
||||
}}
|
||||
vModel={this.logic.updateForce}>
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button onClick={() => {this.logic.isShowAddNewUpdate = false}}>取 消</el-button>
|
||||
<el-button type="primary" onClick={() => this.logic.SetaddNewsuUpdate()}>确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
)
|
||||
}
|
||||
|
||||
protected render() {
|
||||
return (
|
||||
<div class="AppVsersion">
|
||||
|
||||
{ this.AddNewUpdate() }
|
||||
|
||||
<PageHeader title="App版本管理" subtitle="发布,删除,查看App版本"></PageHeader>
|
||||
|
||||
<el-form inline={ true } onInput={ () => {} } class="demo-form-inline">
|
||||
<el-form-item label="版本号">
|
||||
<el-input clearable="" vModel={ this.logic.params.update_version } placeholder="请输入App版本号"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否强制更新">
|
||||
<el-select clearable=""
|
||||
onChange={() => this.logic.params.page = 1}
|
||||
vModel={ this.logic.params.update_force }
|
||||
placeholder="请选择类型">
|
||||
<el-option label="强制" value="1"></el-option>
|
||||
<el-option label="不强制" value="0"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" onClick={ async () => await this.logic.GetUpdateList() }>
|
||||
查询
|
||||
</el-button>
|
||||
|
||||
<el-button type="success" onClick={() => {this.logic.isShowAddNewUpdate = true}}>
|
||||
发布新版本
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-table
|
||||
data={ this.logic.updateList }
|
||||
border
|
||||
stripe
|
||||
default-sort={{prop: 'opus_id', order: 'ascending'}}
|
||||
style="width: 100%">
|
||||
<el-table-column
|
||||
fixed="left"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <el-popconfirm icon="el-icon-info"
|
||||
on-confirm={async ()=> {
|
||||
await this.logic.deleteUpdate(data.row)
|
||||
}}
|
||||
icon-color="red"
|
||||
title="确定删除此版本吗?">
|
||||
<el-button slot="reference" type="danger" icon="el-icon-delete" >删除</el-button>
|
||||
</el-popconfirm>
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="操作">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="update_id"
|
||||
sortable
|
||||
label="版本编号">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="update_version"
|
||||
sortable
|
||||
label="版本号">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="update_version_code"
|
||||
sortable
|
||||
label="版本号整型">
|
||||
</el-table-column>
|
||||
{/*<el-table-column*/}
|
||||
{/* prop="update_size"*/}
|
||||
{/* {*/}
|
||||
{/* ...{*/}
|
||||
{/* scopedSlots: {*/}
|
||||
{/* default: (data: any) => {*/}
|
||||
{/* return <span>{data.row.update_size / 1000000}MB</span>*/}
|
||||
{/* }*/}
|
||||
{/* }*/}
|
||||
{/* }*/}
|
||||
{/* }*/}
|
||||
{/* sortable*/}
|
||||
{/* label="App大小">*/}
|
||||
{/*</el-table-column>*/}
|
||||
<el-table-column
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return <el-link type="info" icon="el-icon-download" href={data.row.update_down_url} target="_blank">点击下载</el-link>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="App下载地址">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="update_content"
|
||||
label="更新的功能介绍">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="update_force"
|
||||
{
|
||||
...{
|
||||
scopedSlots: {
|
||||
default: (data: any) => {
|
||||
return data.row.update_force == 1
|
||||
? <el-link type="danger" underline={false}>强制</el-link>
|
||||
: <el-link type="warning" underline={false}>不强制</el-link>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
label="是否强制更新">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="update_down_count"
|
||||
sortable
|
||||
label="下次次数">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="update_time"
|
||||
sortable
|
||||
label="发布时间">
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
1e3d43e2-c5ae-4809-98bd-13a55a7a7801
|
||||
@@ -0,0 +1,30 @@
|
||||
// import "@pageLess/OpusAudit.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import UserVerifyList from "@components/UserVerifyList";
|
||||
|
||||
@Component
|
||||
export default class AvatarAudit extends VueCustomize {
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '头像审核',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
public async created() {
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="AvatarAudit">
|
||||
<UserVerifyList type="avatar" title="头像审核" subtitle="对用户发布的头像进行审核"></UserVerifyList>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
// import "@pageLess/OpusAudit.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import UserVerifyList from "@components/UserVerifyList";
|
||||
|
||||
@Component
|
||||
export default class NicknameAudit extends VueCustomize {
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '昵称审核',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
public async created() {
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="NicknameAudit">
|
||||
<UserVerifyList type="nickname" title="昵称审核" subtitle="对用户添加的昵称进行审核"></UserVerifyList>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
// import "@pageLess/OpusAudit.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import UserVerifyList from "@components/UserVerifyList";
|
||||
|
||||
@Component
|
||||
export default class SignatureAudit extends VueCustomize {
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '签名审核',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
public async created() {
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="SignatureAudit">
|
||||
<UserVerifyList type="signature" title="签名审核" subtitle="对用户修改的签名进行审核"></UserVerifyList>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
46
moehu/moehu_admin/src/application/page/index/home.tsx
Normal file
46
moehu/moehu_admin/src/application/page/index/home.tsx
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import "@pageLess/Home.less";
|
||||
import { Component } from 'vue-property-decorator';
|
||||
import { HomeLogic } from "@logic/page/Home.logic";
|
||||
import { Getter } from "vuex-class";
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
import { IndexUtils } from "@utils/index.utils";
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
import { UserServiceImpl } from "@impl/User.service.impl";
|
||||
|
||||
@Component
|
||||
export default class Home extends VueCustomize {
|
||||
// RouterMeta 是 vue-router 路由meta配置信息,会被ast提取注入到自动生成的路由配置文件中
|
||||
public RouterMeta: RouterMeta = {
|
||||
title: '首页',
|
||||
isLogin: true
|
||||
}
|
||||
|
||||
@Autowired
|
||||
public readonly UserServiceImpl!: UserServiceImpl;
|
||||
|
||||
@Autowired
|
||||
public readonly Utils!: IndexUtils;
|
||||
@Getter('GettersTabsContentArr') public readonly getterFoo!: Array<any>;
|
||||
|
||||
// 抽离组件所有逻辑到独立类,解耦页面和数据
|
||||
private logic: HomeLogic<Home> = new HomeLogic(this);
|
||||
|
||||
public async created() {
|
||||
await this.logic.StartUp();
|
||||
}
|
||||
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="home">
|
||||
首页
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
76
moehu/moehu_admin/src/application/page/login.tsx
Normal file
76
moehu/moehu_admin/src/application/page/login.tsx
Normal file
@@ -0,0 +1,76 @@
|
||||
|
||||
import "@pageLess/Login.less";
|
||||
import { Component, Vue } from 'vue-property-decorator';
|
||||
import { LoginLogic } from "@logic/page/Login.logic";
|
||||
import { Route, RawLocation } from 'vue-router';
|
||||
import { RouterMeta, VueCustomize } from "@logic/Base.type";
|
||||
|
||||
@Component
|
||||
export default class Login extends VueCustomize {
|
||||
private logic: LoginLogic<Login> = new LoginLogic(this);
|
||||
|
||||
private RouterMeta: RouterMeta = {
|
||||
title: '用户登录',
|
||||
isLogin: false
|
||||
};
|
||||
|
||||
public async created() {
|
||||
await this.logic.StartUp();
|
||||
};
|
||||
|
||||
// 路由拦截器
|
||||
beforeRouteEnter(to: Route, from: Route, next: (to?: RawLocation | false | ((vm: Vue) => void)) => void) {
|
||||
next();
|
||||
}
|
||||
|
||||
protected render(): JSX.Element {
|
||||
return (
|
||||
<div class="login">
|
||||
<div class="login_img">
|
||||
<div class="circular"></div>
|
||||
<el-carousel autoplay={false} class="banner" height="340px">
|
||||
{
|
||||
this.logic.Banner.map((v,i) => {
|
||||
return (
|
||||
<el-carousel-item>
|
||||
<img src={v.img} alt=""/>
|
||||
<div class="banner_title">{ v.title }</div>
|
||||
</el-carousel-item>
|
||||
)
|
||||
})
|
||||
}
|
||||
</el-carousel>
|
||||
</div>
|
||||
<div class="login_input">
|
||||
<div class="center">
|
||||
<div class="login_text">
|
||||
登录
|
||||
<small>此页面已加密</small>
|
||||
</div>
|
||||
|
||||
<div class="login_form">
|
||||
<input v-model={this.logic.UserLoginParams.admin_user_name}
|
||||
type="text" placeholder="账户名"/>
|
||||
<input v-model={this.logic.UserLoginParams.admin_user_pwd}
|
||||
type="password" placeholder="密码"/>
|
||||
|
||||
<div class="LoginSubmit">
|
||||
<div class="login_button" onClick={() => this.logic.UserLogin() }>
|
||||
登 录
|
||||
<i class="el-icon-right"></i>
|
||||
</div>
|
||||
|
||||
<div class="reg_text">
|
||||
还没有账户?
|
||||
<span> 注册</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<i></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
}
|
||||
1
moehu/moehu_admin/src/core/.pydio
Normal file
1
moehu/moehu_admin/src/core/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
19986669-72d0-43ee-897a-2ff23d23bdfc
|
||||
1
moehu/moehu_admin/src/core/annotation/.pydio
Normal file
1
moehu/moehu_admin/src/core/annotation/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
7a8a39a1-5ddb-49d6-a478-c10b30d91a15
|
||||
101
moehu/moehu_admin/src/core/annotation/Http.annotation.ts
Normal file
101
moehu/moehu_admin/src/core/annotation/Http.annotation.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
/*
|
||||
* Copyright (c) 2023. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { ConfigureConfig } from "@config/configure.config";
|
||||
import AxioDao from "@dao/index.dao";
|
||||
|
||||
interface ParamsType {
|
||||
url?: string
|
||||
useHandle?: boolean
|
||||
header?: { [key: string]: any }
|
||||
}
|
||||
|
||||
/**
|
||||
* GET 请求注解
|
||||
* @param RequestParams
|
||||
* @constructor
|
||||
*/
|
||||
export function GET(RequestParams?: ParamsType) {
|
||||
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||
// 参数默认值
|
||||
let Params: ParamsType = { url: '', useHandle: false, header: {} };
|
||||
|
||||
Params.url = RequestParams?.url || ConfigureConfig.AjaxConfig.ApiList[propertyKey]
|
||||
Params.useHandle = RequestParams?.useHandle || Params.useHandle
|
||||
Params.header = RequestParams?.header || Params.header
|
||||
|
||||
CheckParams('get', target, propertyKey, descriptor, Params)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* POST 请求注解
|
||||
* @param RequestParams
|
||||
* @constructor
|
||||
*/
|
||||
export function POST(RequestParams?: { url?: string, useHandle?: boolean, header?: { [key: string]: any } }) {
|
||||
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||
let Params: ParamsType = { url: '', useHandle: false, header: {} }
|
||||
Params.url = RequestParams?.url || ConfigureConfig.AjaxConfig.ApiList[propertyKey]
|
||||
Params.useHandle = RequestParams?.useHandle || Params.useHandle
|
||||
Params.header = RequestParams?.header || Params.header
|
||||
CheckParams('post', target, propertyKey, descriptor, Params)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* PUT 请求注解
|
||||
* @param RequestParams
|
||||
* @constructor
|
||||
*/
|
||||
export function PUT(RequestParams?: { url?: string, useHandle?: boolean, header?: { [key: string]: any } }) {
|
||||
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||
let Params: ParamsType = { url: '', useHandle: false, header: {} }
|
||||
Params.url = RequestParams?.url || ConfigureConfig.AjaxConfig.ApiList[propertyKey]
|
||||
Params.useHandle = RequestParams?.useHandle || Params.useHandle
|
||||
Params.header = RequestParams?.header || Params.header
|
||||
CheckParams('put', target, propertyKey, descriptor, Params)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* DELETE 请求注解
|
||||
* @param RequestParams
|
||||
* @constructor
|
||||
*/
|
||||
export function DELETE(RequestParams?: { url?: string, useHandle?: boolean, header?: { [key: string]: any } }) {
|
||||
return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
|
||||
let Params: ParamsType = { url: '', useHandle: false, header: {} }
|
||||
Params.url = RequestParams?.url || ConfigureConfig.AjaxConfig.ApiList[propertyKey]
|
||||
Params.useHandle = RequestParams?.useHandle || Params.useHandle
|
||||
Params.header = RequestParams?.header || Params.header
|
||||
CheckParams('delete', target, propertyKey, descriptor, Params)
|
||||
}
|
||||
}
|
||||
|
||||
function CheckParams(methods: string, target: any, propertyKey: string, descriptor: PropertyDescriptor, Params: any) {
|
||||
let OldMethods = descriptor.value;
|
||||
if (Params.useHandle) {
|
||||
descriptor.value = async (data: { [key: string]: any }) => {
|
||||
// @ts-ignore
|
||||
let res = await AxioDao[methods]({
|
||||
url : Params.url,
|
||||
data : data,
|
||||
header: Params.header
|
||||
});
|
||||
await OldMethods.apply(target, [res]);
|
||||
}
|
||||
return descriptor
|
||||
} else {
|
||||
descriptor.value = async (data: { [key: string]: any }) => {
|
||||
// @ts-ignore
|
||||
return await AxioDao[methods]({
|
||||
url: Params.url, data: data, header: Params.header
|
||||
})
|
||||
}
|
||||
return descriptor
|
||||
}
|
||||
}
|
||||
22
moehu/moehu_admin/src/core/annotation/Ioc.annotation.ts
Normal file
22
moehu/moehu_admin/src/core/annotation/Ioc.annotation.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import IocModel from "@ann/Ioc.model";
|
||||
|
||||
export function Injectable(constructor: { new(...args: any[]): {}; }) {
|
||||
if(IocModel.classPool.indexOf(constructor) !== -1) {
|
||||
throw new Error('No need to repeatedly collect classes');
|
||||
} else {
|
||||
IocModel.classPool = [ constructor ]
|
||||
}
|
||||
}
|
||||
|
||||
export function Autowired(target: any, propertyName: string) {
|
||||
const propertyType: any = Reflect.getMetadata('design:type', target, propertyName);
|
||||
if(IocModel.classPool.indexOf(propertyType) == -1) {
|
||||
throw new Error('The variable type class to which the decorated attribute belongs has not been injected by the decorator @ Injectable(). Please check!');
|
||||
} else {
|
||||
target[propertyName] = new (IocModel.classPool[IocModel.classPool.indexOf(propertyType)])()
|
||||
}
|
||||
}
|
||||
18
moehu/moehu_admin/src/core/annotation/Ioc.model.ts
Normal file
18
moehu/moehu_admin/src/core/annotation/Ioc.model.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
class IocModel {
|
||||
|
||||
private _classPool: Array<{ new(...args: any[]): {}; }> = [];
|
||||
|
||||
get classPool(): Array<{ new(...args: any[]): {} }> {
|
||||
return this._classPool;
|
||||
}
|
||||
|
||||
set classPool(value: Array<{ new(...args: any[]): {} }>) {
|
||||
this._classPool = [ ...value, ...this._classPool ]
|
||||
}
|
||||
}
|
||||
|
||||
export default new IocModel();
|
||||
50
moehu/moehu_admin/src/core/annotation/Register.annotation.ts
Normal file
50
moehu/moehu_admin/src/core/annotation/Register.annotation.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import Vue from 'vue';
|
||||
import { ConfigureConfig } from "@config/configure.config";
|
||||
import { CreateElement } from 'vue/types/umd';
|
||||
|
||||
|
||||
export function Start<T extends { new ( ...args: any[] ): { } }>( _ : T ) : T {
|
||||
// @ts-ignore
|
||||
return class extends _ {
|
||||
constructor() {
|
||||
super();
|
||||
(new Vue({
|
||||
// @ts-ignore
|
||||
router: this.Router, store: this.VueX, render: (h: CreateElement) => h(this.app)
|
||||
}) as Vue).$mount('#app')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function RegServiceAndMethods(constructor: { new(...args: any[]): {}; }) {
|
||||
newInstance(require.context("../service/impl", false, /\.ts$/))
|
||||
newInstance(require.context("../utils", false, /\.ts$/))
|
||||
}
|
||||
|
||||
function newInstance(context: __WebpackModuleApi.RequireContext) {
|
||||
context.keys().forEach((key: any) => {
|
||||
let m = context(key), className: string = Object.keys(m)[0];
|
||||
new m[className]()
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 自动注册Vue插件
|
||||
* @constructor
|
||||
*/
|
||||
export function RegVuePlugs(constructor: { new(...args: any[]): {}; }) {
|
||||
ConfigureConfig.VuePlugs.forEach((v: any) => Vue.use(v))
|
||||
}
|
||||
|
||||
/**
|
||||
* 自动挂载Vue 全局方法
|
||||
* @constructor
|
||||
*/
|
||||
export function GlobalMethod(target: any, propertyKey: string) {
|
||||
Vue.prototype[`$${ propertyKey }`] = target[propertyKey]
|
||||
}
|
||||
1
moehu/moehu_admin/src/core/config/.pydio
Normal file
1
moehu/moehu_admin/src/core/config/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
018b59fb-c351-48ec-a090-6df45f135099
|
||||
58
moehu/moehu_admin/src/core/config/configure.config.ts
Normal file
58
moehu/moehu_admin/src/core/config/configure.config.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import VueRouter, { RouterOptions } from 'vue-router';
|
||||
import Vuex from 'vuex';
|
||||
import ElementUI from 'element-ui';
|
||||
import 'element-ui/lib/theme-chalk/index.css';
|
||||
|
||||
import { AutoRoutesConfig } from "@config/route.config";
|
||||
import { PluginObject } from "vue";
|
||||
|
||||
|
||||
export class ConfigureConfig {
|
||||
|
||||
/**
|
||||
* 接口配置: 测试环境基地址,正式环境基地址,具体页面接口
|
||||
*/
|
||||
public static AjaxConfig: {
|
||||
DevUrl: string,
|
||||
ProdUrl: string,
|
||||
ApiList: { [ key: string ]: string }
|
||||
} = {
|
||||
DevUrl: 'https://moehu.net/admin',
|
||||
ProdUrl: 'https://moehu.net/admin',
|
||||
ApiList: {
|
||||
Login: '/user/Login',
|
||||
OpusAudit: '/opus/OpusAudit',
|
||||
OpusInfo: '/opus/OpusInfo',
|
||||
Approved: '/opus/Approved',
|
||||
UserVerifyList: '/user/UserVerifyList',
|
||||
UserReview: '/user/UserReview',
|
||||
UserItemInfo: '/user/UserItemInfo',
|
||||
UpdateList: '/tool/UpdateList',
|
||||
UploadFile: '/tool/UploadFile',
|
||||
addNewUpdate: '/tool/addNewUpdate',
|
||||
deleteUpdate: '/tool/deleteUpdate'
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Vue 插件
|
||||
*/
|
||||
public static VuePlugs: PluginObject<never>[] | any = [
|
||||
VueRouter, Vuex, ElementUI
|
||||
];
|
||||
|
||||
/**
|
||||
* 路由配置
|
||||
*/
|
||||
public static RouterConfigUrl: RouterOptions = {
|
||||
mode : 'hash',
|
||||
base : './',
|
||||
routes : AutoRoutesConfig
|
||||
};
|
||||
}
|
||||
62
moehu/moehu_admin/src/core/config/route.config.ts
Normal file
62
moehu/moehu_admin/src/core/config/route.config.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
// 根据page目录结构,自动生成的路由配置文件
|
||||
// 参考Nuxt.js:https://zh.nuxtjs.org/guide/routing
|
||||
// @ts-ignore
|
||||
|
||||
export const AutoRoutesConfig = [
|
||||
{
|
||||
name: "login",
|
||||
path: "/login",
|
||||
component: () => import(/* webpackChunkName: 'login' */ '@page/login'),
|
||||
meta: {title:'用户登录',isLogin:false}
|
||||
},
|
||||
{
|
||||
name: "index",
|
||||
path: "/",
|
||||
component: () => import(/* webpackChunkName: 'index' */ '@page/index'),
|
||||
meta: {title:'layout',isLogin:false},
|
||||
children: [
|
||||
{
|
||||
name: "index-home",
|
||||
path: "home",
|
||||
component: () => import(/* webpackChunkName: 'indexhome' */ '@page/index/home'),
|
||||
meta: {title:'首页',isLogin:true}
|
||||
},
|
||||
{
|
||||
name: "index-OpusManage-OpusAudit",
|
||||
path: "OpusManage/OpusAudit",
|
||||
component: () => import(/* webpackChunkName: 'indexOpusManageOpusAudit' */ '@page/index/OpusManage/OpusAudit'),
|
||||
meta: {title:'作品审核',isLogin:false}
|
||||
},
|
||||
{
|
||||
name: "index-OpusManage-ReportAudit",
|
||||
path: "OpusManage/ReportAudit",
|
||||
component: () => import(/* webpackChunkName: 'indexOpusManageReportAudit' */ '@page/index/OpusManage/ReportAudit'),
|
||||
meta: {title:'作品举报审核',isLogin:false}
|
||||
},
|
||||
{
|
||||
name: "index-OtherManage-AppVsersion",
|
||||
path: "OtherManage/AppVsersion",
|
||||
component: () => import(/* webpackChunkName: 'indexOtherManageAppVsersion' */ '@page/index/OtherManage/AppVsersion'),
|
||||
meta: {title:'App版本管理',isLogin:true}
|
||||
},
|
||||
{
|
||||
name: "index-UserManage-AvatarAudit",
|
||||
path: "UserManage/AvatarAudit",
|
||||
component: () => import(/* webpackChunkName: 'indexUserManageAvatarAudit' */ '@page/index/UserManage/AvatarAudit'),
|
||||
meta: {title:'头像审核',isLogin:false}
|
||||
},
|
||||
{
|
||||
name: "index-UserManage-NicknameAudit",
|
||||
path: "UserManage/NicknameAudit",
|
||||
component: () => import(/* webpackChunkName: 'indexUserManageNicknameAudit' */ '@page/index/UserManage/NicknameAudit'),
|
||||
meta: {title:'昵称审核',isLogin:false}
|
||||
},
|
||||
{
|
||||
name: "index-UserManage-SignatureAudit",
|
||||
path: "UserManage/SignatureAudit",
|
||||
component: () => import(/* webpackChunkName: 'indexUserManageSignatureAudit' */ '@page/index/UserManage/SignatureAudit'),
|
||||
meta: {title:'签名审核',isLogin:false}
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
1
moehu/moehu_admin/src/core/dao/.pydio
Normal file
1
moehu/moehu_admin/src/core/dao/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
8cd25405-4681-4315-ad91-bf4e0b6ad44b
|
||||
115
moehu/moehu_admin/src/core/dao/index.dao.ts
Normal file
115
moehu/moehu_admin/src/core/dao/index.dao.ts
Normal file
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import axios, {AxiosInstance, AxiosRequestConfig, AxiosResponse} from "axios";
|
||||
import { IndexUtils } from "@utils/index.utils";
|
||||
import { Notification, Loading } from 'element-ui';
|
||||
import { ElLoadingComponent } from 'element-ui/types/loading';
|
||||
let loadingInstance!: ElLoadingComponent;
|
||||
|
||||
/**
|
||||
* axios的封装
|
||||
*/
|
||||
export class AxioDao {
|
||||
|
||||
private http!: AxiosInstance;
|
||||
public constructor() {
|
||||
|
||||
this.http = axios.create({
|
||||
baseURL: IndexUtils.CheckAjaxUrl(),
|
||||
timeout: 10000,
|
||||
headers: {}
|
||||
});
|
||||
|
||||
this.Interceptor()
|
||||
}
|
||||
|
||||
public async get(params: { url: string, data: Object, header?: object }): Promise<Object> {
|
||||
return await this.http.get(params.url, {
|
||||
params : params.data,
|
||||
headers : Object.assign({
|
||||
token : localStorage.getItem("moehu_token")
|
||||
}, params.header)
|
||||
});
|
||||
}
|
||||
|
||||
public async post(params: { url: string, data: Object, header?: Object }): Promise<Object> {
|
||||
return await this.http.post(params.url, params.data, {
|
||||
headers : Object.assign({
|
||||
token : localStorage.getItem("moehu_token")
|
||||
}, params.header)
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* Put 请求
|
||||
* 请求参数请参考接口:RequestParams
|
||||
* @param params
|
||||
*/
|
||||
public async put(params: { url: string, data: Object, header?: object }): Promise<Object> {
|
||||
return await this.http.put(params.url, params.data)
|
||||
}
|
||||
|
||||
/**
|
||||
* delete 请求
|
||||
* 请求参数请参考接口:RequestParams
|
||||
* @param params
|
||||
*/
|
||||
public async delete(params: { url: string, data: Object, header?: object }): Promise<Object> {
|
||||
return await this.http.delete(params.url, { params : params.data })
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 拦截器
|
||||
* @constructor
|
||||
*/
|
||||
public async Interceptor() {
|
||||
// 请求拦截器
|
||||
this.http.interceptors.request.use((config: AxiosRequestConfig) => {
|
||||
loadingInstance = Loading.service({
|
||||
fullscreen: true,
|
||||
text: '加载中,稍后...'
|
||||
})
|
||||
return config
|
||||
}, (error: Error) => {
|
||||
return Promise.reject(error)
|
||||
})
|
||||
|
||||
// 响应拦截器
|
||||
this.http.interceptors.response.use((response: AxiosResponse) => {
|
||||
loadingInstance.close();
|
||||
switch (response.data.code) {
|
||||
case 200:
|
||||
return response.data.data;
|
||||
|
||||
case 100:
|
||||
return;
|
||||
|
||||
case 404:
|
||||
Notification({
|
||||
title: "操作成功",
|
||||
message: response.data.message,
|
||||
type: "error"
|
||||
});
|
||||
throw new Error(response.data.message)
|
||||
|
||||
case 500:
|
||||
Notification({
|
||||
title: "错误",
|
||||
message: response.data.message,
|
||||
type: "error"
|
||||
});
|
||||
throw new Error(response.data.message)
|
||||
}
|
||||
}, (error: Error) => {
|
||||
return Promise.reject(error)
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default new AxioDao();
|
||||
1
moehu/moehu_admin/src/core/run/.pydio
Normal file
1
moehu/moehu_admin/src/core/run/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
cfcad232-07cd-4da0-8f19-d48ef02b301f
|
||||
54
moehu/moehu_admin/src/core/run/init.run.ts
Normal file
54
moehu/moehu_admin/src/core/run/init.run.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import 'reflect-metadata';
|
||||
import 'babel-polyfill'
|
||||
import Es6Promise from 'es6-promise'
|
||||
import '@types/RouterHooks';
|
||||
import Vue, { VueConstructor, Component } from 'vue';
|
||||
import App from '@application/App'
|
||||
import { ConfigureConfig } from "@config/configure.config";
|
||||
import NavigationGuards from "@utils/NavigationGuards.utils";
|
||||
import VueRouter, { RawLocation, Route } from 'vue-router';
|
||||
import Vuex, { Store } from 'vuex'
|
||||
import StoreModeule from '@store/index'
|
||||
import { RegServiceAndMethods, RegVuePlugs, Start } from "@ann/Register.annotation";
|
||||
import { Autowired } from "@ann/Ioc.annotation";
|
||||
|
||||
Es6Promise.polyfill()
|
||||
|
||||
@Start
|
||||
@RegVuePlugs
|
||||
@RegServiceAndMethods
|
||||
export class InitRun {
|
||||
|
||||
@Autowired
|
||||
protected NavigationGuards!: NavigationGuards;
|
||||
|
||||
protected Router!: VueRouter;
|
||||
protected VueX!: Store<typeof StoreModeule>;
|
||||
protected app: Component = App;
|
||||
|
||||
constructor() {
|
||||
Vue.config.productionTip = false;
|
||||
this.VueRouterAndVuex()
|
||||
}
|
||||
|
||||
private VueRouterAndVuex(): void {
|
||||
this.Router = new VueRouter(ConfigureConfig.RouterConfigUrl);
|
||||
this.NavigationGuards.beforeEach(this.Router)
|
||||
this.NavigationGuards.afterEach(this.Router)
|
||||
|
||||
// 重写路由Push
|
||||
const routerPush: (location: RawLocation) => Promise<Route> = VueRouter.prototype.push;
|
||||
VueRouter.prototype.push = function push(location: RawLocation): Promise<Route> {
|
||||
// @ts-ignore
|
||||
return routerPush.call(this, location).catch((error: Error) => error)
|
||||
};
|
||||
|
||||
this.VueX = new Vuex.Store(StoreModeule)
|
||||
}
|
||||
}
|
||||
|
||||
new InitRun();
|
||||
1
moehu/moehu_admin/src/core/service/.pydio
Normal file
1
moehu/moehu_admin/src/core/service/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
1b5f80da-c825-49ca-a486-d5f88d46e645
|
||||
17
moehu/moehu_admin/src/core/service/OpusAudit.service.ts
Normal file
17
moehu/moehu_admin/src/core/service/OpusAudit.service.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res"
|
||||
import { OpusRes } from "@service/type/res/Opus.res"
|
||||
import { ApprovedParams, OpusAuditParams, OpusInfoParams } from "@service/type/req/Opus.req";
|
||||
|
||||
|
||||
|
||||
export interface OpusAuditService {
|
||||
OpusAudit(params: OpusAuditParams): Promise<PaginationRes<Array<OpusRes>>>;
|
||||
OpusInfo(params: OpusInfoParams): Promise<OpusRes>;
|
||||
Approved(params: ApprovedParams): Promise<void>;
|
||||
}
|
||||
15
moehu/moehu_admin/src/core/service/Tool.service.ts
Normal file
15
moehu/moehu_admin/src/core/service/Tool.service.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res";
|
||||
import { UpdateListParams, UpdateListResponseModel } from "@service/type/res/Tool.res";
|
||||
|
||||
export interface ToolService {
|
||||
addNewUpdate(params: UpdateListResponseModel): Promise<String>;
|
||||
deleteUpdate(params: UpdateListResponseModel): Promise<String>;
|
||||
UploadFile(params: any): Promise<{ img_url: string }>;
|
||||
UpdateList(params: UpdateListParams): Promise<PaginationRes<Array<UpdateListResponseModel>>>;
|
||||
}
|
||||
43
moehu/moehu_admin/src/core/service/User.service.ts
Normal file
43
moehu/moehu_admin/src/core/service/User.service.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import { Page } from "@service/type/req/Page.req";
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res";
|
||||
import { OpusRes, UserInfoResponseModel } from "@service/type/res/Opus.res";
|
||||
import { UserVerifyRes } from "@service/type/res/UserVerify.res";
|
||||
|
||||
// 登录接口的参数
|
||||
export interface LoginParams {
|
||||
admin_user_name: string,
|
||||
admin_user_pwd: string,
|
||||
}
|
||||
|
||||
// 登录接口返回的数据
|
||||
export interface LoginResponse {
|
||||
user_info: {
|
||||
admin_user_id: number,
|
||||
admin_user_type: number,
|
||||
admin_user_name: string,
|
||||
admin_user_pwd: null,
|
||||
},
|
||||
user_token: string
|
||||
}
|
||||
|
||||
// 获取签名,昵称,头像审核的接口参数
|
||||
export interface UserVerifyListParams extends Page {
|
||||
user_nickname?: string,
|
||||
user_verify_status?: string
|
||||
}
|
||||
|
||||
export interface UserReviewParams {
|
||||
user_verify_id?: number,
|
||||
user_verify_status?: number
|
||||
}
|
||||
|
||||
export interface UserService {
|
||||
Login(params: LoginParams): Promise<LoginResponse>;
|
||||
UserItemInfo(params: { user_verify_id: number }): Promise<UserInfoResponseModel>;
|
||||
UserReview(params: UserReviewParams): Promise<void>;
|
||||
UserVerifyList(params: UserVerifyListParams): Promise<PaginationRes<Array<UserVerifyRes>>>;
|
||||
}
|
||||
1
moehu/moehu_admin/src/core/service/impl/.pydio
Normal file
1
moehu/moehu_admin/src/core/service/impl/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
cf386bd6-615e-415f-8e49-4cd091f7b2ff
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Injectable } from "@ann/Ioc.annotation";
|
||||
import { POST } from "@ann/Http.annotation";
|
||||
import { OpusInfoParams } from "@service/type/req/Opus.req";
|
||||
import { OpusAuditService } from "@service/OpusAudit.service";
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res";
|
||||
import { OpusRes } from "@service/type/res/Opus.res";
|
||||
import { ApprovedParams, OpusAuditParams, } from "@service/type/req/Opus.req";
|
||||
|
||||
@Injectable
|
||||
export class OpusAuditServiceImpl implements OpusAuditService {
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
public async OpusAudit(params: OpusAuditParams): Promise<PaginationRes<Array<OpusRes>>> {}
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
public async OpusInfo(params: OpusInfoParams): Promise<OpusRes> {}
|
||||
|
||||
@POST()
|
||||
public async Approved(params: ApprovedParams): Promise<void> {}
|
||||
|
||||
}
|
||||
32
moehu/moehu_admin/src/core/service/impl/Tool.service.impl.ts
Normal file
32
moehu/moehu_admin/src/core/service/impl/Tool.service.impl.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Injectable } from "@ann/Ioc.annotation";
|
||||
import { ToolService } from "@service/Tool.service";
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res";
|
||||
import { POST } from "@ann/Http.annotation";
|
||||
import { UpdateListParams, UpdateListResponseModel } from "@service/type/res/Tool.res";
|
||||
|
||||
@Injectable
|
||||
export class ToolServiceImpl implements ToolService {
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
UpdateList(params: UpdateListParams): Promise<PaginationRes<Array<UpdateListResponseModel>>> {}
|
||||
|
||||
@POST({ header: { 'Content-Type': 'multipart/form-data' }})
|
||||
// @ts-ignore
|
||||
UploadFile(params: FormData): Promise<{ img_url: string }> {}
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
addNewUpdate(params: UpdateListResponseModel): Promise<String> {}
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
deleteUpdate(params: UpdateListResponseModel): Promise<String> {}
|
||||
|
||||
}
|
||||
31
moehu/moehu_admin/src/core/service/impl/User.service.impl.ts
Normal file
31
moehu/moehu_admin/src/core/service/impl/User.service.impl.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2020. bmy
|
||||
*/
|
||||
|
||||
import { LoginParams, LoginResponse, UserReviewParams, UserService, UserVerifyListParams } from "@service/User.service";
|
||||
import { Injectable } from "@ann/Ioc.annotation";
|
||||
import { POST } from "@ann/Http.annotation";
|
||||
import { PaginationRes } from "@service/type/res/Pagination.res";
|
||||
import { UserVerifyRes } from "@service/type/res/UserVerify.res";
|
||||
import { UserInfoResponseModel } from "@service/type/res/Opus.res";
|
||||
|
||||
@Injectable
|
||||
export class UserServiceImpl implements UserService {
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
public async Login(params: LoginParams): Promise<LoginResponse> {}
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
public async UserVerifyList(params: UserVerifyListParams): Promise<PaginationRes<Array<UserVerifyRes>>> {}
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
UserReview(params: UserReviewParams): Promise<void> {}
|
||||
|
||||
@POST()
|
||||
// @ts-ignore
|
||||
UserItemInfo(params: { user_verify_id: number }): Promise<UserInfoResponseModel> {}
|
||||
|
||||
}
|
||||
1
moehu/moehu_admin/src/core/service/type/.pydio
Normal file
1
moehu/moehu_admin/src/core/service/type/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
d71327d4-2730-4fe7-be27-3eca1df2e3a7
|
||||
1
moehu/moehu_admin/src/core/service/type/req/.pydio
Normal file
1
moehu/moehu_admin/src/core/service/type/req/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
c71d1dd8-6f10-40cd-96b3-6f481c5ff187
|
||||
22
moehu/moehu_admin/src/core/service/type/req/Opus.req.ts
Normal file
22
moehu/moehu_admin/src/core/service/type/req/Opus.req.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
import { Page } from "@service/type/req/Page.req";
|
||||
|
||||
export interface OpusInfoParams {
|
||||
opus_id: number;
|
||||
}
|
||||
|
||||
export interface OpusAuditParams extends Page {
|
||||
opus_title?: string;
|
||||
opus_status?: number;
|
||||
opus_type?: number;
|
||||
opus_original?: number;
|
||||
}
|
||||
|
||||
export interface ApprovedParams extends OpusInfoParams {
|
||||
opus_status: number;
|
||||
}
|
||||
10
moehu/moehu_admin/src/core/service/type/req/Page.req.ts
Normal file
10
moehu/moehu_admin/src/core/service/type/req/Page.req.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
export interface Page {
|
||||
page: number;
|
||||
count: number;
|
||||
}
|
||||
1
moehu/moehu_admin/src/core/service/type/res/.pydio
Normal file
1
moehu/moehu_admin/src/core/service/type/res/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
de6a3fe5-3cb5-4b05-b202-a11e1ba13ef1
|
||||
79
moehu/moehu_admin/src/core/service/type/res/Opus.res.ts
Normal file
79
moehu/moehu_admin/src/core/service/type/res/Opus.res.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
// 作品的接口返回数据类型
|
||||
export interface OpusRes {
|
||||
opus_id: number;
|
||||
user_id: number;
|
||||
opus_title: string;
|
||||
opus_introduce: string;
|
||||
opus_time: string;
|
||||
opus_satisfied: number;
|
||||
opus_see: number;
|
||||
opus_follow: number;
|
||||
opus_collection: number;
|
||||
opus_img: string;
|
||||
opus_status: number;
|
||||
opus_type: number;
|
||||
opus_original: number;
|
||||
opus_jurisdiction: number;
|
||||
opus_is_edit: number;
|
||||
comment: Array<CommentResponseModel>;
|
||||
news_opus: Array<OpusRes>;
|
||||
user_info: UserInfoResponseModel;
|
||||
opus_imgs: Array<OpusImgsResponseModel>;
|
||||
tags: Array<TagsResponseModel>
|
||||
}
|
||||
|
||||
// 评论的接口返回数据类型
|
||||
export interface CommentResponseModel {
|
||||
comment_id: number;
|
||||
opus_id: number;
|
||||
dynamic_id: number;
|
||||
user_id: number;
|
||||
comment_content: string;
|
||||
comment_time: string;
|
||||
comment_reply_id: number;
|
||||
comment_to_username: string;
|
||||
user_nickname: string;
|
||||
user_head_img: string;
|
||||
comment_type: number;
|
||||
child: Array<CommentResponseModel>
|
||||
}
|
||||
|
||||
// 用户信息的接口返回数据类型
|
||||
export interface UserInfoResponseModel {
|
||||
user_id: number;
|
||||
user_phone: string;
|
||||
user_real_name: string;
|
||||
user_id_card: string;
|
||||
user_email: string;
|
||||
user_bank_card: string;
|
||||
user_sex: string;
|
||||
user_work: string;
|
||||
user_head_img: string;
|
||||
user_nickname: string;
|
||||
user_uid: string;
|
||||
user_reg_time: string;
|
||||
user_birthday: string;
|
||||
user_constellation: string;
|
||||
user_autograph: string
|
||||
}
|
||||
|
||||
export interface OpusImgsResponseModel {
|
||||
opus_id: number;
|
||||
img_url: string;
|
||||
user_id: number;
|
||||
img_id: number
|
||||
}
|
||||
|
||||
export interface TagsResponseModel {
|
||||
tags_id: number;
|
||||
opus_id: number;
|
||||
tags_title: string;
|
||||
tags_recommend: number;
|
||||
user_id: number
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) 2021. bmy
|
||||
* Email:2271608011@qq.com
|
||||
* Github:https://github.com/helpcode
|
||||
*/
|
||||
|
||||
/**
|
||||
* 分页查询数据的类型
|
||||
*/
|
||||
export interface PaginationRes<T> {
|
||||
next_page: number,
|
||||
result: T,
|
||||
total_page: number,
|
||||
current_page: number
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user