persagy-vant 0.0.44 → 0.0.46
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/blue-mark/BlueMarkHeader.d.ts +3 -12
- package/es/blue-mark/BlueMarkHeader.mjs +2 -2
- package/es/blue-mark/index.d.ts +2 -8
- package/es/cell/index.css +1 -1
- package/es/cell/index.less +8 -0
- package/es/index.d.ts +1 -1
- package/es/index.mjs +1 -1
- package/es/location-select/LocationSelect.d.ts +19 -1
- package/es/location-select/LocationSelect.mjs +123 -19
- package/es/location-select/index.css +1 -1
- package/es/location-select/index.d.ts +14 -1
- package/es/location-select/index.less +1 -0
- package/es/location-select/style/index.mjs +1 -0
- package/es/location-select/style/less.mjs +1 -0
- package/es/location-select/types.d.ts +2 -0
- package/es/location-select/types.mjs +0 -0
- package/es/material-add/MaterialAdd.d.ts +19 -2
- package/es/material-add/MaterialAdd.mjs +99 -8
- package/es/material-add/index.css +1 -1
- package/es/material-add/index.d.ts +14 -2
- package/es/material-add/index.less +1 -1
- package/es/material-add/style/index.mjs +1 -0
- package/es/material-add/style/less.mjs +1 -0
- package/es/material-add/types.d.ts +7 -6
- package/es/object-select/ObjectSelect.d.ts +19 -2
- package/es/object-select/ObjectSelect.mjs +142 -21
- package/es/object-select/index.css +1 -1
- package/es/object-select/index.d.ts +14 -2
- package/es/object-select/index.less +1 -0
- package/es/object-select/style/index.mjs +1 -0
- package/es/object-select/style/less.mjs +1 -0
- package/es/object-select/types.d.ts +1 -0
- package/es/video-preview/VideoPreview.mjs +30 -15
- package/es/video-preview/index.css +1 -1
- package/es/video-preview/index.less +21 -0
- package/lib/blue-mark/BlueMarkHeader.d.ts +3 -12
- package/lib/blue-mark/BlueMarkHeader.js +1 -1
- package/lib/blue-mark/index.d.ts +2 -8
- package/lib/cell/index.css +1 -1
- package/lib/cell/index.less +8 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.less +2 -2
- package/lib/location-select/LocationSelect.d.ts +19 -1
- package/lib/location-select/LocationSelect.js +121 -17
- package/lib/location-select/index.css +1 -1
- package/lib/location-select/index.d.ts +14 -1
- package/lib/location-select/index.less +1 -0
- package/lib/location-select/style/index.js +1 -0
- package/lib/location-select/style/less.js +1 -0
- package/lib/location-select/types.d.ts +2 -0
- package/lib/location-select/types.js +15 -0
- package/lib/material-add/MaterialAdd.d.ts +19 -2
- package/lib/material-add/MaterialAdd.js +97 -6
- package/lib/material-add/index.css +1 -1
- package/lib/material-add/index.d.ts +14 -2
- package/lib/material-add/index.less +1 -1
- package/lib/material-add/style/index.js +1 -0
- package/lib/material-add/style/less.js +1 -0
- package/lib/material-add/types.d.ts +7 -6
- package/lib/object-select/ObjectSelect.d.ts +19 -2
- package/lib/object-select/ObjectSelect.js +140 -19
- package/lib/object-select/index.css +1 -1
- package/lib/object-select/index.d.ts +14 -2
- package/lib/object-select/index.less +1 -0
- package/lib/object-select/style/index.js +1 -0
- package/lib/object-select/style/less.js +1 -0
- package/lib/object-select/types.d.ts +1 -0
- package/lib/vant.cjs.js +386 -61
- package/lib/vant.es.js +386 -61
- package/lib/vant.js +386 -61
- package/lib/vant.min.js +1 -1
- package/lib/video-preview/VideoPreview.js +30 -15
- package/lib/video-preview/index.css +1 -1
- package/lib/video-preview/index.less +21 -0
- package/lib/web-types.json +1 -1
- package/package.json +1 -1
- package/skills/use-persagy-vant/SKILL.md +6 -0
- package/skills/use-persagy-vant/references/business-component-catalog.md +6 -3
- package/skills/use-persagy-vant/references/component-catalog.md +4 -3
- package/skills/use-persagy-vant/references/component-variant-selection.md +9 -4
- package/skills/use-persagy-vant/references/design-interaction-baseline.md +1 -1
- package/skills/use-persagy-vant/references/dynamic-panel-policy.md +46 -0
- package/skills/use-persagy-vant/references/element-component-matching.md +3 -1
- package/skills/use-persagy-vant/references/page-recipes.md +3 -3
- package/skills/use-persagy-vant/references/reuse-policy.md +5 -1
- package/skills/use-persagy-vant/references/usage-patterns.md +2 -2
package/lib/vant.js
CHANGED
|
@@ -6789,7 +6789,7 @@
|
|
|
6789
6789
|
required: Boolean,
|
|
6790
6790
|
actionText: String,
|
|
6791
6791
|
expandable: Boolean,
|
|
6792
|
-
showExpandIcon:
|
|
6792
|
+
showExpandIcon: Boolean,
|
|
6793
6793
|
modelValue: Boolean,
|
|
6794
6794
|
expandText: String,
|
|
6795
6795
|
collapseText: String
|
|
@@ -14227,7 +14227,7 @@
|
|
|
14227
14227
|
}
|
|
14228
14228
|
});
|
|
14229
14229
|
const InfoCard = withInstall(stdin_default$K);
|
|
14230
|
-
var __async$
|
|
14230
|
+
var __async$5 = (__this, __arguments, generator) => {
|
|
14231
14231
|
return new Promise((resolve, reject) => {
|
|
14232
14232
|
var fulfilled = (value) => {
|
|
14233
14233
|
try {
|
|
@@ -14331,7 +14331,7 @@
|
|
|
14331
14331
|
emit("update:expandedKeys", next);
|
|
14332
14332
|
emit("expand", id, expanded);
|
|
14333
14333
|
};
|
|
14334
|
-
const toggleExpanded = (item) => __async$
|
|
14334
|
+
const toggleExpanded = (item) => __async$5(this, null, function* () {
|
|
14335
14335
|
const {
|
|
14336
14336
|
id
|
|
14337
14337
|
} = item;
|
|
@@ -14464,6 +14464,26 @@
|
|
|
14464
14464
|
});
|
|
14465
14465
|
const TreeSelect = withInstall(stdin_default$J);
|
|
14466
14466
|
var stdin_default$I = TreeSelect;
|
|
14467
|
+
var __async$4 = (__this, __arguments, generator) => {
|
|
14468
|
+
return new Promise((resolve, reject) => {
|
|
14469
|
+
var fulfilled = (value) => {
|
|
14470
|
+
try {
|
|
14471
|
+
step(generator.next(value));
|
|
14472
|
+
} catch (e) {
|
|
14473
|
+
reject(e);
|
|
14474
|
+
}
|
|
14475
|
+
};
|
|
14476
|
+
var rejected = (value) => {
|
|
14477
|
+
try {
|
|
14478
|
+
step(generator.throw(value));
|
|
14479
|
+
} catch (e) {
|
|
14480
|
+
reject(e);
|
|
14481
|
+
}
|
|
14482
|
+
};
|
|
14483
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
14484
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
14485
|
+
});
|
|
14486
|
+
};
|
|
14467
14487
|
const [name$A, bem$A] = createNamespace("location-select");
|
|
14468
14488
|
const locations = [[{
|
|
14469
14489
|
id: "basement",
|
|
@@ -14598,12 +14618,14 @@
|
|
|
14598
14618
|
type: Array,
|
|
14599
14619
|
default: () => locations
|
|
14600
14620
|
},
|
|
14601
|
-
tabTitles: makeArrayProp()
|
|
14621
|
+
tabTitles: makeArrayProp(),
|
|
14622
|
+
search: Function,
|
|
14623
|
+
searchDebounce: makeNumericProp(300)
|
|
14602
14624
|
};
|
|
14603
14625
|
var stdin_default$H = vue.defineComponent({
|
|
14604
14626
|
name: name$A,
|
|
14605
14627
|
props: props$1,
|
|
14606
|
-
emits: ["update:show", "update:modelValue", "change"],
|
|
14628
|
+
emits: ["update:show", "update:modelValue", "change", "search-error"],
|
|
14607
14629
|
setup(props2, {
|
|
14608
14630
|
emit
|
|
14609
14631
|
}) {
|
|
@@ -14613,6 +14635,12 @@
|
|
|
14613
14635
|
const customValue = vue.ref("");
|
|
14614
14636
|
const expandedKeys = vue.ref(["basement", "b3"]);
|
|
14615
14637
|
const query = vue.ref("");
|
|
14638
|
+
const asyncSearchResults = vue.ref([]);
|
|
14639
|
+
const searchLoading = vue.ref(false);
|
|
14640
|
+
const searchFailed = vue.ref(false);
|
|
14641
|
+
const searchedItems = vue.shallowReactive(/* @__PURE__ */ new Map());
|
|
14642
|
+
let searchTimer;
|
|
14643
|
+
let searchRequestId = 0;
|
|
14616
14644
|
const titles = vue.computed(() => props2.tabTitles.length ? props2.tabTitles : ["ABC座地下室", "A座", "B座", "C座", "D座"]);
|
|
14617
14645
|
const allItems = vue.computed(() => props2.items.flatMap(flatten));
|
|
14618
14646
|
const currentRoot = vue.computed(() => {
|
|
@@ -14623,7 +14651,48 @@
|
|
|
14623
14651
|
var _a;
|
|
14624
14652
|
return ((_a = currentRoot.value) == null ? void 0 : _a.children) || [];
|
|
14625
14653
|
});
|
|
14626
|
-
const searchResults = vue.computed(() =>
|
|
14654
|
+
const searchResults = vue.computed(() => {
|
|
14655
|
+
if (!query.value.trim())
|
|
14656
|
+
return [];
|
|
14657
|
+
if (props2.search)
|
|
14658
|
+
return asyncSearchResults.value;
|
|
14659
|
+
return allItems.value.filter((item) => item.text.includes(query.value));
|
|
14660
|
+
});
|
|
14661
|
+
const runSearch = (..._0) => __async$4(this, [..._0], function* (keyword = query.value.trim()) {
|
|
14662
|
+
if (!props2.search || !keyword)
|
|
14663
|
+
return;
|
|
14664
|
+
const requestId = ++searchRequestId;
|
|
14665
|
+
searchLoading.value = true;
|
|
14666
|
+
searchFailed.value = false;
|
|
14667
|
+
try {
|
|
14668
|
+
const results = yield props2.search(keyword);
|
|
14669
|
+
if (requestId !== searchRequestId)
|
|
14670
|
+
return;
|
|
14671
|
+
asyncSearchResults.value = results;
|
|
14672
|
+
results.forEach((item) => searchedItems.set(item.id, item));
|
|
14673
|
+
} catch (error) {
|
|
14674
|
+
if (requestId !== searchRequestId)
|
|
14675
|
+
return;
|
|
14676
|
+
asyncSearchResults.value = [];
|
|
14677
|
+
searchFailed.value = true;
|
|
14678
|
+
emit("search-error", keyword, error);
|
|
14679
|
+
} finally {
|
|
14680
|
+
if (requestId === searchRequestId)
|
|
14681
|
+
searchLoading.value = false;
|
|
14682
|
+
}
|
|
14683
|
+
});
|
|
14684
|
+
const scheduleSearch = () => {
|
|
14685
|
+
if (searchTimer)
|
|
14686
|
+
clearTimeout(searchTimer);
|
|
14687
|
+
searchRequestId += 1;
|
|
14688
|
+
searchLoading.value = false;
|
|
14689
|
+
searchFailed.value = false;
|
|
14690
|
+
asyncSearchResults.value = [];
|
|
14691
|
+
if (props2.search && query.value.trim()) {
|
|
14692
|
+
searchTimer = setTimeout(runSearch, Number(props2.searchDebounce));
|
|
14693
|
+
}
|
|
14694
|
+
};
|
|
14695
|
+
vue.watch([query, () => props2.search], scheduleSearch);
|
|
14627
14696
|
vue.watch(() => props2.show, (show) => {
|
|
14628
14697
|
if (show) {
|
|
14629
14698
|
active.value = 0;
|
|
@@ -14631,11 +14700,16 @@
|
|
|
14631
14700
|
expandedKeys.value = ["basement", "b3"];
|
|
14632
14701
|
}
|
|
14633
14702
|
});
|
|
14703
|
+
vue.onBeforeUnmount(() => {
|
|
14704
|
+
searchRequestId += 1;
|
|
14705
|
+
if (searchTimer)
|
|
14706
|
+
clearTimeout(searchTimer);
|
|
14707
|
+
});
|
|
14634
14708
|
const close = () => emit("update:show", false);
|
|
14635
14709
|
const select = (value) => {
|
|
14636
14710
|
const selected = value[0];
|
|
14637
14711
|
if (selected !== void 0) {
|
|
14638
|
-
const selectedItem = allItems.value.find((item) => item.id === selected);
|
|
14712
|
+
const selectedItem = allItems.value.find((item) => item.id === selected) || searchedItems.get(selected);
|
|
14639
14713
|
emit("update:modelValue", selected);
|
|
14640
14714
|
emit("change", selected, selectedItem == null ? void 0 : selectedItem.text);
|
|
14641
14715
|
close();
|
|
@@ -14650,6 +14724,37 @@
|
|
|
14650
14724
|
showCustom.value = false;
|
|
14651
14725
|
close();
|
|
14652
14726
|
};
|
|
14727
|
+
const renderSearchContent = () => {
|
|
14728
|
+
if (searchLoading.value)
|
|
14729
|
+
return vue.createVNode("div", {
|
|
14730
|
+
"class": bem$A("search-state")
|
|
14731
|
+
}, [vue.createVNode(Loading, {
|
|
14732
|
+
"vertical": true
|
|
14733
|
+
}, {
|
|
14734
|
+
default: () => [vue.createTextVNode("加载中...")]
|
|
14735
|
+
})]);
|
|
14736
|
+
if (searchFailed.value)
|
|
14737
|
+
return vue.createVNode(Empty, {
|
|
14738
|
+
"image": "network",
|
|
14739
|
+
"description": "搜索失败,请重试"
|
|
14740
|
+
}, null);
|
|
14741
|
+
if (!searchResults.value.length)
|
|
14742
|
+
return vue.createVNode(Empty, {
|
|
14743
|
+
"description": "暂无搜索结果"
|
|
14744
|
+
}, null);
|
|
14745
|
+
return vue.createVNode("div", {
|
|
14746
|
+
"class": bem$A("card")
|
|
14747
|
+
}, [searchResults.value.map((item, index) => vue.createVNode(Cell, {
|
|
14748
|
+
"key": item.id,
|
|
14749
|
+
"title": item.text,
|
|
14750
|
+
"rightSelect": props2.modelValue === item.id,
|
|
14751
|
+
"selectType": "radio",
|
|
14752
|
+
"border": index < searchResults.value.length - 1,
|
|
14753
|
+
"clickable": true,
|
|
14754
|
+
"onClick": () => select([item.id]),
|
|
14755
|
+
"onUpdate:rightSelect": () => select([item.id])
|
|
14756
|
+
}, null))]);
|
|
14757
|
+
};
|
|
14653
14758
|
return () => vue.createVNode(ActionSheet, {
|
|
14654
14759
|
"show": props2.show,
|
|
14655
14760
|
"class": bem$A(),
|
|
@@ -14680,23 +14785,20 @@
|
|
|
14680
14785
|
"modelValue": query.value,
|
|
14681
14786
|
"onUpdate:modelValue": ($event) => query.value = $event,
|
|
14682
14787
|
"class": bem$A("search"),
|
|
14788
|
+
"variant": "pure",
|
|
14683
14789
|
"shape": "round",
|
|
14684
14790
|
"inputAlign": "left",
|
|
14685
|
-
"placeholder": "请输入搜索关键词"
|
|
14791
|
+
"placeholder": "请输入搜索关键词",
|
|
14792
|
+
"onSearch": () => {
|
|
14793
|
+
if (props2.search) {
|
|
14794
|
+
if (searchTimer)
|
|
14795
|
+
clearTimeout(searchTimer);
|
|
14796
|
+
runSearch();
|
|
14797
|
+
}
|
|
14798
|
+
}
|
|
14686
14799
|
}, null), query.value ? vue.createVNode("div", {
|
|
14687
14800
|
"class": bem$A("body")
|
|
14688
|
-
}, [vue.createVNode(
|
|
14689
|
-
"class": bem$A("card")
|
|
14690
|
-
}, [searchResults.value.map((item) => vue.createVNode(Cell, {
|
|
14691
|
-
"key": item.id,
|
|
14692
|
-
"title": item.text,
|
|
14693
|
-
"rightSelect": props2.modelValue === item.id,
|
|
14694
|
-
"selectType": "radio",
|
|
14695
|
-
"border": true,
|
|
14696
|
-
"clickable": true,
|
|
14697
|
-
"onClick": () => select([item.id]),
|
|
14698
|
-
"onUpdate:rightSelect": () => select([item.id])
|
|
14699
|
-
}, null))])]) : vue.createVNode(vue.Fragment, null, [vue.createVNode(Tabs, {
|
|
14801
|
+
}, [renderSearchContent()]) : vue.createVNode(vue.Fragment, null, [vue.createVNode(Tabs, {
|
|
14700
14802
|
"active": active.value,
|
|
14701
14803
|
"onUpdate:active": ($event) => active.value = $event,
|
|
14702
14804
|
"showMore": showMore.value,
|
|
@@ -15364,6 +15466,26 @@
|
|
|
15364
15466
|
});
|
|
15365
15467
|
const MaterialDetail = withInstall(stdin_default$D);
|
|
15366
15468
|
var stdin_default$C = MaterialDetail;
|
|
15469
|
+
var __async$3 = (__this, __arguments, generator) => {
|
|
15470
|
+
return new Promise((resolve, reject) => {
|
|
15471
|
+
var fulfilled = (value) => {
|
|
15472
|
+
try {
|
|
15473
|
+
step(generator.next(value));
|
|
15474
|
+
} catch (e) {
|
|
15475
|
+
reject(e);
|
|
15476
|
+
}
|
|
15477
|
+
};
|
|
15478
|
+
var rejected = (value) => {
|
|
15479
|
+
try {
|
|
15480
|
+
step(generator.throw(value));
|
|
15481
|
+
} catch (e) {
|
|
15482
|
+
reject(e);
|
|
15483
|
+
}
|
|
15484
|
+
};
|
|
15485
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
15486
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
15487
|
+
});
|
|
15488
|
+
};
|
|
15367
15489
|
const [name$w, bem$w] = createNamespace("material-add");
|
|
15368
15490
|
const defaultItems = [{
|
|
15369
15491
|
id: "refrigerant",
|
|
@@ -15671,12 +15793,14 @@
|
|
|
15671
15793
|
commonTabText: makeStringProp("常用物料"),
|
|
15672
15794
|
allTabText: makeStringProp("全部物料"),
|
|
15673
15795
|
materialTabText: makeStringProp("物资"),
|
|
15674
|
-
toolTabText: makeStringProp("工具")
|
|
15796
|
+
toolTabText: makeStringProp("工具"),
|
|
15797
|
+
search: Function,
|
|
15798
|
+
searchDebounce: makeNumericProp(300)
|
|
15675
15799
|
};
|
|
15676
15800
|
var stdin_default$B = vue.defineComponent({
|
|
15677
15801
|
name: name$w,
|
|
15678
15802
|
props: materialAddProps,
|
|
15679
|
-
emits: ["update:show", "update:modelValue", "change", "confirm"],
|
|
15803
|
+
emits: ["update:show", "update:modelValue", "change", "confirm", "search-error"],
|
|
15680
15804
|
setup(props2, {
|
|
15681
15805
|
emit
|
|
15682
15806
|
}) {
|
|
@@ -15692,6 +15816,10 @@
|
|
|
15692
15816
|
const activeKind = vue.ref(getDefaultKind());
|
|
15693
15817
|
const keyword = vue.ref("");
|
|
15694
15818
|
const searching = vue.ref(false);
|
|
15819
|
+
const searchLoading = vue.ref(false);
|
|
15820
|
+
const searchFailed = vue.ref(false);
|
|
15821
|
+
let searchTimer;
|
|
15822
|
+
let searchRequestId = 0;
|
|
15695
15823
|
const expandedKeys = vue.ref([]);
|
|
15696
15824
|
const expandedSelected = vue.ref(false);
|
|
15697
15825
|
const detailItem = vue.ref();
|
|
@@ -15763,6 +15891,11 @@
|
|
|
15763
15891
|
activeTab.value = getDefaultTab();
|
|
15764
15892
|
activeKind.value = getDefaultKind();
|
|
15765
15893
|
keyword.value = "";
|
|
15894
|
+
searchLoading.value = false;
|
|
15895
|
+
searchFailed.value = false;
|
|
15896
|
+
searchRequestId += 1;
|
|
15897
|
+
if (searchTimer)
|
|
15898
|
+
clearTimeout(searchTimer);
|
|
15766
15899
|
searching.value = false;
|
|
15767
15900
|
expandedKeys.value = getDefaultExpandedKeys();
|
|
15768
15901
|
expandedSelected.value = false;
|
|
@@ -15780,6 +15913,40 @@
|
|
|
15780
15913
|
expandedKeys.value = getDefaultExpandedKeys();
|
|
15781
15914
|
}
|
|
15782
15915
|
});
|
|
15916
|
+
const runSearch = (..._0) => __async$3(this, [..._0], function* (query = keyword.value.trim()) {
|
|
15917
|
+
if (!props2.search || !query)
|
|
15918
|
+
return;
|
|
15919
|
+
const requestId = ++searchRequestId;
|
|
15920
|
+
searchLoading.value = true;
|
|
15921
|
+
searchFailed.value = false;
|
|
15922
|
+
try {
|
|
15923
|
+
yield props2.search(query);
|
|
15924
|
+
} catch (error) {
|
|
15925
|
+
if (requestId !== searchRequestId)
|
|
15926
|
+
return;
|
|
15927
|
+
searchFailed.value = true;
|
|
15928
|
+
emit("search-error", query, error);
|
|
15929
|
+
} finally {
|
|
15930
|
+
if (requestId === searchRequestId)
|
|
15931
|
+
searchLoading.value = false;
|
|
15932
|
+
}
|
|
15933
|
+
});
|
|
15934
|
+
const scheduleSearch = () => {
|
|
15935
|
+
if (searchTimer)
|
|
15936
|
+
clearTimeout(searchTimer);
|
|
15937
|
+
searchRequestId += 1;
|
|
15938
|
+
searchLoading.value = false;
|
|
15939
|
+
searchFailed.value = false;
|
|
15940
|
+
if (props2.search && keyword.value.trim()) {
|
|
15941
|
+
searchTimer = setTimeout(runSearch, Number(props2.searchDebounce));
|
|
15942
|
+
}
|
|
15943
|
+
};
|
|
15944
|
+
vue.watch([keyword, () => props2.search], scheduleSearch);
|
|
15945
|
+
vue.onBeforeUnmount(() => {
|
|
15946
|
+
searchRequestId += 1;
|
|
15947
|
+
if (searchTimer)
|
|
15948
|
+
clearTimeout(searchTimer);
|
|
15949
|
+
});
|
|
15783
15950
|
const setActiveTab = (tab) => {
|
|
15784
15951
|
activeTab.value = tab;
|
|
15785
15952
|
if (tab === "all") {
|
|
@@ -15846,9 +16013,25 @@
|
|
|
15846
16013
|
}, null);
|
|
15847
16014
|
const renderList = () => vue.createVNode("div", {
|
|
15848
16015
|
"class": bem$w("material-list")
|
|
15849
|
-
}, [visibleItems.value.length ? visibleItems.value.map((item) => renderMaterialCell(item, props2.items.indexOf(item))) : vue.createVNode(
|
|
15850
|
-
"
|
|
15851
|
-
},
|
|
16016
|
+
}, [visibleItems.value.length ? visibleItems.value.map((item) => renderMaterialCell(item, props2.items.indexOf(item))) : vue.createVNode(Empty, {
|
|
16017
|
+
"description": "暂无匹配物料"
|
|
16018
|
+
}, null)]);
|
|
16019
|
+
const renderSearchContent = () => {
|
|
16020
|
+
if (searchLoading.value)
|
|
16021
|
+
return vue.createVNode("div", {
|
|
16022
|
+
"class": bem$w("search-state")
|
|
16023
|
+
}, [vue.createVNode(Loading, {
|
|
16024
|
+
"vertical": true
|
|
16025
|
+
}, {
|
|
16026
|
+
default: () => [vue.createTextVNode("加载中...")]
|
|
16027
|
+
})]);
|
|
16028
|
+
if (searchFailed.value)
|
|
16029
|
+
return vue.createVNode(Empty, {
|
|
16030
|
+
"image": "network",
|
|
16031
|
+
"description": "搜索失败,请重试"
|
|
16032
|
+
}, null);
|
|
16033
|
+
return renderList();
|
|
16034
|
+
};
|
|
15852
16035
|
const renderCatalog = () => {
|
|
15853
16036
|
const catalogItems = getCatalogItems();
|
|
15854
16037
|
const defaultExpandedKeys = getDefaultExpandedKeys();
|
|
@@ -15905,11 +16088,19 @@
|
|
|
15905
16088
|
"modelValue": keyword.value,
|
|
15906
16089
|
"onUpdate:modelValue": ($event) => keyword.value = $event,
|
|
15907
16090
|
"class": bem$w("search"),
|
|
16091
|
+
"variant": "pure",
|
|
15908
16092
|
"shape": "round",
|
|
15909
16093
|
"inputAlign": "left",
|
|
15910
16094
|
"autofocus": true,
|
|
15911
16095
|
"showAction": true,
|
|
15912
16096
|
"placeholder": "搜索物资/工具名称",
|
|
16097
|
+
"onSearch": () => {
|
|
16098
|
+
if (props2.search) {
|
|
16099
|
+
if (searchTimer)
|
|
16100
|
+
clearTimeout(searchTimer);
|
|
16101
|
+
runSearch();
|
|
16102
|
+
}
|
|
16103
|
+
},
|
|
15913
16104
|
"onCancel": () => {
|
|
15914
16105
|
searching.value = false;
|
|
15915
16106
|
keyword.value = "";
|
|
@@ -15963,7 +16154,7 @@
|
|
|
15963
16154
|
default: () => [props2.toolTabText]
|
|
15964
16155
|
})])]), vue.createVNode("div", {
|
|
15965
16156
|
"class": bem$w("body")
|
|
15966
|
-
}, [searching.value && !keyword.value.trim() ? null : searching.value
|
|
16157
|
+
}, [searching.value && !keyword.value.trim() ? null : searching.value ? renderSearchContent() : activeTab.value === "common" ? renderList() : renderCatalog()]), vue.createVNode("div", {
|
|
15967
16158
|
"class": bem$w("footer")
|
|
15968
16159
|
}, [renderSelectPanel(), vue.createVNode(BottomActionBar, {
|
|
15969
16160
|
"fixed": false,
|
|
@@ -17059,6 +17250,26 @@
|
|
|
17059
17250
|
}
|
|
17060
17251
|
});
|
|
17061
17252
|
const NumberKeyboard = withInstall(stdin_default$u);
|
|
17253
|
+
var __async$2 = (__this, __arguments, generator) => {
|
|
17254
|
+
return new Promise((resolve, reject) => {
|
|
17255
|
+
var fulfilled = (value) => {
|
|
17256
|
+
try {
|
|
17257
|
+
step(generator.next(value));
|
|
17258
|
+
} catch (e) {
|
|
17259
|
+
reject(e);
|
|
17260
|
+
}
|
|
17261
|
+
};
|
|
17262
|
+
var rejected = (value) => {
|
|
17263
|
+
try {
|
|
17264
|
+
step(generator.throw(value));
|
|
17265
|
+
} catch (e) {
|
|
17266
|
+
reject(e);
|
|
17267
|
+
}
|
|
17268
|
+
};
|
|
17269
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
17270
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
17271
|
+
});
|
|
17272
|
+
};
|
|
17062
17273
|
const [name$o, bem$o] = createNamespace("object-select");
|
|
17063
17274
|
const spaceItems = [{
|
|
17064
17275
|
id: "shenzhen-hq",
|
|
@@ -17415,13 +17626,15 @@
|
|
|
17415
17626
|
type: Array,
|
|
17416
17627
|
default: () => specialties
|
|
17417
17628
|
},
|
|
17418
|
-
loadChildren: Function
|
|
17629
|
+
loadChildren: Function,
|
|
17630
|
+
search: Function,
|
|
17631
|
+
searchDebounce: makeNumericProp(300)
|
|
17419
17632
|
};
|
|
17420
17633
|
const flattenItems$1 = (items) => items.flatMap((item) => [item, ...item.children ? flattenItems$1(item.children) : []]);
|
|
17421
17634
|
var stdin_default$t = vue.defineComponent({
|
|
17422
17635
|
name: name$o,
|
|
17423
17636
|
props: objectSelectProps,
|
|
17424
|
-
emits: ["update:show", "update:modelValue", "change", "confirm", "load", "load-error"],
|
|
17637
|
+
emits: ["update:show", "update:modelValue", "change", "confirm", "load", "load-error", "search-error"],
|
|
17425
17638
|
setup(props2, {
|
|
17426
17639
|
emit
|
|
17427
17640
|
}) {
|
|
@@ -17434,6 +17647,12 @@
|
|
|
17434
17647
|
const expandedSelected = vue.ref(false);
|
|
17435
17648
|
const searching = vue.ref(false);
|
|
17436
17649
|
const keyword = vue.ref("");
|
|
17650
|
+
const asyncSearchResults = vue.ref([]);
|
|
17651
|
+
const searchLoading = vue.ref(false);
|
|
17652
|
+
const searchFailed = vue.ref(false);
|
|
17653
|
+
const searchedItems = vue.shallowReactive(/* @__PURE__ */ new Map());
|
|
17654
|
+
let searchTimer;
|
|
17655
|
+
let searchRequestId = 0;
|
|
17437
17656
|
const loadedChildren = vue.shallowReactive(/* @__PURE__ */ new Map());
|
|
17438
17657
|
const getChildren = (item) => loadedChildren.get(item.id) || item.children || [];
|
|
17439
17658
|
const hydrateItems = (items) => items.map((item) => {
|
|
@@ -17455,6 +17674,12 @@
|
|
|
17455
17674
|
view.value = 0;
|
|
17456
17675
|
specialtyType.value = 0;
|
|
17457
17676
|
keyword.value = "";
|
|
17677
|
+
asyncSearchResults.value = [];
|
|
17678
|
+
searchLoading.value = false;
|
|
17679
|
+
searchFailed.value = false;
|
|
17680
|
+
searchRequestId += 1;
|
|
17681
|
+
if (searchTimer)
|
|
17682
|
+
clearTimeout(searchTimer);
|
|
17458
17683
|
searching.value = false;
|
|
17459
17684
|
expandedSelected.value = false;
|
|
17460
17685
|
expandedSpecialties.value = {
|
|
@@ -17467,13 +17692,64 @@
|
|
|
17467
17692
|
});
|
|
17468
17693
|
const selected = vue.computed(() => props2.modelValue);
|
|
17469
17694
|
const allItems = vue.computed(() => flattenItems$1(hydrateItems([...props2.spaceItems, ...props2.specialties.flatMap((specialty) => [...specialty.deviceItems, ...specialty.systemItems])])));
|
|
17470
|
-
const selectedItems = vue.computed(() =>
|
|
17695
|
+
const selectedItems = vue.computed(() => {
|
|
17696
|
+
const items = /* @__PURE__ */ new Map();
|
|
17697
|
+
allItems.value.forEach((item) => items.set(item.id, item));
|
|
17698
|
+
searchedItems.forEach((item) => items.set(item.id, item));
|
|
17699
|
+
return selected.value.flatMap((id) => {
|
|
17700
|
+
const item = items.get(id);
|
|
17701
|
+
return item ? [item] : [];
|
|
17702
|
+
});
|
|
17703
|
+
});
|
|
17471
17704
|
const searchResults = vue.computed(() => {
|
|
17472
17705
|
const query = keyword.value.trim().toLowerCase();
|
|
17473
17706
|
if (!query)
|
|
17474
17707
|
return [];
|
|
17708
|
+
if (props2.search)
|
|
17709
|
+
return asyncSearchResults.value;
|
|
17475
17710
|
return allItems.value.filter((item) => item.text.toLowerCase().includes(query));
|
|
17476
17711
|
});
|
|
17712
|
+
const runSearch = (..._0) => __async$2(this, [..._0], function* (query = keyword.value.trim()) {
|
|
17713
|
+
if (!props2.search || !query)
|
|
17714
|
+
return;
|
|
17715
|
+
const requestId = ++searchRequestId;
|
|
17716
|
+
searchLoading.value = true;
|
|
17717
|
+
searchFailed.value = false;
|
|
17718
|
+
try {
|
|
17719
|
+
const results = yield props2.search(query);
|
|
17720
|
+
if (requestId !== searchRequestId)
|
|
17721
|
+
return;
|
|
17722
|
+
asyncSearchResults.value = results;
|
|
17723
|
+
results.forEach((item) => searchedItems.set(item.id, item));
|
|
17724
|
+
} catch (error) {
|
|
17725
|
+
if (requestId !== searchRequestId)
|
|
17726
|
+
return;
|
|
17727
|
+
asyncSearchResults.value = [];
|
|
17728
|
+
searchFailed.value = true;
|
|
17729
|
+
emit("search-error", query, error);
|
|
17730
|
+
} finally {
|
|
17731
|
+
if (requestId === searchRequestId)
|
|
17732
|
+
searchLoading.value = false;
|
|
17733
|
+
}
|
|
17734
|
+
});
|
|
17735
|
+
const scheduleSearch = () => {
|
|
17736
|
+
if (searchTimer)
|
|
17737
|
+
clearTimeout(searchTimer);
|
|
17738
|
+
searchRequestId += 1;
|
|
17739
|
+
searchLoading.value = false;
|
|
17740
|
+
searchFailed.value = false;
|
|
17741
|
+
asyncSearchResults.value = [];
|
|
17742
|
+
const query = keyword.value.trim();
|
|
17743
|
+
if (!props2.search || !query)
|
|
17744
|
+
return;
|
|
17745
|
+
searchTimer = setTimeout(runSearch, Number(props2.searchDebounce));
|
|
17746
|
+
};
|
|
17747
|
+
vue.watch([keyword, () => props2.search], scheduleSearch);
|
|
17748
|
+
vue.onBeforeUnmount(() => {
|
|
17749
|
+
searchRequestId += 1;
|
|
17750
|
+
if (searchTimer)
|
|
17751
|
+
clearTimeout(searchTimer);
|
|
17752
|
+
});
|
|
17477
17753
|
const renderHighlightedText = (text) => {
|
|
17478
17754
|
const query = keyword.value.trim();
|
|
17479
17755
|
if (!query)
|
|
@@ -17554,6 +17830,45 @@
|
|
|
17554
17830
|
}, null), expanded && renderTree(items)]);
|
|
17555
17831
|
};
|
|
17556
17832
|
const close = () => emit("update:show", false);
|
|
17833
|
+
const renderSearchContent = () => {
|
|
17834
|
+
if (!keyword.value.trim())
|
|
17835
|
+
return;
|
|
17836
|
+
if (searchLoading.value) {
|
|
17837
|
+
return vue.createVNode("div", {
|
|
17838
|
+
"class": bem$o("search-state")
|
|
17839
|
+
}, [vue.createVNode(Loading, {
|
|
17840
|
+
"vertical": true
|
|
17841
|
+
}, {
|
|
17842
|
+
default: () => [vue.createTextVNode("加载中...")]
|
|
17843
|
+
})]);
|
|
17844
|
+
}
|
|
17845
|
+
if (searchFailed.value) {
|
|
17846
|
+
return vue.createVNode(Empty, {
|
|
17847
|
+
"image": "network",
|
|
17848
|
+
"description": "搜索失败,请重试"
|
|
17849
|
+
}, null);
|
|
17850
|
+
}
|
|
17851
|
+
if (!searchResults.value.length) {
|
|
17852
|
+
return vue.createVNode(Empty, {
|
|
17853
|
+
"description": "暂无搜索结果"
|
|
17854
|
+
}, null);
|
|
17855
|
+
}
|
|
17856
|
+
return vue.createVNode("div", {
|
|
17857
|
+
"class": bem$o("tree-card", {
|
|
17858
|
+
search: true
|
|
17859
|
+
})
|
|
17860
|
+
}, [searchResults.value.map((item) => vue.createVNode(Cell, {
|
|
17861
|
+
"key": item.id,
|
|
17862
|
+
"rightSelect": selected.value.includes(item.id),
|
|
17863
|
+
"selectType": "checkbox",
|
|
17864
|
+
"border": true,
|
|
17865
|
+
"clickable": true,
|
|
17866
|
+
"onClick": () => toggleSearchItem(item),
|
|
17867
|
+
"onUpdate:rightSelect": () => toggleSearchItem(item)
|
|
17868
|
+
}, {
|
|
17869
|
+
title: () => renderHighlightedText(item.text)
|
|
17870
|
+
}))]);
|
|
17871
|
+
};
|
|
17557
17872
|
return () => vue.createVNode(ActionSheet, {
|
|
17558
17873
|
"show": props2.show,
|
|
17559
17874
|
"class": bem$o(),
|
|
@@ -17564,10 +17879,18 @@
|
|
|
17564
17879
|
"modelValue": keyword.value,
|
|
17565
17880
|
"onUpdate:modelValue": ($event) => keyword.value = $event,
|
|
17566
17881
|
"class": bem$o("search"),
|
|
17882
|
+
"variant": "pure",
|
|
17567
17883
|
"shape": "round",
|
|
17568
17884
|
"inputAlign": "left",
|
|
17569
17885
|
"autofocus": true,
|
|
17570
17886
|
"placeholder": "搜索对象",
|
|
17887
|
+
"onSearch": () => {
|
|
17888
|
+
if (props2.search) {
|
|
17889
|
+
if (searchTimer)
|
|
17890
|
+
clearTimeout(searchTimer);
|
|
17891
|
+
runSearch();
|
|
17892
|
+
}
|
|
17893
|
+
},
|
|
17571
17894
|
"onCancel": () => {
|
|
17572
17895
|
searching.value = false;
|
|
17573
17896
|
keyword.value = "";
|
|
@@ -17575,7 +17898,8 @@
|
|
|
17575
17898
|
"showAction": true
|
|
17576
17899
|
}, null) : vue.createVNode(vue.Fragment, null, [vue.createVNode(NavBar, {
|
|
17577
17900
|
"title": props2.title,
|
|
17578
|
-
"class": bem$o("nav")
|
|
17901
|
+
"class": bem$o("nav"),
|
|
17902
|
+
"border": false
|
|
17579
17903
|
}, {
|
|
17580
17904
|
left: () => vue.createVNode(Icon, {
|
|
17581
17905
|
"name": "cross",
|
|
@@ -17606,21 +17930,7 @@
|
|
|
17606
17930
|
}, null)]
|
|
17607
17931
|
})]), vue.createVNode("div", {
|
|
17608
17932
|
"class": bem$o("body")
|
|
17609
|
-
}, [searching.value ?
|
|
17610
|
-
"class": bem$o("tree-card", {
|
|
17611
|
-
search: true
|
|
17612
|
-
})
|
|
17613
|
-
}, [searchResults.value.map((item) => vue.createVNode(Cell, {
|
|
17614
|
-
"key": item.id,
|
|
17615
|
-
"rightSelect": selected.value.includes(item.id),
|
|
17616
|
-
"selectType": "checkbox",
|
|
17617
|
-
"border": true,
|
|
17618
|
-
"clickable": true,
|
|
17619
|
-
"onClick": () => toggleSearchItem(item),
|
|
17620
|
-
"onUpdate:rightSelect": () => toggleSearchItem(item)
|
|
17621
|
-
}, {
|
|
17622
|
-
title: () => renderHighlightedText(item.text)
|
|
17623
|
-
}))]) : view.value === 0 ? renderTree(props2.spaceItems) : vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
|
|
17933
|
+
}, [searching.value ? renderSearchContent() : view.value === 0 ? renderTree(props2.spaceItems) : vue.createVNode(vue.Fragment, null, [vue.createVNode("div", {
|
|
17624
17934
|
"class": bem$o("type-tabs")
|
|
17625
17935
|
}, [vue.createVNode(FilterTag, {
|
|
17626
17936
|
"selected": specialtyType.value === 0,
|
|
@@ -23244,24 +23554,37 @@
|
|
|
23244
23554
|
setup(props2, {
|
|
23245
23555
|
emit
|
|
23246
23556
|
}) {
|
|
23247
|
-
const
|
|
23557
|
+
const playerHost = vue.ref();
|
|
23558
|
+
let video;
|
|
23248
23559
|
const mediaEvents = ["play", "pause", "ended", "timeupdate", "error"];
|
|
23249
23560
|
let player;
|
|
23250
23561
|
const updateShow = (show) => emit("update:show", show);
|
|
23251
23562
|
const close = () => updateShow(false);
|
|
23252
23563
|
const emitMediaEvent = (event) => emit(event.type, event);
|
|
23253
23564
|
const destroyPlayer = () => {
|
|
23254
|
-
|
|
23565
|
+
var _a;
|
|
23255
23566
|
if (video) {
|
|
23256
|
-
mediaEvents.forEach((event) => video.removeEventListener(event, emitMediaEvent));
|
|
23567
|
+
mediaEvents.forEach((event) => video == null ? void 0 : video.removeEventListener(event, emitMediaEvent));
|
|
23257
23568
|
}
|
|
23258
23569
|
player == null ? void 0 : player.destroy();
|
|
23259
23570
|
player = void 0;
|
|
23571
|
+
video = void 0;
|
|
23572
|
+
(_a = playerHost.value) == null ? void 0 : _a.replaceChildren();
|
|
23260
23573
|
};
|
|
23261
23574
|
const createPlayer = () => {
|
|
23262
|
-
const
|
|
23263
|
-
if (!
|
|
23575
|
+
const host = playerHost.value;
|
|
23576
|
+
if (!host || player || !props2.show)
|
|
23264
23577
|
return;
|
|
23578
|
+
video = document.createElement("video");
|
|
23579
|
+
video.className = `${name$2}__video ${name$2}__video--${props2.fit}`;
|
|
23580
|
+
video.src = props2.src;
|
|
23581
|
+
if (props2.poster)
|
|
23582
|
+
video.poster = props2.poster;
|
|
23583
|
+
video.autoplay = props2.autoplay;
|
|
23584
|
+
video.muted = props2.muted;
|
|
23585
|
+
video.loop = props2.loop;
|
|
23586
|
+
video.playsInline = true;
|
|
23587
|
+
host.replaceChildren(video);
|
|
23265
23588
|
player = new Plyr(video, {
|
|
23266
23589
|
controls: props2.controls ? ["play", "progress", "current-time", "mute", "volume", "settings", "fullscreen"] : [],
|
|
23267
23590
|
settings: ["speed"],
|
|
@@ -23275,7 +23598,7 @@
|
|
|
23275
23598
|
active: props2.loop
|
|
23276
23599
|
}
|
|
23277
23600
|
});
|
|
23278
|
-
mediaEvents.forEach((event) => video.addEventListener(event, emitMediaEvent));
|
|
23601
|
+
mediaEvents.forEach((event) => video == null ? void 0 : video.addEventListener(event, emitMediaEvent));
|
|
23279
23602
|
};
|
|
23280
23603
|
const play = () => player == null ? void 0 : player.play();
|
|
23281
23604
|
const pause = () => player == null ? void 0 : player.pause();
|
|
@@ -23286,6 +23609,12 @@
|
|
|
23286
23609
|
close,
|
|
23287
23610
|
toggleFullscreen
|
|
23288
23611
|
});
|
|
23612
|
+
vue.watch(playerHost, () => {
|
|
23613
|
+
destroyPlayer();
|
|
23614
|
+
createPlayer();
|
|
23615
|
+
}, {
|
|
23616
|
+
flush: "post"
|
|
23617
|
+
});
|
|
23289
23618
|
vue.watch(() => props2.show, (show) => __async(this, null, function* () {
|
|
23290
23619
|
if (show) {
|
|
23291
23620
|
yield vue.nextTick();
|
|
@@ -23319,15 +23648,11 @@
|
|
|
23319
23648
|
default: () => [vue.createVNode("div", {
|
|
23320
23649
|
"class": bem$2("backdrop"),
|
|
23321
23650
|
"onClick": close
|
|
23322
|
-
}, null), vue.createVNode("
|
|
23323
|
-
"ref":
|
|
23324
|
-
"
|
|
23325
|
-
|
|
23326
|
-
|
|
23327
|
-
"autoplay": props2.autoplay,
|
|
23328
|
-
"muted": props2.muted,
|
|
23329
|
-
"loop": props2.loop,
|
|
23330
|
-
"playsinline": true
|
|
23651
|
+
}, null), vue.createVNode("div", {
|
|
23652
|
+
"ref": playerHost,
|
|
23653
|
+
"style": {
|
|
23654
|
+
width: "100%"
|
|
23655
|
+
}
|
|
23331
23656
|
}, null)]
|
|
23332
23657
|
});
|
|
23333
23658
|
}
|
|
@@ -25052,7 +25377,7 @@
|
|
|
25052
25377
|
});
|
|
25053
25378
|
}
|
|
25054
25379
|
};
|
|
25055
|
-
const version = "0.0.
|
|
25380
|
+
const version = "0.0.46";
|
|
25056
25381
|
function install(app) {
|
|
25057
25382
|
const components = [
|
|
25058
25383
|
ActionBar,
|