35 changed files with 1771 additions and 3644 deletions
@ -1,8 +1,8 @@ |
|||||
# 页面标题 |
# 页面标题 |
||||
VITE_APP_TITLE = 若依管理系统 |
VITE_APP_TITLE = 美美学堂管理系统 |
||||
|
|
||||
# 开发环境配置 |
# 开发环境配置 |
||||
VITE_APP_ENV = 'development' |
VITE_APP_ENV = 'development' |
||||
|
|
||||
# 若依管理系统/开发环境 |
# 美美学堂管理系统/开发环境 |
||||
VITE_APP_BASE_API = '/dev-api' |
VITE_APP_BASE_API = '/dev-api' |
||||
|
|||||
@ -1,10 +1,10 @@ |
|||||
# 页面标题 |
# 页面标题 |
||||
VITE_APP_TITLE = 若依管理系统 |
VITE_APP_TITLE = 美美学堂管理系统 |
||||
|
|
||||
# 生产环境配置 |
# 生产环境配置 |
||||
VITE_APP_ENV = 'production' |
VITE_APP_ENV = 'production' |
||||
|
|
||||
# 若依管理系统/生产环境 |
# 美美学堂管理系统/生产环境 |
||||
VITE_APP_BASE_API = '/prod-api' |
VITE_APP_BASE_API = '/prod-api' |
||||
|
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli |
# 是否在打包时开启压缩,支持 gzip 和 brotli |
||||
|
|||||
@ -1,10 +1,10 @@ |
|||||
# 页面标题 |
# 页面标题 |
||||
VITE_APP_TITLE = 若依管理系统 |
VITE_APP_TITLE = 美美学堂管理系统 |
||||
|
|
||||
# 生产环境配置 |
# 生产环境配置 |
||||
VITE_APP_ENV = 'staging' |
VITE_APP_ENV = 'staging' |
||||
|
|
||||
# 若依管理系统/生产环境 |
# 美美学堂管理系统/生产环境 |
||||
VITE_APP_BASE_API = '/stage-api' |
VITE_APP_BASE_API = '/stage-api' |
||||
|
|
||||
# 是否在打包时开启压缩,支持 gzip 和 brotli |
# 是否在打包时开启压缩,支持 gzip 和 brotli |
||||
|
|||||
@ -1 +1 @@ |
|||||
custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html |
custom: http://doc.mmxt.vip/mmxt-vue/other/donate.html |
||||
|
|||||
@ -1,308 +0,0 @@ |
|||||
/** |
|
||||
* 通用css样式布局处理 |
|
||||
* Copyright (c) 2019 ruoyi |
|
||||
*/ |
|
||||
|
|
||||
/** 基础通用 **/ |
|
||||
.pt5 { |
|
||||
padding-top: 5px; |
|
||||
} |
|
||||
.pr5 { |
|
||||
padding-right: 5px; |
|
||||
} |
|
||||
.pb5 { |
|
||||
padding-bottom: 5px; |
|
||||
} |
|
||||
.mt5 { |
|
||||
margin-top: 5px; |
|
||||
} |
|
||||
.mr5 { |
|
||||
margin-right: 5px; |
|
||||
} |
|
||||
.mb5 { |
|
||||
margin-bottom: 5px; |
|
||||
} |
|
||||
.mb8 { |
|
||||
margin-bottom: 8px; |
|
||||
} |
|
||||
.ml5 { |
|
||||
margin-left: 5px; |
|
||||
} |
|
||||
.mt10 { |
|
||||
margin-top: 10px; |
|
||||
} |
|
||||
.mr10 { |
|
||||
margin-right: 10px; |
|
||||
} |
|
||||
.mb10 { |
|
||||
margin-bottom: 10px; |
|
||||
} |
|
||||
.ml10 { |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
.mt20 { |
|
||||
margin-top: 20px; |
|
||||
} |
|
||||
.mr20 { |
|
||||
margin-right: 20px; |
|
||||
} |
|
||||
.mb20 { |
|
||||
margin-bottom: 20px; |
|
||||
} |
|
||||
.ml20 { |
|
||||
margin-left: 20px; |
|
||||
} |
|
||||
|
|
||||
.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { |
|
||||
font-family: inherit; |
|
||||
font-weight: 500; |
|
||||
line-height: 1.1; |
|
||||
color: inherit; |
|
||||
} |
|
||||
|
|
||||
.el-form--inline { |
|
||||
.el-form-item { |
|
||||
.el-input, .el-cascader, .el-select, .el-autocomplete { |
|
||||
width: 200px; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
.el-form .el-form-item__label { |
|
||||
font-weight: 700; |
|
||||
} |
|
||||
.el-dialog:not(.is-fullscreen) { |
|
||||
margin-top: 6vh !important; |
|
||||
} |
|
||||
|
|
||||
.el-dialog.scrollbar .el-dialog__body { |
|
||||
overflow: auto; |
|
||||
overflow-x: hidden; |
|
||||
max-height: 70vh; |
|
||||
padding: 10px 20px 0; |
|
||||
} |
|
||||
|
|
||||
.el-table { |
|
||||
.el-table__header-wrapper, .el-table__fixed-header-wrapper { |
|
||||
th { |
|
||||
word-break: break-word; |
|
||||
background-color: #f8f8f9 !important; |
|
||||
color: #515a6e; |
|
||||
height: 40px !important; |
|
||||
font-size: 13px; |
|
||||
} |
|
||||
} |
|
||||
.el-table__body-wrapper { |
|
||||
.el-button [class*="el-icon-"] + span { |
|
||||
margin-left: 1px; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/** 表单布局 **/ |
|
||||
.form-header { |
|
||||
font-size:15px; |
|
||||
color:#6379bb; |
|
||||
border-bottom:1px solid #ddd; |
|
||||
margin:8px 10px 25px 10px; |
|
||||
padding-bottom:5px |
|
||||
} |
|
||||
|
|
||||
/** 表格布局 **/ |
|
||||
.pagination-container { |
|
||||
display: flex; |
|
||||
justify-content: flex-end; |
|
||||
margin-top: 20px; |
|
||||
background-color: transparent !important; |
|
||||
} |
|
||||
|
|
||||
/* 弹窗中的分页器 */ |
|
||||
.el-dialog .pagination-container { |
|
||||
position: static !important; |
|
||||
margin: 10px 0 0 0; |
|
||||
padding: 0 !important; |
|
||||
|
|
||||
.el-pagination { |
|
||||
position: static; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* 移动端适配 */ |
|
||||
@media (max-width: 768px) { |
|
||||
.pagination-container { |
|
||||
.el-pagination { |
|
||||
> .el-pagination__jump { |
|
||||
display: none !important; |
|
||||
} |
|
||||
> .el-pagination__sizes { |
|
||||
display: none !important; |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/* tree border */ |
|
||||
.tree-border { |
|
||||
margin-top: 5px; |
|
||||
border: 1px solid var(--el-border-color-light, #e5e6e7); |
|
||||
background: var(--el-bg-color, #FFFFFF) none; |
|
||||
border-radius:4px; |
|
||||
width: 100%; |
|
||||
} |
|
||||
|
|
||||
.el-table .fixed-width .el-button--small { |
|
||||
padding-left: 0; |
|
||||
padding-right: 0; |
|
||||
width: inherit; |
|
||||
} |
|
||||
|
|
||||
/* horizontal el menu */ |
|
||||
.el-menu--horizontal .el-menu-item .svg-icon + span, |
|
||||
.el-menu--horizontal .el-sub-menu__title .svg-icon + span { |
|
||||
margin-left: 3px; |
|
||||
} |
|
||||
|
|
||||
.el-menu--horizontal .el-menu--popup { |
|
||||
min-width: 120px !important; |
|
||||
} |
|
||||
|
|
||||
/** 表格更多操作下拉样式 */ |
|
||||
.el-table .el-dropdown-link { |
|
||||
cursor: pointer; |
|
||||
color: #409EFF; |
|
||||
margin-left: 10px; |
|
||||
} |
|
||||
|
|
||||
.el-table .el-dropdown, .el-icon-arrow-down { |
|
||||
font-size: 12px; |
|
||||
} |
|
||||
|
|
||||
.el-tree-node__content > .el-checkbox { |
|
||||
margin-right: 8px; |
|
||||
} |
|
||||
|
|
||||
.list-group-striped > .list-group-item { |
|
||||
border-left: 0; |
|
||||
border-right: 0; |
|
||||
border-radius: 0; |
|
||||
padding-left: 0; |
|
||||
padding-right: 0; |
|
||||
} |
|
||||
|
|
||||
.list-group { |
|
||||
padding-left: 0px; |
|
||||
list-style: none; |
|
||||
} |
|
||||
|
|
||||
.list-group-item { |
|
||||
border-bottom: 1px solid #e7eaec; |
|
||||
border-top: 1px solid #e7eaec; |
|
||||
margin-bottom: -1px; |
|
||||
padding: 11px 0px; |
|
||||
font-size: 13px; |
|
||||
} |
|
||||
|
|
||||
.pull-right { |
|
||||
float: right !important; |
|
||||
} |
|
||||
|
|
||||
.el-card__header { |
|
||||
padding: 14px 15px 7px !important; |
|
||||
min-height: 40px; |
|
||||
} |
|
||||
|
|
||||
.el-card__body { |
|
||||
padding: 15px 20px 20px 20px !important; |
|
||||
} |
|
||||
|
|
||||
.card-box { |
|
||||
margin-bottom: 10px; |
|
||||
} |
|
||||
|
|
||||
/* button color */ |
|
||||
.el-button--cyan.is-active, |
|
||||
.el-button--cyan:active { |
|
||||
background: #20B2AA; |
|
||||
border-color: #20B2AA; |
|
||||
color: #FFFFFF; |
|
||||
} |
|
||||
|
|
||||
.el-button--cyan:focus, |
|
||||
.el-button--cyan:hover { |
|
||||
background: #48D1CC; |
|
||||
border-color: #48D1CC; |
|
||||
color: #FFFFFF; |
|
||||
} |
|
||||
|
|
||||
.el-button--cyan { |
|
||||
background-color: #20B2AA; |
|
||||
border-color: #20B2AA; |
|
||||
color: #FFFFFF; |
|
||||
} |
|
||||
|
|
||||
/* text color */ |
|
||||
.text-navy { |
|
||||
color: #1ab394; |
|
||||
} |
|
||||
|
|
||||
.text-primary { |
|
||||
color: inherit; |
|
||||
} |
|
||||
|
|
||||
.text-success { |
|
||||
color: #1c84c6; |
|
||||
} |
|
||||
|
|
||||
.text-info { |
|
||||
color: #23c6c8; |
|
||||
} |
|
||||
|
|
||||
.text-warning { |
|
||||
color: #f8ac59; |
|
||||
} |
|
||||
|
|
||||
.text-danger { |
|
||||
color: #ed5565; |
|
||||
} |
|
||||
|
|
||||
.text-muted { |
|
||||
color: #888888; |
|
||||
} |
|
||||
|
|
||||
/* image */ |
|
||||
.img-circle { |
|
||||
border-radius: 50%; |
|
||||
} |
|
||||
|
|
||||
.img-lg { |
|
||||
width: 120px; |
|
||||
height: 120px; |
|
||||
} |
|
||||
|
|
||||
.avatar-upload-preview { |
|
||||
position: absolute; |
|
||||
top: 50%; |
|
||||
transform: translate(50%, -50%); |
|
||||
width: 200px; |
|
||||
height: 200px; |
|
||||
border-radius: 50%; |
|
||||
box-shadow: 0 0 4px #ccc; |
|
||||
overflow: hidden; |
|
||||
} |
|
||||
|
|
||||
/* 拖拽列样式 */ |
|
||||
.sortable-ghost{ |
|
||||
opacity: .8; |
|
||||
color: #fff!important; |
|
||||
background: #42b983!important; |
|
||||
} |
|
||||
|
|
||||
/* 表格右侧工具栏样式 */ |
|
||||
.top-right-btn { |
|
||||
margin-left: auto; |
|
||||
} |
|
||||
|
|
||||
/* 分割面板样式 */ |
|
||||
.splitpanes.default-theme .splitpanes__pane { |
|
||||
background-color: var(--splitpanes-default-bg) !important; |
|
||||
} |
|
||||
@ -1,228 +0,0 @@ |
|||||
/** |
|
||||
* 通用js方法封装处理 |
|
||||
* Copyright (c) 2019 ruoyi |
|
||||
*/ |
|
||||
|
|
||||
// 日期格式化
|
|
||||
export function parseTime(time, pattern) { |
|
||||
if (arguments.length === 0 || !time) { |
|
||||
return null |
|
||||
} |
|
||||
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' |
|
||||
let date |
|
||||
if (typeof time === 'object') { |
|
||||
date = time |
|
||||
} else { |
|
||||
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { |
|
||||
time = parseInt(time) |
|
||||
} else if (typeof time === 'string') { |
|
||||
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '') |
|
||||
} |
|
||||
if ((typeof time === 'number') && (time.toString().length === 10)) { |
|
||||
time = time * 1000 |
|
||||
} |
|
||||
date = new Date(time) |
|
||||
} |
|
||||
const formatObj = { |
|
||||
y: date.getFullYear(), |
|
||||
m: date.getMonth() + 1, |
|
||||
d: date.getDate(), |
|
||||
h: date.getHours(), |
|
||||
i: date.getMinutes(), |
|
||||
s: date.getSeconds(), |
|
||||
a: date.getDay() |
|
||||
} |
|
||||
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { |
|
||||
let value = formatObj[key] |
|
||||
// Note: getDay() returns 0 on Sunday
|
|
||||
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value] } |
|
||||
if (result.length > 0 && value < 10) { |
|
||||
value = '0' + value |
|
||||
} |
|
||||
return value || 0 |
|
||||
}) |
|
||||
return time_str |
|
||||
} |
|
||||
|
|
||||
// 表单重置
|
|
||||
export function resetForm(refName) { |
|
||||
if (this.$refs[refName]) { |
|
||||
this.$refs[refName].resetFields() |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
// 添加日期范围
|
|
||||
export function addDateRange(params, dateRange, propName) { |
|
||||
let search = params |
|
||||
search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {} |
|
||||
dateRange = Array.isArray(dateRange) ? dateRange : [] |
|
||||
if (typeof (propName) === 'undefined') { |
|
||||
search.params['beginTime'] = dateRange[0] |
|
||||
search.params['endTime'] = dateRange[1] |
|
||||
} else { |
|
||||
search.params['begin' + propName] = dateRange[0] |
|
||||
search.params['end' + propName] = dateRange[1] |
|
||||
} |
|
||||
return search |
|
||||
} |
|
||||
|
|
||||
// 回显数据字典
|
|
||||
export function selectDictLabel(datas, value) { |
|
||||
if (value === undefined) { |
|
||||
return "" |
|
||||
} |
|
||||
var actions = [] |
|
||||
Object.keys(datas).some((key) => { |
|
||||
if (datas[key].value == ('' + value)) { |
|
||||
actions.push(datas[key].label) |
|
||||
return true |
|
||||
} |
|
||||
}) |
|
||||
if (actions.length === 0) { |
|
||||
actions.push(value) |
|
||||
} |
|
||||
return actions.join('') |
|
||||
} |
|
||||
|
|
||||
// 回显数据字典(字符串、数组)
|
|
||||
export function selectDictLabels(datas, value, separator) { |
|
||||
if (value === undefined || value.length ===0) { |
|
||||
return "" |
|
||||
} |
|
||||
if (Array.isArray(value)) { |
|
||||
value = value.join(",") |
|
||||
} |
|
||||
var actions = [] |
|
||||
var currentSeparator = undefined === separator ? "," : separator |
|
||||
var temp = value.split(currentSeparator) |
|
||||
Object.keys(value.split(currentSeparator)).some((val) => { |
|
||||
var match = false |
|
||||
Object.keys(datas).some((key) => { |
|
||||
if (datas[key].value == ('' + temp[val])) { |
|
||||
actions.push(datas[key].label + currentSeparator) |
|
||||
match = true |
|
||||
} |
|
||||
}) |
|
||||
if (!match) { |
|
||||
actions.push(temp[val] + currentSeparator) |
|
||||
} |
|
||||
}) |
|
||||
return actions.join('').substring(0, actions.join('').length - 1) |
|
||||
} |
|
||||
|
|
||||
// 字符串格式化(%s )
|
|
||||
export function sprintf(str) { |
|
||||
var args = arguments, flag = true, i = 1 |
|
||||
str = str.replace(/%s/g, function () { |
|
||||
var arg = args[i++] |
|
||||
if (typeof arg === 'undefined') { |
|
||||
flag = false |
|
||||
return '' |
|
||||
} |
|
||||
return arg |
|
||||
}) |
|
||||
return flag ? str : '' |
|
||||
} |
|
||||
|
|
||||
// 转换字符串,undefined,null等转化为""
|
|
||||
export function parseStrEmpty(str) { |
|
||||
if (!str || str == "undefined" || str == "null") { |
|
||||
return "" |
|
||||
} |
|
||||
return str |
|
||||
} |
|
||||
|
|
||||
// 数据合并
|
|
||||
export function mergeRecursive(source, target) { |
|
||||
for (var p in target) { |
|
||||
try { |
|
||||
if (target[p].constructor == Object) { |
|
||||
source[p] = mergeRecursive(source[p], target[p]) |
|
||||
} else { |
|
||||
source[p] = target[p] |
|
||||
} |
|
||||
} catch (e) { |
|
||||
source[p] = target[p] |
|
||||
} |
|
||||
} |
|
||||
return source |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 构造树型结构数据 |
|
||||
* @param {*} data 数据源 |
|
||||
* @param {*} id id字段 默认 'id' |
|
||||
* @param {*} parentId 父节点字段 默认 'parentId' |
|
||||
* @param {*} children 孩子节点字段 默认 'children' |
|
||||
*/ |
|
||||
export function handleTree(data, id, parentId, children) { |
|
||||
let config = { |
|
||||
id: id || 'id', |
|
||||
parentId: parentId || 'parentId', |
|
||||
childrenList: children || 'children' |
|
||||
} |
|
||||
|
|
||||
var childrenListMap = {} |
|
||||
var tree = [] |
|
||||
for (let d of data) { |
|
||||
let id = d[config.id] |
|
||||
childrenListMap[id] = d |
|
||||
if (!d[config.childrenList]) { |
|
||||
d[config.childrenList] = [] |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
for (let d of data) { |
|
||||
let parentId = d[config.parentId] |
|
||||
let parentObj = childrenListMap[parentId] |
|
||||
if (!parentObj) { |
|
||||
tree.push(d) |
|
||||
} else { |
|
||||
parentObj[config.childrenList].push(d) |
|
||||
} |
|
||||
} |
|
||||
return tree |
|
||||
} |
|
||||
|
|
||||
/** |
|
||||
* 参数处理 |
|
||||
* @param {*} params 参数 |
|
||||
*/ |
|
||||
export function tansParams(params) { |
|
||||
let result = '' |
|
||||
for (const propName of Object.keys(params)) { |
|
||||
const value = params[propName] |
|
||||
var part = encodeURIComponent(propName) + "=" |
|
||||
if (value !== null && value !== "" && typeof (value) !== "undefined") { |
|
||||
if (typeof value === 'object') { |
|
||||
for (const key of Object.keys(value)) { |
|
||||
if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { |
|
||||
let params = propName + '[' + key + ']' |
|
||||
var subPart = encodeURIComponent(params) + "=" |
|
||||
result += subPart + encodeURIComponent(value[key]) + "&" |
|
||||
} |
|
||||
} |
|
||||
} else { |
|
||||
result += part + encodeURIComponent(value) + "&" |
|
||||
} |
|
||||
} |
|
||||
} |
|
||||
return result |
|
||||
} |
|
||||
|
|
||||
// 返回项目路径
|
|
||||
export function getNormalPath(p) { |
|
||||
if (p.length === 0 || !p || p == 'undefined') { |
|
||||
return p |
|
||||
} |
|
||||
let res = p.replace('//', '/') |
|
||||
if (res[res.length - 1] === '/') { |
|
||||
return res.slice(0, res.length - 1) |
|
||||
} |
|
||||
return res |
|
||||
} |
|
||||
|
|
||||
// 验证是否为blob格式
|
|
||||
export function blobValidate(data) { |
|
||||
return data.type !== 'application/json' |
|
||||
} |
|
||||
File diff suppressed because it is too large
Loading…
Reference in new issue