1
0
mirror of https://github.com/PanJiaChen/vue-element-admin.git synced 2025-08-13 23:20:12 +08:00

Add support to default date format from language definition (#494)

* Add support to default date format from language definition

* Add optional format for format field
This commit is contained in:
Yamel Senih 2020-05-12 03:11:02 -04:00 committed by GitHub
parent 175a8fb4d1
commit c03a3278da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 149 additions and 70 deletions

View File

@ -53,6 +53,6 @@ export function getCountryDefinition({ countryUuid, countryId }) {
} }
// Get languages from api // Get languages from api
export function requestLanguages({ pageToken, pageSize }) { export function listLanguages({ pageToken, pageSize }) {
return Instance.call(this).requestListLanguages({ pageToken, pageSize }) return Instance.call(this).requestListLanguages({ pageToken, pageSize })
} }

View File

@ -248,7 +248,7 @@ import FixedColumns from '@/components/ADempiere/DataTable/fixedColumns'
import TableContextMenu from '@/components/ADempiere/DataTable/menu/tableContextMenu' import TableContextMenu from '@/components/ADempiere/DataTable/menu/tableContextMenu'
import TableMainMenu from '@/components/ADempiere/DataTable/menu' import TableMainMenu from '@/components/ADempiere/DataTable/menu'
import IconElement from '@/components/ADempiere/IconElement' import IconElement from '@/components/ADempiere/IconElement'
import { formatDate } from '@/filters/ADempiere' import { formatField } from '@/utils/ADempiere/valueFormat'
import MainPanel from '@/components/ADempiere/Panel' import MainPanel from '@/components/ADempiere/Panel'
import { sortFields } from '@/utils/ADempiere/dictionaryUtils' import { sortFields } from '@/utils/ADempiere/dictionaryUtils'
import { FIELDS_DECIMALS, FIELDS_QUANTITY, FIELDS_READ_ONLY_FORM } from '@/utils/ADempiere/references' import { FIELDS_DECIMALS, FIELDS_QUANTITY, FIELDS_READ_ONLY_FORM } from '@/utils/ADempiere/references'
@ -625,7 +625,7 @@ export default {
cell = cell.getTime() cell = cell.getTime()
} }
// replace number timestamp value for date // replace number timestamp value for date
return formatDate(cell, field.displayType) return formatField(cell, field.displayType)
} else if (field.componentPath === 'FieldNumber') { } else if (field.componentPath === 'FieldNumber') {
if (this.isEmptyValue(row[field.columnName])) { if (this.isEmptyValue(row[field.columnName])) {
return undefined return undefined

View File

@ -84,7 +84,7 @@ export default {
}, },
computed: { computed: {
languageList() { languageList() {
return this.$store.getters.getLanguagesList.filter(itemLanguage => { return this.$store.getters['user/getLanguagesList'].filter(itemLanguage => {
return !itemLanguage.isBaseLanguage return !itemLanguage.isBaseLanguage
}) })
}, },

View File

@ -1,20 +0,0 @@
import moment from 'moment'
/**
*
* @param {number} value
* @param {string} type, Date, DateTime, Time
*/
export function formatDate(value, referenceType = 'DateTime') {
if (typeof value === 'number') {
var dateTime = moment.utc(value)
var format = 'YYYY-MM-DD HH:mm'
if (referenceType === 'Time') {
format = 'HH:mm'
} else if (referenceType === 'Date') {
format = 'YYYY-MM-DD'
}
return dateTime.format(format)
}
return null
}

View File

@ -66,5 +66,3 @@ export function toThousandFilter(num) {
export function uppercaseFirst(string) { export function uppercaseFirst(string) {
return string.charAt(0).toUpperCase() + string.slice(1) return string.charAt(0).toUpperCase() + string.slice(1)
} }
export * from '@/filters/ADempiere/'

View File

@ -15,6 +15,8 @@ const getters = {
getRoleUuid: state => state.user.role.uuid, getRoleUuid: state => state.user.role.uuid,
roles: state => state.user.roles, roles: state => state.user.roles,
permission_routes: state => state.permission.routes, permission_routes: state => state.permission.routes,
errorLogs: state => state.errorLog.logs errorLogs: state => state.errorLog.logs,
getLanguagesList: state => state.user.getLanguagesList,
getCurrentLanguageDefinition: state => state.user.getCurrentLanguageDefinition
} }
export default getters export default getters

View File

@ -1,17 +1,11 @@
import { requestLanguages } from '@/api/ADempiere/system-core'
import { requestTranslations, updateEntity } from '@/api/ADempiere/persistence' import { requestTranslations, updateEntity } from '@/api/ADempiere/persistence'
import { isEmptyValue } from '@/utils/ADempiere/valueUtils' import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
const languageControl = { const languageControl = {
state: { state: {
languagesList: [],
translationsList: [] translationsList: []
}, },
mutations: { mutations: {
setlanguagesList(state, payload) {
state.languagesList = payload
},
// Add data in container
addTranslationToList(state, payload) { addTranslationToList(state, payload) {
state.translationsList.push(payload) state.translationsList.push(payload)
}, },
@ -26,21 +20,11 @@ const languageControl = {
}, },
resetStateTranslations(state) { resetStateTranslations(state) {
state.translationsList = [] state.translationsList = []
state.translationsList = []
state.currentLanguage = {}
} }
}, },
actions: { actions: {
getLanguagesFromServer({ commit }) {
return new Promise(resolve => {
requestLanguages({ pageToke: undefined, pageSize: undefined })
.then(languageResponse => {
commit('setlanguagesList', languageResponse.languagesList)
resolve(languageResponse.languagesList)
})
.catch(error => {
console.warn(`Error getting Languages List: ${error.message}. Code: ${error.code}.`)
})
})
},
setTranslation({ state, commit }, { setTranslation({ state, commit }, {
containerUuid, containerUuid,
tableName, tableName,
@ -170,9 +154,6 @@ const languageControl = {
} }
}, },
getters: { getters: {
getLanguagesList: (state) => {
return state.languagesList
},
getLanguageByParameter: (state) => (parameter) => { getLanguageByParameter: (state) => (parameter) => {
const list = state.languagesList const list = state.languagesList
list.forEach(language => { list.forEach(language => {

View File

@ -13,11 +13,12 @@ import {
removeCurrentWarehouse, removeCurrentWarehouse,
removeCurrentOrganization removeCurrentOrganization
} from '@/utils/auth' } from '@/utils/auth'
import { getOrganizationsList, getWarehousesList } from '@/api/ADempiere/system-core' import { getOrganizationsList, getWarehousesList, listLanguages } from '@/api/ADempiere/system-core'
import router, { resetRouter } from '@/router' import router, { resetRouter } from '@/router'
import { showMessage } from '@/utils/ADempiere/notification' import { showMessage } from '@/utils/ADempiere/notification'
import { isEmptyValue } from '@/utils/ADempiere/valueUtils' import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
import language from '@/lang' import { convertDateFormat } from '@/utils/ADempiere/valueFormat'
import { language, getLanguage } from '@/lang'
const state = { const state = {
token: getToken(), token: getToken(),
@ -31,6 +32,7 @@ const state = {
organizationsList: [], organizationsList: [],
organization: {}, organization: {},
warehousesList: [], warehousesList: [],
languagesList: [],
warehouse: {}, warehouse: {},
isSession: false, isSession: false,
sessionInfo: {} sessionInfo: {}
@ -78,10 +80,32 @@ const mutations = {
}, },
setSessionInfo(state, payload) { setSessionInfo(state, payload) {
state.sessionInfo = payload state.sessionInfo = payload
},
setLanguagesList: (state, payload) => {
state.languagesList = Object.freeze(payload.map(language => {
const languageDefinition = {
...language,
datePattern: convertDateFormat(language.datePattern),
timePattern: convertDateFormat(language.timePattern)
}
return languageDefinition
}))
} }
} }
const actions = { const actions = {
getLanguagesFromServer({ commit }) {
return new Promise(resolve => {
listLanguages({ pageToke: undefined, pageSize: undefined })
.then(languageResponse => {
commit('setLanguagesList', languageResponse.languagesList)
resolve(languageResponse.languagesList)
})
.catch(error => {
console.warn(`Error getting Languages List: ${error.message}. Code: ${error.code}.`)
})
})
},
// user login // user login
login({ commit }, { login({ commit }, {
userName, userName,
@ -382,23 +406,16 @@ const actions = {
router.addRoutes(response) router.addRoutes(response)
}) })
}) })
// return new Promise(async resolve => {
// const token = role
// commit('SET_TOKEN', token)
// commit('SET_CURRENTROLE',)
// setToken(token)
// const { roles } = await dispatch('getInfo')
// generate accessible routes map based on roles
// const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true })
// dynamically add accessible routes
// router.addRoutes(accessRoutes)
// })
} }
} }
const getters = { const getters = {
getLanguagesList: (state) => {
return state.languagesList
},
getCurrentLanguageDefinition: (state) => {
return state.languagesList.find(definition => definition.languageISO === getLanguage())
},
getRoles: (state) => { getRoles: (state) => {
return state.rolesList return state.rolesList
}, },

View File

@ -0,0 +1,99 @@
// A util class for handle format for time, date and others values to beused to display information
// Note that this file use moment library for a easy conversion
import moment from 'moment'
import { isEmptyValue } from '@/utils/ADempiere/valueUtils'
import store from '@/store'
import { DATE, DATE_PLUS_TIME, TIME } from '@/utils/ADempiere/references'
// This function just convert all java date format to moment format.
// For know about java format pattern see: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
// Also you can read moment docus: https://momentjs.com/docs/
export function convertDateFormat(dateFormat) {
return dateFormat
// Year
.replace(/\byy\b/g, 'YY')
.replace(/\byyyy\b/g, 'YYYY')
// Short Day of month
.replace(/\bdd\b/g, 'DD')
// Week of Year
.replace(/\bw\b/g, 'W')
// Long Day
.replace(/\bEEE\b/g, 'ddd')
.replace(/\bu\b/g, 'dddd')
// Hour
.replace(/\bhh\b/g, 'h')
.replace(/\bK\b/g, 'h')
.replace(/\baaa\b/g, 'a')
// Hour 24
.replace(/\bk\b/g, 'HH')
// Day of Year
.replace(/\bD\b/g, 'DDD')
// Day of Week
.replace(/\bF\b/g, 'R')
// Time zone
.replace(/\bz\b/g, 'Z')
}
// Format a date with specific format, if format is void use default date format for language
export function formatDate(date, isTime = false) {
if (isEmptyValue(date)) {
return undefined
}
// Format
return moment.utc(date).format(getDateFormat({
isTime
}))
}
// Return a format for field depending of reference for him
export function formatField(value, reference, optionalFormat) {
if (isEmptyValue(value)) {
return undefined
}
if (!reference) {
return value
}
// Format
let formattedValue
switch (reference) {
case DATE.id:
formattedValue = moment.utc(value).format(getDateFormat({
format: optionalFormat
}))
break
case DATE_PLUS_TIME.id:
formattedValue = moment.utc(value).format(getDateFormat({
isTime: true
}))
break
case TIME.id:
formattedValue = moment.utc(value).format(getDateFormat({
isTime: true
}))
break
default:
formattedValue = value
}
return formattedValue
}
// Get default format without format pattern
export function getDefaultFormat(isTime) {
return getDateFormat({
isTime
})
}
// Get default format or optional
function getDateFormat({
format,
isTime
}) {
if (format) {
return format
}
// Else
const languageDefinition = store.getters['user/getCurrentLanguageDefinition']
if (languageDefinition) {
return isTime ? languageDefinition.timePattern : languageDefinition.datePattern
}
}

View File

@ -123,7 +123,9 @@ export default {
}) })
}, },
getLanguageData() { getLanguageData() {
this.$store.dispatch('getLanguagesFromServer') if (this.isEmptyValue(this.getLanguageList)) {
this.$store.dispatch('user/getLanguagesFromServer')
}
} }
} }
} }

View File

@ -34,11 +34,11 @@
:filterable="true" :filterable="true"
value-key="key" value-key="key"
:placeholder="$t('profile.changeLanguagePlaceholder')" :placeholder="$t('profile.changeLanguagePlaceholder')"
@visible-change="getLanguageList" @visible-change="loadLanguageList"
@change="changeLanguage" @change="changeLanguage"
> >
<el-option <el-option
v-for="item in getterLanguageList" v-for="item in getLanguageList"
:key="item.value" :key="item.value"
:label="item.languageName" :label="item.languageName"
:value="item.languageISO" :value="item.languageISO"
@ -68,7 +68,7 @@ export default {
getRolesList() { getRolesList() {
return this.$store.getters['user/getRoles'] return this.$store.getters['user/getRoles']
}, },
getterLanguageList() { getLanguageList() {
return this.$store.getters.getLanguagesList return this.$store.getters.getLanguagesList
}, },
isMobile() { isMobile() {
@ -102,14 +102,14 @@ export default {
changeLanguage(languageValue) { changeLanguage(languageValue) {
this.currentLanguage = languageValue this.currentLanguage = languageValue
}, },
getLanguageList(open) { loadLanguageList(open) {
if (open) { if (open) {
this.getLanguageData() this.getLanguageData()
} }
}, },
getLanguageData() { getLanguageData() {
if (this.isEmptyValue(this.getterLanguageList)) { if (this.isEmptyValue(this.getLanguageList)) {
this.$store.dispatch('getLanguagesFromServer') this.$store.dispatch('user/getLanguagesFromServer')
} }
} }
} }