mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
feat(Sku): add disable-soldout-sku prop (#7759)
* feat(Sku): 售罄sku支持点击 * feat(Sku): add disable-soldout-sku prop Co-authored-by: zhanglin_0715 <zhanglin_0715@youzan.com>
This commit is contained in:
parent
4af658e67a
commit
7a6e78fbf9
@ -39,7 +39,7 @@ export default {
|
|||||||
|
|
||||||
langConfigs() {
|
langConfigs() {
|
||||||
const { locales = {} } = config.site;
|
const { locales = {} } = config.site;
|
||||||
return Object.keys(locales).map(key => ({
|
return Object.keys(locales).map((key) => ({
|
||||||
lang: key,
|
lang: key,
|
||||||
label: locales[key].langLabel || '',
|
label: locales[key].langLabel || '',
|
||||||
}));
|
}));
|
||||||
|
@ -90,7 +90,7 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
anotherLang() {
|
anotherLang() {
|
||||||
const items = this.langConfigs.filter(item => item.lang !== this.lang);
|
const items = this.langConfigs.filter((item) => item.lang !== this.lang);
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
return items[0];
|
return items[0];
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ const IMPORT_STYLE_RE = /import\s+?(?:(?:".*?")|(?:'.*?'))[\s]*?(?:;|$|)/g;
|
|||||||
|
|
||||||
// "import 'a.less';" => "import 'a.css';"
|
// "import 'a.less';" => "import 'a.css';"
|
||||||
export function replaceCssImportExt(code: string) {
|
export function replaceCssImportExt(code: string) {
|
||||||
return code.replace(IMPORT_STYLE_RE, str =>
|
return code.replace(IMPORT_STYLE_RE, (str) =>
|
||||||
str.replace(`.${CSS_LANG}`, '.css')
|
str.replace(`.${CSS_LANG}`, '.css')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -62,8 +62,8 @@ export function getDeps(filePath: string) {
|
|||||||
const code = readFileSync(filePath, 'utf-8');
|
const code = readFileSync(filePath, 'utf-8');
|
||||||
const imports = matchImports(code);
|
const imports = matchImports(code);
|
||||||
const paths = imports
|
const paths = imports
|
||||||
.map(item => getPathByImport(item, filePath))
|
.map((item) => getPathByImport(item, filePath))
|
||||||
.filter(item => !!item) as string[];
|
.filter((item) => !!item) as string[];
|
||||||
|
|
||||||
depsMap[filePath] = paths;
|
depsMap[filePath] = paths;
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ export function getDeps(filePath: string) {
|
|||||||
export function replaceScriptImportExt(code: string, from: string, to: string) {
|
export function replaceScriptImportExt(code: string, from: string, to: string) {
|
||||||
const importLines = matchImports(code);
|
const importLines = matchImports(code);
|
||||||
|
|
||||||
importLines.forEach(importLine => {
|
importLines.forEach((importLine) => {
|
||||||
const result = importLine.replace(from, to);
|
const result = importLine.replace(from, to);
|
||||||
code = code.replace(importLine, result);
|
code = code.replace(importLine, result);
|
||||||
});
|
});
|
||||||
|
@ -27,7 +27,7 @@ function readLine(input: string) {
|
|||||||
function splitTableLine(line: string) {
|
function splitTableLine(line: string) {
|
||||||
line = line.replace('\\|', 'JOIN');
|
line = line.replace('\\|', 'JOIN');
|
||||||
|
|
||||||
const items = line.split('|').map(item => item.trim().replace('JOIN', '|'));
|
const items = line.split('|').map((item) => item.trim().replace('JOIN', '|'));
|
||||||
|
|
||||||
// remove pipe character on both sides
|
// remove pipe character on both sides
|
||||||
items.pop();
|
items.pop();
|
||||||
|
@ -74,5 +74,4 @@ export default {
|
|||||||
vanAddressList: {
|
vanAddressList: {
|
||||||
add: 'Legg til ny adresse',
|
add: 'Legg til ny adresse',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
import { mount } from '../../../test';
|
import { mount } from '../../../test';
|
||||||
import Paginaion from '..'
|
import Paginaion from '..';
|
||||||
|
|
||||||
test('render prev-text & next-text slot', () => {
|
test('render prev-text & next-text slot', () => {
|
||||||
const wrapper = mount(Paginaion, {
|
const wrapper = mount(Paginaion, {
|
||||||
propsData: {
|
propsData: {
|
||||||
totalItems: 50,
|
totalItems: 50,
|
||||||
showPageSize: 5
|
showPageSize: 5,
|
||||||
},
|
},
|
||||||
scopedSlots: {
|
scopedSlots: {
|
||||||
'prev-text': () => 'Custom PrevText',
|
'prev-text': () => 'Custom PrevText',
|
||||||
'next-text': () => 'Custom NextText',
|
'next-text': () => 'Custom NextText',
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(wrapper).toMatchSnapshot();
|
expect(wrapper).toMatchSnapshot();
|
||||||
@ -20,11 +20,11 @@ test('render page slot', () => {
|
|||||||
const wrapper = mount(Paginaion, {
|
const wrapper = mount(Paginaion, {
|
||||||
propsData: {
|
propsData: {
|
||||||
totalItems: 50,
|
totalItems: 50,
|
||||||
showPageSize: 5
|
showPageSize: 5,
|
||||||
},
|
},
|
||||||
scopedSlots: {
|
scopedSlots: {
|
||||||
'page': ({ text }) => `${text}`,
|
page: ({ text }) => `${text}`,
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(wrapper).toMatchSnapshot();
|
expect(wrapper).toMatchSnapshot();
|
||||||
|
@ -134,6 +134,7 @@ export default {
|
|||||||
| stepper-title | Quantity title | _string_ | `Quantity` |
|
| stepper-title | Quantity title | _string_ | `Quantity` |
|
||||||
| custom-stepper-config | Custom stepper related config | _object_ | `{}` |
|
| custom-stepper-config | Custom stepper related config | _object_ | `{}` |
|
||||||
| message-config | Message related config | _object_ | `{}` |
|
| message-config | Message related config | _object_ | `{}` |
|
||||||
|
| disable-soldout-sku | Whether to disable soldout sku | _boolean_ | `true` |
|
||||||
| get-container | Return the mount node for sku | _string \| () => Element_ | - |
|
| get-container | Return the mount node for sku | _string \| () => Element_ | - |
|
||||||
| safe-area-inset-bottom | Whether to enable bottom safe area adaptation | _boolean_ | `true` |
|
| safe-area-inset-bottom | Whether to enable bottom safe area adaptation | _boolean_ | `true` |
|
||||||
| start-sale-num `v2.3.0` | Minimum quantity | _number_ | `1` |
|
| start-sale-num `v2.3.0` | Minimum quantity | _number_ | `1` |
|
||||||
|
@ -140,6 +140,7 @@ export default {
|
|||||||
| get-container | 指定挂载的节点,[用法示例](#/zh-CN/popup#zhi-ding-gua-zai-wei-zhi) | _string \| () => Element_ | - |
|
| get-container | 指定挂载的节点,[用法示例](#/zh-CN/popup#zhi-ding-gua-zai-wei-zhi) | _string \| () => Element_ | - |
|
||||||
| initial-sku | 默认选中的 sku,具体参考高级用法 | _object_ | `{}` |
|
| initial-sku | 默认选中的 sku,具体参考高级用法 | _object_ | `{}` |
|
||||||
| show-soldout-sku | 是否展示售罄的 sku,默认展示并置灰 | _boolean_ | `true` |
|
| show-soldout-sku | 是否展示售罄的 sku,默认展示并置灰 | _boolean_ | `true` |
|
||||||
|
| disable-soldout-sku | 是否禁用售罄的 sku | _boolean_ | `true` |
|
||||||
| safe-area-inset-bottom | 是否开启[底部安全区适配](#/zh-CN/advanced-usage#di-bu-an-quan-qu-gua-pei) | _boolean_ | `true` |
|
| safe-area-inset-bottom | 是否开启[底部安全区适配](#/zh-CN/advanced-usage#di-bu-an-quan-qu-gua-pei) | _boolean_ | `true` |
|
||||||
| start-sale-num `v2.3.0` | 起售数量 | _number_ | `1` |
|
| start-sale-num `v2.3.0` | 起售数量 | _number_ | `1` |
|
||||||
| properties `v2.4.2` | 商品属性 | _array_ | - |
|
| properties `v2.4.2` | 商品属性 | _array_ | - |
|
||||||
|
@ -73,6 +73,10 @@ export default createComponent({
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
|
disableSoldoutSku: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
customStepperConfig: {
|
customStepperConfig: {
|
||||||
type: Object,
|
type: Object,
|
||||||
default: () => ({}),
|
default: () => ({}),
|
||||||
@ -655,6 +659,7 @@ export default createComponent({
|
|||||||
stepperTitle,
|
stepperTitle,
|
||||||
selectedSkuComb,
|
selectedSkuComb,
|
||||||
showHeaderImage,
|
showHeaderImage,
|
||||||
|
disableSoldoutSku,
|
||||||
} = this;
|
} = this;
|
||||||
|
|
||||||
const slotsProps = {
|
const slotsProps = {
|
||||||
@ -720,6 +725,7 @@ export default createComponent({
|
|||||||
skuKeyStr={skuTreeItem.k_s}
|
skuKeyStr={skuTreeItem.k_s}
|
||||||
selectedSku={selectedSku}
|
selectedSku={selectedSku}
|
||||||
skuEventBus={skuEventBus}
|
skuEventBus={skuEventBus}
|
||||||
|
disableSoldoutSku={disableSoldoutSku}
|
||||||
largeImageMode={skuTreeItem.largeImageMode}
|
largeImageMode={skuTreeItem.largeImageMode}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
|
@ -16,6 +16,7 @@ export default createComponent({
|
|||||||
skuEventBus: Object,
|
skuEventBus: Object,
|
||||||
selectedSku: Object,
|
selectedSku: Object,
|
||||||
largeImageMode: Boolean,
|
largeImageMode: Boolean,
|
||||||
|
disableSoldoutSku: Boolean,
|
||||||
skuList: {
|
skuList: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
@ -32,6 +33,10 @@ export default createComponent({
|
|||||||
},
|
},
|
||||||
|
|
||||||
choosable() {
|
choosable() {
|
||||||
|
if (!this.disableSoldoutSku) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return isSkuChoosable(this.skuList, this.selectedSku, {
|
return isSkuChoosable(this.skuList, this.selectedSku, {
|
||||||
key: this.skuKeyStr,
|
key: this.skuKeyStr,
|
||||||
valueId: this.skuValue.id,
|
valueId: this.skuValue.id,
|
||||||
|
3
types/swipe.d.ts
vendored
3
types/swipe.d.ts
vendored
@ -6,7 +6,10 @@ export type SwipeToOptions = {
|
|||||||
|
|
||||||
export class Swipe extends VanComponent {
|
export class Swipe extends VanComponent {
|
||||||
prev(): void;
|
prev(): void;
|
||||||
|
|
||||||
next(): void;
|
next(): void;
|
||||||
|
|
||||||
swipeTo(index: number, options?: SwipeToOptions): void;
|
swipeTo(index: number, options?: SwipeToOptions): void;
|
||||||
|
|
||||||
resize(): void;
|
resize(): void;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user