@wasateam/wswswswswsapicms
Version:
## Project setup ``` yarn install ```
210 lines (209 loc) • 6.67 kB
JavaScript
import vuetify from '@/plugins/vuetify.js'
export default {
methods: {
$_CMS_getLabelByHideLabelFields(fieldKey, fields, hideLabelFields) {
if (!hideLabelFields) {
return this.$_CMS_getFieldByFieldKey(fieldKey, fields).label;
} else {
if (hideLabelFields.indexOf(fieldKey) >= 0) {
return null;
} else {
return this.$_CMS_getFieldByFieldKey(fieldKey, fields).label;
}
}
},
$_CMS_getFieldByFieldKey(fieldKey, fields) {
const keyArr = fieldKey.split(".");
let target = fields;
for (let i = 0; i < keyArr.length; i++) {
const keyItem = keyArr[i];
if (i == 0) {
if (target[keyItem] !== undefined) {
target = target[keyItem];
} else {
return null;
}
} else {
if (target.fields[keyItem] !== undefined) {
target = target.fields[keyItem];
} else {
return null;
}
}
}
return target;
},
$_CMS_getVersionsFields(versionsFields, keyPre = "", labelPre = "") {
let versions_fields = {};
for (let versionsFieldKey in versionsFields) {
const versionsField = versionsFields[versionsFieldKey];
if (versionsField.type == "locales") {
versions_fields = {
...this.$_CMS_getLocalesFields(
versionsField.fields,
`${keyPre}last_version__`,
"最新版本-"
),
...versions_fields
};
} else {
versions_fields[`${keyPre}last_version__${versionsFieldKey}`] = {
...versionsField,
label: `${labelPre}最新版本-${versionsField.label}`,
showOnly: true,
};
}
}
return versions_fields;
},
$_CMS_getLocalesFields(localesFields, keyPre = "", labelPre = "") {
let locales_fields = {};
for (let localesFieldKey in localesFields) {
const localesField = localesFields[localesFieldKey];
locales_fields[`${keyPre}locales_main__${localesFieldKey}`] = {
...localesField,
label: `主語言-${labelPre}${localesField.label}`,
showOnly: true
};
const tarLocale = this.$store.state.locale.locales.find(e => {
return e.code == this.$store.state.locale.selectingLocale
})
locales_fields[
`${keyPre}locales_${this.$store.state.locale.selectingLocale}__${localesFieldKey}`
] = {
...localesField,
label: `${labelPre}${tarLocale.name}-${localesField.label}`,
showOnly: true
};
// locales.forEach(locale => {
// locales_fields[
// `${keyPre}locales_${locale.code}__${localesFieldKey}`
// ] = {
// ...localesField,
// label: `${labelPre}${locale.name}-${localesField.label}`,
// showOnly: true
// };
// });
}
return locales_fields;
},
$_CMS_geUpdateFields(fields, updateHideFields) {
let _fields = {};
for (let fieldKey in fields) {
if (updateHideFields && updateHideFields.includes(fieldKey)) {
continue
}
const field = fields[fieldKey];
if (field.readonly) {
continue
} else {
_fields[fieldKey] = field;
}
}
return _fields;
},
$_CMS_getDisplayFields(fields) {
let _fields = {};
for (let fieldKey in fields) {
const field = fields[fieldKey];
if (field.type == "last_version") {
_fields = {
...this.$_CMS_getVersionsFields(field.fields),
..._fields
};
} else if (field.type == "locales") {
_fields = {
...this.$_CMS_getLocalesFields(field.fields),
..._fields
};
} else {
_fields[fieldKey] = field;
}
}
return _fields;
},
// Get value from key in sequence string format
$_CMS_getValueByFieldKey(fieldKey, valueItem) {
const keyArr = fieldKey.split(".");
let target = valueItem;
for (let i = 0; i < keyArr.length; i++) {
const keyItem = keyArr[i];
let targetKey = keyItem;
if (targetKey == 'locales' && keyArr.length > 1) {
continue
}
if (target[targetKey] !== undefined) {
target = target[targetKey];
} else {
return null;
}
}
return target;
},
// Model update data set for v-model
$_CMS_updateDataSetFromFields(template, updateData, fields, item) {
for (let fieldKey in fields) {
const field = fields[fieldKey];
if (field.readonly) {
continue;
}
let valueKey = fieldKey;
if (item && item[valueKey] != undefined) {
if (field.type == "last_version" && item) {
template.$set(updateData, fieldKey, item[valueKey]);
} else if (field.type == "belongsTo" && item) {
template.$set(updateData, fieldKey, item[valueKey].id);
} else if (field.type == "hasMany" && item) {
const _value = [];
item[fieldKey].forEach((itemValueItem) => {
_value.push(itemValueItem.id);
});
template.$set(updateData, fieldKey, _value);
} else {
template.$set(updateData, fieldKey, item[valueKey]);
}
} else if (field.defaultValue !== undefined) {
template.$set(updateData, fieldKey, field.defaultValue);
continue;
} else {
template.$set(updateData, fieldKey, null);
}
}
},
},
computed: {
_CMS_theme() {
return vuetify.userPreset.theme.dark ? "dark" : "light";
},
_CMS_mainScope() {
if (!this.$store.state.user.currentUser || !this.$store.state.user.currentUser.scopes || !this.$store.state.user.currentUser.scopes.length) {
return null
}
if (!this.SET_scopes) {
return null
}
const tarScope = this.SET_scopes.find(scope => {
return this.$store.state.user.currentUser.scopes.includes(scope)
})
return tarScope
},
_CMS_menu() {
let tarMenu
if (!this.SET_menuByScopes) {
tarMenu = this.SET_menu
} else if (!this.SET_menu[this._CMS_mainScope]) {
tarMenu = []
} else {
tarMenu = this.SET_menu[this._CMS_mainScope]
}
let _CMS_menu = [
...tarMenu,
{
title: '登出',
link: '/signout'
}
]
return _CMS_menu
},
},
}