ts-glitter 21.8.3 → 21.8.6
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/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/backend-manager/bg-dialog.js +342 -100
- package/lowcode/backend-manager/bg-dialog.ts +432 -145
- package/lowcode/backend-manager/bg-widget.js +4 -4
- package/lowcode/backend-manager/bg-widget.ts +5 -5
- package/lowcode/cms-plugin/POS-setting.js +18 -6
- package/lowcode/cms-plugin/POS-setting.ts +22 -10
- package/lowcode/cms-plugin/pos-pages/payment-page.js +9 -2
- package/lowcode/cms-plugin/pos-pages/payment-page.ts +11 -3
- package/lowcode/cms-plugin/shopping-discount-setting.js +148 -92
- package/lowcode/cms-plugin/shopping-discount-setting.ts +162 -111
- package/lowcode/cms-plugin/shopping-product-stock.js +58 -45
- package/lowcode/cms-plugin/shopping-product-stock.ts +66 -49
- package/lowcode/cms-plugin/stock-stores.js +55 -0
- package/lowcode/cms-plugin/stock-stores.ts +59 -0
- package/lowcode/css/editor.css +8 -9
- package/lowcode/editor/basic-component.js +0 -10
- package/lowcode/editor/basic-component.ts +1 -11
- package/lowcode/glitter-base/route/article.js +50 -51
- package/lowcode/glitter-base/route/article.ts +102 -103
- package/lowcode/glitter-base/route/recommend.js +1 -0
- package/lowcode/glitter-base/route/recommend.ts +141 -123
- package/lowcode/glitterBundle/plugins/html-render.js +2 -0
- package/lowcode/glitterBundle/plugins/html-render.ts +1 -0
- package/lowcode/jspage/function-page/setting_editor.js +1 -1
- package/lowcode/jspage/function-page/setting_editor.ts +1 -1
- package/lowcode/jspage/function-page/tool-setting.js +0 -1
- package/lowcode/jspage/function-page/tool-setting.ts +0 -1
- package/lowcode/jspage/main.js +6 -1
- package/lowcode/jspage/main.ts +6 -1
- package/lowcode/modules/image-library-clone.ts +2 -0
- package/lowcode/modules/image-library.js +118 -155
- package/lowcode/modules/image-library.ts +134 -197
- package/lowcode/official_view_component/official/component.js +1 -1
- package/lowcode/official_view_component/official/component.ts +1 -1
- package/lowcode/public-components/banner/first-banner.js +85 -50
- package/lowcode/public-components/banner/first-banner.ts +96 -59
- package/lowcode/public-components/layout-plugin/social-links-01.js +19 -19
- package/lowcode/public-components/layout-plugin/social-links-01.ts +35 -35
- package/package.json +1 -1
- package/src/api-public/controllers/article.js +11 -0
- package/src/api-public/controllers/article.js.map +1 -1
- package/src/api-public/controllers/article.ts +13 -0
- package/src/api-public/controllers/recommend.js +1 -0
- package/src/api-public/controllers/recommend.js.map +1 -1
- package/src/api-public/controllers/recommend.ts +99 -89
- package/src/api-public/services/checkout-event.js +81 -43
- package/src/api-public/services/checkout-event.js.map +1 -1
- package/src/api-public/services/checkout-event.ts +93 -38
- package/src/api-public/services/post.js +7 -17
- package/src/api-public/services/post.js.map +1 -1
- package/src/api-public/services/recommend.d.ts +1 -0
- package/src/api-public/services/recommend.js +12 -2
- package/src/api-public/services/recommend.js.map +1 -1
- package/src/api-public/services/recommend.ts +375 -354
- package/src/api-public/services/shopping.d.ts +1 -0
- package/src/api-public/services/shopping.js +4 -2
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +7 -2
- package/src/services/saas-table-check.js +1 -1
- package/src/services/saas-table-check.js.map +1 -1
- package/src/services/saas-table-check.ts +1 -1
|
@@ -8,7 +8,9 @@ import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
|
|
|
8
8
|
import { FilterOptions } from './filter-options.js';
|
|
9
9
|
import { Tool } from '../modules/tool.js';
|
|
10
10
|
import { ShipmentConfig } from '../glitter-base/global/shipment-config.js';
|
|
11
|
-
import { BgDialog } from '../backend-manager/bg-dialog.js';
|
|
11
|
+
import { BgDialog, ShopType } from '../backend-manager/bg-dialog.js';
|
|
12
|
+
import { Article } from '../glitter-base/route/article.js';
|
|
13
|
+
import { ApiRecommend } from '../glitter-base/route/recommend.js';
|
|
12
14
|
|
|
13
15
|
type VoucherForType = 'all' | 'collection' | 'product' | 'manager_tag';
|
|
14
16
|
type RebackType = 'rebate' | 'discount' | 'shipment_free' | 'add_on_items' | 'giveaway';
|
|
@@ -58,6 +60,7 @@ interface VoucherData {
|
|
|
58
60
|
type: SelectShipmentType;
|
|
59
61
|
list: string[];
|
|
60
62
|
};
|
|
63
|
+
distribution_shop: string[];
|
|
61
64
|
}
|
|
62
65
|
|
|
63
66
|
const html = String.raw;
|
|
@@ -121,7 +124,7 @@ export class ShoppingDiscountSetting {
|
|
|
121
124
|
const triggerLabels: Record<string, string> = {
|
|
122
125
|
auto: '自動',
|
|
123
126
|
code: '輸入代碼',
|
|
124
|
-
distribution: '
|
|
127
|
+
distribution: '特定賣場',
|
|
125
128
|
};
|
|
126
129
|
|
|
127
130
|
function getDatalist() {
|
|
@@ -298,6 +301,7 @@ export class ShoppingDiscountSetting {
|
|
|
298
301
|
includeDiscount: 'before',
|
|
299
302
|
productOffStart: 'price_desc',
|
|
300
303
|
selectShipment: { type: 'all', list: [] },
|
|
304
|
+
distribution_shop: [],
|
|
301
305
|
};
|
|
302
306
|
};
|
|
303
307
|
|
|
@@ -310,7 +314,7 @@ export class ShoppingDiscountSetting {
|
|
|
310
314
|
})()}`,
|
|
311
315
|
`活動方式:${(() => {
|
|
312
316
|
if (voucherData.trigger === 'auto') return '自動折扣';
|
|
313
|
-
if (voucherData.trigger === 'distribution') return '
|
|
317
|
+
if (voucherData.trigger === 'distribution') return '特定賣場使用';
|
|
314
318
|
if (voucherData.trigger === 'code') return `優惠代碼「${voucherData.code ?? ''}」`;
|
|
315
319
|
return '';
|
|
316
320
|
})()}`,
|
|
@@ -370,6 +374,7 @@ export class ShoppingDiscountSetting {
|
|
|
370
374
|
const vm = obj.vm;
|
|
371
375
|
const glitter = gvc.glitter;
|
|
372
376
|
const dialog = new ShareDialog(glitter);
|
|
377
|
+
const bgDialog = new BgDialog(gvc);
|
|
373
378
|
const getUUID = glitter.getUUID;
|
|
374
379
|
|
|
375
380
|
const pageVM = {
|
|
@@ -519,7 +524,7 @@ export class ShoppingDiscountSetting {
|
|
|
519
524
|
{
|
|
520
525
|
key: 'distribution',
|
|
521
526
|
name: '供特定賣場優惠使用',
|
|
522
|
-
innerHtml: BgWidget.grayNote('僅限於隱形賣場 / 一頁商店 /
|
|
527
|
+
innerHtml: BgWidget.grayNote('僅限於隱形賣場 / 一頁商店 / 分銷連結使用'),
|
|
523
528
|
},
|
|
524
529
|
],
|
|
525
530
|
[voucherData.trigger],
|
|
@@ -1710,32 +1715,13 @@ export class ShoppingDiscountSetting {
|
|
|
1710
1715
|
return '';
|
|
1711
1716
|
}
|
|
1712
1717
|
|
|
1718
|
+
const id = 'apply_shop_view';
|
|
1713
1719
|
const prefix = Tool.randomString(6);
|
|
1714
|
-
|
|
1715
|
-
type ShopType
|
|
1716
|
-
|
|
1717
|
-
const shopTypeRecord: Record<ShopType, { icon: string; title: string }> = {
|
|
1718
|
-
group: {
|
|
1719
|
-
icon: html`<i class="fa-regular fa-puzzle-piece ${prefix}_icon"></i>`,
|
|
1720
|
-
title: '拼團賣場',
|
|
1721
|
-
},
|
|
1722
|
-
recommend: {
|
|
1723
|
-
icon: html`<i class="fa-regular fa-share-nodes ${prefix}_icon"></i>`,
|
|
1724
|
-
title: '分銷連結',
|
|
1725
|
-
},
|
|
1726
|
-
hidden: {
|
|
1727
|
-
icon: html`<i class="fa-solid fa-face-dotted ${prefix}_icon"></i>`,
|
|
1728
|
-
title: '隱形賣場',
|
|
1729
|
-
},
|
|
1730
|
-
onepage: {
|
|
1731
|
-
icon: html`<i class="fa-regular fa-file ${prefix}_icon"></i>`,
|
|
1732
|
-
title: '一頁商店',
|
|
1733
|
-
},
|
|
1734
|
-
};
|
|
1720
|
+
let loading = true;
|
|
1721
|
+
let dataList: { type: ShopType; name: string; referrer: string }[] = [];
|
|
1735
1722
|
|
|
1736
1723
|
gvc.addStyle(`
|
|
1737
1724
|
.${prefix}_container {
|
|
1738
|
-
max-width: 800px;
|
|
1739
1725
|
margin: 0 auto;
|
|
1740
1726
|
background-color: #fff;
|
|
1741
1727
|
border-radius: 8px;
|
|
@@ -1745,9 +1731,9 @@ export class ShoppingDiscountSetting {
|
|
|
1745
1731
|
.${prefix}_table {
|
|
1746
1732
|
width: 100%;
|
|
1747
1733
|
border-collapse: collapse;
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1734
|
+
overflow-x: auto;
|
|
1735
|
+
white-space: nowrap;
|
|
1736
|
+
${bgDialog.isMobile ? 'display: block;' : ''}
|
|
1751
1737
|
}
|
|
1752
1738
|
|
|
1753
1739
|
.${prefix}_th {
|
|
@@ -1801,14 +1787,23 @@ export class ShoppingDiscountSetting {
|
|
|
1801
1787
|
.${prefix}_expend:hover {
|
|
1802
1788
|
background-color: #f9fafb;
|
|
1803
1789
|
}
|
|
1790
|
+
|
|
1791
|
+
.${prefix}_none_text {
|
|
1792
|
+
text-align: center;
|
|
1793
|
+
padding: 18px 0;
|
|
1794
|
+
}
|
|
1804
1795
|
`);
|
|
1805
1796
|
|
|
1806
1797
|
return gvc.bindView({
|
|
1807
|
-
bind:
|
|
1798
|
+
bind: id,
|
|
1808
1799
|
view: () => {
|
|
1800
|
+
if (loading) {
|
|
1801
|
+
return BgWidget.spinner();
|
|
1802
|
+
}
|
|
1803
|
+
|
|
1809
1804
|
return html`<div class="${prefix}_container">
|
|
1810
|
-
<table id="
|
|
1811
|
-
<thead
|
|
1805
|
+
<table id="apply-shop-table" class="${prefix}_table">
|
|
1806
|
+
<thead>
|
|
1812
1807
|
<tr class="${prefix}_tr">
|
|
1813
1808
|
<th class="${prefix}_th">賣場類型</th>
|
|
1814
1809
|
<th class="${prefix}_th">賣場名稱</th>
|
|
@@ -1819,83 +1814,119 @@ export class ShoppingDiscountSetting {
|
|
|
1819
1814
|
<!-- 資料將由 JavaScript 動態填入 -->
|
|
1820
1815
|
</tbody>
|
|
1821
1816
|
</table>
|
|
1822
|
-
<div id="
|
|
1817
|
+
<div id="apply-shop-div">
|
|
1823
1818
|
<!-- 資料將由 JavaScript 動態填入 -->
|
|
1824
1819
|
</div>
|
|
1825
1820
|
</div>`;
|
|
1826
1821
|
},
|
|
1827
|
-
divCreate: {},
|
|
1828
1822
|
onCreate: () => {
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1823
|
+
function render() {
|
|
1824
|
+
const tableBody = document.querySelector('#apply-shop-table tbody');
|
|
1825
|
+
const tableDiv = document.querySelector('#apply-shop-div');
|
|
1826
|
+
|
|
1827
|
+
if (!tableBody || !tableDiv) {
|
|
1828
|
+
return;
|
|
1829
|
+
}
|
|
1830
|
+
|
|
1831
|
+
tableBody.innerHTML = '';
|
|
1832
|
+
|
|
1833
|
+
if (voucherData.distribution_shop.length === 0) {
|
|
1834
|
+
const row = document.createElement('tr');
|
|
1835
|
+
row.className = `${prefix}_tr`;
|
|
1836
|
+
row.innerHTML = html`<td colspan="3" class="${prefix}_none_text">尚未選擇賣場</td>`;
|
|
1837
|
+
tableBody.appendChild(row);
|
|
1838
|
+
return;
|
|
1839
|
+
}
|
|
1840
|
+
|
|
1841
|
+
const shopTypeRecord = bgDialog.shopTypeRecord();
|
|
1842
|
+
|
|
1843
|
+
dataList.forEach(data => {
|
|
1844
|
+
const shopData = shopTypeRecord[data.type];
|
|
1845
|
+
const row = document.createElement('tr');
|
|
1846
|
+
row.className = `${prefix}_tr`;
|
|
1851
1847
|
|
|
1852
|
-
|
|
1853
|
-
|
|
1848
|
+
const referrerText = data.referrer ? data.referrer : '-';
|
|
1849
|
+
const referrerClass = data.referrer ? '' : `${prefix}_empty_referrer`;
|
|
1854
1850
|
|
|
1855
|
-
|
|
1856
|
-
|
|
1851
|
+
row.innerHTML = html`
|
|
1852
|
+
<td class="${prefix}_td ${prefix}_type_cell">${shopData.icon} ${shopData.title}</td>
|
|
1853
|
+
<td class="${prefix}_td">${data.name}</td>
|
|
1854
|
+
<td class="${prefix}_td ${referrerClass}">${referrerText}</td>
|
|
1855
|
+
`;
|
|
1856
|
+
tableBody.appendChild(row);
|
|
1857
|
+
});
|
|
1858
|
+
|
|
1859
|
+
// 「展開更多」元素
|
|
1860
|
+
// const expendMore = document.createElement('div');
|
|
1861
|
+
// expendMore.className = `${prefix}_expend`;
|
|
1862
|
+
// expendMore.innerHTML = html`展開更多 <i class="fa-solid fa-chevron-down"></i>`;
|
|
1863
|
+
// tableDiv.appendChild(expendMore);
|
|
1857
1864
|
}
|
|
1858
1865
|
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
// 賣場類型欄位
|
|
1866
|
-
const typeCell = document.createElement('td');
|
|
1867
|
-
typeCell.className = `${prefix}_td ${prefix}_type_cell`;
|
|
1868
|
-
typeCell.innerHTML = `${data.icon} ${data.title}`;
|
|
1869
|
-
row.appendChild(typeCell);
|
|
1870
|
-
|
|
1871
|
-
// 賣場名稱欄位
|
|
1872
|
-
const nameCell = document.createElement('td');
|
|
1873
|
-
nameCell.className = `${prefix}_td`;
|
|
1874
|
-
nameCell.textContent = salon.name;
|
|
1875
|
-
row.appendChild(nameCell);
|
|
1876
|
-
|
|
1877
|
-
// 推薦人欄位
|
|
1878
|
-
const referrerCell = document.createElement('td');
|
|
1879
|
-
referrerCell.className = `${prefix}_td`;
|
|
1880
|
-
if (salon.referrer) {
|
|
1881
|
-
referrerCell.textContent = salon.referrer;
|
|
1882
|
-
} else {
|
|
1883
|
-
referrerCell.textContent = '-';
|
|
1884
|
-
referrerCell.classList.add(`${prefix}_empty_referrer`);
|
|
1866
|
+
if (loading) {
|
|
1867
|
+
if (voucherData.distribution_shop.length === 0) {
|
|
1868
|
+
loading = false;
|
|
1869
|
+
setTimeout(() => gvc.notifyDataChange(id), 100);
|
|
1870
|
+
return;
|
|
1885
1871
|
}
|
|
1886
|
-
row.appendChild(referrerCell);
|
|
1887
1872
|
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1873
|
+
dataList = [];
|
|
1874
|
+
const articleIds: string[] = [];
|
|
1875
|
+
const recommendIds: string[] = [];
|
|
1876
|
+
|
|
1877
|
+
voucherData.distribution_shop.map(item => {
|
|
1878
|
+
const [pageType, id] = item.split('-');
|
|
1879
|
+
pageType === 'recommend' ? recommendIds.push(id) : articleIds.push(id);
|
|
1880
|
+
});
|
|
1881
|
+
|
|
1882
|
+
Promise.all([
|
|
1883
|
+
articleIds.length > 0
|
|
1884
|
+
? Article.get({
|
|
1885
|
+
page: 0,
|
|
1886
|
+
limit: 9999,
|
|
1887
|
+
search: vm.search || undefined,
|
|
1888
|
+
status: '0,1',
|
|
1889
|
+
id_list: articleIds.join(','),
|
|
1890
|
+
}).then(data => {
|
|
1891
|
+
return Array.isArray(data.response?.data) ? data.response.data : [];
|
|
1892
|
+
})
|
|
1893
|
+
: [],
|
|
1894
|
+
recommendIds.length > 0
|
|
1895
|
+
? ApiRecommend.getList({
|
|
1896
|
+
data: {},
|
|
1897
|
+
limit: 9999,
|
|
1898
|
+
page: 0,
|
|
1899
|
+
token: (window.parent as any).config.token,
|
|
1900
|
+
id_list: recommendIds.join(','),
|
|
1901
|
+
}).then(data => {
|
|
1902
|
+
return Array.isArray(data.response?.data) ? data.response.data : [];
|
|
1903
|
+
})
|
|
1904
|
+
: [],
|
|
1905
|
+
]).then(dataArray => {
|
|
1906
|
+
const [article, recommend] = dataArray;
|
|
1907
|
+
|
|
1908
|
+
article.map((item: any) => {
|
|
1909
|
+
dataList.push({
|
|
1910
|
+
type: item.content.page_type === 'hidden' ? 'hidden' : 'onepage',
|
|
1911
|
+
name: item.content.name,
|
|
1912
|
+
referrer: '-',
|
|
1913
|
+
});
|
|
1914
|
+
});
|
|
1891
1915
|
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1916
|
+
recommend.map((item: any) => {
|
|
1917
|
+
dataList.push({
|
|
1918
|
+
type: 'recommend',
|
|
1919
|
+
name: item.content.title,
|
|
1920
|
+
referrer: item.content.recommend_user?.name ?? '-',
|
|
1921
|
+
});
|
|
1922
|
+
});
|
|
1923
|
+
|
|
1924
|
+
loading = false;
|
|
1925
|
+
gvc.notifyDataChange(id);
|
|
1926
|
+
});
|
|
1927
|
+
} else {
|
|
1928
|
+
render();
|
|
1929
|
+
}
|
|
1899
1930
|
},
|
|
1900
1931
|
});
|
|
1901
1932
|
}
|
|
@@ -1906,11 +1937,26 @@ export class ShoppingDiscountSetting {
|
|
|
1906
1937
|
|
|
1907
1938
|
// 優惠促銷模式的選取商品畫面
|
|
1908
1939
|
const reBackProductView: Record<RebackType, { title: string; html: string | string[] }> = {
|
|
1909
|
-
rebate: {
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1940
|
+
rebate: {
|
|
1941
|
+
title: '活動商品',
|
|
1942
|
+
html: voucherData.for === 'all' ? '' : selectProduct(),
|
|
1943
|
+
},
|
|
1944
|
+
discount: {
|
|
1945
|
+
title: '活動商品',
|
|
1946
|
+
html: voucherData.for === 'all' ? '' : selectProduct(),
|
|
1947
|
+
},
|
|
1948
|
+
shipment_free: {
|
|
1949
|
+
title: '活動商品',
|
|
1950
|
+
html: '',
|
|
1951
|
+
},
|
|
1952
|
+
add_on_items: {
|
|
1953
|
+
title: '加購品項',
|
|
1954
|
+
html: [addProductView()].join(''),
|
|
1955
|
+
},
|
|
1956
|
+
giveaway: {
|
|
1957
|
+
title: '贈品品項',
|
|
1958
|
+
html: [addProductView()].join(''),
|
|
1959
|
+
},
|
|
1914
1960
|
};
|
|
1915
1961
|
|
|
1916
1962
|
// 優惠套用賣場按鈕
|
|
@@ -1918,8 +1964,13 @@ export class ShoppingDiscountSetting {
|
|
|
1918
1964
|
button: { color: 'gray', size: 'md' },
|
|
1919
1965
|
text: { name: '選擇賣場' },
|
|
1920
1966
|
event: gvc.event(() => {
|
|
1921
|
-
|
|
1922
|
-
|
|
1967
|
+
bgDialog.marketShop({
|
|
1968
|
+
def: voucherData.distribution_shop.slice(),
|
|
1969
|
+
callback: postData => {
|
|
1970
|
+
voucherData.distribution_shop = postData;
|
|
1971
|
+
gvc.notifyDataChange(pageVM.viewID);
|
|
1972
|
+
},
|
|
1973
|
+
});
|
|
1923
1974
|
}),
|
|
1924
1975
|
});
|
|
1925
1976
|
|
|
@@ -1930,13 +1981,13 @@ export class ShoppingDiscountSetting {
|
|
|
1930
1981
|
{ title: '折扣方式', html: trigger() },
|
|
1931
1982
|
{ title: '適用訂單類型', html: device() },
|
|
1932
1983
|
],
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1984
|
+
[
|
|
1985
|
+
{
|
|
1986
|
+
title: '套用賣場',
|
|
1987
|
+
button: applyShopButton,
|
|
1988
|
+
html: applyShop(),
|
|
1989
|
+
},
|
|
1990
|
+
],
|
|
1940
1991
|
[
|
|
1941
1992
|
{ title: '折扣設定', html: method() },
|
|
1942
1993
|
{ title: '使用條件', html: rule() },
|
|
@@ -35,7 +35,9 @@ export class StockList {
|
|
|
35
35
|
replaceData: {},
|
|
36
36
|
stockStores: [],
|
|
37
37
|
listLimit: TableStorage.getLimit(),
|
|
38
|
+
isEqual: true,
|
|
38
39
|
};
|
|
40
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
39
41
|
const ListComp = new BgListComponent(gvc, vm, FilterOptions.stockFilterFrame);
|
|
40
42
|
vm.filter = ListComp.getFilterObject();
|
|
41
43
|
let vmi = undefined;
|
|
@@ -53,6 +55,14 @@ export class StockList {
|
|
|
53
55
|
}
|
|
54
56
|
return totalStockCount;
|
|
55
57
|
}
|
|
58
|
+
function areArraysEqual(arr1, arr2) {
|
|
59
|
+
if (arr1.length !== arr2.length)
|
|
60
|
+
return false;
|
|
61
|
+
return arr1.every((item1, index) => {
|
|
62
|
+
const item2 = arr2[index];
|
|
63
|
+
return JSON.stringify(item1) === JSON.stringify(item2);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
56
66
|
function getDatalist() {
|
|
57
67
|
return vm.dataList.map((dd) => {
|
|
58
68
|
var _a, _b;
|
|
@@ -167,6 +177,7 @@ export class StockList {
|
|
|
167
177
|
item.product_content = dd.product_content;
|
|
168
178
|
}
|
|
169
179
|
});
|
|
180
|
+
vm.isEqual = areArraysEqual(vm.stockArray, vm.stockOriginArray);
|
|
170
181
|
gvc.notifyDataChange(vm.updateId);
|
|
171
182
|
})}"
|
|
172
183
|
value="${(_c = stockData.count) !== null && _c !== void 0 ? _c : 0}"
|
|
@@ -347,17 +358,28 @@ export class StockList {
|
|
|
347
358
|
}
|
|
348
359
|
}
|
|
349
360
|
},
|
|
350
|
-
rowClick: (data, index) => {
|
|
351
|
-
if (option.select_mode) {
|
|
361
|
+
rowClick: (data, index, e, event) => {
|
|
362
|
+
if (option.select_mode || event.target.tagName === 'TR') {
|
|
352
363
|
return;
|
|
353
364
|
}
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
365
|
+
function call() {
|
|
366
|
+
const product = vm.dataList[index].product_content;
|
|
367
|
+
const variant = vm.dataList[index].variant_content;
|
|
368
|
+
product.variants.map((dd) => {
|
|
369
|
+
dd.editable = JSON.stringify(variant.spec) === JSON.stringify(dd.spec);
|
|
370
|
+
});
|
|
371
|
+
vm.replaceData = product;
|
|
372
|
+
vm.type = 'editSpec';
|
|
373
|
+
}
|
|
374
|
+
if (vm.isEqual) {
|
|
375
|
+
call();
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
dialog.checkYesOrNot({
|
|
379
|
+
text: '已修正的資料尚未儲存,確定要進到此規格詳細頁嗎',
|
|
380
|
+
callback: bool => bool && call(),
|
|
381
|
+
});
|
|
382
|
+
}
|
|
361
383
|
},
|
|
362
384
|
filter: option.select_mode
|
|
363
385
|
? [
|
|
@@ -380,42 +402,34 @@ export class StockList {
|
|
|
380
402
|
gvc.bindView({
|
|
381
403
|
bind: vm.updateId,
|
|
382
404
|
view: () => {
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
return false;
|
|
386
|
-
return arr1.every((item1, index) => {
|
|
387
|
-
const item2 = arr2[index];
|
|
388
|
-
return JSON.stringify(item1) === JSON.stringify(item2);
|
|
389
|
-
});
|
|
390
|
-
};
|
|
391
|
-
if (!areArraysEqual(vm.stockArray, vm.stockOriginArray)) {
|
|
392
|
-
return html ` <div class="update-bar-container">
|
|
393
|
-
${BgWidget.cancel(gvc.event(() => {
|
|
394
|
-
gvc.notifyDataChange(vm.tableId);
|
|
395
|
-
}))}
|
|
396
|
-
${BgWidget.save(gvc.event(() => {
|
|
397
|
-
const dialog = new ShareDialog(gvc.glitter);
|
|
398
|
-
dialog.dataLoading({
|
|
399
|
-
text: '更新庫存中',
|
|
400
|
-
visible: true,
|
|
401
|
-
});
|
|
402
|
-
ApiShop.putVariants({
|
|
403
|
-
data: vm.dataList,
|
|
404
|
-
token: window.parent.config.token,
|
|
405
|
-
}).then(re => {
|
|
406
|
-
dialog.dataLoading({ visible: false });
|
|
407
|
-
if (re.result) {
|
|
408
|
-
dialog.successMessage({ text: '更新成功' });
|
|
409
|
-
gvc.notifyDataChange(vm.tableId);
|
|
410
|
-
}
|
|
411
|
-
else {
|
|
412
|
-
dialog.errorMessage({ text: '更新失敗' });
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
}))}
|
|
416
|
-
</div>`;
|
|
405
|
+
if (vm.isEqual) {
|
|
406
|
+
return '';
|
|
417
407
|
}
|
|
418
|
-
return
|
|
408
|
+
return html ` <div class="update-bar-container">
|
|
409
|
+
${BgWidget.cancel(gvc.event(() => {
|
|
410
|
+
vm.isEqual = true;
|
|
411
|
+
gvc.notifyDataChange(vm.tableId);
|
|
412
|
+
}), '回到初始值')}
|
|
413
|
+
${BgWidget.save(gvc.event(() => {
|
|
414
|
+
dialog.dataLoading({
|
|
415
|
+
text: '更新庫存中',
|
|
416
|
+
visible: true,
|
|
417
|
+
});
|
|
418
|
+
ApiShop.putVariants({
|
|
419
|
+
data: vm.dataList,
|
|
420
|
+
token: window.parent.config.token,
|
|
421
|
+
}).then(re => {
|
|
422
|
+
dialog.dataLoading({ visible: false });
|
|
423
|
+
if (re.result) {
|
|
424
|
+
dialog.successMessage({ text: '更新成功' });
|
|
425
|
+
gvc.notifyDataChange(vm.tableId);
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
dialog.errorMessage({ text: '更新失敗' });
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
}))}
|
|
432
|
+
</div>`;
|
|
419
433
|
},
|
|
420
434
|
}),
|
|
421
435
|
].join(''))}
|
|
@@ -429,7 +443,6 @@ export class StockList {
|
|
|
429
443
|
defData: vm.replaceData,
|
|
430
444
|
goBackEvent: {
|
|
431
445
|
save: postMD => {
|
|
432
|
-
const dialog = new ShareDialog(gvc.glitter);
|
|
433
446
|
dialog.dataLoading({ visible: true });
|
|
434
447
|
ApiShop.putProduct({
|
|
435
448
|
data: postMD,
|