为什么都没了
3
framework/Web/.env.development
Normal file
@@ -0,0 +1,3 @@
|
||||
VUE_APP_NODE_ENV=development
|
||||
VUE_APP_BASE_URL=http://localhost:5566
|
||||
VUE_APP_DEV_KEY=CJm9dFWx4IIGXHm^R1e@Y&mp*n8MQXfDKjDYP6ZVGqEAZQiC9LvX9jq8@uaMTT@T
|
||||
3
framework/Web/.env.production
Normal file
@@ -0,0 +1,3 @@
|
||||
VUE_APP_NODE_ENV=production
|
||||
VUE_APP_BASE_URL=http://localhost:5566
|
||||
VUE_APP_DEV_KEY=%0!qF2BpcVorlNceu#kP4SVS1bPiMUqI71%rITatPIosNOCrot@mV7PJ&br$CVvF
|
||||
23
framework/Web/.gitignore
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
.DS_Store
|
||||
node_modules
|
||||
/dist
|
||||
|
||||
|
||||
# local env files
|
||||
.env.local
|
||||
.env.*.local
|
||||
|
||||
# Log files
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# Editor directories and files
|
||||
.idea
|
||||
.vscode
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
24
framework/Web/README.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# ewidecoreweb
|
||||
|
||||
## Project setup
|
||||
```
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Compiles and hot-reloads for development
|
||||
```
|
||||
yarn serve
|
||||
```
|
||||
|
||||
### Compiles and minifies for production
|
||||
```
|
||||
yarn build
|
||||
```
|
||||
|
||||
### Lints and fixes files
|
||||
```
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Customize configuration
|
||||
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||
5
framework/Web/babel.config.js
Normal file
@@ -0,0 +1,5 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
||||
61
framework/Web/package.json
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"name": "ewidecoreweb",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
"build": "vue-cli-service build",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"ant-design-vue": "^1.7.2",
|
||||
"axios": "^0.21.1",
|
||||
"core-js": "^3.6.5",
|
||||
"crypto-js": "^4.0.0",
|
||||
"echarts": "^5.0.2",
|
||||
"highlight.js": "^10.7.2",
|
||||
"jsencrypt": "^3.2.0",
|
||||
"less": "^3.12.2",
|
||||
"less-loader": "4.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"nprogress": "^0.2.0",
|
||||
"photoswipe": "^4.1.3",
|
||||
"swiper": "^6.5.0",
|
||||
"monaco-editor": "^0.22.3",
|
||||
"monaco-editor-webpack-plugin": "^3.0.0",
|
||||
"vue": "^2.6.11",
|
||||
"vue-awesome-swiper": "^4.1.1",
|
||||
"vue-color": "^2.8.1",
|
||||
"vue-cropper": "^0.5.6",
|
||||
"vue-highlight.js": "^3.1.0",
|
||||
"vue-router": "^3.5.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "~4.5.0",
|
||||
"@vue/cli-plugin-eslint": "~4.5.0",
|
||||
"@vue/cli-service": "~4.5.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-vue": "^6.2.2",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"root": true,
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"extends": [
|
||||
"plugin:vue/essential",
|
||||
"eslint:recommended"
|
||||
],
|
||||
"parserOptions": {
|
||||
"parser": "babel-eslint"
|
||||
},
|
||||
"rules": {}
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
"last 2 versions",
|
||||
"not dead"
|
||||
]
|
||||
}
|
||||
15
framework/Web/public/doc-code/api/queue.js
Normal file
@@ -0,0 +1,15 @@
|
||||
/* 使用关键字await */
|
||||
async function doc() {
|
||||
const res1 = await this.$api.apiName1(params1)
|
||||
const res2 = await this.$api.apiName2(params2)
|
||||
}
|
||||
|
||||
/* 使用$queue */
|
||||
this.$api
|
||||
.$queue([
|
||||
this.$api.apiName1Await(params1),
|
||||
this.$api.apiName2Await(params2),
|
||||
])
|
||||
.then(([_res1, _res2]) => {
|
||||
/* ... */
|
||||
})
|
||||
14
framework/Web/public/doc-code/api/setting.js
Normal file
@@ -0,0 +1,14 @@
|
||||
export default {
|
||||
/* 自定义的接口名称 */
|
||||
apiName: [
|
||||
/* 接口地址 */
|
||||
url,
|
||||
/* 请求类型 [get | post] */
|
||||
'get',
|
||||
/* axios所需的设置参数 */
|
||||
options,
|
||||
],
|
||||
|
||||
/* 默认为post的接口 */
|
||||
apiPostName: postUrl
|
||||
}
|
||||
11
framework/Web/public/doc-code/api/usage.js
Normal file
@@ -0,0 +1,11 @@
|
||||
this.$api
|
||||
.apiName(params)
|
||||
.then((res) => {
|
||||
/* ... */
|
||||
})
|
||||
.catch((error) => {
|
||||
/* catch */
|
||||
})
|
||||
.finally(() => {
|
||||
/* finally */
|
||||
})
|
||||
14
framework/Web/public/doc-code/auth/index.vue
Normal file
@@ -0,0 +1,14 @@
|
||||
<template>
|
||||
<section>
|
||||
<!-- 简单的权限标识 -->
|
||||
<Auth auth="sysApp:page">
|
||||
<a-button>按钮1</a-button>
|
||||
</Auth>
|
||||
<!-- 多个并且关系的权限标识 -->
|
||||
<Auth :auth="['sysApp:page', 'sysApp:add']"></Auth>
|
||||
<!-- 多个或者关系的权限标识 -->
|
||||
<Auth :auth="[['sysApp:page'], ['sysApp:add']]"></Auth>
|
||||
<!-- 前缀简化 -->
|
||||
<Auth :auth="{ sysApp: ['page', 'add'] }"></Auth>
|
||||
</section>
|
||||
</template>
|
||||
109
framework/Web/public/doc-code/seed/form-page/only-form/index.vue
Normal file
@@ -0,0 +1,109 @@
|
||||
<template>
|
||||
<!--
|
||||
整页表单的外框架
|
||||
v 1.2
|
||||
2021-06-03
|
||||
Lufthafen
|
||||
-->
|
||||
<div class="yo-form-page">
|
||||
<!-- 表单主体 -->
|
||||
<!-- 如果不想使用锚点,删除a-row->a-col,只留内部的a-card层即可 -->
|
||||
<container>
|
||||
<a-row :gutter="16" type="flex">
|
||||
<a-col flex="1">
|
||||
<br />
|
||||
<a-card class="yo-form-page--body">
|
||||
<template v-for="(part, index) in parts">
|
||||
<section :id="`form-${index}-${id}`" :key="index">
|
||||
<h5 v-if="part.title">{{part.title}}</h5>
|
||||
<component
|
||||
:is="part.component"
|
||||
:key="index"
|
||||
:param="param"
|
||||
ref="forms"
|
||||
v-if="part.component"
|
||||
/>
|
||||
</section>
|
||||
<a-divider :key="`divider-${index}`" v-if="index < parts.length - 1" />
|
||||
</template>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col flex="240px">
|
||||
<a-anchor
|
||||
:get-container="()=> $el.parentNode"
|
||||
:offset-top="24"
|
||||
:wrapper-style="{ backgroundColor: 'transparent' }"
|
||||
@click.prevent
|
||||
>
|
||||
<a-anchor-link
|
||||
:href="`#form-${index}-${id}`"
|
||||
:key="index"
|
||||
:title="part.title"
|
||||
v-for="(part, index) in parts"
|
||||
/>
|
||||
</a-anchor>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</container>
|
||||
|
||||
<!-- 底部工具栏 -->
|
||||
<div class="yo-form-page--bar">
|
||||
<container>
|
||||
<div class="yo-form-page--bar-inner">
|
||||
<span>
|
||||
<!-- 可以在工具栏中增加其他控件(只能在一行内) -->
|
||||
<!-- ... -->
|
||||
</span>
|
||||
<span>
|
||||
<a-button @click="closeContentWindow()">取消</a-button>
|
||||
<a-button :loading="saving" @click="onSubmit" type="primary">保存</a-button>
|
||||
</span>
|
||||
</div>
|
||||
</container>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: ['id', 'param'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
saving: false,
|
||||
|
||||
parts: [
|
||||
/**
|
||||
{
|
||||
title: '标题',
|
||||
component: () => import('...'),
|
||||
}
|
||||
*/
|
||||
],
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
async onSubmit() {
|
||||
let formData = {};
|
||||
for (let i = 0; i < this.$refs.forms.length; i++) {
|
||||
const form = this.$refs.forms[i];
|
||||
try {
|
||||
const data = await form.onGetData();
|
||||
formData = {
|
||||
...formData,
|
||||
...data,
|
||||
};
|
||||
} catch (e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.saving = true;
|
||||
/**
|
||||
* 对表单提交进行处理
|
||||
*/
|
||||
this.saving = false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
123
framework/Web/public/doc-code/seed/form-page/only-form/part.vue
Normal file
@@ -0,0 +1,123 @@
|
||||
<template>
|
||||
<!--
|
||||
整页表单的分片表单
|
||||
v 1.2
|
||||
2021-06-03
|
||||
Lufthafen
|
||||
-->
|
||||
<a-form-model
|
||||
:label-col="labelCol"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
:wrapper-col="wrapperCol"
|
||||
ref="form"
|
||||
>
|
||||
<a-spin :spinning="loading">
|
||||
<a-icon slot="indicator" spin type="loading" />
|
||||
<!-- 表单控件 -->
|
||||
<!-- ... -->
|
||||
</a-spin>
|
||||
</a-form-model>
|
||||
</template>
|
||||
<script>
|
||||
/* 表单内容默认值 */
|
||||
const defaultForm = {
|
||||
/* ... */
|
||||
};
|
||||
|
||||
export default {
|
||||
props: ['param', 'frame'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
labelCol: { flex: '150px' },
|
||||
wrapperCol: { flex: '1' },
|
||||
|
||||
/** 表单数据 */
|
||||
form: {
|
||||
...defaultForm,
|
||||
},
|
||||
/** 验证格式 */
|
||||
rules: {
|
||||
/* ... */
|
||||
},
|
||||
|
||||
/** 加载异步数据状态 */
|
||||
loading: false,
|
||||
|
||||
/** 其他成员属性 */
|
||||
/* ... */
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.onFillData();
|
||||
},
|
||||
|
||||
methods: {
|
||||
/**
|
||||
* 必要的方法
|
||||
* 在打开编辑页时允许填充数据
|
||||
*/
|
||||
async onFillData() {
|
||||
this.loading = true;
|
||||
{
|
||||
const record = this.param && this.param.record;
|
||||
const form = this.$_.cloneDeep(defaultForm);
|
||||
|
||||
if (record) {
|
||||
this.$_.giveDeep(form, record);
|
||||
}
|
||||
|
||||
this.form = form;
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 验证表单并获取表单数据
|
||||
*/
|
||||
onGetData() {
|
||||
return new Promise((reslove, reject) => {
|
||||
this.$refs.form.validate((valid) => {
|
||||
if (valid) {
|
||||
const record = this.$_.cloneDeep(this.form);
|
||||
|
||||
/** 验证通过后可以对数据进行转换得到想要提交的格式 */
|
||||
/* ... */
|
||||
|
||||
reslove(record);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要的方法
|
||||
* 在外部窗口进行保存时调用表单验证
|
||||
*/
|
||||
onValidate(callback) {
|
||||
this.$refs.form.validate(callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要的方法
|
||||
* 在外部窗口关闭或重置时对表单验证进行初始化
|
||||
*/
|
||||
onResetFields() {
|
||||
setTimeout(() => {
|
||||
this.$refs.form.resetFields();
|
||||
|
||||
/** 在这里可以初始化当前组件中其他属性 */
|
||||
/* ... */
|
||||
}, 300);
|
||||
},
|
||||
|
||||
/** 当前组件的其他方法 */
|
||||
/* ... */
|
||||
},
|
||||
};
|
||||
</script>
|
||||
147
framework/Web/public/doc-code/seed/form-page/tab-form/tab.vue
Normal file
@@ -0,0 +1,147 @@
|
||||
<template>
|
||||
<!--
|
||||
整页表单的页签外框架
|
||||
v 1.2
|
||||
2021-06-03
|
||||
Lufthafen
|
||||
-->
|
||||
<div class="yo-form-page">
|
||||
<a-spin :spinning="loading" class="w-100-p h-100-p" tip="表单加载中..." v-if="loading">
|
||||
<a-icon slot="indicator" spin type="loading" />
|
||||
<div title="用于撑高spin"></div>
|
||||
</a-spin>
|
||||
|
||||
<div class="yo-form-page-layout" v-else>
|
||||
<!-- 底部工具栏(需放在前面) -->
|
||||
<div class="yo-form-page--bar yo-form-page--bar--with-tab">
|
||||
<container>
|
||||
<div class="yo-form-page--bar-inner">
|
||||
<span>
|
||||
<!-- 可以在工具栏中增加其他控件(只能在一行内) -->
|
||||
<!-- ... -->
|
||||
</span>
|
||||
<span>
|
||||
<a-button @click="closeContentWindow()">取消</a-button>
|
||||
<a-button :loading="saving" @click="onSubmit" type="primary">保存</a-button>
|
||||
</span>
|
||||
</div>
|
||||
</container>
|
||||
</div>
|
||||
|
||||
<!-- 头部,默认不使用 -->
|
||||
<!-- <div :style="{ paddingBottom: 0 }" class="yo-form-page--header">
|
||||
<container>
|
||||
</container>
|
||||
</div>-->
|
||||
|
||||
<!-- 表单主体 -->
|
||||
<!--
|
||||
挂载了一个content到tab后面
|
||||
如果直接使用antd-vue的tab,将会莫名其妙地做各种多余的渲染,导致卡顿
|
||||
现在只使用其tab卡片,重写了一个tab内容
|
||||
-->
|
||||
<div class="yo-tab-external-mount">
|
||||
<a-tabs @change="onTabChange" type="card">
|
||||
<template v-for="(tab, index) in tabs">
|
||||
<a-tab-pane :force-render="true" :key="index" :tab="tab.title"></a-tab-pane>
|
||||
</template>
|
||||
</a-tabs>
|
||||
<div class="yo-tab-external-mount-content">
|
||||
<template v-for="(tab, index) in tabs">
|
||||
<div
|
||||
:class="tab.active ? 'yo-tab-external-tabpane-active' : 'yo-tab-external-tabpane-inactive'"
|
||||
:key="index"
|
||||
class="yo-tab-external-tabpane"
|
||||
>
|
||||
<component
|
||||
:frame="self"
|
||||
:id="id"
|
||||
:is="tab.component"
|
||||
:param="param"
|
||||
ref="forms"
|
||||
v-if="tab.component"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: ['id', 'param'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
saving: false,
|
||||
loading: true,
|
||||
|
||||
tabs: [
|
||||
/**
|
||||
{
|
||||
title: '标题',
|
||||
component: () => import('...'),
|
||||
active: false,
|
||||
}
|
||||
*/
|
||||
],
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
self() {
|
||||
return this;
|
||||
},
|
||||
},
|
||||
|
||||
created() {
|
||||
this.loading = false;
|
||||
},
|
||||
|
||||
methods: {
|
||||
async onSubmit() {
|
||||
let formData = {},
|
||||
flag = true;
|
||||
for (let i = 0; i < this.$refs.forms.length; i++) {
|
||||
const form = this.$refs.forms[i];
|
||||
try {
|
||||
const data = await form.onGetData();
|
||||
formData = {
|
||||
...formData,
|
||||
...data,
|
||||
};
|
||||
} catch (e) {
|
||||
flag = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!flag) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.saving = true;
|
||||
/**
|
||||
* 对表单提交进行处理
|
||||
*/
|
||||
this.saving = false;
|
||||
},
|
||||
|
||||
onTabChange(key) {
|
||||
this.tabs.forEach((p, i) => {
|
||||
p.active = i === key;
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 控制标签页的显隐性
|
||||
*/
|
||||
onTogglePane(show, name) {
|
||||
const pane = this.tabs.find((p) => p.name === name);
|
||||
if (pane) {
|
||||
pane.show = show;
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,91 @@
|
||||
<template>
|
||||
<!--
|
||||
整页表单的页签内框架,整合分片表单
|
||||
v 1.2
|
||||
2021-06-03
|
||||
Lufthafen
|
||||
-->
|
||||
<container>
|
||||
<!-- 如果不想使用锚点,删除a-row->a-col,只留内部的a-card层即可 -->
|
||||
<a-row :gutter="16" type="flex">
|
||||
<a-col flex="1">
|
||||
<br />
|
||||
<a-card class="yo-form-page--body">
|
||||
<template v-for="(part, index) in parts">
|
||||
<section :id="`form-${index}-${id}`" :key="index">
|
||||
<h5 v-if="part.title">{{part.title}}</h5>
|
||||
<component
|
||||
:frame="frame"
|
||||
:is="part.component"
|
||||
:key="index"
|
||||
:param="param"
|
||||
ref="forms"
|
||||
v-if="part.component"
|
||||
/>
|
||||
</section>
|
||||
<a-divider :key="`divider-${index}`" v-if="index < parts.length - 1" />
|
||||
</template>
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col flex="240px">
|
||||
<a-anchor
|
||||
:get-container="()=> $el.parentNode"
|
||||
:offset-top="24"
|
||||
:target-offset="48"
|
||||
:wrapper-style="{ backgroundColor: 'transparent' }"
|
||||
@click.prevent
|
||||
>
|
||||
<a-anchor-link
|
||||
:href="`#form-${index}-${id}`"
|
||||
:key="index"
|
||||
:title="part.title"
|
||||
v-for="(part, index) in parts"
|
||||
/>
|
||||
</a-anchor>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</container>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
props: ['id', 'param', 'frame'],
|
||||
|
||||
data() {
|
||||
return {
|
||||
parts: [
|
||||
/**
|
||||
{
|
||||
title: '标题',
|
||||
component: () => import('...'),
|
||||
}
|
||||
*/
|
||||
],
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
/**
|
||||
* 循环子组件中的onGetData
|
||||
*/
|
||||
onGetData() {
|
||||
return new Promise(async (resolve, reject) => {
|
||||
let formData = {};
|
||||
for (let i = 0; i < this.$refs.forms.length; i++) {
|
||||
const form = this.$refs.forms[i];
|
||||
try {
|
||||
const data = await form.onGetData();
|
||||
formData = {
|
||||
...formData,
|
||||
...data,
|
||||
};
|
||||
} catch (e) {
|
||||
reject(e);
|
||||
return;
|
||||
}
|
||||
}
|
||||
resolve(formData);
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
114
framework/Web/public/doc-code/seed/query-form/form.vue
Normal file
@@ -0,0 +1,114 @@
|
||||
<template>
|
||||
<!--
|
||||
普通编辑窗体
|
||||
v 1.2
|
||||
2021-04-30
|
||||
Lufthafen
|
||||
-->
|
||||
<a-form-model :model="form" :rules="rules" class="yo-form" ref="form">
|
||||
<a-spin :spinning="loading">
|
||||
<a-icon slot="indicator" spin type="loading" />
|
||||
<div class="yo-form-group">
|
||||
<!-- 表单控件 -->
|
||||
<!-- ... -->
|
||||
</div>
|
||||
</a-spin>
|
||||
</a-form-model>
|
||||
</template>
|
||||
<script>
|
||||
/* 表单内容默认值 */
|
||||
const defaultForm = {
|
||||
/* ... */
|
||||
};
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
/** 表单数据 */
|
||||
form: {},
|
||||
/** 验证格式 */
|
||||
rules: {
|
||||
/* ... */
|
||||
},
|
||||
|
||||
/** 加载异步数据状态 */
|
||||
loading: false,
|
||||
|
||||
/** 其他成员属性 */
|
||||
/* ... */
|
||||
};
|
||||
},
|
||||
|
||||
methods: {
|
||||
/**
|
||||
* 必要的方法
|
||||
* 在打开编辑页时允许填充数据
|
||||
*/
|
||||
onFillData(params) {
|
||||
/** 将默认数据覆盖到form */
|
||||
this.form = this.$_.cloneDeep({
|
||||
...defaultForm,
|
||||
...params.record,
|
||||
/** 在此处添加其他默认数据转换 */
|
||||
/* ... */
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 验证表单并获取表单数据
|
||||
*/
|
||||
onGetData() {
|
||||
return new Promise((reslove, reject) => {
|
||||
this.$refs.form.validate((valid) => {
|
||||
if (valid) {
|
||||
const record = this.$_.cloneDeep(this.form);
|
||||
|
||||
/** 验证通过后可以对数据进行转换得到想要提交的格式 */
|
||||
/* ... */
|
||||
|
||||
reslove(record);
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要的方法
|
||||
* 在外部窗口进行保存时调用表单验证
|
||||
*/
|
||||
onValidate(callback) {
|
||||
this.$refs.form.validate(callback);
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要的方法
|
||||
* 在外部窗口关闭或重置时对表单验证进行初始化
|
||||
*/
|
||||
onResetFields() {
|
||||
setTimeout(() => {
|
||||
this.$refs.form.resetFields();
|
||||
|
||||
/** 在这里可以初始化当前组件中其他属性 */
|
||||
/* ... */
|
||||
}, 300);
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 加载当前表单中所需要的异步数据
|
||||
*/
|
||||
async onInit(params) {
|
||||
this.loading = true;
|
||||
/** 可以在这里await获取一些异步数据 */
|
||||
/* ... */
|
||||
this.loading = false;
|
||||
},
|
||||
|
||||
/** 当前组件的其他方法 */
|
||||
/* ... */
|
||||
},
|
||||
};
|
||||
</script>
|
||||
216
framework/Web/public/doc-code/seed/query-form/query.vue
Normal file
@@ -0,0 +1,216 @@
|
||||
<template>
|
||||
<!--
|
||||
普通查询表格
|
||||
v 1.2
|
||||
2021-04-30
|
||||
Lufthafen
|
||||
-->
|
||||
<container>
|
||||
<br />
|
||||
<a-card :bordered="false">
|
||||
<yo-table
|
||||
:columns="columns"
|
||||
:load-data="loadData"
|
||||
@query="onQuery"
|
||||
@resetQuery="onResetQuery"
|
||||
ref="table"
|
||||
>
|
||||
<Auth auth="authCode:page" slot="query">
|
||||
<!-- 此处添加查询表单控件 -->
|
||||
<!-- ... -->
|
||||
</Auth>
|
||||
<Auth auth="authCode:add" slot="operator">
|
||||
<a-button @click="onOpen('add-form')" icon="plus">新增...</a-button>
|
||||
</Auth>
|
||||
<!-- 格式化字段内容 -->
|
||||
<!-- ... -->
|
||||
<!-- 添加操作控件 -->
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<yo-table-actions>
|
||||
<Auth auth="authCode:edit">
|
||||
<a @click="onOpen('edit-form', record)">编辑</a>
|
||||
</Auth>
|
||||
<Auth auth="authCode:delete">
|
||||
<a-popconfirm @confirm="onDelete(record)" placement="topRight" title="是否确认删除">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</Auth>
|
||||
<!-- 可在此处添加其他操作控件 -->
|
||||
<!-- ... -->
|
||||
</yo-table-actions>
|
||||
</span>
|
||||
</yo-table>
|
||||
</a-card>
|
||||
|
||||
<!-- 新增表单 -->
|
||||
<yo-modal-form :action="$api[api.add]" :title="'新增' + name" @ok="onReloadData" ref="add-form">
|
||||
<form-body />
|
||||
</yo-modal-form>
|
||||
|
||||
<!-- 编辑表单 -->
|
||||
<yo-modal-form :action="$api[api.edit]" :title="'编辑' + name" @ok="onReloadData" ref="edit-form">
|
||||
<form-body />
|
||||
</yo-modal-form>
|
||||
</container>
|
||||
</template>
|
||||
<script>
|
||||
import FormBody from './form';
|
||||
|
||||
/* 在此管理整个页面需要的接口名称 */
|
||||
const api = {
|
||||
page: 'testPageApi...',
|
||||
add: 'testAddApi',
|
||||
edit: 'testEditApi',
|
||||
delete: 'testDeleteApi...',
|
||||
/* ... */
|
||||
};
|
||||
|
||||
export default {
|
||||
components: {
|
||||
FormBody,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
api,
|
||||
|
||||
name: '...',
|
||||
|
||||
/* 查询条件 */
|
||||
query: {},
|
||||
|
||||
/* 表格字段 */
|
||||
columns: [],
|
||||
|
||||
/* 字典编码储存格式 */
|
||||
codes: {
|
||||
code1: [],
|
||||
code2: [],
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
/** 按需加载字典编码 */
|
||||
this.onLoadCodes();
|
||||
|
||||
/** 根据权限添加操作列 */
|
||||
const flag = this.$auth(/* ... */);
|
||||
if (flag) {
|
||||
this.columns.push({
|
||||
title: '操作',
|
||||
width: '150px',
|
||||
dataIndex: 'action',
|
||||
scopedSlots: { customRender: 'action' },
|
||||
});
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 必要的方法
|
||||
* 传给yo-table以示意数据接口及其参数和返回的数据结构
|
||||
*/
|
||||
loadData(params) {
|
||||
return this.$api[api.page]({
|
||||
...params,
|
||||
...this.query,
|
||||
}).then((res) => {
|
||||
return res.data;
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 有查询功能时的必要方法
|
||||
* 加载数据时初始化分页信息
|
||||
*/
|
||||
onQuery() {
|
||||
this.$refs.table.onReloadData(true);
|
||||
},
|
||||
|
||||
/**
|
||||
* 有查询功能时的必要方法
|
||||
* 重置查询条件
|
||||
*/
|
||||
onResetQuery() {
|
||||
/** 在这里重置查询条件时,可对特殊的字段做保留处理 */
|
||||
this.query = {};
|
||||
this.onQuery();
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 重新列表数据
|
||||
*/
|
||||
onReloadData() {
|
||||
this.$refs.table.onReloadData();
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 加载字典数据
|
||||
* 如果不需要获取相应的字典数据,此方法内容可空
|
||||
*/
|
||||
onLoadCodes() {
|
||||
this.$api
|
||||
.$queue([
|
||||
this.$api.sysDictTypeDropDownAwait({ code: 'code1' }),
|
||||
this.$api.sysDictTypeDropDownAwait({ code: 'code2' }),
|
||||
/* ... */
|
||||
])
|
||||
.then(([code1, code2]) => {
|
||||
this.codes.code1 = code1.data;
|
||||
this.codes.code2 = code2.data;
|
||||
/* ... */
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 绑定数据字典值
|
||||
*/
|
||||
bindCodeValue(code, name) {
|
||||
const c = this.codes[name].find((p) => p.code == code);
|
||||
if (c) {
|
||||
return c.value;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 从列表页调用窗口的打开方法
|
||||
*/
|
||||
onOpen(formName, record) {
|
||||
this.$refs[formName].onOpen({
|
||||
record,
|
||||
/* 按需添加其他参数 */
|
||||
/* ... */
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 可以用做一系列操作的公共回调,此方法中会重新加载当前列表
|
||||
*/
|
||||
onResult(success, successMessage) {
|
||||
if (success) {
|
||||
this.$message.success(successMessage);
|
||||
this.onReloadData();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 删除时调用
|
||||
*/
|
||||
onDelete(record) {
|
||||
this.$refs.table.onLoading();
|
||||
this.$api[api.delete](record)
|
||||
.then(({ success }) => {
|
||||
this.onResult(success, '删除成功');
|
||||
})
|
||||
.finally(() => {
|
||||
this.$refs.table.onLoaded();
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
256
framework/Web/public/doc-code/seed/query-form/treeLayout.vue
Normal file
@@ -0,0 +1,256 @@
|
||||
<template>
|
||||
<!--
|
||||
普通树查询表格
|
||||
v 1.2
|
||||
2021-04-30
|
||||
Lufthafen
|
||||
-->
|
||||
<yo-tree-layout
|
||||
:load-data="loadTreeData"
|
||||
@select="onSelect"
|
||||
default-expanded-keys
|
||||
ref="tree-layout"
|
||||
>
|
||||
<container>
|
||||
<a-card :bordered="false">
|
||||
<yo-table
|
||||
:columns="columns"
|
||||
:load-data="loadData"
|
||||
@query="onQuery"
|
||||
@resetQuery="onResetQuery"
|
||||
ref="table"
|
||||
>
|
||||
<Auth auth="authCode:page" slot="query">
|
||||
<!-- 此处添加查询表单控件 -->
|
||||
<!-- ... -->
|
||||
</Auth>
|
||||
<Auth auth="authCode:add" slot="operator">
|
||||
<a-button @click="onOpen('add-form')" icon="plus">新增机构</a-button>
|
||||
</Auth>
|
||||
<!-- 格式化字段内容 -->
|
||||
<!-- ... -->
|
||||
<!-- 添加操作控件 -->
|
||||
<span slot="action" slot-scope="text, record">
|
||||
<yo-table-actions>
|
||||
<Auth auth="authCode:edit">
|
||||
<a @click="onOpen('edit-form', record)">编辑</a>
|
||||
</Auth>
|
||||
<Auth auth="authCode:delete">
|
||||
<a-popconfirm @confirm="onDelete(record)" placement="topRight" title="是否确认删除">
|
||||
<a>删除</a>
|
||||
</a-popconfirm>
|
||||
</Auth>
|
||||
<!-- 可在此处添加其他操作控件 -->
|
||||
<!-- ... -->
|
||||
</yo-table-actions>
|
||||
</span>
|
||||
</yo-table>
|
||||
</a-card>
|
||||
</container>
|
||||
|
||||
<!-- 新增表单 -->
|
||||
<yo-modal-form :action="$api[api.add]" :title="'新增' + name" @ok="onReloadData" ref="add-form">
|
||||
<form-body />
|
||||
</yo-modal-form>
|
||||
|
||||
<!-- 编辑表单 -->
|
||||
<yo-modal-form :action="$api[api.edit]" :title="'编辑' + name" @ok="onReloadData" ref="edit-form">
|
||||
<form-body />
|
||||
</yo-modal-form>
|
||||
</yo-tree-layout>
|
||||
</template>
|
||||
<script>
|
||||
/* 需要引用YoTreeLayout组件 */
|
||||
import YoTreeLayout from '@/components/yoTreeLayout';
|
||||
import FormBody from './form';
|
||||
|
||||
/* 在此管理整个页面需要的接口名称 */
|
||||
const api = {
|
||||
tree: 'testTreeApi...',
|
||||
page: 'testPageApi...',
|
||||
add: 'testAddApi',
|
||||
edit: 'testEditApi',
|
||||
delete: 'testDeleteApi...',
|
||||
/* ... */
|
||||
};
|
||||
|
||||
export default {
|
||||
components: {
|
||||
YoTreeLayout,
|
||||
FormBody,
|
||||
},
|
||||
|
||||
data() {
|
||||
return {
|
||||
api,
|
||||
|
||||
name: '...',
|
||||
|
||||
/* 查询条件 */
|
||||
query: {},
|
||||
|
||||
/* 表格字段 */
|
||||
columns: [],
|
||||
|
||||
/* 字典编码储存格式 */
|
||||
codes: {
|
||||
code1: [],
|
||||
code2: [],
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
created() {
|
||||
this.onLoadCodes();
|
||||
|
||||
/** 根据权限添加操作列 */
|
||||
const flag = this.$auth(/* ... */);
|
||||
if (flag) {
|
||||
this.columns.push({
|
||||
title: '操作',
|
||||
width: '150px',
|
||||
dataIndex: 'action',
|
||||
scopedSlots: { customRender: 'action' },
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
/**
|
||||
* 树形选择界面必要的方法
|
||||
* 传给yo-table-layout以示意数据接口
|
||||
*/
|
||||
loadTreeData() {
|
||||
return this.$api[api.tree]().then((res) => {
|
||||
return res.data;
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 树形选择界面必要的方法
|
||||
* 选择树节点事件
|
||||
*/
|
||||
onSelect([id]) {
|
||||
/** 在选择事件中可以对右侧表格添加父节点id的查询条件 */
|
||||
this.query = {
|
||||
pid: id,
|
||||
};
|
||||
this.onQuery();
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要的方法
|
||||
* 传给yo-table以示意数据接口及其参数和返回的数据结构
|
||||
*/
|
||||
loadData(params) {
|
||||
return this.$api[api.page]({
|
||||
...params,
|
||||
...this.query,
|
||||
}).then((res) => {
|
||||
return res.data;
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 有查询功能时的必要方法
|
||||
* 加载数据时初始化分页信息
|
||||
*/
|
||||
onQuery() {
|
||||
this.$refs.table.onReloadData(true);
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 重新列表数据
|
||||
*/
|
||||
onResetQuery() {
|
||||
/* 与普通查询页不同的是,这里的父节点参数不应该在重置后被清空 */
|
||||
Object.keys(this.query).forEach((p) => {
|
||||
if (p !== 'pid') {
|
||||
this.query[p] = undefined;
|
||||
}
|
||||
});
|
||||
this.onQuery();
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 重新列表数据
|
||||
*/
|
||||
onReloadData() {
|
||||
this.$refs.table.onReloadData();
|
||||
this.$refs['tree-layout'].onReloadData();
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 加载字典数据
|
||||
* 如果不需要获取相应的字典数据,此方法内容可空
|
||||
*/
|
||||
onLoadCodes() {
|
||||
this.$api
|
||||
.$queue([
|
||||
this.$api.sysDictTypeDropDownAwait({ code: 'code1' }),
|
||||
this.$api.sysDictTypeDropDownAwait({ code: 'code2' }),
|
||||
/* ... */
|
||||
])
|
||||
.then(([code1, code2]) => {
|
||||
this.codes.code1 = code1.data;
|
||||
this.codes.code2 = code2.data;
|
||||
/* ... */
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 绑定数据字典值
|
||||
*/
|
||||
bindCodeValue(code, name) {
|
||||
const c = this.codes[name].find((p) => p.code == code);
|
||||
if (c) {
|
||||
return c.value;
|
||||
}
|
||||
return null;
|
||||
},
|
||||
|
||||
/**
|
||||
* 有编辑新增功能的必要方法
|
||||
* 从列表页调用窗口的打开方法
|
||||
*/
|
||||
onOpen(formName, record) {
|
||||
this.$refs[formName].onOpen({
|
||||
record,
|
||||
pid: this.query.pid,
|
||||
/* 按需添加其他参数 */
|
||||
/* ... */
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 可以用做一系列操作的公共回调,此方法中会重新加载当前列表
|
||||
*/
|
||||
onResult(success, successMessage) {
|
||||
if (success) {
|
||||
this.$message.success(successMessage);
|
||||
this.onReloadData();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* 必要方法
|
||||
* 删除时调用
|
||||
*/
|
||||
onDelete(record) {
|
||||
this.$refs.table.onLoading();
|
||||
this.$api[api.delete](record)
|
||||
.then(({ success }) => {
|
||||
this.onResult(success, '删除成功');
|
||||
})
|
||||
.finally(() => {
|
||||
this.$refs.table.onLoaded();
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
9
framework/Web/public/doc-code/seed/vue.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"seed-index.vue": {
|
||||
"prefix": "seed.index",
|
||||
"body": [
|
||||
"<template>",
|
||||
"</template>"
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
framework/Web/public/favicon.ico
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
18
framework/Web/public/index.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
<script src="https://webapi.amap.com/maps?v=2.0&key=c6a4832b8afbde0361b36630a3fc5bdc&plugin=Map3D,AMap.DistrictSearch,AMap.Geocoder,AMap.AutoComplete,AMap.PlaceSearch"></script>
|
||||
</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>
|
||||
<!-- built files will be auto injected -->
|
||||
</body>
|
||||
</html>
|
||||
26
framework/Web/src/App.vue
Normal file
@@ -0,0 +1,26 @@
|
||||
<template>
|
||||
<div id="app">
|
||||
<a-config-provider :locale="zh_CN">
|
||||
<template #renderEmpty>
|
||||
<div class="text-center pt-md">
|
||||
<a-icon class="h3 mb-md" type="smile" />
|
||||
<p>暂无数据</p>
|
||||
</div>
|
||||
</template>
|
||||
<router-view />
|
||||
</a-config-provider>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import zh_CN from 'ant-design-vue/es/locale/zh_CN';
|
||||
|
||||
export default {
|
||||
name: 'App',
|
||||
data() {
|
||||
return {
|
||||
zh_CN,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
BIN
framework/Web/src/assets/image/login-bg-00.jpg
Normal file
|
After Width: | Height: | Size: 223 KiB |
BIN
framework/Web/src/assets/image/login-bg-01.jpg
Normal file
|
After Width: | Height: | Size: 560 KiB |
BIN
framework/Web/src/assets/image/login-bg-02.jpg
Normal file
|
After Width: | Height: | Size: 431 KiB |
BIN
framework/Web/src/assets/image/login-bg-03.jpg
Normal file
|
After Width: | Height: | Size: 143 KiB |
BIN
framework/Web/src/assets/image/logo-w.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
framework/Web/src/assets/image/logo.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
42
framework/Web/src/assets/style/app.less
Normal file
@@ -0,0 +1,42 @@
|
||||
@import './extend.less';
|
||||
@import './lib/visibility.less';
|
||||
@import './lib/container.less';
|
||||
@import './lib/align.less';
|
||||
@import './lib/font-size.less';
|
||||
@import './lib/text-color.less';
|
||||
@import './lib/margin.less';
|
||||
@import './lib/width-height.less';
|
||||
@import './lib/scrollbar.less';
|
||||
@import './main.less';
|
||||
@import './frame/dark.less';
|
||||
@import './frame/light.less';
|
||||
.yo-nav-theme--dark {
|
||||
.dark();
|
||||
}
|
||||
.yo-nav-theme--light {
|
||||
.light();
|
||||
}
|
||||
@import './lib/button.less';
|
||||
@import './lib/card.less';
|
||||
@import './lib/table.less';
|
||||
@import './lib/list.less';
|
||||
@import './lib/form.less';
|
||||
@import './lib/form-page.less';
|
||||
@import './lib/page.less';
|
||||
@import './lib/description.less';
|
||||
@import './lib/input.less';
|
||||
@import './lib/select.less';
|
||||
@import './lib/checkbox.less';
|
||||
@import './lib/radio.less';
|
||||
@import './lib/cascader.less';
|
||||
@import './lib/upload.less';
|
||||
@import './lib/dropdown.less';
|
||||
@import './lib/modal.less';
|
||||
@import './lib/tree-layout.less';
|
||||
@import './lib/authority-view.less';
|
||||
@import './lib/icon-selector.less';
|
||||
@import './lib/anchor.less';
|
||||
@import './lib/disabled.less';
|
||||
@import './theme/primary.less';
|
||||
// @import './lib/font-weight.less';
|
||||
@import './public.less';
|
||||
6
framework/Web/src/assets/style/extend.less
Normal file
@@ -0,0 +1,6 @@
|
||||
@import '~ant-design-vue/dist/antd.less';
|
||||
@padding-xxs: 4px;
|
||||
@padding-xl: 32px;
|
||||
body {
|
||||
line-height: 1.42857143;
|
||||
}
|
||||
18
framework/Web/src/assets/style/frame/dark.less
Normal file
@@ -0,0 +1,18 @@
|
||||
@import (reference) '~@/assets/style/main.less';
|
||||
@layout-header-background: #1c2127;
|
||||
.dark {
|
||||
.main(@nav-background: @layout-header-background;
|
||||
@nav-box-shadow-color: fade(@black, 25%);
|
||||
@nav-scrollbar-background: fade(@white, 50%);
|
||||
@nav-app-color: fade(@white, 35%);
|
||||
@logo-color: @white;
|
||||
@logo-box-shadow: none;
|
||||
@header-action-color: fade(@white, 60%);
|
||||
@header-action-hover-color: @white;
|
||||
@header-action-hover-background: fade(@white, 20%);
|
||||
@header-search-color: @white;
|
||||
@header-search-background: fade(@white, 15%);
|
||||
@header-search-focus-background: fade(@white, 30%);
|
||||
@header-search-icon-color: fade(@white, 60%);
|
||||
@header-search-icon-hover-color: @white);
|
||||
}
|
||||
0
framework/Web/src/assets/style/frame/light.css
Normal file
17
framework/Web/src/assets/style/frame/light.less
Normal file
@@ -0,0 +1,17 @@
|
||||
@import (reference) '~@/assets/style/main.less';
|
||||
.light {
|
||||
.main(@nav-background: @white;
|
||||
@nav-box-shadow-color: fade(@black, 5%);
|
||||
@nav-scrollbar-background: fade(@black, 30%);
|
||||
@nav-app-color: fade(@black, 35%);
|
||||
@logo-color: @black;
|
||||
@logo-box-shadow: inset -1px -1px 1px @border-color-split;
|
||||
@header-action-color: fade(@black, 35%);
|
||||
@header-action-hover-color: @icon-color-hover;
|
||||
@header-action-hover-background: fade(@black, 5%);
|
||||
@header-search-color: @black;
|
||||
@header-search-background: @white;
|
||||
@header-search-focus-background: fade(@black, 5%);
|
||||
@header-search-icon-color: fade(@black, 45%);
|
||||
@header-search-icon-hover-color: fade(@black, 80%));
|
||||
}
|
||||
9
framework/Web/src/assets/style/lib/align.less
Normal file
@@ -0,0 +1,9 @@
|
||||
.text-left {
|
||||
text-align: left !important;
|
||||
}
|
||||
.text-center {
|
||||
text-align: center !important;
|
||||
}
|
||||
.text-right {
|
||||
text-align: right !important;
|
||||
}
|
||||
11
framework/Web/src/assets/style/lib/anchor.less
Normal file
@@ -0,0 +1,11 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-anchor-ink-ball {
|
||||
width: 2px;
|
||||
height: 28px;
|
||||
|
||||
transform: translate(-50%, -10px);
|
||||
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
background-color: @primary-color;
|
||||
}
|
||||
24
framework/Web/src/assets/style/lib/authority-view.less
Normal file
@@ -0,0 +1,24 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.yo-authority-view {
|
||||
.ant-descriptions-item-label {
|
||||
width: 150px;
|
||||
}
|
||||
.ant-descriptions {
|
||||
margin-bottom: @padding-sm;
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
.ant-descriptions-item-content {
|
||||
padding: @padding-sm @padding-md;
|
||||
>.yo-authority-view--checkbox {
|
||||
display: inline-block;
|
||||
|
||||
width: 150px;
|
||||
margin: @padding-xxs 0;
|
||||
.ant-checkbox-wrapper {
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
5
framework/Web/src/assets/style/lib/button.less
Normal file
@@ -0,0 +1,5 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
@btn-default-border: @border-color-split;
|
||||
.ant-btn {
|
||||
box-shadow: none;
|
||||
}
|
||||
4
framework/Web/src/assets/style/lib/card.less
Normal file
@@ -0,0 +1,4 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-card {
|
||||
margin-bottom: @padding-md;
|
||||
}
|
||||
6
framework/Web/src/assets/style/lib/cascader.less
Normal file
@@ -0,0 +1,6 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-cascader-picker-arrow {
|
||||
svg {
|
||||
transform: scaleY(.75);
|
||||
}
|
||||
}
|
||||
10
framework/Web/src/assets/style/lib/checkbox.less
Normal file
@@ -0,0 +1,10 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-checkbox-wrapper {
|
||||
margin-right: @padding-xs;
|
||||
&:last-child {
|
||||
margin-right: 0;
|
||||
}
|
||||
+.ant-checkbox-wrapper {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
43
framework/Web/src/assets/style/lib/container.less
Normal file
@@ -0,0 +1,43 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
@container-width: 1400px;
|
||||
.container-base {
|
||||
margin: 0 auto;
|
||||
padding: 0 @padding-md;
|
||||
}
|
||||
.container {
|
||||
width: @container-width;
|
||||
|
||||
.container-base();
|
||||
}
|
||||
@media (max-width: 1400px) {
|
||||
.container {
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
.container-md {
|
||||
width: @container-width - 200px;
|
||||
|
||||
.container-base();
|
||||
}
|
||||
.container-sm {
|
||||
width: @container-width - 400px;
|
||||
|
||||
.container-base();
|
||||
}
|
||||
.container-xs {
|
||||
width: @container-width - 600px;
|
||||
|
||||
.container-base();
|
||||
}
|
||||
.container-xxs {
|
||||
width: @container-width - 700px;
|
||||
|
||||
.container-base();
|
||||
}
|
||||
.container-fluid {
|
||||
.container-base();
|
||||
}
|
||||
.container-flex {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
10
framework/Web/src/assets/style/lib/description.less
Normal file
@@ -0,0 +1,10 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-descriptions-bordered {
|
||||
.ant-descriptions-view {
|
||||
>table {
|
||||
border-collapse: collapse;
|
||||
|
||||
background-color: @white;
|
||||
}
|
||||
}
|
||||
}
|
||||
36
framework/Web/src/assets/style/lib/disabled.less
Normal file
@@ -0,0 +1,36 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-btn-primary-disabled,
|
||||
.ant-btn-primary.disabled,
|
||||
.ant-btn-primary[disabled],
|
||||
.ant-btn-primary-disabled:hover,
|
||||
.ant-btn-primary.disabled:hover,
|
||||
.ant-btn-primary[disabled]:hover,
|
||||
.ant-btn-primary-disabled:focus,
|
||||
.ant-btn-primary.disabled:focus,
|
||||
.ant-btn-primary[disabled]:focus,
|
||||
.ant-btn-primary-disabled:active,
|
||||
.ant-btn-primary.disabled:active,
|
||||
.ant-btn-primary[disabled]:active,
|
||||
.ant-btn-primary-disabled.active,
|
||||
.ant-btn-primary.disabled.active,
|
||||
.ant-btn-primary[disabled].active {
|
||||
opacity: .5;
|
||||
color: @btn-primary-color;
|
||||
border-color: @btn-primary-bg;
|
||||
background-color: @btn-primary-bg;
|
||||
box-shadow: @btn-primary-shadow;
|
||||
text-shadow: @btn-text-shadow;
|
||||
}
|
||||
.ant-radio-button-wrapper-disabled:first-child,
|
||||
.ant-radio-button-wrapper-disabled:hover {
|
||||
opacity: .5;
|
||||
color: @radio-button-color;
|
||||
background-color: @radio-button-bg;
|
||||
}
|
||||
.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked {
|
||||
opacity: .5;
|
||||
color: @btn-primary-color;
|
||||
border-color: @btn-primary-bg;
|
||||
background-color: @btn-primary-bg;
|
||||
box-shadow: @btn-primary-shadow;
|
||||
}
|
||||
6
framework/Web/src/assets/style/lib/dropdown.less
Normal file
@@ -0,0 +1,6 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-dropdown-trigger {
|
||||
.anticon-down {
|
||||
transform: scaleY(.75);
|
||||
}
|
||||
}
|
||||
25
framework/Web/src/assets/style/lib/font-size.less
Normal file
@@ -0,0 +1,25 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
h1,
|
||||
.h1 {
|
||||
font-size: 36px;
|
||||
}
|
||||
h2,
|
||||
.h2 {
|
||||
font-size: 32px;
|
||||
}
|
||||
h3,
|
||||
.h3 {
|
||||
font-size: 24px;
|
||||
}
|
||||
h4,
|
||||
.h4 {
|
||||
font-size: 18px;
|
||||
}
|
||||
h5,
|
||||
.h5 {
|
||||
font-size: 16px;
|
||||
}
|
||||
h6,
|
||||
.h6 {
|
||||
font-size: 14px;
|
||||
}
|
||||
24
framework/Web/src/assets/style/lib/font-weight.less
Normal file
@@ -0,0 +1,24 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
body {
|
||||
font-weight: 100;
|
||||
}
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
@btn-font-weight: 100;
|
||||
.ant-card-meta-title {
|
||||
font-weight: inherit;
|
||||
}
|
||||
.ant-table-thead {
|
||||
>tr {
|
||||
>th {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
}
|
||||
168
framework/Web/src/assets/style/lib/form-page.less
Normal file
@@ -0,0 +1,168 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
|
||||
.yo-form-page {
|
||||
position: relative;
|
||||
|
||||
height: 100%;
|
||||
|
||||
.yo-tab-external-mount {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
height: 100%;
|
||||
|
||||
>.ant-tabs {
|
||||
>.ant-tabs-bar {
|
||||
margin-bottom: 0;
|
||||
|
||||
background-color: @white;
|
||||
|
||||
&.ant-tabs-card-bar {
|
||||
.ant-tabs-nav-container {
|
||||
height: @tabs-card-height + @padding-xs;
|
||||
padding: (@tabs-card-height + @padding-xs - @btn-height-base) / 2 @padding-md;
|
||||
}
|
||||
|
||||
.ant-tabs-extra-content {
|
||||
padding: (@tabs-card-height + @padding-xs - @btn-height-base) / 2 @padding-md;
|
||||
}
|
||||
|
||||
.ant-tabs-tab {
|
||||
transition: none;
|
||||
|
||||
.ant-btn();
|
||||
|
||||
&:hover {
|
||||
border-color: @btn-default-border;
|
||||
}
|
||||
}
|
||||
|
||||
.ant-tabs-tab {
|
||||
line-height: @btn-height-base;
|
||||
|
||||
margin-right: -1px;
|
||||
}
|
||||
|
||||
.ant-tabs-tab-active {
|
||||
z-index: 2;
|
||||
|
||||
color: @btn-primary-color;
|
||||
border-color: @btn-primary-bg;
|
||||
background-color: @btn-primary-bg;
|
||||
|
||||
&:hover {
|
||||
color: @btn-primary-color;
|
||||
border-color: color(~`colorPalette('@{btn-primary-bg}', 5) `);
|
||||
background-color: color(~`colorPalette('@{btn-primary-bg}', 5) `);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
>.yo-tab-external-mount-content {
|
||||
position: relative;
|
||||
|
||||
flex: 1;
|
||||
|
||||
>.yo-tab-external-tabpane {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
overflow: auto;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
&.yo-tab-external-tabpane-inactive {
|
||||
pointer-events: none;
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--bar {
|
||||
position: sticky;
|
||||
bottom: 0;
|
||||
z-index: 200;
|
||||
|
||||
&--with-tab {
|
||||
position: absolute;
|
||||
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
width: 100%;
|
||||
height: 0;
|
||||
padding-right: 7px;
|
||||
|
||||
>.container-fluid {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
~.yo-tab-external-mount {
|
||||
>.yo-tab-external-mount-content {
|
||||
>.yo-tab-external-tabpane {
|
||||
padding-bottom: @padding-xs * 2 + @btn-height-base + @border-width-base * 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--bar-inner {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
padding: @padding-xs @padding-md;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
background-color: fade(@white, 80%);
|
||||
|
||||
backdrop-filter: blur(5px);
|
||||
|
||||
>:first-child {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.ant-btn {
|
||||
margin-left: @padding-sm;
|
||||
}
|
||||
}
|
||||
|
||||
&--body {
|
||||
>.ant-card-body {
|
||||
padding: 0;
|
||||
|
||||
>section {
|
||||
padding: @padding-lg;
|
||||
|
||||
>h5 {
|
||||
padding-left: @padding-md;
|
||||
|
||||
border-left: @padding-xs @border-style-base @primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
height: 100%;
|
||||
|
||||
&--horizontal {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
&--header {
|
||||
padding: @padding-md 0;
|
||||
|
||||
background-color: @white;
|
||||
}
|
||||
}
|
||||
369
framework/Web/src/assets/style/lib/form.less
Normal file
@@ -0,0 +1,369 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.yo-form {
|
||||
&--fixed {
|
||||
width: 660px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.h1,
|
||||
.h2,
|
||||
.h3,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
color: darken(@white, 40%);
|
||||
}
|
||||
.h3 {
|
||||
font-size: 16px;
|
||||
}
|
||||
.h4 {
|
||||
font-size: 15px;
|
||||
}
|
||||
.yo-form-group {
|
||||
margin-bottom: @padding-md;
|
||||
}
|
||||
.ant-form-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
margin-bottom: -1px;
|
||||
padding: @padding-xs @padding-md;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
background-color: @white;
|
||||
|
||||
@box-shadow-focused: 0 0 0 2px fade(@primary-color, 50%);
|
||||
@control-background: lighten(@black, 95%) !important;
|
||||
&::before,
|
||||
&::after {
|
||||
content: none;
|
||||
}
|
||||
.ant-form-item-control {
|
||||
text-align: right;
|
||||
}
|
||||
.ant-input,
|
||||
.ant-input-number,
|
||||
.ant-mentions,
|
||||
.ant-select-selection,
|
||||
.ant-input-group-addon,
|
||||
.ant-cascader-picker,
|
||||
.ant-cascader-input.ant-input {
|
||||
z-index: 1;
|
||||
|
||||
text-align: left;
|
||||
|
||||
color: lighten(@black, 10%);
|
||||
border: 0;
|
||||
background-color: @control-background;
|
||||
}
|
||||
.ant-mentions {
|
||||
textarea {
|
||||
background-color: lighten(@black, 95%);
|
||||
}
|
||||
}
|
||||
.focus {
|
||||
z-index: 2 !important;
|
||||
|
||||
box-shadow: @box-shadow-focused;
|
||||
}
|
||||
.ant-input {
|
||||
&:focus {
|
||||
.focus();
|
||||
}
|
||||
}
|
||||
.ant-input-number-focused,
|
||||
.ant-mentions-focused {
|
||||
.focus();
|
||||
}
|
||||
.ant-select-focused,
|
||||
.ant-select-open {
|
||||
z-index: 2;
|
||||
.ant-select-selection {
|
||||
.focus();
|
||||
}
|
||||
}
|
||||
.ant-cascader-picker:focus {
|
||||
.ant-cascader-input {
|
||||
.focus();
|
||||
}
|
||||
}
|
||||
.ant-input-group {
|
||||
.ant-row-flex {
|
||||
.ant-select {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.ant-input-group-addon {
|
||||
z-index: 0;
|
||||
}
|
||||
}
|
||||
.ant-cascader-picker-clear {
|
||||
background-color: @control-background;
|
||||
}
|
||||
}
|
||||
.ant-form-item-label {
|
||||
overflow: hidden;
|
||||
flex: 1 1 auto;
|
||||
|
||||
margin-right: @padding-md;
|
||||
|
||||
text-align: left;
|
||||
text-overflow: ellipsis;
|
||||
>label {
|
||||
color: lighten(@black, 10%);
|
||||
&::after {
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-form-item-control-wrapper {
|
||||
flex: 0 0 61.8%;
|
||||
|
||||
width: 61.8%;
|
||||
min-width: 220px;
|
||||
}
|
||||
.yo-form--fluid {
|
||||
.ant-form-item-control-wrapper {
|
||||
flex: 0 0 100%;
|
||||
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.yo-form--short {
|
||||
.ant-form-item-control-wrapper {
|
||||
flex: 0 0 38.2%;
|
||||
|
||||
width: 38.2%;
|
||||
}
|
||||
}
|
||||
.ant-form-explain {
|
||||
font-size: @font-size-base - 1px;
|
||||
|
||||
margin-top: @padding-xs;
|
||||
margin-bottom: @padding-xxs;
|
||||
margin-left: -61.8%;
|
||||
|
||||
transition: none;
|
||||
animation: none;
|
||||
text-align: left;
|
||||
|
||||
opacity: 1;
|
||||
color: fade(darken(@primary-color, 38.2%), 61.8%);
|
||||
}
|
||||
.has-error {
|
||||
.ant-form-explain {
|
||||
color: @error-color;
|
||||
}
|
||||
}
|
||||
// 上下布局
|
||||
.yo-form--vertical {
|
||||
display: block;
|
||||
.ant-form-item-control {
|
||||
text-align: left;
|
||||
}
|
||||
&-radio {
|
||||
.ant-radio-wrapper {
|
||||
line-height: @padding-lg;
|
||||
|
||||
display: block;
|
||||
|
||||
margin-right: 0;
|
||||
+.ant-radio-wrapper {
|
||||
margin-top: @padding-sm;
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-form-item-control-wrapper {
|
||||
margin-left: @padding-lg;
|
||||
}
|
||||
.ant-form-explain {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
.yo-form-link {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
margin-bottom: -1px;
|
||||
padding: @padding-md;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
background-color: @white;
|
||||
&:hover {
|
||||
background-color: darken(@white, 1%);
|
||||
}
|
||||
&:active {
|
||||
background-color: darken(@white, 3%);
|
||||
}
|
||||
&--title {
|
||||
font-size: @font-size-base + 1px;
|
||||
|
||||
flex: 1;
|
||||
}
|
||||
&--content {
|
||||
flex: 1;
|
||||
|
||||
text-align: right;
|
||||
|
||||
color: fade(@black, 35%);
|
||||
}
|
||||
&--right-icon {
|
||||
margin-left: @padding-xs;
|
||||
|
||||
color: fade(@black, 50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-modal-form {
|
||||
.ant-modal-body {
|
||||
padding: 0;
|
||||
}
|
||||
.yo-form {
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5 {
|
||||
margin-top: @padding-sm;
|
||||
padding: 0 @padding-md;
|
||||
}
|
||||
.yo-form-group {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.ant-form-item {
|
||||
border-right: 0;
|
||||
border-left: 0;
|
||||
&:first-child {
|
||||
margin-top: -1px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-drawer-form {
|
||||
.ant-drawer-wrapper-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.ant-drawer-header {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
.ant-drawer-body {
|
||||
position: relative;
|
||||
|
||||
flex: 1 1 100%;
|
||||
|
||||
padding: 0;
|
||||
}
|
||||
.yo-drawer-form--body {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: @border-width-base + 20px + @padding-md * 2;
|
||||
|
||||
overflow: auto;
|
||||
|
||||
width: 100%;
|
||||
padding: @padding-lg;
|
||||
}
|
||||
.ant-drawer-footer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
|
||||
width: 100%;
|
||||
padding: 10px @padding-md;
|
||||
|
||||
text-align: right;
|
||||
|
||||
border-top: @border-width-base @border-style-base @border-color-split;
|
||||
background: @white;
|
||||
button+button {
|
||||
margin-left: @padding-xs;
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-form {
|
||||
fieldset {
|
||||
margin-bottom: @padding-lg;
|
||||
padding: @padding-md;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
}
|
||||
legend {
|
||||
display: inline-block;
|
||||
|
||||
width: auto;
|
||||
margin-bottom: 0;
|
||||
padding: 0 @padding-md;
|
||||
|
||||
border: 0;
|
||||
border-radius: @border-radius-base;
|
||||
}
|
||||
}
|
||||
.ant-form-horizontal {
|
||||
.ant-form-item-label {
|
||||
line-height: 1.5;
|
||||
|
||||
margin-right: @padding-xs;
|
||||
padding-top: @padding-sm - 2px;
|
||||
|
||||
white-space: normal;
|
||||
}
|
||||
}
|
||||
.ant-form-item-required {
|
||||
&::before {
|
||||
margin-top: -4px;
|
||||
|
||||
content: '';
|
||||
vertical-align: middle;
|
||||
|
||||
border-top: 4px solid transparent;
|
||||
border-bottom: 4px solid transparent;
|
||||
border-left: 5px solid #f5222d;
|
||||
background: none;
|
||||
}
|
||||
}
|
||||
.yo-form-page {
|
||||
.ant-form {
|
||||
.ant-radio-button-wrapper {
|
||||
margin-right: @padding-xs;
|
||||
margin-bottom: @padding-xs;
|
||||
|
||||
border-left: @border-width-base @border-style-base @normal-color;
|
||||
&:not(:first-child) {
|
||||
&::before {
|
||||
content: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-filter-item {
|
||||
display: flex;
|
||||
flex-flow: row wrap;
|
||||
|
||||
margin-bottom: 0;
|
||||
.ant-tag-checkable {
|
||||
font-size: @font-size-base;
|
||||
}
|
||||
.ant-radio-button-wrapper {
|
||||
border: 0 !important;
|
||||
background-color: transparent;
|
||||
&:hover {
|
||||
color: @red-6;
|
||||
}
|
||||
}
|
||||
.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) {
|
||||
border-color: @red-6;
|
||||
background-color: @red-6;
|
||||
&:hover {
|
||||
border-color: @red-5;
|
||||
background-color: @red-5;
|
||||
}
|
||||
&:active {
|
||||
border-color: @red-7;
|
||||
background-color: @red-7;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
60
framework/Web/src/assets/style/lib/icon-selector.less
Normal file
@@ -0,0 +1,60 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.yo-icon-selector {
|
||||
.ant-drawer-wrapper-body {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.ant-drawer-body {
|
||||
position: relative;
|
||||
|
||||
flex: 1 1 100%;
|
||||
|
||||
padding: 0;
|
||||
}
|
||||
.ant-tabs {
|
||||
height: 100%;
|
||||
.ant-tabs-left-content {
|
||||
position: relative;
|
||||
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
.ant-tabs-tabpane {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
overflow-y: auto;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: @padding-lg;
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-card {
|
||||
margin: 0;
|
||||
}
|
||||
.ant-card-grid {
|
||||
width: 25%;
|
||||
|
||||
text-align: center;
|
||||
>span {
|
||||
font-size: @font-size-sm;
|
||||
|
||||
display: block;
|
||||
|
||||
margin: @padding-xxs -@padding-lg 0;
|
||||
|
||||
white-space: nowrap;
|
||||
|
||||
color: fade(@black, 50%);
|
||||
}
|
||||
&.yo-icon--selected {
|
||||
color: @white;
|
||||
background-color: @primary-color;
|
||||
>span {
|
||||
color: fade(@white, 50%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
10
framework/Web/src/assets/style/lib/input.less
Normal file
@@ -0,0 +1,10 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
/* input前缀有2个字符的 */
|
||||
.yo-input-prefix-2 {
|
||||
.ant-input:not(:first-child) {
|
||||
padding-left: 45px;
|
||||
}
|
||||
}
|
||||
.yo-addon {
|
||||
padding: 0 @padding-xs;
|
||||
}
|
||||
47
framework/Web/src/assets/style/lib/list.less
Normal file
@@ -0,0 +1,47 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-list-bordered {
|
||||
border-color: @border-color-split;
|
||||
background-color: @white;
|
||||
}
|
||||
.yo-list {
|
||||
@title-color: lighten(@black, 70%);
|
||||
@value-color: lighten(@black, 30%);
|
||||
&-content--h {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
&--item {
|
||||
margin-left: @padding-xl;
|
||||
>span {
|
||||
line-height: 20px;
|
||||
|
||||
color: @title-color;
|
||||
}
|
||||
>p {
|
||||
line-height: 22px;
|
||||
|
||||
margin-top: @padding-xxs;
|
||||
margin-bottom: 0;
|
||||
|
||||
color: @value-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
>.ant-pagination {
|
||||
margin: @padding-md 0;
|
||||
}
|
||||
.ant-descriptions {
|
||||
.ant-descriptions-item-label {
|
||||
color: @title-color;
|
||||
}
|
||||
.ant-descriptions-item-content {
|
||||
color: @value-color;
|
||||
}
|
||||
.ant-descriptions-row {
|
||||
&:last-child {
|
||||
>td {
|
||||
padding-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
68
framework/Web/src/assets/style/lib/margin.less
Normal file
@@ -0,0 +1,68 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
@margin-padding-position: ~'', ~'-top', ~'-left', ~'-right', ~'-bottom';
|
||||
@margin-padding-position-name: ~'', ~'t', ~'l', ~'r', ~'b';
|
||||
|
||||
.margin-padding (@i) when (@i <=length(@margin-padding-position)) {
|
||||
@position: extract(@margin-padding-position, @i);
|
||||
@name: extract(@margin-padding-position-name, @i);
|
||||
|
||||
.m@{name}-xl {
|
||||
margin@{position}: @padding-xl !important;
|
||||
}
|
||||
|
||||
.m@{name}-lg {
|
||||
margin@{position}: @padding-lg !important;
|
||||
}
|
||||
|
||||
.m@{name}-md {
|
||||
margin@{position}: @padding-md !important;
|
||||
}
|
||||
|
||||
.m@{name}-sm {
|
||||
margin@{position}: @padding-sm !important;
|
||||
}
|
||||
|
||||
.m@{name}-xs {
|
||||
margin@{position}: @padding-xs !important;
|
||||
}
|
||||
|
||||
.m@{name}-xxs {
|
||||
margin@{position}: @padding-xxs !important;
|
||||
}
|
||||
|
||||
.p@{name}-xl {
|
||||
padding@{position}: @padding-xl !important;
|
||||
}
|
||||
|
||||
.p@{name}-lg {
|
||||
padding@{position}: @padding-lg !important;
|
||||
}
|
||||
|
||||
.p@{name}-md {
|
||||
padding@{position}: @padding-md !important;
|
||||
}
|
||||
|
||||
.p@{name}-sm {
|
||||
padding@{position}: @padding-sm !important;
|
||||
}
|
||||
|
||||
.p@{name}-xs {
|
||||
padding@{position}: @padding-xs !important;
|
||||
}
|
||||
|
||||
.p@{name}-xxs {
|
||||
padding@{position}: @padding-xxs !important;
|
||||
}
|
||||
|
||||
.m@{name}-none {
|
||||
margin@{position}: 0 !important;
|
||||
}
|
||||
|
||||
.p@{name}-none {
|
||||
padding@{position}: 0 !important;
|
||||
}
|
||||
|
||||
.margin-padding(@i + 1);
|
||||
}
|
||||
|
||||
.margin-padding(1);
|
||||
23
framework/Web/src/assets/style/lib/modal.less
Normal file
@@ -0,0 +1,23 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-modal-content {
|
||||
background-color: fade(@white, 90%);
|
||||
|
||||
backdrop-filter: blur(5px);
|
||||
}
|
||||
.ant-modal-header {
|
||||
padding: @padding-sm @padding-md;
|
||||
|
||||
background-color: transparent;
|
||||
}
|
||||
.ant-modal-body {
|
||||
background-color: @white;
|
||||
}
|
||||
.ant-modal-footer {
|
||||
background-color: @white;
|
||||
}
|
||||
.ant-modal-close-x {
|
||||
line-height: 46px;
|
||||
|
||||
width: 46px;
|
||||
height: 46px;
|
||||
}
|
||||
8
framework/Web/src/assets/style/lib/page.less
Normal file
@@ -0,0 +1,8 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.yo-page {
|
||||
&--header {
|
||||
padding: @padding-md 0;
|
||||
|
||||
background-color: @white;
|
||||
}
|
||||
}
|
||||
7
framework/Web/src/assets/style/lib/radio.less
Normal file
@@ -0,0 +1,7 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-radio-button-wrapper-checked {
|
||||
&:not(.ant-radio-button-wrapper-disabled),
|
||||
&:not(.ant-radio-button-wrapper-disabled):hover {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
14
framework/Web/src/assets/style/lib/scrollbar.less
Normal file
@@ -0,0 +1,14 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
::-webkit-scrollbar {
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
|
||||
background-color: lighten(@primary-color, 35%);
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
border-radius: @border-radius-base;
|
||||
background-color: fade(@primary-color, 70%);
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background-color: @primary-color;
|
||||
}
|
||||
6
framework/Web/src/assets/style/lib/select.less
Normal file
@@ -0,0 +1,6 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-select-arrow {
|
||||
.anticon-down {
|
||||
transform: scaleY(.75);
|
||||
}
|
||||
}
|
||||
166
framework/Web/src/assets/style/lib/table.less
Normal file
@@ -0,0 +1,166 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
|
||||
.yo-query-bar {
|
||||
margin-bottom: @padding-md;
|
||||
}
|
||||
|
||||
.yo-action-bar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
margin-bottom: @padding-md;
|
||||
|
||||
&--actions {
|
||||
|
||||
>.ant-btn,
|
||||
>.ant-btn-group {
|
||||
|
||||
+.ant-btn,
|
||||
+.ant-btn-group {
|
||||
margin-left: @padding-xs;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table {
|
||||
background-color: @white;
|
||||
}
|
||||
|
||||
.ant-table-small {
|
||||
>.ant-table-content {
|
||||
>.ant-table-body {
|
||||
margin: 0;
|
||||
|
||||
>table {
|
||||
>.ant-table-thead {
|
||||
>tr {
|
||||
>th {
|
||||
background-color: @table-selected-row-bg;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-thead {
|
||||
>tr {
|
||||
>th {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.yo-table {
|
||||
.border-right-none() {
|
||||
border-right-width: 0 !important;
|
||||
|
||||
&:last-child {
|
||||
border-right-width: 1px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-content {
|
||||
.ant-table-body {
|
||||
overflow-x: auto !important;
|
||||
|
||||
>table {
|
||||
>.ant-table-thead {
|
||||
>tr {
|
||||
>th {
|
||||
.border-right-none();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
>.ant-table-tbody {
|
||||
>tr {
|
||||
>td {
|
||||
.border-right-none();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-fixed-left {
|
||||
.ant-table-thead {
|
||||
>tr {
|
||||
>th {
|
||||
border-right-width: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-tbody {
|
||||
>tr {
|
||||
>td {
|
||||
border-right-width: 0 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-fixed-right {
|
||||
.ant-table-fixed {
|
||||
border-left-width: 0 !important;
|
||||
}
|
||||
|
||||
.ant-table-thead {
|
||||
>tr {
|
||||
>th {
|
||||
.border-right-none();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-tbody {
|
||||
>tr {
|
||||
>td {
|
||||
.border-right-none();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ant-table-pagination {
|
||||
float: none;
|
||||
}
|
||||
}
|
||||
|
||||
.yo-table-actions {
|
||||
display: inline-block;
|
||||
|
||||
vertical-align: middle;
|
||||
|
||||
&--inner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
height: 18px;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
.yo-table--column-setting {
|
||||
width: 240px;
|
||||
|
||||
.ant-dropdown-menu-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.anticon-pushpin {
|
||||
color: darken(@white, 40%);
|
||||
transition: @animation-duration-slow;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.yo-table--fixed {
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
}
|
||||
32
framework/Web/src/assets/style/lib/text-color.less
Normal file
@@ -0,0 +1,32 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.text-primary {
|
||||
color: @primary-color;
|
||||
}
|
||||
.text-info {
|
||||
color: @info-color;
|
||||
}
|
||||
.text-success {
|
||||
color: @success-color;
|
||||
}
|
||||
.text-processing {
|
||||
color: @processing-color;
|
||||
}
|
||||
.text-error,
|
||||
.text-danger {
|
||||
color: @error-color;
|
||||
}
|
||||
.text-highlight {
|
||||
color: @highlight-color;
|
||||
}
|
||||
.text-warning {
|
||||
color: @warning-color;
|
||||
}
|
||||
.text-normal {
|
||||
color: @normal-color;
|
||||
}
|
||||
.text-white {
|
||||
color: @white;
|
||||
}
|
||||
.text-black {
|
||||
color: @black;
|
||||
}
|
||||
72
framework/Web/src/assets/style/lib/tree-layout.less
Normal file
@@ -0,0 +1,72 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.yo-tree-layout {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.ant-layout-sider {
|
||||
background-color: @white;
|
||||
.ant-layout-header {
|
||||
height: @layout-header-height - 20px;
|
||||
|
||||
background-color: @white;
|
||||
.header-actions {
|
||||
>.ant-input-search {
|
||||
.ant-input {
|
||||
color: @black;
|
||||
background-color: @white;
|
||||
&:focus {
|
||||
background-color: fade(@black, 5%);
|
||||
}
|
||||
}
|
||||
.anticon-search {
|
||||
color: fade(@black, 45%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&--bar {
|
||||
line-height: 20px;
|
||||
|
||||
height: 20px;
|
||||
padding: 0 @padding-md;
|
||||
|
||||
text-align: right;
|
||||
>.anticon {
|
||||
cursor: pointer;
|
||||
|
||||
color: fade(@black, 50%);
|
||||
&:hover {
|
||||
color: fade(@black, 80%);
|
||||
}
|
||||
}
|
||||
}
|
||||
&--content {
|
||||
position: absolute;
|
||||
top: @layout-header-height;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
|
||||
overflow-y: auto;
|
||||
|
||||
width: 100%;
|
||||
&::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
|
||||
background-color: @white;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background-color: transparent;
|
||||
}
|
||||
&:hover::-webkit-scrollbar-thumb {
|
||||
background-color: fade(@black, 30%);
|
||||
}
|
||||
&::-webkit-scrollbar-thumb:active {
|
||||
background-color: fade(@black, 45%);
|
||||
}
|
||||
}
|
||||
}
|
||||
29
framework/Web/src/assets/style/lib/upload.less
Normal file
@@ -0,0 +1,29 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.ant-upload-list-text {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
.ant-upload-list-item {
|
||||
height: auto;
|
||||
margin-right: @padding-xs;
|
||||
}
|
||||
.ant-upload-list-item-info {
|
||||
position: relative;
|
||||
|
||||
padding: @padding-xxs @padding-xs;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
.anticon-paper-clip {
|
||||
top: 7.5px;
|
||||
}
|
||||
>span {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
.ant-upload-list-item-card-actions {
|
||||
position: relative;
|
||||
|
||||
margin-left: @padding-xs;
|
||||
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
22
framework/Web/src/assets/style/lib/visibility.less
Normal file
@@ -0,0 +1,22 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
.hide {
|
||||
visibility: hidden !important;
|
||||
}
|
||||
.hidden {
|
||||
display: none !important;
|
||||
}
|
||||
.block {
|
||||
display: block;
|
||||
}
|
||||
.inline-block {
|
||||
display: inline-block;
|
||||
}
|
||||
.inline {
|
||||
display: inline;
|
||||
}
|
||||
.inline-flex {
|
||||
display: inline-flex;
|
||||
}
|
||||
.flex {
|
||||
display: flex;
|
||||
}
|
||||
30
framework/Web/src/assets/style/lib/width-height.less
Normal file
@@ -0,0 +1,30 @@
|
||||
@import (reference) '~@/assets/style/extend.less';
|
||||
|
||||
.width-height (@i) when (@i <=20) {
|
||||
|
||||
@n : @i * 50;
|
||||
|
||||
.w-@{n} {
|
||||
width: @n * 1px !important;
|
||||
}
|
||||
|
||||
.h-@{n} {
|
||||
height: @n * 1px !important;
|
||||
}
|
||||
|
||||
.w-@{n}-p {
|
||||
width: @n * 1% !important;
|
||||
}
|
||||
|
||||
.h-@{n}-p {
|
||||
height: @n * 1% !important;
|
||||
}
|
||||
|
||||
.width-height(@i + 1);
|
||||
}
|
||||
|
||||
.width-height(0);
|
||||
|
||||
.flex-1 {
|
||||
flex: 1;
|
||||
}
|
||||
77
framework/Web/src/assets/style/login.less
Normal file
@@ -0,0 +1,77 @@
|
||||
@import (reference) './app.less';
|
||||
.yo-login {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
>img {
|
||||
display: block;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
object-fit: cover;
|
||||
}
|
||||
&::before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
content: '';
|
||||
|
||||
background: fade(@black, 30%) url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiMLJ0+w8EDIwgAgQAAgwAUdAHrAFSJ6cAAAAASUVORK5CYII=);
|
||||
}
|
||||
&--placeholder {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 0;
|
||||
.container-sm {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
|
||||
height: 0;
|
||||
}
|
||||
}
|
||||
.ant-form {
|
||||
width: 300px;
|
||||
padding: @padding-lg;
|
||||
|
||||
border-radius: @border-radius-base + 2px;
|
||||
background: linear-gradient(45deg, @white, fade(@white, 80%));
|
||||
}
|
||||
.ant-form-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
/deep/.ant-form-item-label {
|
||||
transition: @animation-duration-base;
|
||||
transform: translate(0);
|
||||
>label {
|
||||
color: fade(@black, 40%);
|
||||
}
|
||||
}
|
||||
&--label {
|
||||
/deep/.ant-form-item-label {
|
||||
transform: translate(11px, 28px);
|
||||
}
|
||||
}
|
||||
/deep/.ant-input {
|
||||
border-width: 0 0 @border-width-base 0 !important;
|
||||
border-color: fade(@black, 10%);
|
||||
background-color: transparent;
|
||||
}
|
||||
/deep/.ant-input:hover,
|
||||
/deep/.ant-input:focus {
|
||||
border-width: 0 0 @border-width-base 0 !important;
|
||||
border-color: @primary-color;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
602
framework/Web/src/assets/style/main.less
Normal file
@@ -0,0 +1,602 @@
|
||||
@import (reference) './extend.less';
|
||||
@import (reference) './lib/container.less';
|
||||
|
||||
.main(@nav-background: @layout-header-background,
|
||||
@nav-box-shadow-color: fade(@black, 25%),
|
||||
@nav-scrollbar-background: fade(@white, 30%),
|
||||
@nav-app-color: fade(@white, 35%),
|
||||
@logo-color: @white,
|
||||
@logo-box-shadow: none,
|
||||
@header-action-color: fade(@white, 60%),
|
||||
@header-action-hover-color: @white,
|
||||
@header-action-hover-background: fade(@white, 20%),
|
||||
@header-search-color: @white,
|
||||
@header-search-background: fade(@white, 15%),
|
||||
@header-search-focus-background: fade(@white, 30%),
|
||||
@header-search-icon-color: fade(@white, 60%),
|
||||
@header-search-icon-hover-color: @white,
|
||||
) {
|
||||
.yo-layout--spin {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
>div>.ant-spin {
|
||||
max-height: none;
|
||||
}
|
||||
>.ant-spin-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.ant-layout-header {
|
||||
.header-actions {
|
||||
display: flex;
|
||||
.header-action {
|
||||
display: inline-block;
|
||||
|
||||
padding: 0 @padding-md;
|
||||
|
||||
cursor: pointer;
|
||||
transition: @animation-duration-slow;
|
||||
transition-property: background-color;
|
||||
.anticon {
|
||||
font-size: @font-size-base + 6px;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
transition-property: color;
|
||||
}
|
||||
&:active {
|
||||
box-shadow: inset 1px 1px 10px rgba(0, 0, 0, .05);
|
||||
}
|
||||
}
|
||||
>.ant-input-search,
|
||||
>.ant-select-auto-complete {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
margin: 5px @padding-md;
|
||||
.ant-input {
|
||||
height: 34px;
|
||||
padding: 5px 30px 5px 11px;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
transition-property: background-color;
|
||||
|
||||
border-color: transparent;
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
.ant-select-selection {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
.user-container {
|
||||
z-index: 10;
|
||||
|
||||
width: 32px + @padding-sm * 2;
|
||||
height: @layout-header-height - 24px;
|
||||
margin: 2px 0;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
.user-container-inner {
|
||||
position: relative;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
|
||||
border-radius: @border-radius-base;
|
||||
}
|
||||
.user {
|
||||
&--base {
|
||||
line-height: @layout-header-height - 24px;
|
||||
|
||||
position: relative;
|
||||
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
|
||||
width: 100%;
|
||||
height: @layout-header-height - 24px;
|
||||
padding: 0 @padding-sm;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
}
|
||||
&--avatar {
|
||||
box-shadow: 0 0 0 2px @white;
|
||||
}
|
||||
&--name {
|
||||
font-weight: bolder;
|
||||
|
||||
position: absolute;
|
||||
left: 32px + @padding-sm * 2;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
&--dropdown {
|
||||
width: 200px;
|
||||
|
||||
transition: @animation-duration-base;
|
||||
transform: scaleY(0);
|
||||
transform-origin: top;
|
||||
|
||||
opacity: 0;
|
||||
.ant-dropdown-menu {
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.open {
|
||||
width: 200px;
|
||||
.user-container-inner {
|
||||
background-color: @white;
|
||||
box-shadow: @box-shadow-base;
|
||||
}
|
||||
.user {
|
||||
&--name {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.drop {
|
||||
.user {
|
||||
&--dropdown {
|
||||
transform: scaleY(1);
|
||||
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-layout-content {
|
||||
position: relative;
|
||||
>.yo-tab-external-mount {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
width: 100%;
|
||||
>.ant-tabs {
|
||||
z-index: 5;
|
||||
|
||||
overflow: visible;
|
||||
>.ant-tabs-bar {
|
||||
margin-bottom: 0;
|
||||
|
||||
border-bottom: 0;
|
||||
background-color: @white;
|
||||
box-shadow: 0 2px 12px fade(@black, 8%);
|
||||
&::before {
|
||||
content: none;
|
||||
}
|
||||
.ant-tabs-nav-container {
|
||||
height: 30px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.ant-tabs-tab {
|
||||
line-height: 30px;
|
||||
|
||||
height: 30px;
|
||||
margin-right: 0;
|
||||
padding: 0;
|
||||
|
||||
transition: none;
|
||||
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
&:hover {
|
||||
color: @black;
|
||||
}
|
||||
&.ant-tabs-tab-active {
|
||||
color: @white;
|
||||
border-color: darken(@primary-color, 10%);
|
||||
background-color: @primary-color;
|
||||
.ant-tabs-close-x {
|
||||
color: fade(@white, 70%);
|
||||
&:hover {
|
||||
color: @white;
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-layout-tab-subtitle {
|
||||
line-height: 1;
|
||||
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
|
||||
max-width: 150px;
|
||||
|
||||
transform: translateY(1px);
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
opacity: .75;
|
||||
}
|
||||
+.ant-tabs-tab {
|
||||
margin-left: 0;
|
||||
}
|
||||
.ant-dropdown-trigger {
|
||||
padding: 0 @padding-md * 2 0 @padding-md;
|
||||
}
|
||||
.ant-tabs-tab-unclosable {
|
||||
.ant-dropdown-trigger {
|
||||
padding: 0 @padding-lg 0 @padding-md;
|
||||
}
|
||||
}
|
||||
.ant-tabs-close-x {
|
||||
position: absolute;
|
||||
top: 9px;
|
||||
right: 9px;
|
||||
|
||||
margin: 0;
|
||||
|
||||
transition: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
>.yo-tab-external-mount-content {
|
||||
position: relative;
|
||||
|
||||
height: 100%;
|
||||
>.yo-tab-external-tabpane {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
&.yo-tab-external-tabpane-inactive {
|
||||
pointer-events: none;
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.ant-layout-sider {
|
||||
.ant-menu-inline {
|
||||
border-right: 0;
|
||||
}
|
||||
}
|
||||
.yo-nav {
|
||||
padding-top: @padding-lg;
|
||||
padding-bottom: @padding-lg;
|
||||
&--row {
|
||||
padding: 1px 0;
|
||||
|
||||
column-gap: @padding-md;
|
||||
column-count: 3;
|
||||
}
|
||||
&--col {
|
||||
break-inside: avoid;
|
||||
}
|
||||
&--sub-item {
|
||||
}
|
||||
&--item-group {
|
||||
font-size: @font-size-base;
|
||||
line-height: 1.5;
|
||||
|
||||
margin-bottom: @padding-xs;
|
||||
padding-top: @padding-xs * 2;
|
||||
|
||||
color: fade(@black, 35%);
|
||||
border: @border-width-base @border-style-base transparent;
|
||||
}
|
||||
&--item {
|
||||
font-size: @font-size-base;
|
||||
line-height: 1.5;
|
||||
|
||||
position: relative;
|
||||
|
||||
margin-bottom: @padding-xs;
|
||||
padding: @padding-xs @padding-sm;
|
||||
|
||||
cursor: pointer;
|
||||
transition: @animation-duration-fast;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
border-radius: @border-radius-base;
|
||||
background-color: @white;
|
||||
&:hover {
|
||||
color: @white;
|
||||
border-color: @primary-color;
|
||||
background-color: @primary-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-layout-sider {
|
||||
height: 100%;
|
||||
|
||||
background-color: @nav-background;
|
||||
.ant-layout-sider-children {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.logo {
|
||||
font-size: @font-size-lg * 1.5;
|
||||
font-weight: 500;
|
||||
line-height: @layout-header-height + 10px;
|
||||
|
||||
z-index: 11;
|
||||
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
flex: 0 0 @layout-header-height + 10px;
|
||||
|
||||
height: @layout-header-height + 10px;
|
||||
padding: 0 @padding-md 0 @padding-lg;
|
||||
|
||||
color: @logo-color;
|
||||
box-shadow: @logo-box-shadow;
|
||||
img {
|
||||
max-height: 100%;
|
||||
}
|
||||
span {
|
||||
margin-left: @padding-sm;
|
||||
|
||||
transition: @animation-duration-slow;
|
||||
transition-property: opacity;
|
||||
}
|
||||
}
|
||||
&.ant-layout-sider-collapsed {
|
||||
.logo {
|
||||
span {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-sider-nav {
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
|
||||
flex: 1 1 100%;
|
||||
|
||||
box-shadow: 2px 0 8px @nav-box-shadow-color;
|
||||
&--app {
|
||||
font-size: @font-size-sm;
|
||||
|
||||
margin-top: @padding-sm;
|
||||
padding: 0 @padding-md;
|
||||
|
||||
color: @nav-app-color;
|
||||
}
|
||||
}
|
||||
.swiper-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
|
||||
width: 100%;
|
||||
.swiper-scrollbar {
|
||||
transition: @animation-duration-slow;
|
||||
transition-property: opacity;
|
||||
|
||||
opacity: 0;
|
||||
}
|
||||
.swiper-scrollbar-drag {
|
||||
background-color: @nav-scrollbar-background;
|
||||
}
|
||||
&:hover {
|
||||
.swiper-scrollbar {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
.swiper-slide {
|
||||
height: auto;
|
||||
min-height: 100%;
|
||||
>.ant-spin-nested-loading {
|
||||
height: 100%;
|
||||
.ant-spin-blur {
|
||||
&::after {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-layout--left-menu,
|
||||
.yo-layout--right-menu {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
.ant-layout-header {
|
||||
line-height: @layout-header-height - 20px;
|
||||
|
||||
z-index: 6;
|
||||
|
||||
height: @layout-header-height - 20px;
|
||||
padding: 0;
|
||||
|
||||
background-color: @white;
|
||||
>section {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.header-actions {
|
||||
.header-action {
|
||||
line-height: @layout-header-height - 16px;
|
||||
|
||||
height: @layout-header-height - 20px;
|
||||
.anticon {
|
||||
color: fade(@black, 35%);
|
||||
}
|
||||
&:hover {
|
||||
background-color: fade(@black, 5%);
|
||||
.anticon {
|
||||
color: @icon-color-hover;
|
||||
}
|
||||
}
|
||||
}
|
||||
>.ant-input-search,
|
||||
>.ant-select-auto-complete {
|
||||
.ant-input {
|
||||
&:focus {
|
||||
background-color: fade(@black, 5%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.layout-sider {
|
||||
}
|
||||
>section {
|
||||
>.ant-layout-sider {
|
||||
.yo-layout-sider();
|
||||
}
|
||||
}
|
||||
}
|
||||
.yo-layout--top-nav {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
width: 100%;
|
||||
min-width: @container-width;
|
||||
height: 100%;
|
||||
|
||||
@layout-header-height: 54px;
|
||||
.ant-layout-header {
|
||||
line-height: @layout-header-height;
|
||||
|
||||
z-index: 11;
|
||||
|
||||
flex: 0 0 @layout-header-height;
|
||||
|
||||
height: @layout-header-height;
|
||||
padding: 0;
|
||||
|
||||
background-color: @nav-background;
|
||||
section {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
height: 100%;
|
||||
}
|
||||
.header-actions {
|
||||
.header-action {
|
||||
.anticon {
|
||||
color: @header-action-color;
|
||||
}
|
||||
&:hover {
|
||||
background-color: @header-action-hover-background;
|
||||
.anticon {
|
||||
color: @header-action-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
>.ant-input-search,
|
||||
>.ant-select-auto-complete {
|
||||
.ant-input {
|
||||
color: @header-search-color;
|
||||
background-color: @header-search-background;
|
||||
&:focus {
|
||||
background-color: @header-search-focus-background;
|
||||
}
|
||||
}
|
||||
.anticon-search {
|
||||
color: @header-search-icon-color;
|
||||
&:hover {
|
||||
color: @header-search-icon-hover-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.user-container {
|
||||
margin: (@layout-header-height - 40px) / 2 0;
|
||||
}
|
||||
.logo {
|
||||
font-size: @font-size-lg * 1.5;
|
||||
font-weight: 500;
|
||||
line-height: @layout-header-height - 10px;
|
||||
|
||||
display: flex;
|
||||
overflow: hidden;
|
||||
align-items: center;
|
||||
|
||||
height: @layout-header-height 10px;
|
||||
margin: 5px @padding-lg 5px 0;
|
||||
|
||||
color: @logo-color;
|
||||
img {
|
||||
max-height: 100%;
|
||||
}
|
||||
span {
|
||||
margin-left: @padding-sm;
|
||||
}
|
||||
}
|
||||
.ant-menu-horizontal {
|
||||
line-height: @layout-header-height;
|
||||
|
||||
border-bottom: 0;
|
||||
>.ant-menu-submenu {
|
||||
top: 0;
|
||||
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
.header-actions {
|
||||
.header-action {
|
||||
line-height: @layout-header-height - 16px;
|
||||
|
||||
margin: 10px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
&--container {
|
||||
.ant-layout-header {
|
||||
.ant-menu-horizontal {
|
||||
width: 400px;
|
||||
}
|
||||
}
|
||||
.ant-layout-content {
|
||||
.yo-tab-external-mount {
|
||||
>.ant-tabs {
|
||||
>.ant-tabs-bar {
|
||||
.ant-tabs-nav-container {
|
||||
width: @container-width - @padding-md * 2;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
&--container-fluid {
|
||||
.ant-layout-header {
|
||||
.ant-menu-horizontal {
|
||||
width: 800px;
|
||||
}
|
||||
@media (max-width: 1400px) {
|
||||
.ant-menu-horizontal {
|
||||
width: 600px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
32
framework/Web/src/assets/style/public.less
Normal file
@@ -0,0 +1,32 @@
|
||||
@import (reference) './extend.less';
|
||||
.yo-map {
|
||||
&-container {
|
||||
position: relative;
|
||||
|
||||
padding: @padding-sm;
|
||||
|
||||
border: @border-width-base @border-style-base @border-color-split;
|
||||
border-radius: @border-radius-base;
|
||||
background-color: @white;
|
||||
.amap-icon {
|
||||
img {
|
||||
width: 25px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&--search {
|
||||
position: absolute;
|
||||
top: @padding-md;
|
||||
left: @padding-md;
|
||||
z-index: 20;
|
||||
|
||||
width: 25%;
|
||||
min-width: 300px;
|
||||
padding: @padding-xxs @padding-sm;
|
||||
|
||||
background: fade(@black, 20%);
|
||||
box-shadow: @box-shadow-base;
|
||||
|
||||
backdrop-filter: blur(5px);
|
||||
}
|
||||
}
|
||||
1
framework/Web/src/assets/style/theme/README.md
Normal file
@@ -0,0 +1 @@
|
||||
/** 在此文件夹中添加控制主题颜色的less文件 **/
|
||||
4
framework/Web/src/assets/style/theme/primary.less
Normal file
@@ -0,0 +1,4 @@
|
||||
@import '~@/assets/style/app.less';
|
||||
@primary-color: #007bff;
|
||||
@font-size-base: 13px;
|
||||
@border-radius-base: 0;
|
||||
186
framework/Web/src/common/api/index.js
Normal file
@@ -0,0 +1,186 @@
|
||||
/**
|
||||
* api
|
||||
* v1.2
|
||||
*/
|
||||
|
||||
import axios from 'axios'
|
||||
import { token } from '@/common/token'
|
||||
import status from './status'
|
||||
const STATUS = status
|
||||
import app from '@/main'
|
||||
|
||||
axios.defaults.baseURL = '/api'
|
||||
|
||||
/**
|
||||
* 最终直接根据url名称调用接口方法
|
||||
* 例如
|
||||
* import { api } from '@/api'
|
||||
* api.getItemGroupType(parmas).then(...)
|
||||
*/
|
||||
import urls from './requests'
|
||||
import { settings } from 'nprogress'
|
||||
|
||||
const initInstance = (options) => {
|
||||
const instance = axios
|
||||
.create({
|
||||
headers: {
|
||||
Authorization: 'Bearer ' + token.value
|
||||
},
|
||||
...options
|
||||
})
|
||||
|
||||
instance.interceptors.response.use((res) => {
|
||||
if (res.data.status === STATUS.Unauthorized) {
|
||||
handlerUnauthorized()
|
||||
}
|
||||
return res
|
||||
}, (err) => {
|
||||
return Promise.reject(err)
|
||||
})
|
||||
return instance
|
||||
}
|
||||
|
||||
const errerCodes = [STATUS.BadRequest, STATUS.InternalServerError, STATUS.Forbidden]
|
||||
|
||||
const errorNotification = ({ code, message }) => {
|
||||
switch (message.constructor) {
|
||||
case Array:
|
||||
message.map(p => {
|
||||
setTimeout(() => {
|
||||
app.$notification.error({
|
||||
duration: 30,
|
||||
message: p.field,
|
||||
description: p.messages.join('/'),
|
||||
})
|
||||
})
|
||||
})
|
||||
break
|
||||
default:
|
||||
app.$notification.error({
|
||||
duration: 30,
|
||||
message: code || '错误',
|
||||
description: message,
|
||||
})
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
const handlerUnauthorized = () => {
|
||||
token.value = ''
|
||||
app.$router.replace({
|
||||
path: '/login'
|
||||
}).catch(() => { })
|
||||
}
|
||||
|
||||
const api = {}
|
||||
|
||||
for (let key in urls) {
|
||||
|
||||
const item = urls[key]
|
||||
let url = '',
|
||||
method = 'get',
|
||||
options = {}
|
||||
if (item.constructor === String) {
|
||||
url = item
|
||||
} else if (item.constructor === Array) {
|
||||
url = item[0]
|
||||
if (item[1]) {
|
||||
method = item[1].toLowerCase()
|
||||
}
|
||||
if (item[2]) {
|
||||
options = item[2]
|
||||
}
|
||||
} else if (item.constructor === Object) {
|
||||
url = item.url
|
||||
if (item.method) {
|
||||
method = item.method.toLowerCase()
|
||||
}
|
||||
}
|
||||
|
||||
api[`${key}Await`] = function (params = {}) {
|
||||
if (method === 'post') {
|
||||
return initInstance(options).post(url, params)
|
||||
} else {
|
||||
let _params = [],
|
||||
_url = url
|
||||
Object.keys(params).forEach(key => {
|
||||
const value = params[key]
|
||||
if (value) {
|
||||
switch (value.constructor) {
|
||||
case Array:
|
||||
_params.push(...value.map(p => `${key}=${p}`))
|
||||
break
|
||||
default:
|
||||
_params.push(`${key}=${value}`)
|
||||
break
|
||||
}
|
||||
}
|
||||
})
|
||||
if (_params.length) {
|
||||
_url += '?' + _params.join('&')
|
||||
}
|
||||
return initInstance(options).get(_url)
|
||||
}
|
||||
}
|
||||
|
||||
api[key] = function (params = {}) {
|
||||
return new Promise((reslove, reject) => {
|
||||
api[`${key}Await`](params)
|
||||
.then((res) => {
|
||||
const { data } = res
|
||||
if (errerCodes.indexOf(data.code) >= 0) {
|
||||
errorNotification(data)
|
||||
reject([ArrayBuffer, Blob].indexOf(data.constructor) > -1 ? res : data)
|
||||
} else if (data.code === STATUS.Unauthorized) {
|
||||
handlerUnauthorized()
|
||||
} else {
|
||||
reslove([ArrayBuffer, Blob].indexOf(data.constructor) > -1 ? res : data)
|
||||
}
|
||||
})
|
||||
.catch(({ response }) => {
|
||||
if (process.env.VUE_APP_NODE_ENV === 'development') {
|
||||
const { data, status } = response
|
||||
if (data.constructor === String) {
|
||||
errorNotification({
|
||||
message: data,
|
||||
code: status
|
||||
})
|
||||
} else {
|
||||
errorNotification(data)
|
||||
}
|
||||
if (data.code === STATUS.Unauthorized) {
|
||||
handlerUnauthorized()
|
||||
}
|
||||
reject(data)
|
||||
} else {
|
||||
errorNotification({
|
||||
message: '系统发生错误,请联系管理员'
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
api[key].url = axios.defaults.baseURL + url
|
||||
api[key].key = key
|
||||
}
|
||||
|
||||
/**
|
||||
* 并发请求,与axios.all方式相同
|
||||
* 但是使用的接口函数为this.$api.[接口名]E
|
||||
*/
|
||||
api.$queue = function (queue) {
|
||||
return new Promise((reslove) => {
|
||||
axios.all(queue).then((results) => {
|
||||
const res = results.map(p => p.data)
|
||||
reslove(res)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export {
|
||||
axios,
|
||||
urls,
|
||||
api,
|
||||
STATUS
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export default {
|
||||
houseCodeAdd: ['/houseCode/add', 'post'],
|
||||
houseCodeEdit: ['/houseCode/edit', 'post'],
|
||||
houseCodePage: ['/houseCode/page', 'post'],
|
||||
houseCodeNo: '/houseCode/getNextNoByCode',
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export default {
|
||||
houseInfoGetByTaskId: ['/houseInfo/getByTaskId', 'get'],
|
||||
houseInfoSave: ['houseInfo/save', 'post'],
|
||||
houseInfoSubmitToCheck: ['/houseInfo/submitToCheck', 'post']
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
export default {
|
||||
houseMemberPage: ['/houseMember/page', 'post'],
|
||||
houseMemberAdd: ['/houseMember/add', 'post'],
|
||||
houseMemberEdit: ['/houseMember/edit', 'post'],
|
||||
houseMemberDelete: ['/houseMember/delete', 'post'],
|
||||
houseMemberOwnRole: ['/houseMember/ownRole', 'get'],
|
||||
houseMemberOwnData: ['/houseMember/ownData', 'get'],
|
||||
houseMemberGrantData: ['/houseMember/grantData', 'post'],
|
||||
houseMemberChangeStatus: ['/houseMember/changeStatus', 'post'],
|
||||
houseMemberDefaultRole: ['/houseMember/defaultRole', 'get'],
|
||||
houseMemberDefaultRoleList: ['/houseMember/defaultRoleRange', 'get']
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
export default {
|
||||
getHouseProjectPage: ['/houseProjectInfo/page', 'post'],
|
||||
houseProejctAdd: ['/houseProjectInfo/add', 'post'],
|
||||
houseProejctEdit: ['/houseProjectInfo/edit', 'post'],
|
||||
houseProejctDelete: ['/houseProjectInfo/delete', 'post'],
|
||||
houseProejctDetail: ['/houseProjectInfo/detail', 'get'],
|
||||
houseProjectNextSort: ['/houseProjectInfo/nextSort', 'get'],
|
||||
houseProjectList: ['houseProjectInfo/list', 'get']
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export default {
|
||||
houseSelect: ['/houseSelector/select', 'post'],
|
||||
houseSelectRevoke: ['/houseSelector/revoke', 'post'],
|
||||
houseSelectorPage: ['/houseSelector/selectorPage', 'post'],
|
||||
houseSelectedPage: ['/houseSelector/selectedPage', 'post'],
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export default {
|
||||
houseTaskPage: ['/houseTask/page', 'post'],
|
||||
houseTaskEdit: ['/houseTask/edit', 'post'],
|
||||
houseTaskSubmit: ['/houseTask/submit', 'post']
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
export default {
|
||||
houseZoneList: '/houseZone/list',
|
||||
houseZoneAutoIncrement: '/houseZone/autoIncrement',
|
||||
houseZoneAdd: ['/houseZone/add', 'post']
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import houseProjectInfo from './houseProjectInfo'
|
||||
import houseZone from './houseZone'
|
||||
import houseCode from './houseCode'
|
||||
import houseMember from './houseMember'
|
||||
import houseSelector from './houseSelector'
|
||||
import houseTask from './houseTask'
|
||||
import houseInfo from './houseInfo'
|
||||
|
||||
export default {
|
||||
...houseProjectInfo,
|
||||
...houseZone,
|
||||
...houseCode,
|
||||
...houseMember,
|
||||
...houseSelector,
|
||||
...houseTask,
|
||||
...houseInfo
|
||||
}
|
||||
5
framework/Web/src/common/api/requests/business/index.js
Normal file
@@ -0,0 +1,5 @@
|
||||
import houseSafety from './houseSafety'
|
||||
|
||||
export default {
|
||||
...houseSafety,
|
||||
}
|
||||
20
framework/Web/src/common/api/requests/index.js
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* 接口的3种配置方式
|
||||
* 1.string
|
||||
* 如login: '/login'\
|
||||
* 将会默认已POST方式请求接口/login
|
||||
* 2.array
|
||||
* 如login: ['/login', 'post']
|
||||
* 数组[0]必填,为接口地址,[1]选填,为请求方式(不区分大小写),默认为POST
|
||||
* 3.object
|
||||
* 如login: { url: '/login', method: 'post' }
|
||||
* [url]必填,为接口地址,[method]选填,为请求方式(不区分大小写),默认为POST
|
||||
*/
|
||||
|
||||
import sys from './sys'
|
||||
import business from './business'
|
||||
|
||||
export default {
|
||||
...sys,
|
||||
...business
|
||||
}
|
||||
34
framework/Web/src/common/api/requests/sys/appManage.js
Normal file
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
/**
|
||||
* 系统应用列表
|
||||
*/
|
||||
getAppPage: ['/sysApp/page', 'post'],
|
||||
/**
|
||||
* 系统应用列表
|
||||
*/
|
||||
getAppList: ['/sysApp/list', 'get'],
|
||||
/**
|
||||
* 新增系统应用
|
||||
*/
|
||||
sysAppAdd: ['/sysApp/add', 'post'],
|
||||
/**
|
||||
* 编辑系统应用
|
||||
*
|
||||
*/
|
||||
sysAppEdit: ['/sysApp/edit', 'post'],
|
||||
/**
|
||||
* 删除系统应用
|
||||
*/
|
||||
sysAppDelete: ['/sysApp/delete', 'post'],
|
||||
/**
|
||||
* 设为默认应用
|
||||
*/
|
||||
sysAppSetAsDefault: ['/sysApp/setAsDefault', 'post'],
|
||||
/**
|
||||
* 修改应用状态
|
||||
*/
|
||||
sysAppChangeStatus: ['/sysApp/changeStatus', 'post'],
|
||||
}
|
||||
|
||||
|
||||
|
||||
7
framework/Web/src/common/api/requests/sys/areaManage.js
Normal file
@@ -0,0 +1,7 @@
|
||||
export default {
|
||||
getAreaTree: ['/sysArea/tree', 'get'],
|
||||
sysAreaPage: ['/sysArea/page', 'post'],
|
||||
sysAreaAdd: ['/sysArea/add', 'post'],
|
||||
sysAreaEdit: ['/sysArea/edit', 'post'],
|
||||
sysAreaDelete: ['/sysArea/delete', 'post'],
|
||||
}
|
||||
26
framework/Web/src/common/api/requests/sys/configManage.js
Normal file
@@ -0,0 +1,26 @@
|
||||
export default {
|
||||
/**
|
||||
* 分页查询配置列表
|
||||
*/
|
||||
sysConfigPage: ['/sysConfig/page', 'post'],
|
||||
/**
|
||||
* 添加系统参数配置
|
||||
*/
|
||||
sysConfigAdd: ['/sysConfig/add', 'post'],
|
||||
/**
|
||||
* 编辑系统参数配置
|
||||
*/
|
||||
sysConfigEdit: ['/sysConfig/edit', 'post'],
|
||||
/**
|
||||
* 删除系统参数配置
|
||||
*/
|
||||
sysConfigDelete: ['/sysConfig/delete', 'post'],
|
||||
/**
|
||||
* 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}]
|
||||
*/
|
||||
sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'],
|
||||
/**
|
||||
* 获取系统的所有任务列表
|
||||
*/
|
||||
sysTimersGetActionClasses: ['/sysTimers/getActionClasses', 'get'],
|
||||
}
|
||||
22
framework/Web/src/common/api/requests/sys/dictDataManage.js
Normal file
@@ -0,0 +1,22 @@
|
||||
export default {
|
||||
/**
|
||||
* 查询系统字典值
|
||||
*/
|
||||
sysDictDataPage: ['/sysDictData/page', 'post'],
|
||||
/**
|
||||
* 添加系统字典值
|
||||
*/
|
||||
sysDictDataAdd: ['/sysDictData/add', 'post'],
|
||||
/**
|
||||
* 编辑系统字典值
|
||||
*/
|
||||
sysDictDataEdit: ['/sysDictData/edit', 'post'],
|
||||
/**
|
||||
* 删除系统字典值
|
||||
*/
|
||||
sysDictDataDelete: ['/sysDictData/delete', 'post'],
|
||||
/**
|
||||
* 批量删除系统字典值
|
||||
*/
|
||||
sysDictDataDeleteBatch: ['/sysDictData/deleteBatch', 'post'],
|
||||
}
|
||||
30
framework/Web/src/common/api/requests/sys/dictManage.js
Normal file
@@ -0,0 +1,30 @@
|
||||
export default {
|
||||
/**
|
||||
* 分页查询系统字典类型
|
||||
*/
|
||||
sysDictTypePage: ['/sysDictType/page', 'post'],
|
||||
/**
|
||||
* 添加系统字典类型
|
||||
*/
|
||||
sysDictTypeAdd: ['/sysDictType/add', 'post'],
|
||||
/**
|
||||
* 编辑系统字典类型
|
||||
*/
|
||||
sysDictTypeEdit: ['/sysDictType/edit', 'post'],
|
||||
/**
|
||||
* 删除系统字典类型
|
||||
*/
|
||||
sysDictTypeDelete: ['/sysDictType/delete', 'post'],
|
||||
/**
|
||||
* 获取字典类型下所有字典,举例,返回格式为:[{code:"M",value:"男"},{code:"F",value:"女"}]
|
||||
*/
|
||||
sysDictTypeDropDown: ['/sysDictType/dropDown', 'get'],
|
||||
/**
|
||||
* 获取字典类型下所有的字典,可批量获取
|
||||
*/
|
||||
sysDictTypeDropDowns: ['/sysDictType/dropDowns', 'get'],
|
||||
/**
|
||||
* 获取所有字典树
|
||||
*/
|
||||
sysDictTypeTree: ['/sysDictType/tree', 'get'],
|
||||
}
|
||||
10
framework/Web/src/common/api/requests/sys/emailManage.js
Normal file
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
/**
|
||||
* 发送邮件
|
||||
*/
|
||||
emailSendEmail: ['/email/sendEmail', 'post'],
|
||||
/**
|
||||
* 发送html邮件
|
||||
*/
|
||||
emailSendEmailHtml: ['/email/sendEmailHtml', 'post'],
|
||||
}
|
||||
36
framework/Web/src/common/api/requests/sys/fileManage.js
Normal file
@@ -0,0 +1,36 @@
|
||||
export default {
|
||||
/**
|
||||
* 分页查询文件信息表
|
||||
*/
|
||||
sysFileInfoPage: ['/sysFileInfo/page', 'post'],
|
||||
/**
|
||||
* 获取全部文件信息表
|
||||
*/
|
||||
sysFileInfoList: ['/sysFileInfo/list', 'get'],
|
||||
/**
|
||||
* 上传文件
|
||||
*/
|
||||
sysFileInfoUpload: ['/sysFileInfo/upload', 'post'],
|
||||
/**
|
||||
* 下载文件
|
||||
*/
|
||||
sysFileInfoDownload: ['/sysFileInfo/download', 'get', {
|
||||
responseType: 'blob'
|
||||
}],
|
||||
|
||||
/**
|
||||
* 查看图片
|
||||
*/
|
||||
sysFileInfoPreview: ['/sysFileInfo/preview', 'get', {
|
||||
responseType: 'arraybuffer'
|
||||
}],
|
||||
|
||||
/**
|
||||
* 查看详情文件信息表
|
||||
*/
|
||||
sysFileInfoDetail: ['/sysFileInfo/detail', 'get'],
|
||||
/**
|
||||
* 删除文件信息表
|
||||
*/
|
||||
sysFileInfoDelete: ['/sysFileInfo/delete', 'post'],
|
||||
}
|
||||
43
framework/Web/src/common/api/requests/sys/index.js
Normal file
@@ -0,0 +1,43 @@
|
||||
import appManage from './appManage'
|
||||
import configManage from './configManage'
|
||||
import dictDataManage from './dictDataManage'
|
||||
import dictManage from './dictManage'
|
||||
import emailManage from './emailManage'
|
||||
import fileManage from './fileManage'
|
||||
import loginManage from './loginManage'
|
||||
import logManage from './logManage'
|
||||
import machineManage from './machineManage'
|
||||
import menuManage from './menuManage'
|
||||
import noticeManage from './noticeManage'
|
||||
import onlineUserManage from './onlineUserManage'
|
||||
import orgManage from './orgManage'
|
||||
import posManage from './posManage'
|
||||
import roleManage from './roleManage'
|
||||
import smsManage from './smsManage'
|
||||
import tenantManage from './tenantManage'
|
||||
import timersManage from './timersManage'
|
||||
import userManage from './userManage'
|
||||
import areaManage from './areaManage'
|
||||
|
||||
export default {
|
||||
...appManage,
|
||||
...configManage,
|
||||
...dictDataManage,
|
||||
...dictManage,
|
||||
...emailManage,
|
||||
...fileManage,
|
||||
...loginManage,
|
||||
...logManage,
|
||||
...machineManage,
|
||||
...menuManage,
|
||||
...noticeManage,
|
||||
...onlineUserManage,
|
||||
...orgManage,
|
||||
...posManage,
|
||||
...roleManage,
|
||||
...smsManage,
|
||||
...tenantManage,
|
||||
...timersManage,
|
||||
...userManage,
|
||||
...areaManage,
|
||||
}
|
||||
23
framework/Web/src/common/api/requests/sys/logManage.js
Normal file
@@ -0,0 +1,23 @@
|
||||
export default {
|
||||
|
||||
/**
|
||||
* 查询访问日志
|
||||
*/
|
||||
sysVisLogPage: ['/sysVisLog/page', 'post'],
|
||||
|
||||
/**
|
||||
* 查询操作日志
|
||||
*/
|
||||
sysOpLogPage: ['/sysOpLog/page', 'post'],
|
||||
|
||||
/**
|
||||
* 清空访问日志
|
||||
*/
|
||||
sysVisLogDelete: ['/sysVisLog/delete', 'post'],
|
||||
|
||||
/**
|
||||
* 清空登录日志
|
||||
*/
|
||||
sysOpLogDelete: ['/sysOpLog/delete', 'post'],
|
||||
|
||||
}
|
||||
34
framework/Web/src/common/api/requests/sys/loginManage.js
Normal file
@@ -0,0 +1,34 @@
|
||||
export default {
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
login: ['/login', 'post'],
|
||||
/**
|
||||
* 登出
|
||||
*/
|
||||
logout: ['/logout', 'post'],
|
||||
/**
|
||||
* 获取登录用户信息
|
||||
*/
|
||||
getLoginUser: ['/getLoginUser', 'get'],
|
||||
/**
|
||||
* 获取租户开关
|
||||
*/
|
||||
getTenantOpen: ['/getTenantOpen', 'get'],
|
||||
/**
|
||||
* 获取短信验证码
|
||||
*/
|
||||
getSmsCaptcha: ['/getSmsCaptcha', 'get'],
|
||||
/**
|
||||
* 获取验证码开关
|
||||
*/
|
||||
getCaptchaOpen: ['/getCaptchaOpen', 'get'],
|
||||
/**
|
||||
* 获取验证图片 以及token
|
||||
*/
|
||||
reqGet: ['/captcha/get', 'post'],
|
||||
/**
|
||||
* 滑动或者点选验证
|
||||
*/
|
||||
reqCheck: ['/captcha/check', 'post'],
|
||||
}
|
||||
10
framework/Web/src/common/api/requests/sys/machineManage.js
Normal file
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
/**
|
||||
*
|
||||
* 系统属性监控
|
||||
*
|
||||
*/
|
||||
sysMachineUse:['/sysMachine/use','get'],
|
||||
sysMachineBase:['/sysMachine/base','get'],
|
||||
sysMachineNetwork:['/sysMachine/network','get']
|
||||
}
|
||||
66
framework/Web/src/common/api/requests/sys/menuManage.js
Normal file
@@ -0,0 +1,66 @@
|
||||
export default {
|
||||
/**
|
||||
* 获取菜单列表
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @param parameter
|
||||
* @returns {*}
|
||||
*/
|
||||
getMenuList:['/sysMenu/list','get'],
|
||||
|
||||
/**
|
||||
* 获取系统菜单树,用于新增,编辑时选择上级节点
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/4/23 12:22
|
||||
*/
|
||||
getMenuTree:['/sysMenu/tree','get'],
|
||||
|
||||
/**
|
||||
* 增加菜单
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/4/24 23:23
|
||||
*/
|
||||
sysMenuAdd:['/sysMenu/add','post'],
|
||||
|
||||
/**
|
||||
* 增加菜单
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/4/24 23:23
|
||||
*/
|
||||
sysMenuDelete:['/sysMenu/delete','post'],
|
||||
|
||||
/**
|
||||
* 查看菜单详情
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/4/25 01:11
|
||||
*/
|
||||
sysMenuDetail:['/sysMenu/detail','post'],
|
||||
|
||||
/**
|
||||
* 编辑系统菜单
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/4/25 01:11
|
||||
*/
|
||||
sysMenuEdit:['/sysMenu/edit','post'],
|
||||
|
||||
/**
|
||||
* 获取系统菜单树,用于给角色授权时选择
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/6/2 17:30
|
||||
*/
|
||||
SysMenuTreeForGrant:['/sysMenu/treeForGrant','get'],
|
||||
/**
|
||||
* 根据系统切换菜单
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2020/6/28 15:25
|
||||
*/
|
||||
sysMenuChange:['/sysMenu/change','post'],
|
||||
|
||||
}
|
||||
38
framework/Web/src/common/api/requests/sys/noticeManage.js
Normal file
@@ -0,0 +1,38 @@
|
||||
export default {
|
||||
/**
|
||||
* 查询系统通知公告
|
||||
*/
|
||||
sysNoticePage: ['/sysNotice/page', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 添加系统通知公告
|
||||
*/
|
||||
sysNoticeAdd: ['/sysNotice/add', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 编辑系统通知公告
|
||||
*/
|
||||
sysNoticeEdit: ['/sysNotice/edit', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 删除系统通知公告
|
||||
*/
|
||||
sysNoticeDelete: ['/sysNotice/delete', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 通知公告详情
|
||||
*/
|
||||
sysNoticeDetail: ['/sysNotice/detail', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
sysNoticeChangeStatus: ['/sysNotice/changeStatus', 'post'],
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
export default {
|
||||
/**
|
||||
* 查询我收到的系统通知公告
|
||||
*/
|
||||
sysNoticeReceived:['/sysNotice/received','get'],
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
export default{
|
||||
/**
|
||||
* 在线用户列表
|
||||
*/
|
||||
sysOnlineUserList:['/sysOnlineUser/list','get'],
|
||||
|
||||
/**
|
||||
* 强制下线
|
||||
*/
|
||||
sysOnlineUserForceExist:['/sysOnlineUser/forceExist','post'],
|
||||
|
||||
}
|
||||
38
framework/Web/src/common/api/requests/sys/orgManage.js
Normal file
@@ -0,0 +1,38 @@
|
||||
export default {
|
||||
/**
|
||||
* 获取机构树
|
||||
*
|
||||
*/
|
||||
getOrgTree: ['/sysOrg/tree', 'get'],
|
||||
|
||||
/**
|
||||
* 获取机构列表
|
||||
*
|
||||
*/
|
||||
getOrgList: ['/sysOrg/list', 'get'],
|
||||
|
||||
/**
|
||||
* 获取机构列表
|
||||
*
|
||||
*/
|
||||
getOrgPage: ['/sysOrg/page', 'post'],
|
||||
|
||||
/**
|
||||
* 新增机构
|
||||
*
|
||||
*/
|
||||
sysOrgAdd: ['/sysOrg/add', 'post'],
|
||||
|
||||
/**
|
||||
* 编辑机构
|
||||
*
|
||||
*/
|
||||
sysOrgEdit: ['/sysOrg/edit', 'post'],
|
||||
|
||||
/**
|
||||
* 删除机构
|
||||
*
|
||||
*/
|
||||
sysOrgDelete: ['/sysOrg/delete', 'post'],
|
||||
|
||||
}
|
||||
32
framework/Web/src/common/api/requests/sys/posManage.js
Normal file
@@ -0,0 +1,32 @@
|
||||
export default {
|
||||
/**
|
||||
* 查询系统职位
|
||||
*
|
||||
*/
|
||||
sysPosPage: ['/sysPos/page', 'post'],
|
||||
|
||||
/**
|
||||
* 系统职位列表
|
||||
*
|
||||
*/
|
||||
sysPosList: ['/sysPos/list', 'get'],
|
||||
|
||||
/**
|
||||
* 添加系统职位
|
||||
*
|
||||
*/
|
||||
sysPosAdd: ['/sysPos/add', 'post'],
|
||||
|
||||
/**
|
||||
* 编辑系统职位
|
||||
*
|
||||
*/
|
||||
sysPosEdit: ['/sysPos/edit', 'post'],
|
||||
|
||||
/**
|
||||
* 删除系统职位
|
||||
*
|
||||
*/
|
||||
sysPosDelete: ['/sysPos/delete', 'post'],
|
||||
|
||||
}
|
||||
62
framework/Web/src/common/api/requests/sys/roleManage.js
Normal file
@@ -0,0 +1,62 @@
|
||||
export default {
|
||||
/**
|
||||
* 获取角色列表
|
||||
*/
|
||||
getRolePage: ['/sysRole/page', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 增加角色
|
||||
*/
|
||||
sysRoleAdd: ['/sysRole/add', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 编辑角色
|
||||
*/
|
||||
sysRoleEdit: ['/sysRole/edit', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
*/
|
||||
sysRoleDelete: ['/sysRole/delete', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 删除角色
|
||||
*/
|
||||
sysRoleDeteil: ['/sysRole/detail', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 获取授权角色列表
|
||||
*/
|
||||
sysRoleDropDown: ['/sysRole/dropDown', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 拥有菜单
|
||||
*/
|
||||
sysRoleOwnMenu: ['/sysRole/ownMenu', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 授权菜单
|
||||
*/
|
||||
sysRoleGrantMenu: ['/sysRole/grantMenu', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 拥有数据
|
||||
*/
|
||||
sysRoleOwnData: ['/sysRole/ownData', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 授权数据
|
||||
*/
|
||||
sysRoleGrantData: ['/sysRole/grantData', 'post'],
|
||||
|
||||
|
||||
}
|
||||
17
framework/Web/src/common/api/requests/sys/smsManage.js
Normal file
@@ -0,0 +1,17 @@
|
||||
export default {
|
||||
/**
|
||||
* 发送记录查询
|
||||
*/
|
||||
smsPage: ['/sms/page', 'get'],
|
||||
|
||||
/**
|
||||
* 验证短信验证码
|
||||
*/
|
||||
sysSendLoginMessage: ['/sms/sendLoginMessage', 'post'],
|
||||
|
||||
/**
|
||||
* 验证短信验证码
|
||||
*/
|
||||
sysValidateMessage: ['/sms/validateMessage', 'post'],
|
||||
|
||||
}
|
||||
26
framework/Web/src/common/api/requests/sys/tenantManage.js
Normal file
@@ -0,0 +1,26 @@
|
||||
export default {
|
||||
/**
|
||||
* 租户列表
|
||||
*
|
||||
*/
|
||||
sysTenantPage: ['/sysTenant/page', 'post'],
|
||||
|
||||
/**
|
||||
* 新增租户
|
||||
*
|
||||
*/
|
||||
sysTenantAdd: ['/sysTenant/add', 'post'],
|
||||
|
||||
/**
|
||||
* 删除租户
|
||||
*
|
||||
*/
|
||||
sysTenantDelete: ['/sysTenant/delete', 'post'],
|
||||
|
||||
/**
|
||||
* 编辑租户
|
||||
*
|
||||
*/
|
||||
sysTenantEdit: ['/sysTenant/edit', 'post'],
|
||||
|
||||
}
|
||||
56
framework/Web/src/common/api/requests/sys/timersManage.js
Normal file
@@ -0,0 +1,56 @@
|
||||
export default {
|
||||
/**
|
||||
* 分页查询定时任务
|
||||
*/
|
||||
sysTimersPage: ['/sysTimers/page', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 获取全部定时任务
|
||||
*/
|
||||
sysTimersList: ['/sysTimers/list', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 查看详情定时任务
|
||||
*/
|
||||
sysTimersDetail: ['/sysTimers/detail', 'get'],
|
||||
|
||||
|
||||
/**
|
||||
* 添加定时任务
|
||||
*/
|
||||
sysTimersAdd: ['/sysTimers/add', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 删除定时任务
|
||||
*/
|
||||
sysTimersDelete: ['/sysTimers/delete', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 编辑定时任务
|
||||
*/
|
||||
sysTimersEdit: ['/sysTimers/edit', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 获取系统的所有任务列表
|
||||
*/
|
||||
sysTimersGetActionClasses: ['/sysTimers/getActionClasses', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 启动定时任务
|
||||
*/
|
||||
sysTimersStart: ['/sysTimers/start', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 停止定时任务
|
||||
*/
|
||||
sysTimersStop: ['/sysTimers/stop', 'post'],
|
||||
|
||||
|
||||
}
|
||||
88
framework/Web/src/common/api/requests/sys/userManage.js
Normal file
@@ -0,0 +1,88 @@
|
||||
export default {
|
||||
/**
|
||||
* 获取用户列表
|
||||
*/
|
||||
getUserPage: ['/sysUser/page', 'post'],
|
||||
|
||||
/**
|
||||
* 增加用户
|
||||
*/
|
||||
sysUserAdd: ['/sysUser/add', 'post'],
|
||||
|
||||
/**
|
||||
* 编辑用户
|
||||
*/
|
||||
sysUserEdit: ['/sysUser/edit', 'post'],
|
||||
|
||||
/**
|
||||
* 获取用户详情
|
||||
*/
|
||||
sysUserDetail: ['/sysUser/detail', 'get'],
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
*/
|
||||
sysUserDelete: ['/sysUser/delete', 'post'],
|
||||
|
||||
/**
|
||||
* 拥有角色
|
||||
*/
|
||||
sysUserOwnRole: ['/sysUser/ownRole', 'get'],
|
||||
|
||||
/**
|
||||
* 授权角色
|
||||
*/
|
||||
sysUserGrantRole: ['/sysUser/grantRole', 'post'],
|
||||
|
||||
/**
|
||||
* 拥有数据
|
||||
*/
|
||||
sysUserOwnData: ['/sysUser/ownData', 'get'],
|
||||
|
||||
/**
|
||||
* 授权数据
|
||||
*/
|
||||
sysUserGrantData: ['/sysUser/grantData', 'post'],
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
*/
|
||||
sysUserChangeStatus: ['/sysUser/changeStatus', 'post'],
|
||||
|
||||
/**
|
||||
* 重置密码
|
||||
*/
|
||||
sysUserResetPwd: ['/sysUser/resetPwd', 'post'],
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*/
|
||||
sysUserUpdatePwd: ['/sysUser/updatePwd', 'post'],
|
||||
|
||||
/**
|
||||
* 用户选择器
|
||||
*/
|
||||
sysUserSelector: ['/sysUser/selector', 'get'],
|
||||
|
||||
/**
|
||||
* 修改头像
|
||||
*/
|
||||
sysUserUpdateAvatar: ['/sysUser/updateAvatar', 'post'],
|
||||
|
||||
/**
|
||||
* 更新基本信息
|
||||
*/
|
||||
sysUserUpdateInfo: ['/sysUser/updateInfo', 'post'],
|
||||
|
||||
|
||||
/**
|
||||
* 发送验证码
|
||||
*/
|
||||
SendCode: ['/sysUser/SendCode', 'post'],
|
||||
|
||||
/**
|
||||
* 绑定/验证
|
||||
*/
|
||||
CheckBindcode: ['/sysUser/CheckBindcode', 'post'],
|
||||
|
||||
}
|
||||