[Improvement] Sku: improve render performance (#550)

This commit is contained in:
neverland
2018-01-19 10:02:25 +08:00
committed by GitHub
parent 1c1fb7342b
commit ddc113a0f5
9 changed files with 748 additions and 239 deletions
+22 -36
View File
@@ -1,26 +1,14 @@
<template>
<cell-group class="van-sku-messages">
<template v-for="(message, index) in internalMessages">
<template v-if="message.type === 'image'" />
<field
v-else-if="message.multiple == '1'"
:key="`${goodsId}-${index}`"
:required="message.required == '1'"
:label="message.name"
:placeholder="getPlaceholder('textarea')"
type="textarea"
v-model="messageValues[index]"
/>
<field
v-else
:key="`${goodsId}-${index}`"
:required="message.required == '1'"
:label="message.name"
:placeholder="getPlaceholder(message.type)"
:type="getType(message)"
v-model="messageValues[index]"
/>
</template>
<field
v-for="(message, index) in internalMessages"
v-model="messageValues[index]"
:key="`${goodsId}-${index}`"
:required="message.required == '1'"
:label="message.name"
:placeholder="getPlaceholder(message)"
:type="getType(message)"
/>
</cell-group>
</template>
@@ -47,26 +35,23 @@ export default create({
computed: {
internalMessages() {
if (Object.prototype.toString.call(this.messages) === '[object Array]') {
return this.messages;
}
return [];
return Array.isArray(this.messages) ? this.messages.filter(message => message.type !== 'image') : [];
},
messageValues() {
const messageValues = [];
this.internalMessages.forEach((message, index) => {
messageValues[index] = '';
});
return messageValues;
return this.internalMessages.map(() => '');
}
},
methods: {
getType({ type, datetime }) {
if (type === 'id_no') return 'text';
return datetime > 0 ? 'datetime-local' : type;
getType(message) {
if (+message.multiple === 1) {
return 'textarea';
}
if (message.type === 'id_no') {
return 'text';
}
return message.datetime > 0 ? 'datetime-local' : message.type;
},
getMessages() {
@@ -96,8 +81,9 @@ export default create({
return messages;
},
getPlaceholder(key) {
return this.messagePlaceholderMap[key] || this.$t(`placeholder.${key}`);
getPlaceholder(message) {
const type = +message.multiple === 1 ? 'textarea' : message.type;
return this.messagePlaceholderMap[type] || this.$t(`placeholder.${type}`);
},
validateMessages() {