Browse Source

菜单管理/字典管理/门类字段管理/元数据管理

master
xuhuajiao 2 years ago
parent
commit
d5e153cdc6
  1. 6
      src/assets/styles/index.scss
  2. 34
      src/assets/styles/mixin.scss
  3. 12
      src/assets/styles/yxk-admin.scss
  4. 21
      src/views/components/field/index.vue
  5. 40
      src/views/components/field/module/form.vue
  6. 2
      src/views/system/dept/index.vue
  7. 180
      src/views/system/dict/dictDetail.vue
  8. 246
      src/views/system/dict/index.vue
  9. 6
      src/views/system/field/index.vue
  10. 8
      src/views/system/menu/index.vue
  11. 0
      src/views/system/metadata/index.vue

6
src/assets/styles/index.scss

@ -13,6 +13,7 @@ body {
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
}
label {
@ -204,13 +205,14 @@ ul{
//滚动条的滑块
::-webkit-scrollbar-thumb {
background-color: #13439E;
@include scrollBar-bg;
border-radius: 3px;
}
//只需要加上这一行
::-webkit-scrollbar-corner {
background-color: #021941;
// background-color: #021941;
@include scrollBar-bg;
}
// 设置loading-mask

34
src/assets/styles/mixin.scss

@ -7,18 +7,32 @@
}
}
@mixin scrollBar {
&::-webkit-scrollbar-track-piece {
background: #d3dce6;
}
// @mixin scrollBar {
// &::-webkit-scrollbar-track-piece {
// background: #d3dce6;
// }
&::-webkit-scrollbar {
width: 6px;
}
// ::-webkit-scrollbar-corner {
// background-color: #021941;
// }
// &::-webkit-scrollbar {
// width: 6px;
// }
// &::-webkit-scrollbar-thumb {
// background: #99a9bf;
// border-radius: 20px;
// }
// }
&::-webkit-scrollbar-thumb {
background: #99a9bf;
border-radius: 20px;
@mixin scrollBar-bg{
[data-theme="dark"] & {
background-color: #13439E;
}
[data-theme="light"] & {
background-color:#d3dce6;
}
}

12
src/assets/styles/yxk-admin.scss

@ -11,7 +11,6 @@
}
}
.elect-cont-right{
// padding: 20px;
@include bg_color;
@include box_padding;
.head-container{
@ -53,7 +52,6 @@
.tab-container{
@include bg_color;
@include box_padding;
.tab-content{
position: relative;
@include row_tab_style;
@ -64,11 +62,8 @@
}
}
.head-container {
// padding: 20px;
.filter-item {
// display: inline-block;
vertical-align: middle;
margin-right: 10px;
input {
@ -398,7 +393,6 @@
}
.el-icon-arrow-right:before{
// color: #fff;
@include icon_color;
}
.el-picker-panel__icon-btn:before{
@ -885,7 +879,6 @@
}
// 著录界面表单
.des-form{
.el-form-item__label{
font-weight: normal;
@ -983,6 +976,11 @@
margin-top: 27px;
}
}
.tip-middle-dialog{
.el-dialog{
width: 708px;
}
}
.setting-dialog{
.des-form{
width: 100% !important;

21
src/views/components/field/index.vue

@ -5,7 +5,7 @@
<crudOperation :permission="permission" />
</div>
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" height="calc(100vh - 273px)" @selection-change="selectionChangeHandler" @row-click="clickRowHandler">
<el-table ref="table" v-loading="crud.loading" :data="crud.data" style="width: 100%;" height="calc(100vh - 286px)" @selection-change="selectionChangeHandler" @row-click="clickRowHandler">
<el-table-column type="selection" width="55" />
<el-table-column type="index" label="序号" width="55" />
<el-table-column prop="fieldCnName" label="中文名称" />
@ -26,21 +26,20 @@
</el-table>
<!--表单渲染-->
<eForm ref="eform" />
<el-dialog title="关键提示" :visible.sync="verifyDialogVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<el-dialog class="tip-dialog tip-middle-dialog" title="操作提示" :visible.sync="verifyDialogVisible" :before-close="handleClose">
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>这里为技术人员维护系统时使用用户无需设置</span></p>
<div class="tip-content">
<p class="tipMsg">这里为技术人员维护系统时使用普通用户无需设置</p>
<p class="delt-tip"><span>注意强行修改会导致系统数据异常或丢失如因用户强行修改本系统不负责因此导致的相关后果</span></p>
</div>
<el-form :model="form" @submit.native.prevent>
<el-form-item label="技术维护验证码" :label-width="formLabelWidth">
<el-input v-model="form.verifyCode" show-password />
<el-form :model="form" style="margin-top:30px;" @submit.native.prevent>
<el-form-item label="维护验证码" :label-width="formLabelWidth">
<el-input v-model="form.verifyCode" show-password style="width: 480px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleConfirm">确定验证</el-button>
<el-button @click="verifyDialogVisible=false">取消 </el-button>
<el-button type="primary" @click.native="handleConfirm">确定</el-button>
</div>
</div>
</el-dialog>
@ -66,7 +65,7 @@ export default {
add: true,
edit: true,
del: false,
download: false,
download: true,
group: false
},
queryOnPresenterCreated: false

40
src/views/components/field/module/form.vue

@ -3,23 +3,23 @@
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="96px">
<el-form-item label="中文名称" prop="fieldCnName">
<el-input v-model="form.fieldCnName" style="width: 370px;" />
<el-input v-model="form.fieldCnName" style="width: 560px;" />
</el-form-item>
<el-form-item label="字段标识" prop="fieldName">
<el-input v-model="form.fieldName" style="width: 370px;" />
</el-form-item>
<el-form-item label="数据类型" prop="isDataType">
<el-select v-model="form.isDataType" placeholder="请选择">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="字段长度" prop="isColumnLength">
<el-input-number v-model="form.isColumnLength" controls-position="right" style="width: 370px;" />
<el-input v-model="form.fieldName" style="width: 560px;" />
</el-form-item>
<el-row style="display:flex;">
<el-form-item label="数据类型" prop="isDataType" class="field-form-item">
<el-radio v-for="item in options" :key="item.value" v-model="form.isDataType" :label="item.value">{{ item.label }}</el-radio>
</el-form-item>
<el-form-item label="字段长度" prop="isColumnLength" class="field-form-item">
<el-input v-model="form.isColumnLength" />
</el-form-item>
</el-row>
<el-form-item label="默认值" prop="isDefaultValue">
<el-input v-model="form.isDefaultValue" style="width: 370px;" />
<el-input v-model="form.isDefaultValue" style="width: 560px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
@ -83,7 +83,7 @@ export default {
{ required: true, message: '请选择数据类型', trigger: 'blur' }
],
isColumnLength: [
{ validator: checkMaxLength, trigger: 'blur' }
{ required: true, validator: checkMaxLength, trigger: 'blur' }
]
},
options: [
@ -101,8 +101,16 @@ export default {
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep .el-input-number .el-input__inner {
text-align: left;
<style lang="scss" scoped>
::v-deep .el-dialog {
.el-dialog__body {
.el-form-item{
margin-right: 5px;
&.field-form-item{
width: 334px;
margin-right: 0;
}
}
}
}
</style>

2
src/views/system/dept/index.vue

@ -30,8 +30,6 @@
</div>
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-form-item label="所属全宗" prop="dept">

180
src/views/system/dict/dictDetail.vue

@ -0,0 +1,180 @@
<template>
<div>
<!--工具栏-->
<div class="head-container" style="padding:0 0 20px 0">
<crudOperation :permission="permission">
<template v-slot:left>
<el-button v-permission="permission.add" size="mini" type="primary" icon="el-icon-plus" :disabled="!activeAddBtn" @click="crud.toAdd">新增</el-button>
</template>
<template v-slot:right>
<el-button v-permission="permission.del" icon="el-icon-delete" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">删除</el-button>
</template>
</crudOperation>
</div>
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="80px">
<el-form-item label="字典名称" prop="dicName">
<el-input v-model="form.dicName" style="width: 370px;" />
</el-form-item>
<el-form-item label="字典代码" prop="dicCode">
<el-input v-model="form.dicCode" style="width: 370px;" />
</el-form-item>
<el-form-item label="内容说明" prop="dicExplain">
<el-input v-model="form.dicExplain" style="width: 370px;" type="textarea" :rows="4" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</div>
</el-dialog>
<el-dialog title="删除字典内容" :visible.sync="deleteVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>确定删除当前字典内容吗</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleConfirm">确定</el-button>
</div>
</div>
</el-dialog>
<div class="container-right" style="min-height: calc(100vh - 242px);">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" highlight-current-row style="width: 100%;" @selection-change="selectionChangeHandler" @row-click="clickRowHandler">
<el-table-column type="selection" width="55" />
<el-table-column prop="dicName" label="字典名称" />
<el-table-column prop="dicCode" label="字典代码" />
<el-table-column prop="dicExplain" label="内容说明" />
</el-table>
<!--分页组件-->
<pagination />
</div>
</div>
</template>
<script>
import crudDictDetail from '@/api/archivesConfig/dictDetail'
import CRUD, { presenter, header, form } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
import pagination from '@crud/Pagination'
const defaultForm = { id: null, dicName: null, dicCode: null, dicExplain: null, dicType: false }
export default {
components: { crudOperation, pagination },
cruds() {
return [
CRUD({
title: '字典内容', url: 'api/dictrionary/findSubsetById', query: { id: '' },
crudMethod: { ...crudDictDetail },
optShow: {
add: false,
edit: true,
del: false,
reset: false,
download: false,
group: false
},
queryOnPresenterCreated: false,
sort: ['dicSequence,asc']
})
]
},
mixins: [
presenter(),
header(),
form(function() {
return Object.assign({ dicPid: this.dicPid }, defaultForm)
})
],
props: {
activeAddBtn: {
type: Boolean
}
},
data() {
return {
dicPid: null,
needRefreshTree: false,
rules: {
dicName: [
{ required: true, message: '请输入字典名称', trigger: 'blur' }
],
dicCode: [
{ required: true, message: '请输入字典代码', trigger: 'blur' }
]
},
permission: {
add: ['admin', 'dict:add'],
edit: ['admin', 'dict:edit'],
del: ['admin', 'dict:del']
},
deleteVisible: false,
deleteData: {}
}
},
methods: {
[CRUD.HOOK.afterSubmit]() {
this.needRefreshTree = true
},
[CRUD.HOOK.afterDelete]() {
this.needRefreshTree = true
},
//
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.id = this.dicPid
},
[CRUD.HOOK.afterRefresh](crud) {
if (this.needRefreshTree) {
this.needRefreshTree = false
this.$emit('treeRefresh', crud.data)
}
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
selectionChangeHandler(val) {
if (val.length > 1) {
// val
const finalVal = val.pop()
//
this.$refs.table.clearSelection()
//
this.$refs.table.toggleRowSelection(finalVal)
this.crud.selectionChangeHandler([finalVal])
} else {
this.crud.selectionChangeHandler(val)
}
},
toDelete(data) {
this.deleteData = data
this.deleteVisible = true
},
handleConfirm() {
this.deleteVisible = false
this.crud.delAllLoading = true
this.crud.doDelete(this.deleteData)
},
handleClose(done) {
this.deleteData = {}
done()
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
::v-deep thead .el-table-column--selection .cell {
display: none;
}
</style>

246
src/views/system/dict/index.vue

@ -0,0 +1,246 @@
<template>
<div class="app-container row-container">
<!--工具栏-->
<div class="head-container">
<crudOperation :permission="permission">
<!-- <template v-slot:left>
<el-button v-permission="permission.add" size="mini" type="primary" icon="el-icon-plus" :disabled="!activeAddBtn" @click="crud.toAdd">新增</el-button>
</template>
<template v-slot:right>
<el-button v-permission="permission.del" icon="el-icon-delete" size="mini" :loading="crud.delAllLoading" :disabled="crud.selections.length === 0" @click="toDelete(crud.selections)">删除</el-button>
</template> -->
</crudOperation>
</div>
<!--表单组件-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible="crud.status.cu > 0" :title="crud.status.title">
<div class="setting-dialog">
<el-form ref="form" inline :model="form" :rules="rules" size="small" label-width="90px">
<el-form-item label="字典名称" prop="dicName">
<el-input v-model="form.dicName" />
</el-form-item>
<el-form-item label="字典代码" prop="dicCode">
<el-input v-model="form.dicCode" />
</el-form-item>
<el-form-item label="顶级节点" prop="isTop">
<el-radio-group v-model="form.isTop">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="排序" prop="sequence">
<el-input-number
v-model.number="form.sequence"
:min="0"
:max="999"
controls-position="right"
/>
</el-form-item>
<el-form-item v-if="form.isTop === '0'" label="上级节点" prop="dicPid">
<treeselect
v-model="form.dicPid"
:load-options="loadDicts"
:options="dicts"
placeholder="选择上级节点"
/>
</el-form-item>
<el-form-item label="内容说明" prop="dicExplain">
<el-input v-model="form.dicExplain" type="textarea" :rows="4" style="width: 584px;" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="crud.cancelCU">取消</el-button>
<el-button :loading="crud.status.cu === 2" type="primary" @click="crud.submitCU">确认</el-button>
</div>
</div>
</el-dialog>
<el-dialog title="删除字典内容" :visible.sync="deleteVisible" :before-close="handleClose">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<div class="dialog-delt">
<p><span>确定删除当前字典内容吗</span></p>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click.native="handleConfirm">确定</el-button>
</div>
</div>
</el-dialog>
<div class="container-wrap">
<span class="right-top-line" />
<span class="left-bottom-line" />
<!--表格渲染-->
<!-- @selection-change="selectionChangeHandler"
@row-click="clickRowHandler" -->
<el-table
ref="table"
v-loading="crud.loading"
lazy
:load="getDicts"
:data="crud.data"
:tree-props="{children: 'childMenus', hasChildren: 'hasChildren'}"
highlight-current-row
row-key="id"
style="width: 100%;"
height="calc(100vh - 232px)"
@select="crud.selectChange"
@select-all="crud.selectAllChange"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="dicName" label="字典名称" />
<el-table-column prop="dicCode" label="字典代码" />
<el-table-column prop="dicExplain" label="内容说明" />
<el-table-column prop="dicSequence" label="排序" />
<el-table-column prop="createTime" label="创建日期" width="200px">
<template slot-scope="scope">
<div>{{ scope.row.createTime | parseTime }}</div>
</template>
</el-table-column>
</el-table>
<!--分页组件-->
<!-- <pagination /> -->
</div>
</div>
</template>
<script>
import crudDict from '@/api/archivesConfig/dict'
// import crudDictDetail from '@/api/archivesConfig/dictDetail'
import CRUD, { presenter, header, form } from '@crud/crud'
import crudOperation from '@crud/CRUD.operation'
// import pagination from '@crud/Pagination'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
import { LOAD_CHILDREN_OPTIONS } from '@riophae/vue-treeselect'
const defaultForm = { id: null, dicName: null, isTop: '1', dicCode: null, sequence: 999, dicExplain: null, dicType: false, dicPid: null }
export default {
name: 'Dict',
components: { crudOperation, Treeselect },
cruds() {
return [
CRUD({
title: '字典', url: 'api/dictrionary/menu',
crudMethod: { ...crudDict },
sort: ['dicSequence,asc']
})
]
},
mixins: [
presenter(),
header(),
form(function() {
return Object.assign({ dicPid: this.dicPid }, defaultForm)
})
],
props: {
activeAddBtn: {
type: Boolean
}
},
data() {
return {
dicts: [],
dicPid: null,
needRefreshTree: false,
rules: {
dicName: [
{ required: true, message: '请输入字典名称', trigger: 'blur' }
],
dicCode: [
{ required: true, message: '请输入字典代码', trigger: 'blur' }
],
isTop: [
{ required: true, message: '请选择是否为顶级节点', trigger: 'change' }
],
sequence: [
{ required: true, message: '请输入序号', trigger: 'blur', type: 'number' }
]
},
permission: {
add: ['admin', 'dict:add'],
edit: ['admin', 'dict:edit'],
del: ['admin', 'dict:del']
},
deleteVisible: false,
deleteData: {}
}
},
methods: {
[CRUD.HOOK.afterSubmit]() {
this.needRefreshTree = true
},
[CRUD.HOOK.afterDelete]() {
this.needRefreshTree = true
},
//
[CRUD.HOOK.beforeRefresh]() {
this.crud.query.id = this.dicPid
},
[CRUD.HOOK.afterRefresh](crud) {
if (this.needRefreshTree) {
this.needRefreshTree = false
this.$emit('treeRefresh', crud.data)
}
},
getDicts(tree, treeNode, resolve) {
const params = { pid: tree.id }
setTimeout(() => {
crudDict.getDicts(params).then(res => {
resolve(res.content)
})
}, 100)
},
//
loadDicts({ action, parentNode, callback }) {
if (action === LOAD_CHILDREN_OPTIONS) {
crudDict.getDicts({ enabled: true, pid: parentNode.id }).then(res => {
parentNode.childMenus = res.content.map(function(obj) {
if (obj.hasChildren) {
obj.children = null
}
return obj
})
setTimeout(() => {
callback()
}, 100)
})
}
},
clickRowHandler(row) {
this.$refs.table.clearSelection()
this.$refs.table.toggleRowSelection(row)
},
selectionChangeHandler(val) {
if (val.length > 1) {
// val
const finalVal = val.pop()
//
this.$refs.table.clearSelection()
//
this.$refs.table.toggleRowSelection(finalVal)
this.crud.selectionChangeHandler([finalVal])
} else {
this.crud.selectionChangeHandler(val)
}
},
toDelete(data) {
this.deleteData = data
this.deleteVisible = true
},
handleConfirm() {
this.deleteVisible = false
this.crud.delAllLoading = true
this.crud.doDelete(this.deleteData)
},
handleClose(done) {
this.deleteData = {}
done()
}
}
}
</script>
<style lang="scss" scoped>
</style>

6
src/views/system/field/index.vue

@ -18,8 +18,8 @@
<script>
import commonFields from './commonFields/index.vue'
import electronicFields from './electronicFields/index.vue'
import systemFields from './systemFields/index.vue'
import electronicFields from './electronicFields/index.vue'
export default {
name: 'FiledManage',
@ -38,9 +38,9 @@ export default {
if (this.activeIndex === 0) {
return 'commonFields'
} else if (this.activeIndex === 1) {
return 'electronicFields'
} else if (this.activeIndex === 2) {
return 'systemFields'
} else if (this.activeIndex === 2) {
return 'electronicFields'
}
return 'commonFields'
}

8
src/views/system/menu/index.vue

@ -12,8 +12,6 @@
</div>
<!--表单渲染-->
<el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title">
<span class="dialog-right-top" />
<span class="dialog-left-bottom" />
<div class="setting-dialog">
<el-form ref="form" :inline="true" :model="form" :rules="rules" size="small" label-width="100px">
<el-row>
@ -42,30 +40,24 @@
</el-form-item>
</el-row>
<el-row>
<!-- <el-col :span="8"> -->
<el-form-item v-show="form.type.toString() !== '2'" class="menu-radio" label="外链菜单" prop="iFrame">
<el-radio-group v-model="form.iFrame" size="mini">
<el-radio-button label="true"></el-radio-button>
<el-radio-button label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
<!-- </el-col>
<el-col :span="8"> -->
<el-form-item v-show="form.type.toString() !== '2'" class="menu-radio" label="菜单可见" prop="hidden">
<el-radio-group v-model="form.hidden" size="mini">
<el-radio-button label="false"></el-radio-button>
<el-radio-button label="true"></el-radio-button>
</el-radio-group>
</el-form-item>
<!-- </el-col>
<el-col :span="8"> -->
<el-form-item v-show="form.type.toString() === '1'" class="menu-radio" label="菜单缓存" prop="cache">
<el-radio-group v-model="form.cache" size="mini">
<el-radio-button label="true"></el-radio-button>
<el-radio-button label="false"></el-radio-button>
</el-radio-group>
</el-form-item>
<!-- </el-col> -->
</el-row>
<el-form-item v-if="form.type.toString() !== '2'" label="菜单名称" prop="title" :class="form.type.toString() === '0'?'menu-is-row':'menu-is-item'">
<el-input v-model="form.title" placeholder="请输入" />

0
src/views/system/metadata/index.vue

Loading…
Cancel
Save