ts-glitter 21.8.3 → 21.8.4

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.
Files changed (52) hide show
  1. package/lowcode/Entry.js +1 -1
  2. package/lowcode/Entry.ts +1 -1
  3. package/lowcode/backend-manager/bg-dialog.js +342 -100
  4. package/lowcode/backend-manager/bg-dialog.ts +432 -145
  5. package/lowcode/backend-manager/bg-widget.js +4 -4
  6. package/lowcode/backend-manager/bg-widget.ts +5 -5
  7. package/lowcode/cms-plugin/shopping-discount-setting.js +148 -92
  8. package/lowcode/cms-plugin/shopping-discount-setting.ts +162 -111
  9. package/lowcode/cms-plugin/shopping-product-stock.js +58 -45
  10. package/lowcode/cms-plugin/shopping-product-stock.ts +66 -49
  11. package/lowcode/css/editor.css +8 -9
  12. package/lowcode/editor/basic-component.js +0 -10
  13. package/lowcode/editor/basic-component.ts +1 -11
  14. package/lowcode/glitter-base/route/article.js +50 -51
  15. package/lowcode/glitter-base/route/article.ts +102 -103
  16. package/lowcode/glitter-base/route/recommend.js +1 -0
  17. package/lowcode/glitter-base/route/recommend.ts +141 -123
  18. package/lowcode/glitterBundle/plugins/html-render.js +2 -0
  19. package/lowcode/glitterBundle/plugins/html-render.ts +1 -0
  20. package/lowcode/jspage/function-page/tool-setting.js +0 -1
  21. package/lowcode/jspage/function-page/tool-setting.ts +0 -1
  22. package/lowcode/jspage/main.js +6 -1
  23. package/lowcode/jspage/main.ts +6 -1
  24. package/lowcode/modules/image-library-clone.ts +2 -0
  25. package/lowcode/modules/image-library.js +118 -155
  26. package/lowcode/modules/image-library.ts +134 -197
  27. package/lowcode/official_view_component/official/component.js +1 -1
  28. package/lowcode/official_view_component/official/component.ts +1 -1
  29. package/lowcode/public-components/banner/first-banner.js +85 -50
  30. package/lowcode/public-components/banner/first-banner.ts +96 -59
  31. package/lowcode/public-components/layout-plugin/social-links-01.js +23 -44
  32. package/lowcode/public-components/layout-plugin/social-links-01.ts +23 -48
  33. package/package.json +1 -1
  34. package/src/api-public/controllers/article.js +11 -0
  35. package/src/api-public/controllers/article.js.map +1 -1
  36. package/src/api-public/controllers/article.ts +13 -0
  37. package/src/api-public/controllers/recommend.js +1 -0
  38. package/src/api-public/controllers/recommend.js.map +1 -1
  39. package/src/api-public/controllers/recommend.ts +99 -89
  40. package/src/api-public/services/checkout-event.js +4 -3
  41. package/src/api-public/services/checkout-event.js.map +1 -1
  42. package/src/api-public/services/checkout-event.ts +11 -7
  43. package/src/api-public/services/post.js +7 -17
  44. package/src/api-public/services/post.js.map +1 -1
  45. package/src/api-public/services/recommend.d.ts +1 -0
  46. package/src/api-public/services/recommend.js +12 -2
  47. package/src/api-public/services/recommend.js.map +1 -1
  48. package/src/api-public/services/recommend.ts +375 -354
  49. package/src/api-public/services/shopping.d.ts +1 -0
  50. package/src/api-public/services/shopping.js +4 -2
  51. package/src/api-public/services/shopping.js.map +1 -1
  52. package/src/api-public/services/shopping.ts +7 -2
@@ -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 = 'group' | 'recommend' | 'hidden' | 'onepage';
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
- .${prefix}_thead {
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: 'idnnn',
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="beauty-salon-table" class="${prefix}_table">
1811
- <thead class="${prefix}_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="beauty-salon-div">
1817
+ <div id="apply-shop-div">
1823
1818
  <!-- 資料將由 JavaScript 動態填入 -->
1824
1819
  </div>
1825
1820
  </div>`;
1826
1821
  },
1827
- divCreate: {},
1828
1822
  onCreate: () => {
1829
- const salons: { type: ShopType; name: string; referrer: string }[] = [
1830
- {
1831
- type: 'group',
1832
- name: 'SPA 梳毛刷現實揪團中!人越多越便宜!',
1833
- referrer: '-',
1834
- },
1835
- {
1836
- type: 'recommend',
1837
- name: '與Sandy的貓跳台合作,給貓咪最好的跳台!',
1838
- referrer: 'YT貓皇',
1839
- },
1840
- {
1841
- type: 'hidden',
1842
- name: '毛孩防寒任三件8折,一起溫暖過冬!',
1843
- referrer: 'Sandy',
1844
- },
1845
- {
1846
- type: 'onepage',
1847
- name: '毛孩玩具聯名,買三件折扣8折!',
1848
- referrer: '-',
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
- const tableBody = document.querySelector('#beauty-salon-table tbody');
1853
- const tableDiv = document.querySelector('#beauty-salon-div');
1848
+ const referrerText = data.referrer ? data.referrer : '-';
1849
+ const referrerClass = data.referrer ? '' : `${prefix}_empty_referrer`;
1854
1850
 
1855
- if (!tableBody || !tableDiv) {
1856
- return;
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
- salons.forEach(salon => {
1861
- const data = shopTypeRecord[salon.type];
1862
- const row = document.createElement('tr');
1863
- row.className = `${prefix}_tr`;
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
- tableBody.appendChild(row);
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
- const expendMore = document.createElement('div');
1894
- expendMore.className = `${prefix}_expend`;
1895
- const moreText = html`<span>展開更多</span>`;
1896
- const chevronDown = html`<i class="fa-solid fa-chevron-dow ms-1"></i>`;
1897
- expendMore.innerHTML = `${moreText} ${chevronDown}`;
1898
- tableDiv.appendChild(expendMore);
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: { title: '活動商品', html: voucherData.for === 'all' ? '' : selectProduct() },
1910
- discount: { title: '活動商品', html: voucherData.for === 'all' ? '' : selectProduct() },
1911
- shipment_free: { title: '活動商品', html: '' },
1912
- add_on_items: { title: '加購品項', html: [addProductView()].join('') },
1913
- giveaway: { title: '贈品品項', html: [addProductView()].join('') },
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
- const bgDialog = new BgDialog(gvc);
1922
- bgDialog.marketShop();
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
- // title: '套用賣場',
1936
- // button: applyShopButton,
1937
- // html: applyShop(),
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
- const product = vm.dataList[index].product_content;
355
- const variant = vm.dataList[index].variant_content;
356
- product.variants.map((dd) => {
357
- dd.editable = JSON.stringify(variant.spec) === JSON.stringify(dd.spec);
358
- });
359
- vm.replaceData = product;
360
- vm.type = 'editSpec';
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
- const areArraysEqual = (arr1, arr2) => {
384
- if (arr1.length !== arr2.length)
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,