系统风格、系统屏幕适配

dongdingding
许宏杰 2 years ago
parent bbbb887e42
commit 5b0c461aa8

@ -50,6 +50,7 @@
"js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1",
"nprogress": "0.2.0",
"postcss-px2rem": "^0.3.0",
"quill": "1.3.7",
"screenfull": "5.0.2",
"sortablejs": "1.10.2",

@ -0,0 +1,160 @@
@import "./element-variables.scss";
.container-main {
height: calc(100vh - 84px);
overflow: hidden;
padding: 0 10px;
//
.search-hearder {
padding: 12px 2px 8px 2px;
height: auto;
.el-form-item {
margin-bottom: 6px;
margin-right: 10px;
// lable
.el-form-item__label {
padding: 6px 12px 6px 10px;
font-weight: 400;
color: #333;
line-height: 20px;
}
// content
.el-form-item__content {
width: 180px;
//
.el-input {
.el-input__inner {
border-radius: 0px;
}
}
}
}
}
//
.layui-table-tool {
width: 100%;
min-height: 40px;
line-height: 30px;
padding: 6px 15px;
border-width: 0 0 1px;
border: 1px solid #e6e6e6;
border-bottom: 0;
background-color: #f2f2f2;
}
//
.el-table .el-table__header-wrapper th {
font-size: 12px;
font-weight: 400;
// height: 35px;
color: #666;
background-color: #f2f2f2;
}
.el-table--medium .el-table__cell {
padding: 3px 0;
// height: 35px;
font-size: 12px;
color: #666;
}
.el-table .fixed-width .el-button--mini {
font-size: 12px;
padding: 6px 6px;
width: inherit;
}
//
}
//
.dialog-box {
.el-dialog__header {
padding: 0;
.dialog-title {
height: 50px;
line-height: 50px;
font-size: 14px;
color: white;
background-color: $--color-primary;
padding-left: 20px;
letter-spacing: 1px;
}
.el-dialog__headerbtn .el-dialog__close {
color: white;
}
}
}
.dialog-from {
.el-form-item {
margin-bottom: 20px;
margin-right: 10px;
// lable
.el-form-item__label {
padding: 6px 12px 6px 10px;
font-weight: 400;
color: #333;
line-height: 20px;
}
// content
.el-form-item__content {
//
.el-input {
.el-input__inner {
border-radius: 0px;
}
}
}
}
}
//
.el-message-box {
width: 300px;
.el-message-box__header {
border-bottom: 1px solid #f0f0f0;
}
}
//
.Descriptions-box {
border: 1px solid #ddd;
border-right: 0;
border-bottom: 0;
.row-item {
width: 100%;
display: flex;
& > div {
padding: 10px 8px;
overflow: hidden;
font-size: 12px;
color: #333;
}
.row-lable {
width: 200px;
background-color: #f5f5f5;
border-bottom: 1px solid #ddd;
border-right: 1px solid #ddd;
font-weight: bold;
}
.row-value {
flex: 1;
border-bottom: 1px solid #ddd;
border-right: 1px solid #ddd;
}
}
}
//
.el-button--mini {
padding: 7px 16px;
border-radius: 0;
}
.el-button {
border-radius: 0;
}
.dialog-footer {
display: flex;
justify-content: center;
}
.pagination-container {
// position: relative;
margin-bottom: 0px !important;
margin-top: 7px !important;
padding: 0 !important;
}

@ -4,6 +4,7 @@
@import './element-ui.scss';
@import './sidebar.scss';
@import './btn.scss';
@import "./diythem.scss";
body {
margin: 0;
@ -131,7 +132,7 @@ aside {
}
.pagination-container {
margin-top: 30px;
// margin-top: 30px;
}
.text-center {

@ -104,10 +104,10 @@
/** 表格布局 **/
.pagination-container {
position: relative;
height: 25px;
margin-bottom: 10px;
margin-top: 15px;
padding: 10px 20px !important;
// height: 25px;
// margin-bottom: 10px;
// margin-top: 15px;
// padding: 10px 20px !important;
}
/* tree border */

@ -4,6 +4,19 @@ import Cookies from 'js-cookie'
import Element from 'element-ui'
import './assets/styles/element-variables.scss'
Element.Dialog.props.closeOnClickModal.default = false; //模态框单击空白处不允许关闭
// 带有斑马纹
// Element.Table.props.stripe = {
// default: true,
// type: Boolean,
// };
// 带有边框
Element.Table.props.border = {
default: true,
type: Boolean,
};
import "@/utils/rem.js"; //计算rem基准
import '@/assets/styles/index.scss' // global css
import '@/assets/styles/ruoyi.scss' // ruoyi css

@ -22,7 +22,7 @@ module.exports = {
/**
* 是否固定头部
*/
fixedHeader: false,
fixedHeader: true,
/**
* 是否显示logo

@ -0,0 +1,17 @@
// rem等比适配配置文件
// 基准大小
const baseSize = 16;
// 设置 rem 函数
function setRem() {
// 当前页面宽度相对于 1920宽的缩放比例可根据自己需要修改。
const scale = document.documentElement.clientWidth / 1920;
// 设置页面根节点字体大小“Math.min(scale, 2)” 指最高放大比例为2可根据实际业务需求调整
document.documentElement.style.fontSize =
baseSize * Math.min(scale, 2) + "px";
}
// 初始化
setRem();
// 改变浏览器窗口大小时重新设置 rem
window.onresize = function () {
setRem();
};

@ -1,19 +1,530 @@
<template>
<div class="container">
</div>
<div class="container-main" ref="main">
<div class="search-hearder" ref="topSearch">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true">
<el-form-item label="名称" prop="noticeTitle">
<el-input
v-model="queryParams.noticeTitle"
placeholder="请输入"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
</el-form-item>
</el-form>
</div>
<div class="layui-table-tool" ref="tableTool">
<el-button type="primary" size="mini" @click="clickAdd()"></el-button>
<el-button type="warning" size="mini" @click="handleExport()"
>导出</el-button
>
</div>
<el-table v-loading="loading" :data="tableList" :height="tableHeigth">
<el-table-column label="序号" align="center" width="55" type="index" />
<el-table-column
label="园区名称"
prop="parkName"
:show-overflow-tooltip="true"
/>
<el-table-column
label="所属区域"
prop="homeLocation"
:show-overflow-tooltip="true"
/>
<el-table-column
label="企业数量"
prop="numberEnterprises"
:show-overflow-tooltip="true"
/>
<el-table-column
label="占地面积"
prop="floorArea"
:show-overflow-tooltip="true"
/>
<el-table-column
label="占地面积"
prop="floorAreaT"
:show-overflow-tooltip="true"
/>
<el-table-column
label="更新时间"
prop="updateTime"
:show-overflow-tooltip="true"
/>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
icon="el-icon-view"
@click="handleView(scope.row)"
>查看</el-button
>
<el-button
type="primary"
size="mini"
icon="el-icon-edit"
@click="handleUpdata(scope.row)"
>修改</el-button
>
<el-button
size="mini"
type="danger"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
></pagination>
<el-dialog
:visible.sync="open"
width="1200px"
append-to-body
custom-class="dialog-box"
>
<div slot="title" class="dialog-title">{{ dialogTitle }}</div>
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="130px"
class="dialog-from"
:show-message="false"
>
<el-row>
<el-col :span="12">
<el-form-item label="园区名称" prop="parkName">
<el-input
v-model="form.parkName"
placeholder="请输入园区名称"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="园区地址" prop="parkAddress">
<el-input
v-model="form.parkAddress"
placeholder="请输入园区地址"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="归属地" prop="homeLocation">
<el-input v-model="form.homeLocation" placeholder="请输入归属地" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="楼幢数量" prop="numberBuildings">
<el-input
v-model="form.numberBuildings"
placeholder="请输入楼幢数量(幢)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="企业数量" prop="numberEnterprises">
<el-input
v-model="form.numberEnterprises"
placeholder="请输入企业数量(家)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="员工总人数" prop="totalEmployees">
<el-input
v-model="form.totalEmployees"
placeholder="请输入员工总人数(人)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="占地面积" prop="floorArea">
<el-input
v-model="form.floorArea"
placeholder="请输入占地面积(m²)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="占地面积" prop="floorAreaT">
<el-input
v-model="form.floorAreaT"
placeholder="请输入占地面积(亩)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="总建筑面积" prop="totalBuildingArea">
<el-input
v-model="form.totalBuildingArea"
placeholder="请输入总建筑面积(m²)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出租面积" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入出租面积(m²)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="自用面积" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入自用面积(m²)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年租金总额" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入年租金总额(万元)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="平均月租金单价" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入平均月租金单价(元/m²/月)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="土地证面积" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入土地证面积(亩)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="无证面积" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入无证面积(亩)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="房产证面积" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入房产证面积(m²)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="无证面积" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入无证面积(m²)"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年总税收" prop="noticeTitle">
<el-input
v-model="form.noticeTitle"
placeholder="请输入年总税收(万元)"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" size="mini"> </el-button>
<el-button size="mini"> </el-button>
</div>
</el-dialog>
<el-dialog
:visible.sync="infoOpen"
width="1200px"
append-to-body
custom-class="dialog-box"
>
<div slot="title" class="dialog-title">{{ infoTitel }}</div>
<div class="Descriptions-box">
<div class="row-item">
<div class="row-lable">园区名称</div>
<div class="row-value"></div>
<div class="row-lable">归属地</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">园区地址</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">楼幢数量()</div>
<div class="row-value"></div>
<div class="row-lable">企业数量()</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">员工总人数()</div>
<div class="row-value"></div>
<div class="row-lable">占地面积()</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">占地面积()</div>
<div class="row-value"></div>
<div class="row-lable">总建筑面积()</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">出租面积()</div>
<div class="row-value"></div>
<div class="row-lable">自用面积()</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">年租金总额(万元)</div>
<div class="row-value"></div>
<div class="row-lable">平均月租金单价(//)</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">土地证面积()</div>
<div class="row-value"></div>
<div class="row-lable">无证面积()</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">房产证面积()</div>
<div class="row-value"></div>
<div class="row-lable">无证面积()</div>
<div class="row-value"></div>
</div>
<div class="row-item">
<div class="row-lable">年总税收(万元)</div>
<div class="row-value"></div>
<div class="row-lable">亩均税收(万元/千m²)</div>
<div class="row-value"></div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
data() {
return {
infoOpen: false, //
infoTitel: "文章详情", //
dialogTitle: "", //
open: false, //
tableHeigth: 0, //
loading: false,
total: 10,
details: "",
//
queryParams: {
pageNum: 1,
pageSize: 20,
},
form: {
annualGrossTaxRevenue: 0,
averageMonthlyRentalUnitPrice: 0,
floorArea: 0,
floorAreaT: 0,
homeLocation: "",
landCertificateArea: 0,
latlng: 0,
numberBuildings: 0,
numberEnterprises: 0,
parkAddress: "",
parkName: "",
parkOrgId: "",
realEstateCertificateArea: 0,
remark: "",
rentalArea: 0,
selfArea: 0,
taxPerMu: 0,
totalAnnualRent: 0,
totalBuildingArea: 0,
totalEmployees: 0,
},
rules: {
// noticeTitle: [
// { required: true, message: "", trigger: "blur" },
// ],
content: [
{ required: true, message: "请输入发布内容", trigger: "blur" },
],
cover: [
{ required: true, message: "请选择要发布的图片", trigger: "blur" },
],
}
sort: [{ required: true, message: "请输入轮播顺序", trigger: "blur" }],
title: [{ required: true, message: "请输入标题", trigger: "blur" }],
type: [{ required: true, message: "请选择类型", trigger: "blur" }],
},
tableList: [],
};
},
mounted() {
//
this.$nextTick(() => {
this.tableHeigth =
this.$refs.main.offsetHeight -
(this.$refs.topSearch.offsetHeight +
this.$refs.tableTool.offsetHeight) -
46;
console.log(this.tableHeigth);
});
// this.getList();
},
methods: {
/**新增 */
clickAdd() {
this.dialogTitle = "新增文章";
this.resetQuery();
this.open = true;
},
/**修改 */
handleUpdata(row) {
this.dialogTitle = "修改文章";
this.open = true;
this.$api.overview.info(row.id).then((response) => {
console.log(response);
this.form = response.data;
});
},
/**删除 */
handleDelete(row) {
this.$modal
.confirm("你确认要删除所选数据吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$api.overview.delete(row.id).then((response) => {
console.log(response);
});
this.getList();
})
.catch(() => {});
},
/**查看详情 */
handleView(row) {
this.infoTitel = "查看详情";
this.infoOpen = true;
getProfile(row.id).then((response) => {
this.details = response.data;
});
},
/**获取列表数据 */
getList() {
this.loading = true;
listProfile().then((response) => {
this.tableList = response.rows;
this.total = response.total;
this.loading = false;
});
},
/**导出 */
handleExport() {
this.$modal
.confirm("您确认要导出数据吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(function () {})
.catch(() => {});
},
/*搜索 */
handleQuery() {},
/**重置 */
resetQuery() {
this.form = {
content: "",
cover: "",
isCarousel: "",
sort: "",
title: "",
type: 1,
};
},
submint() {
this.$refs.form.validate((valid) => {
if (valid) {
// console.log(this.form);
if (this.dialogTitle == "修改文章") {
this.$api.overview.updata(this.form).then((response) => {
this.$message({
message: "修改成功",
type: "success",
});
this.open = false;
});
} else if (this.dialogTitle == "新增文章") {
this.$api.overview.add(this.form).then((response) => {
this.$message({
message: "新增成功",
type: "success",
});
this.open = false;
});
}
this.getList();
}
});
},
cancel() {
this.open = false;
},
},
};
</script>
<style lang="scss" scoped>
.container{
height: 100%;
width: 100%;
}
</style>
</style>

@ -4,6 +4,12 @@ const path = require('path')
function resolve(dir) {
return path.join(__dirname, dir)
}
const px2rem = require("postcss-px2rem"); //将项目中的px转成rem,以达到屏幕适配
// 配置基本大小
const postcss = px2rem({
// 基准大小 baseSize需要和rem.js中相同
remUnit: 16,
});
const CompressionPlugin = require('compression-webpack-plugin')
@ -20,16 +26,16 @@ module.exports = {
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
outputDir: 'dist',
outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static',
assetsDir: "static",
// 是否开启eslint保存检测有效值ture | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development',
lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false,
// webpack-dev-server 相关配置
devServer: {
host: '0.0.0.0',
host: "0.0.0.0",
port: port,
open: true,
proxy: {
@ -38,97 +44,100 @@ module.exports = {
target: `http://localhost:8080`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
["^" + process.env.VUE_APP_BASE_API]: "",
},
},
},
disableHostCheck: true
disableHostCheck: true,
},
css: {
loaderOptions: {
sass: {
sassOptions: { outputStyle: "expanded" }
}
}
sassOptions: { outputStyle: "expanded" },
},
// px to rem
postcss: {
plugins: [postcss],
},
},
},
configureWebpack: {
name: name,
resolve: {
alias: {
'@': resolve('src')
}
"@": resolve("src"),
},
},
plugins: [
// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({
cache: false, // 不启用文件缓存
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: '[path].gz[query]', // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩
minRatio: 0.8 // 压缩率小于1才会压缩
})
cache: false, // 不启用文件缓存
test: /\.(js|css|html)?$/i, // 压缩文件格式
filename: "[path].gz[query]", // 压缩后的文件名
algorithm: "gzip", // 使用gzip压缩
minRatio: 0.8, // 压缩率小于1才会压缩
}),
],
},
chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test
config.plugins.delete('prefetch') // TODO: need test
config.plugins.delete("preload"); // TODO: need test
config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module
.rule('svg')
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.rule("icons")
.test(/\.svg$/)
.include.add(resolve('src/assets/icons'))
.include.add(resolve("src/assets/icons"))
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.use("svg-sprite-loader")
.loader("svg-sprite-loader")
.options({
symbolId: 'icon-[name]'
symbolId: "icon-[name]",
})
.end()
.end();
config.when(process.env.NODE_ENV !== 'development', config => {
config
.plugin('ScriptExtHtmlWebpackPlugin')
.after('html')
.use('script-ext-html-webpack-plugin', [{
config.when(process.env.NODE_ENV !== "development", (config) => {
config
.plugin("ScriptExtHtmlWebpackPlugin")
.after("html")
.use("script-ext-html-webpack-plugin", [
{
// `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/
}])
.end()
inline: /runtime\..*\.js$/,
},
])
.end();
config.optimization.splitChunks({
chunks: 'all',
cacheGroups: {
libs: {
name: 'chunk-libs',
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: 'initial' // only package third parties that are initially dependent
},
elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app
},
commons: {
name: 'chunk-commons',
test: resolve('src/components'), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true
}
}
})
config.optimization.splitChunks({
chunks: "all",
cacheGroups: {
libs: {
name: "chunk-libs",
test: /[\\/]node_modules[\\/]/,
priority: 10,
chunks: "initial", // only package third parties that are initially dependent
},
elementUI: {
name: "chunk-elementUI", // split elementUI into a single package
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
},
commons: {
name: "chunk-commons",
test: resolve("src/components"), // can customize your rules
minChunks: 3, // minimum common number
priority: 5,
reuseExistingChunk: true,
},
},
});
config.optimization.runtimeChunk('single'),
{
from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件
to: './' //到根目录下
}
})
}
}
config.optimization.runtimeChunk("single"),
{
from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件
to: "./", //到根目录下
};
});
},
};

Loading…
Cancel
Save