Browse Source

菜單多語言维护

master
[li_she] 5 years ago
parent
commit
1e420211f0
  1. 7
      src/api/sysLanguageMenu.js
  2. 10
      src/views/main-navbar.vue
  3. 23
      src/views/modules/knifemold/receive.vue
  4. 30
      src/views/modules/sys/language/common.vue
  5. 438
      src/views/modules/sys/language/menu.vue
  6. 93
      src/views/modules/sys/menu-language.vue
  7. 16
      src/views/modules/sys/menu.vue

7
src/api/sysLanguageMenu.js

@ -0,0 +1,7 @@
import { createAPI } from "@/utils/httpRequest.js";
// 获取 语言列表
export const searchMenuLanguageById = data => createAPI(`sys/menu/searchMenuLanguageById`,'post',data)
// 保存语言
export const saveMenuLanguage = data => createAPI(`sys/menu/saveMenuLanguage`,'post',data)

10
src/views/main-navbar.vue

@ -195,7 +195,15 @@
width: 2em;
}
.el-menu--collapse .el-menu .el-submenu, .el-menu--popup, .el-menu-item{
min-width: 100px!important;
min-width: 50px!important;
}
.site-navbar__brand-lg, .site-navbar__brand-mini {
margin: 0 5px;
color: #fff;
margin-left: -45px;
}
</style>

23
src/views/modules/knifemold/receive.vue

@ -77,17 +77,17 @@
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="80"
:label="buttons.cz">
<template slot-scope="scope">
<a @click="addOrUpdateHandle(scope.row.id)">{{buttons.edit}}|</a>
<a @click="deleteHandle(scope.row.id)">{{buttons.delete}}</a>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- fixed="right"-->
<!-- header-align="center"-->
<!-- align="center"-->
<!-- width="80"-->
<!-- :label="buttons.cz">-->
<!-- <template slot-scope="scope">-->
<!-- <a @click="addOrUpdateHandle(scope.row.id)">{{buttons.edit}}|</a>-->
<!-- <a @click="deleteHandle(scope.row.id)">{{buttons.delete}}</a>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@ -224,7 +224,6 @@ import {
saveButtonList,
searchSysLanguage,
searchLanguageListByLanguageCode,
saveSysLanguagePack,
saveSysLanguageOne
} from "@/api/sysLanguage.js"
import {

30
src/views/modules/sys/language/common.vue

@ -47,7 +47,6 @@
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
@ -77,17 +76,17 @@
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="80"
:label="buttons.cz">
<template slot-scope="scope">
<a @click="addOrUpdateHandle(scope.row.id)">{{buttons.edit}}|</a>
<a @click="deleteHandle(scope.row.id)">{{buttons.delete}}</a>
</template>
</el-table-column>
<!-- <el-table-column-->
<!-- fixed="right"-->
<!-- header-align="center"-->
<!-- align="center"-->
<!-- width="80"-->
<!-- :label="buttons.cz">-->
<!-- <template slot-scope="scope">-->
<!-- <a @click="addOrUpdateHandle(scope.row.id)">{{buttons.edit}}|</a>-->
<!-- <a @click="deleteHandle(scope.row.id)">{{buttons.delete}}</a>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@ -106,8 +105,8 @@
<!-- v-for="(item,index) in columnList" :key="item.columnProp"-->
<!-- :sortable="item.columnSortable"-->
<!-- :prop="item.columnProp"-->
<!-- :header-align="item.headerAlign"-->
<!-- :show-overflow-tooltip="item.showOverflowTooltip"-->
<!-- :he
show-overflow-tooltip="item.showOverflowTooltip"-->
<!-- :align="item.align"-->
<!-- :fixed="item.fixed"-->
<!-- :width="item.columnWidth"-->
@ -215,7 +214,7 @@
</div>
</template>
<script>
<script>
import {
searchSysLanguagePackList,
@ -224,7 +223,6 @@
saveButtonList,
searchSysLanguage,
searchLanguageListByLanguageCode,
saveSysLanguagePack,
saveSysLanguageOne
} from "@/api/sysLanguage.js"
import {

438
src/views/modules/sys/language/menu.vue

@ -1,438 +0,0 @@
<template>
<div class="mod-config">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.key" :placeholder="$t('commonsearch')" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()" type="primary">{{$t('commonsearch')}}</el-button>
<el-button v-if="isAuth(':prd:save')" type="primary" @click="addOrUpdateHandle()">{{$t('commonadd')}}
</el-button>
<el-button @click="saveColumnList()" type="primary" v-show="showDefault">设置默认配置</el-button>
<el-button @click="userSetting" type="primary">{{$t('commonsettingTable')}}</el-button>
<download-excel
:data="dataList"
class="el-button el-button--primary el-button--medium"
name=" ">
{{$t('commondownload')}}
</download-excel>
<el-button v-if="isAuth(':prd:delete')" type="danger" @click="deleteHandle()"
:disabled="dataListSelections.length <= 0">{{$t('commondeleteList')}}
</el-button>
</el-form-item>
</el-form>
<el-table
:data="dataList"
border
v-loading="dataListLoading"
@selection-change="selectionChangeHandle"
style="width: 100%;"
:header-cell-style="{
'background-color': '#17b3a3',
'color': '#fff',
'font-weight': '400'
}">
<el-table-column
type="selection"
header-align="center"
width="40"
align="center">
</el-table-column>
<el-table-column
v-for="(item,index) in columnList" :key="item.columnProp"
:sortable="item.columnSortable"
:prop="item.columnProp"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip"
:align="item.align"
:fixed="item.fixed"
:width="item.columnWidth"
:label="item.columnLabel">
<template slot-scope="scope">
<span v-if="!item.columnHidden"> {{scope.row[item.columnProp]}}</span>
<span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
style="width: 100px; height: 80px"/></span>
</template>
</el-table-column>
<el-table-column
fixed="right"
header-align="center"
align="center"
width="150"
:label="$t('commoncz')">
<template slot-scope="scope">
<a type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{$t('commonedit')}}</a>
<a type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('commondelete')}}</a>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
<el-dialog title="设置table列" :visible.sync="visible" width="1000px">
<el-form @keyup.enter.native="updateColumnList()"
v-model="userColumnList"
inline="inline"
size="mini"
label-width="80px">
<el-form-item v-for="(item,index) in userColumnList"
:key="item.columnProp"
:label="item.columnLabel"
:prop="item.columnProp">
<el-form-item>
排序
<el-input-number v-model="item.sortLv" controls-position="right" size="mini" :min="0"
:max="10"></el-input-number>
</el-form-item>
<el-form-item>
<el-switch
v-model="item.status"
active-text="显示"
inactive-text="隐藏">
</el-switch>
</el-form-item>
<el-form-item>
<el-switch
v-model="item.columnSortable"
active-text="排序"
inactive-text="不排序">
</el-switch>
</el-form-item>
<el-form-item>
<el-switch
v-model="item.fixed"
active-text="固定"
inactive-text="不固定">
</el-switch>
</el-form-item>
<el-form-item>
宽度
<el-input-number v-model="item.columnWidth" controls-position="right" size="mini" :min="0"
:max="1000"></el-input-number>
</el-form-item>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="updateColumnList()">确定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {getPrdList} from "@/api/prd.js"
import {
saveTableDefaultList,
saveTableUser,
getTableDefaultListLanguage,
getTableUserListLanguage
} from "@/api/table.js"
export default {
data() {
return {
functionId: 9001,
tableId: "common1001",
value1: true,
visible: false,
showDefault: false,
queryTable: {
functionId: 9001,
tableId: "common1001",
languageCode: this.$i18n.locale
},
queryTableUser: {
userId: this.$store.state.user.name,
functionId: 9001,
tableId: "common1001",
status: true,
languageCode: this.$i18n.locale
},
dataForm: {
key: ''
},
userColumnList: [],
columnList: [
{
userId: this.$store.state.user.name,
functionId: 9001,
serialNumber: 'common1001languageCode',
tableId: "common1001",
tableName: "common",
columnProp: "languageCode",
headerAlign: "center",
align: "center",
columnLabel: "语言编码",
columnHidden: false,
columnImage: false,
columnSortable: true,
sortLv: 0,
status: true,
fixed: false,
}, {
userId: this.$store.state.user.name,
functionId: 9001,
serialNumber: 'common1001functionId',
tableId: "common1001",
tableName: "common",
columnProp: "functionId",
headerAlign: "center",
align: "center",
columnLabel: "功能编码",
columnHidden: false,
columnImage: false,
columnSortable: true,
sortLv: 0,
status: true,
fixed: false
}, {
userId: this.$store.state.user.name,
functionId: 9001,
serialNumber: 'common1001serialNumber',
tableId: "common1001",
tableName: "common",
columnProp: "serialNumber",
headerAlign: "center",
align: "center",
columnLabel: "序列化编码",
columnHidden: false,
columnImage: false,
columnSortable: true,
sortLv: 0,
status: true,
fixed: false,
},
{
userId: this.$store.state.user.name,
functionId: 9001,
serialNumber: 'common1001type',
tableId: "common1001",
tableName: "common",
columnProp: " type",
headerAlign: "center",
align: "center",
columnLabel: "类型",
columnHidden: false,
columnImage: false,
columnSortable: true,
sortLv: 0,
status: true,
fixed: false,
}, {
userId: this.$store.state.user.name,
functionId: 9001,
serialNumber: 'common1001value',
tableId: "common1001",
tableName: "common",
columnProp: " value",
headerAlign: "center",
align: "center",
columnLabel: "语言编码",
columnHidden: false,
columnImage: false,
columnSortable: true,
sortLv: 0,
status: true,
fixed: false,
}
],
dataList: [],
queryPrd: {
page: 1,
limit: 1,
key: ''
},
pageIndex: 1,
pageSize: 10,
totalPage: 0,
dataListLoading: false,
dataListSelections: [],
addOrUpdateVisible: false
}
},
activated() {
this.getDataList()
},
methods: {
//
userSetting() {
this.visible = true;
this.getTableUserAll()
},
//
getTableUserAll() {
let queryTable = {
userId: this.$store.state.user.name,
functionId: 1001,
tableId: "prd1001",
languageCode: this.$i18n.locale
}
getTableUserListLanguage(queryTable).then(({data}) => {
if (data.code == 0) {
this.userColumnList = data.rows
if (data.rows.length <= 0) {
getTableDefaultListLanguage(this.queryTable).then(({data}) => {
this.userColumnList = data.rows
})
}
}
})
},
// table
updateColumnList() {
let userColumns = []
for (let column of this.userColumnList) {
let userColumn = {
userId: this.$store.state.user.name,
functionId: column.functionId,
tableId: column.tableId,
tableName: column.tableName,
columnProp: column.columnProp,
headerAlign: column.headerAlign,
align: column.align,
columnWidth: column.columnWidth,
//columnLabel: column.columnLabel,
columnHidden: column.columnHidden,
columnImage: column.columnImage,
columnSortable: column.columnSortable,
format: column.format,
sortLv: column.sortLv,
status: column.status,
fixed: column.fixed,
serialNumber: column.serialNumber
}
userColumns.push(userColumn)
}
saveTableUser(userColumns).then(({data}) => {
if (data.code == 0) {
this.$message.success(data.msg)
this.visible = false
this.getTableUserColumn()
} else {
this.$message.error(data.msg)
}
})
},
//
getTableUserColumn() {
getTableUserListLanguage(this.queryTableUser).then(({data}) => {
if (data.rows.length > 0) {
this.columnList = []
this.columnList = data.rows
} else {
this.getColumnList()
}
})
},
//
saveColumnList() {
saveTableDefaultList(this.columnList).then(({data}) => {
if (data.code == 0) {
this.$message.success(data.msg)
this.showDefault = false
} else {
this.$message.error(data.msg)
}
})
this.getColumnList()
},
// tableDefault
getColumnList() {
getTableDefaultListLanguage(this.queryTable).then(({data}) => {
if (!data.rows.length == 0) {
this.showDefault = false
this.columnList = data.rows
} else {
this.showDefault = true
}
})
},
//
getDataList() {
this.dataListLoading = true
getPrdList(this.queryPrd).then(({data}) => {
if (data && data.code === 0) {
this.dataList = data.page.list
this.totalPage = data.page.totalCount
} else {
this.dataList = []
this.totalPage = 0
}
this.dataListLoading = false
})
},
//
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
//
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
},
//
selectionChangeHandle(val) {
this.dataListSelections = val
},
//
deleteHandle(id) {
var ids = id ? [id] : this.dataListSelections.map(item => {
return item.id
})
this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http({
url: this.$http.adornUrl('//prd/delete'),
method: 'post',
data: this.$http.adornData(ids, false)
}).then(({data}) => {
if (data && data.code === 0) {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.getDataList()
}
})
} else {
this.$message.error(data.msg)
}
})
})
},
},
created() {
this.getTableUserColumn()
}
}
</script>
<style>
.el-table th {
display: table-cell !important;
}
</style>

93
src/views/modules/sys/menu-language.vue

@ -0,0 +1,93 @@
<template>
<el-dialog
width="350px"
title="语言"
:close-on-click-modal="false"
:visible.sync="visible">
<el-form
v-model="dataList"
inline="inline"
size="mini"
label-width="80px">
<el-form-item v-for="(item,index) in dataList"
:key="item.columnProp"
:label="item.columnLabel"
:prop="item.columnProp">
<el-form-item>
{{item.languageCode }}
</el-form-item>
<el-form-item>
<el-input v-model="item.languageValue" controls-position="right" style="display:inline"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="dataFormSubmit(item)"> {{buttons.add}}</el-button>
</el-form-item>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false" type="primary">关闭</el-button>
</span>
</el-dialog>
</template>
<script>
import {searchMenuLanguageById,saveMenuLanguage} from '@/api/sysLanguageMenu.js'
export default {
data() {
return {
visible: false,
addLanguage: false,
functionId: 9001,
tableId: "common1001",
value1: true,
showDefault: false,
dataListLoading: false,
dataList: [],
querySysLanguageParam: {},
buttons: {
add: '确认',
},
}
},
methods: {
init(id) {
this.visible = true
let menu = {
menuId: id
}
searchMenuLanguageById(menu).then(({data}) =>{
this.dataList = data.menuLanguageList
})
},
saveLanguageList(){
},
//
getDataList() {
this.dataListLoading = false
},
//
dataFormSubmit(val) {
saveMenuLanguage(val).then(({data})=>{
if (data.code == 0){
this.$message.success(data.msg)
}else {
this.$message.error(data.msg)
}
})
}
}
}
</script>
<style lang="scss">
.el-form-item--mini.el-form-item, .el-form-item--small.el-form-item {
margin-bottom: 5px;
}
</style>

16
src/views/modules/sys/menu.vue

@ -74,16 +74,19 @@
<template slot-scope="scope">
<a v-if="isAuth('sys:menu:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.menuId)">修改</a>
<a v-if="isAuth('sys:menu:delete')" type="text" size="small" @click="deleteHandle(scope.row.menuId)">删除</a>
<a v-if="isAuth('sys:menu:delete')" type="text" size="small" @click="addOrUpdateLanguage(scope.row.menuId)">语言</a>
</template>
</el-table-column>
</el-table>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<MenuLanguage v-if="menuLanguageVisible" ref="menuLanguageAdd" @refreshDataList="getDataList"></MenuLanguage>
</div>
</template>
<script>
import AddOrUpdate from './menu-add-or-update'
import MenuLanguage from './menu-language'
import { treeDataTranslate } from '@/utils'
export default {
data () {
@ -91,11 +94,13 @@
dataForm: {},
dataList: [],
dataListLoading: false,
addOrUpdateVisible: false
addOrUpdateVisible: false,
menuLanguageVisible: false,
}
},
components: {
AddOrUpdate
AddOrUpdate,
MenuLanguage
},
activated () {
this.getDataList()
@ -120,6 +125,13 @@
this.$refs.addOrUpdate.init(id)
})
},
//
addOrUpdateLanguage (id) {
this.menuLanguageVisible = true
this.$nextTick(() => {
this.$refs.menuLanguageAdd.init(id)
})
},
//
deleteHandle (id) {
this.$confirm(`确定对[id=${id}]进行[删除]操作?`, '提示', {

Loading…
Cancel
Save