product-left.js 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846
  1. exports.ids = [25,46];
  2. exports.modules = {
  3. /***/ 147:
  4. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  5. "use strict";
  6. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return on; });
  7. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return off; });
  8. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return once; });
  9. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return hasClass; });
  10. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return addClass; });
  11. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return removeClass; });
  12. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return getStyle; });
  13. /* unused harmony export setStyle */
  14. /* unused harmony export isScroll */
  15. /* unused harmony export getScrollContainer */
  16. /* unused harmony export isInContainer */
  17. /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
  18. /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue__WEBPACK_IMPORTED_MODULE_0__);
  19. /* istanbul ignore next */
  20. const isServer = vue__WEBPACK_IMPORTED_MODULE_0___default.a.prototype.$isServer;
  21. const SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
  22. const MOZ_HACK_REGEXP = /^moz([A-Z])/;
  23. const ieVersion = isServer ? 0 : Number(document.documentMode);
  24. /* istanbul ignore next */
  25. const trim = function(string) {
  26. return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
  27. };
  28. /* istanbul ignore next */
  29. const camelCase = function(name) {
  30. return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
  31. return offset ? letter.toUpperCase() : letter;
  32. }).replace(MOZ_HACK_REGEXP, 'Moz$1');
  33. };
  34. /* istanbul ignore next */
  35. const on = (function() {
  36. if (!isServer && document.addEventListener) {
  37. return function(element, event, handler) {
  38. if (element && event && handler) {
  39. element.addEventListener(event, handler, false);
  40. }
  41. };
  42. } else {
  43. return function(element, event, handler) {
  44. if (element && event && handler) {
  45. element.attachEvent('on' + event, handler);
  46. }
  47. };
  48. }
  49. })();
  50. /* istanbul ignore next */
  51. const off = (function() {
  52. if (!isServer && document.removeEventListener) {
  53. return function(element, event, handler) {
  54. if (element && event) {
  55. element.removeEventListener(event, handler, false);
  56. }
  57. };
  58. } else {
  59. return function(element, event, handler) {
  60. if (element && event) {
  61. element.detachEvent('on' + event, handler);
  62. }
  63. };
  64. }
  65. })();
  66. /* istanbul ignore next */
  67. const once = function(el, event, fn) {
  68. var listener = function() {
  69. if (fn) {
  70. fn.apply(this, arguments);
  71. }
  72. off(el, event, listener);
  73. };
  74. on(el, event, listener);
  75. };
  76. /* istanbul ignore next */
  77. function hasClass(el, cls) {
  78. if (!el || !cls) return false;
  79. if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
  80. if (el.classList) {
  81. return el.classList.contains(cls);
  82. } else {
  83. return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
  84. }
  85. };
  86. /* istanbul ignore next */
  87. function addClass(el, cls) {
  88. if (!el) return;
  89. var curClass = el.className;
  90. var classes = (cls || '').split(' ');
  91. for (var i = 0, j = classes.length; i < j; i++) {
  92. var clsName = classes[i];
  93. if (!clsName) continue;
  94. if (el.classList) {
  95. el.classList.add(clsName);
  96. } else if (!hasClass(el, clsName)) {
  97. curClass += ' ' + clsName;
  98. }
  99. }
  100. if (!el.classList) {
  101. el.setAttribute('class', curClass);
  102. }
  103. };
  104. /* istanbul ignore next */
  105. function removeClass(el, cls) {
  106. if (!el || !cls) return;
  107. var classes = cls.split(' ');
  108. var curClass = ' ' + el.className + ' ';
  109. for (var i = 0, j = classes.length; i < j; i++) {
  110. var clsName = classes[i];
  111. if (!clsName) continue;
  112. if (el.classList) {
  113. el.classList.remove(clsName);
  114. } else if (hasClass(el, clsName)) {
  115. curClass = curClass.replace(' ' + clsName + ' ', ' ');
  116. }
  117. }
  118. if (!el.classList) {
  119. el.setAttribute('class', trim(curClass));
  120. }
  121. };
  122. /* istanbul ignore next */
  123. const getStyle = ieVersion < 9 ? function(element, styleName) {
  124. if (isServer) return;
  125. if (!element || !styleName) return null;
  126. styleName = camelCase(styleName);
  127. if (styleName === 'float') {
  128. styleName = 'styleFloat';
  129. }
  130. try {
  131. switch (styleName) {
  132. case 'opacity':
  133. try {
  134. return element.filters.item('alpha').opacity / 100;
  135. } catch (e) {
  136. return 1.0;
  137. }
  138. default:
  139. return (element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null);
  140. }
  141. } catch (e) {
  142. return element.style[styleName];
  143. }
  144. } : function(element, styleName) {
  145. if (isServer) return;
  146. if (!element || !styleName) return null;
  147. styleName = camelCase(styleName);
  148. if (styleName === 'float') {
  149. styleName = 'cssFloat';
  150. }
  151. try {
  152. var computed = document.defaultView.getComputedStyle(element, '');
  153. return element.style[styleName] || computed ? computed[styleName] : null;
  154. } catch (e) {
  155. return element.style[styleName];
  156. }
  157. };
  158. /* istanbul ignore next */
  159. function setStyle(element, styleName, value) {
  160. if (!element || !styleName) return;
  161. if (typeof styleName === 'object') {
  162. for (var prop in styleName) {
  163. if (styleName.hasOwnProperty(prop)) {
  164. setStyle(element, prop, styleName[prop]);
  165. }
  166. }
  167. } else {
  168. styleName = camelCase(styleName);
  169. if (styleName === 'opacity' && ieVersion < 9) {
  170. element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
  171. } else {
  172. element.style[styleName] = value;
  173. }
  174. }
  175. };
  176. const isScroll = (el, vertical) => {
  177. if (isServer) return;
  178. const determinedDirection = vertical !== null && vertical !== undefined;
  179. const overflow = determinedDirection
  180. ? vertical
  181. ? getStyle(el, 'overflow-y')
  182. : getStyle(el, 'overflow-x')
  183. : getStyle(el, 'overflow');
  184. return overflow.match(/(scroll|auto|overlay)/);
  185. };
  186. const getScrollContainer = (el, vertical) => {
  187. if (isServer) return;
  188. let parent = el;
  189. while (parent) {
  190. if ([window, document, document.documentElement].includes(parent)) {
  191. return window;
  192. }
  193. if (isScroll(parent, vertical)) {
  194. return parent;
  195. }
  196. parent = parent.parentNode;
  197. }
  198. return parent;
  199. };
  200. const isInContainer = (el, container) => {
  201. if (isServer || !el || !container) return false;
  202. const elRect = el.getBoundingClientRect();
  203. let containerRect;
  204. if ([window, document, document.documentElement, null, undefined].includes(container)) {
  205. containerRect = {
  206. top: 0,
  207. right: window.innerWidth,
  208. bottom: window.innerHeight,
  209. left: 0
  210. };
  211. } else {
  212. containerRect = container.getBoundingClientRect();
  213. }
  214. return elRect.top < containerRect.bottom &&
  215. elRect.bottom > containerRect.top &&
  216. elRect.right > containerRect.left &&
  217. elRect.left < containerRect.right;
  218. };
  219. /***/ }),
  220. /***/ 148:
  221. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  222. "use strict";
  223. // EXPORTS
  224. __webpack_require__.d(__webpack_exports__, "a", function() { return /* binding */ isFirefox; });
  225. __webpack_require__.d(__webpack_exports__, "c", function() { return /* binding */ kebabCase; });
  226. __webpack_require__.d(__webpack_exports__, "d", function() { return /* binding */ rafThrottle; });
  227. __webpack_require__.d(__webpack_exports__, "b", function() { return /* binding */ isMac; });
  228. // UNUSED EXPORTS: noop, hasOwn, toObject, getValueByPath, getPropByPath, generateId, valueEquals, escapeRegexpString, arrayFindIndex, arrayFind, coerceTruthyValueToArray, isIE, isEdge, autoprefixer, capitalize, looseEqual, arrayEquals, isEqual, isEmpty, objToArray
  229. // EXTERNAL MODULE: external "vue"
  230. var external_vue_ = __webpack_require__(0);
  231. var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
  232. // CONCATENATED MODULE: ./node_modules/element-ui/src/utils/types.js
  233. function isString(obj) {
  234. return Object.prototype.toString.call(obj) === '[object String]';
  235. }
  236. function isObject(obj) {
  237. return Object.prototype.toString.call(obj) === '[object Object]';
  238. }
  239. function isHtmlElement(node) {
  240. return node && node.nodeType === Node.ELEMENT_NODE;
  241. }
  242. /**
  243. * - Inspired:
  244. * https://github.com/jashkenas/underscore/blob/master/modules/isFunction.js
  245. */
  246. let isFunction = (functionToCheck) => {
  247. var getType = {};
  248. return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
  249. };
  250. if ( true && typeof Int8Array !== 'object' && (external_vue_default.a.prototype.$isServer || typeof document.childNodes !== 'function')) {
  251. isFunction = function(obj) {
  252. return typeof obj === 'function' || false;
  253. };
  254. }
  255. const isUndefined = (val)=> {
  256. return val === void 0;
  257. };
  258. const isDefined = (val) => {
  259. return val !== undefined && val !== null;
  260. };
  261. // CONCATENATED MODULE: ./node_modules/element-ui/src/utils/util.js
  262. const util_hasOwnProperty = Object.prototype.hasOwnProperty;
  263. function noop() {};
  264. function hasOwn(obj, key) {
  265. return util_hasOwnProperty.call(obj, key);
  266. };
  267. function extend(to, _from) {
  268. for (let key in _from) {
  269. to[key] = _from[key];
  270. }
  271. return to;
  272. };
  273. function toObject(arr) {
  274. var res = {};
  275. for (let i = 0; i < arr.length; i++) {
  276. if (arr[i]) {
  277. extend(res, arr[i]);
  278. }
  279. }
  280. return res;
  281. };
  282. const getValueByPath = function(object, prop) {
  283. prop = prop || '';
  284. const paths = prop.split('.');
  285. let current = object;
  286. let result = null;
  287. for (let i = 0, j = paths.length; i < j; i++) {
  288. const path = paths[i];
  289. if (!current) break;
  290. if (i === j - 1) {
  291. result = current[path];
  292. break;
  293. }
  294. current = current[path];
  295. }
  296. return result;
  297. };
  298. function getPropByPath(obj, path, strict) {
  299. let tempObj = obj;
  300. path = path.replace(/\[(\w+)\]/g, '.$1');
  301. path = path.replace(/^\./, '');
  302. let keyArr = path.split('.');
  303. let i = 0;
  304. for (let len = keyArr.length; i < len - 1; ++i) {
  305. if (!tempObj && !strict) break;
  306. let key = keyArr[i];
  307. if (key in tempObj) {
  308. tempObj = tempObj[key];
  309. } else {
  310. if (strict) {
  311. throw new Error('please transfer a valid prop path to form item!');
  312. }
  313. break;
  314. }
  315. }
  316. return {
  317. o: tempObj,
  318. k: keyArr[i],
  319. v: tempObj ? tempObj[keyArr[i]] : null
  320. };
  321. };
  322. const generateId = function() {
  323. return Math.floor(Math.random() * 10000);
  324. };
  325. const valueEquals = (a, b) => {
  326. // see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript
  327. if (a === b) return true;
  328. if (!(a instanceof Array)) return false;
  329. if (!(b instanceof Array)) return false;
  330. if (a.length !== b.length) return false;
  331. for (let i = 0; i !== a.length; ++i) {
  332. if (a[i] !== b[i]) return false;
  333. }
  334. return true;
  335. };
  336. const escapeRegexpString = (value = '') => String(value).replace(/[|\\{}()[\]^$+*?.]/g, '\\$&');
  337. // TODO: use native Array.find, Array.findIndex when IE support is dropped
  338. const arrayFindIndex = function(arr, pred) {
  339. for (let i = 0; i !== arr.length; ++i) {
  340. if (pred(arr[i])) {
  341. return i;
  342. }
  343. }
  344. return -1;
  345. };
  346. const arrayFind = function(arr, pred) {
  347. const idx = arrayFindIndex(arr, pred);
  348. return idx !== -1 ? arr[idx] : undefined;
  349. };
  350. // coerce truthy value to array
  351. const coerceTruthyValueToArray = function(val) {
  352. if (Array.isArray(val)) {
  353. return val;
  354. } else if (val) {
  355. return [val];
  356. } else {
  357. return [];
  358. }
  359. };
  360. const isIE = function() {
  361. return !external_vue_default.a.prototype.$isServer && !isNaN(Number(document.documentMode));
  362. };
  363. const isEdge = function() {
  364. return !external_vue_default.a.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;
  365. };
  366. const isFirefox = function() {
  367. return !external_vue_default.a.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);
  368. };
  369. const autoprefixer = function(style) {
  370. if (typeof style !== 'object') return style;
  371. const rules = ['transform', 'transition', 'animation'];
  372. const prefixes = ['ms-', 'webkit-'];
  373. rules.forEach(rule => {
  374. const value = style[rule];
  375. if (rule && value) {
  376. prefixes.forEach(prefix => {
  377. style[prefix + rule] = value;
  378. });
  379. }
  380. });
  381. return style;
  382. };
  383. const kebabCase = function(str) {
  384. const hyphenateRE = /([^-])([A-Z])/g;
  385. return str
  386. .replace(hyphenateRE, '$1-$2')
  387. .replace(hyphenateRE, '$1-$2')
  388. .toLowerCase();
  389. };
  390. const capitalize = function(str) {
  391. if (!isString(str)) return str;
  392. return str.charAt(0).toUpperCase() + str.slice(1);
  393. };
  394. const looseEqual = function(a, b) {
  395. const isObjectA = isObject(a);
  396. const isObjectB = isObject(b);
  397. if (isObjectA && isObjectB) {
  398. return JSON.stringify(a) === JSON.stringify(b);
  399. } else if (!isObjectA && !isObjectB) {
  400. return String(a) === String(b);
  401. } else {
  402. return false;
  403. }
  404. };
  405. const arrayEquals = function(arrayA, arrayB) {
  406. arrayA = arrayA || [];
  407. arrayB = arrayB || [];
  408. if (arrayA.length !== arrayB.length) {
  409. return false;
  410. }
  411. for (let i = 0; i < arrayA.length; i++) {
  412. if (!looseEqual(arrayA[i], arrayB[i])) {
  413. return false;
  414. }
  415. }
  416. return true;
  417. };
  418. const isEqual = function(value1, value2) {
  419. if (Array.isArray(value1) && Array.isArray(value2)) {
  420. return arrayEquals(value1, value2);
  421. }
  422. return looseEqual(value1, value2);
  423. };
  424. const isEmpty = function(val) {
  425. // null or undefined
  426. if (val == null) return true;
  427. if (typeof val === 'boolean') return false;
  428. if (typeof val === 'number') return !val;
  429. if (val instanceof Error) return val.message === '';
  430. switch (Object.prototype.toString.call(val)) {
  431. // String or Array
  432. case '[object String]':
  433. case '[object Array]':
  434. return !val.length;
  435. // Map or Set or File
  436. case '[object File]':
  437. case '[object Map]':
  438. case '[object Set]': {
  439. return !val.size;
  440. }
  441. // Plain Object
  442. case '[object Object]': {
  443. return !Object.keys(val).length;
  444. }
  445. }
  446. return false;
  447. };
  448. function rafThrottle(fn) {
  449. let locked = false;
  450. return function(...args) {
  451. if (locked) return;
  452. locked = true;
  453. window.requestAnimationFrame(_ => {
  454. fn.apply(this, args);
  455. locked = false;
  456. });
  457. };
  458. }
  459. function objToArray(obj) {
  460. if (Array.isArray(obj)) {
  461. return obj;
  462. }
  463. return isEmpty(obj) ? [] : [obj];
  464. }
  465. const isMac = function() {
  466. return !external_vue_default.a.prototype.$isServer && /macintosh|mac os x/i.test(navigator.userAgent);
  467. };
  468. /***/ }),
  469. /***/ 149:
  470. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  471. "use strict";
  472. /* harmony default export */ __webpack_exports__["a"] = (function(target) {
  473. for (let i = 1, j = arguments.length; i < j; i++) {
  474. let source = arguments[i] || {};
  475. for (let prop in source) {
  476. if (source.hasOwnProperty(prop)) {
  477. let value = source[prop];
  478. if (value !== undefined) {
  479. target[prop] = value;
  480. }
  481. }
  482. }
  483. }
  484. return target;
  485. });;
  486. /***/ }),
  487. /***/ 157:
  488. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  489. "use strict";
  490. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/@nuxt/components/dist/loader.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/element-ui/packages/image/src/image-viewer.vue?vue&type=template&id=44a7b0fb
  491. var render = function render() {
  492. var _vm = this,
  493. _c = _vm._self._c;
  494. return _c('transition', {
  495. attrs: {
  496. "name": "viewer-fade"
  497. }
  498. }, [_c('div', {
  499. ref: "el-image-viewer__wrapper",
  500. staticClass: "el-image-viewer__wrapper",
  501. style: {
  502. 'z-index': _vm.viewerZIndex
  503. },
  504. attrs: {
  505. "tabindex": "-1"
  506. }
  507. }, [_c('div', {
  508. staticClass: "el-image-viewer__mask",
  509. on: {
  510. "click": function ($event) {
  511. if ($event.target !== $event.currentTarget) return null;
  512. return _vm.handleMaskClick.apply(null, arguments);
  513. }
  514. }
  515. }), _vm._v(" "), _c('span', {
  516. staticClass: "el-image-viewer__btn el-image-viewer__close",
  517. on: {
  518. "click": _vm.hide
  519. }
  520. }, [_c('i', {
  521. staticClass: "el-icon-close"
  522. })]), _vm._v(" "), !_vm.isSingle ? [_c('span', {
  523. staticClass: "el-image-viewer__btn el-image-viewer__prev",
  524. class: {
  525. 'is-disabled': !_vm.infinite && _vm.isFirst
  526. },
  527. on: {
  528. "click": _vm.prev
  529. }
  530. }, [_c('i', {
  531. staticClass: "el-icon-arrow-left"
  532. })]), _vm._v(" "), _c('span', {
  533. staticClass: "el-image-viewer__btn el-image-viewer__next",
  534. class: {
  535. 'is-disabled': !_vm.infinite && _vm.isLast
  536. },
  537. on: {
  538. "click": _vm.next
  539. }
  540. }, [_c('i', {
  541. staticClass: "el-icon-arrow-right"
  542. })])] : _vm._e(), _vm._v(" "), _c('div', {
  543. staticClass: "el-image-viewer__btn el-image-viewer__actions"
  544. }, [_c('div', {
  545. staticClass: "el-image-viewer__actions__inner"
  546. }, [_c('i', {
  547. staticClass: "el-icon-zoom-out",
  548. on: {
  549. "click": function ($event) {
  550. return _vm.handleActions('zoomOut');
  551. }
  552. }
  553. }), _vm._v(" "), _c('i', {
  554. staticClass: "el-icon-zoom-in",
  555. on: {
  556. "click": function ($event) {
  557. return _vm.handleActions('zoomIn');
  558. }
  559. }
  560. }), _vm._v(" "), _c('i', {
  561. staticClass: "el-image-viewer__actions__divider"
  562. }), _vm._v(" "), _c('i', {
  563. class: _vm.mode.icon,
  564. on: {
  565. "click": _vm.toggleMode
  566. }
  567. }), _vm._v(" "), _c('i', {
  568. staticClass: "el-image-viewer__actions__divider"
  569. }), _vm._v(" "), _c('i', {
  570. staticClass: "el-icon-refresh-left",
  571. on: {
  572. "click": function ($event) {
  573. return _vm.handleActions('anticlocelise');
  574. }
  575. }
  576. }), _vm._v(" "), _c('i', {
  577. staticClass: "el-icon-refresh-right",
  578. on: {
  579. "click": function ($event) {
  580. return _vm.handleActions('clocelise');
  581. }
  582. }
  583. })])]), _vm._v(" "), _c('div', {
  584. staticClass: "el-image-viewer__canvas"
  585. }, _vm._l(_vm.urlList, function (url, i) {
  586. return i === _vm.index ? _c('img', {
  587. key: url,
  588. ref: "img",
  589. refInFor: true,
  590. staticClass: "el-image-viewer__img",
  591. style: _vm.imgStyle,
  592. attrs: {
  593. "src": _vm.currentImg
  594. },
  595. on: {
  596. "load": _vm.handleImgLoad,
  597. "error": _vm.handleImgError,
  598. "mousedown": _vm.handleMouseDown
  599. }
  600. }) : _vm._e();
  601. }), 0)], 2)]);
  602. };
  603. var staticRenderFns = [];
  604. // CONCATENATED MODULE: ./node_modules/element-ui/packages/image/src/image-viewer.vue?vue&type=template&id=44a7b0fb
  605. // EXTERNAL MODULE: ./node_modules/element-ui/src/utils/dom.js
  606. var utils_dom = __webpack_require__(147);
  607. // EXTERNAL MODULE: ./node_modules/element-ui/src/utils/util.js + 1 modules
  608. var util = __webpack_require__(148);
  609. // EXTERNAL MODULE: external "vue"
  610. var external_vue_ = __webpack_require__(0);
  611. var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
  612. // EXTERNAL MODULE: ./node_modules/element-ui/src/utils/merge.js
  613. var merge = __webpack_require__(149);
  614. // CONCATENATED MODULE: ./node_modules/element-ui/src/utils/popup/popup-manager.js
  615. let hasModal = false;
  616. let hasInitZIndex = false;
  617. let popup_manager_zIndex;
  618. const getModal = function() {
  619. if (external_vue_default.a.prototype.$isServer) return;
  620. let modalDom = PopupManager.modalDom;
  621. if (modalDom) {
  622. hasModal = true;
  623. } else {
  624. hasModal = false;
  625. modalDom = document.createElement('div');
  626. PopupManager.modalDom = modalDom;
  627. modalDom.addEventListener('touchmove', function(event) {
  628. event.preventDefault();
  629. event.stopPropagation();
  630. });
  631. modalDom.addEventListener('click', function() {
  632. PopupManager.doOnModalClick && PopupManager.doOnModalClick();
  633. });
  634. }
  635. return modalDom;
  636. };
  637. const instances = {};
  638. const PopupManager = {
  639. modalFade: true,
  640. getInstance: function(id) {
  641. return instances[id];
  642. },
  643. register: function(id, instance) {
  644. if (id && instance) {
  645. instances[id] = instance;
  646. }
  647. },
  648. deregister: function(id) {
  649. if (id) {
  650. instances[id] = null;
  651. delete instances[id];
  652. }
  653. },
  654. nextZIndex: function() {
  655. return PopupManager.zIndex++;
  656. },
  657. modalStack: [],
  658. doOnModalClick: function() {
  659. const topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];
  660. if (!topItem) return;
  661. const instance = PopupManager.getInstance(topItem.id);
  662. if (instance && instance.closeOnClickModal) {
  663. instance.close();
  664. }
  665. },
  666. openModal: function(id, zIndex, dom, modalClass, modalFade) {
  667. if (external_vue_default.a.prototype.$isServer) return;
  668. if (!id || zIndex === undefined) return;
  669. this.modalFade = modalFade;
  670. const modalStack = this.modalStack;
  671. for (let i = 0, j = modalStack.length; i < j; i++) {
  672. const item = modalStack[i];
  673. if (item.id === id) {
  674. return;
  675. }
  676. }
  677. const modalDom = getModal();
  678. Object(utils_dom["a" /* addClass */])(modalDom, 'v-modal');
  679. if (this.modalFade && !hasModal) {
  680. Object(utils_dom["a" /* addClass */])(modalDom, 'v-modal-enter');
  681. }
  682. if (modalClass) {
  683. let classArr = modalClass.trim().split(/\s+/);
  684. classArr.forEach(item => Object(utils_dom["a" /* addClass */])(modalDom, item));
  685. }
  686. setTimeout(() => {
  687. Object(utils_dom["g" /* removeClass */])(modalDom, 'v-modal-enter');
  688. }, 200);
  689. if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {
  690. dom.parentNode.appendChild(modalDom);
  691. } else {
  692. document.body.appendChild(modalDom);
  693. }
  694. if (zIndex) {
  695. modalDom.style.zIndex = zIndex;
  696. }
  697. modalDom.tabIndex = 0;
  698. modalDom.style.display = '';
  699. this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });
  700. },
  701. closeModal: function(id) {
  702. const modalStack = this.modalStack;
  703. const modalDom = getModal();
  704. if (modalStack.length > 0) {
  705. const topItem = modalStack[modalStack.length - 1];
  706. if (topItem.id === id) {
  707. if (topItem.modalClass) {
  708. let classArr = topItem.modalClass.trim().split(/\s+/);
  709. classArr.forEach(item => Object(utils_dom["g" /* removeClass */])(modalDom, item));
  710. }
  711. modalStack.pop();
  712. if (modalStack.length > 0) {
  713. modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;
  714. }
  715. } else {
  716. for (let i = modalStack.length - 1; i >= 0; i--) {
  717. if (modalStack[i].id === id) {
  718. modalStack.splice(i, 1);
  719. break;
  720. }
  721. }
  722. }
  723. }
  724. if (modalStack.length === 0) {
  725. if (this.modalFade) {
  726. Object(utils_dom["a" /* addClass */])(modalDom, 'v-modal-leave');
  727. }
  728. setTimeout(() => {
  729. if (modalStack.length === 0) {
  730. if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);
  731. modalDom.style.display = 'none';
  732. PopupManager.modalDom = undefined;
  733. }
  734. Object(utils_dom["g" /* removeClass */])(modalDom, 'v-modal-leave');
  735. }, 200);
  736. }
  737. }
  738. };
  739. Object.defineProperty(PopupManager, 'zIndex', {
  740. configurable: true,
  741. get() {
  742. if (!hasInitZIndex) {
  743. popup_manager_zIndex = popup_manager_zIndex || (external_vue_default.a.prototype.$ELEMENT || {}).zIndex || 2000;
  744. hasInitZIndex = true;
  745. }
  746. return popup_manager_zIndex;
  747. },
  748. set(value) {
  749. popup_manager_zIndex = value;
  750. }
  751. });
  752. const getTopPopup = function() {
  753. if (external_vue_default.a.prototype.$isServer) return;
  754. if (PopupManager.modalStack.length > 0) {
  755. const topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];
  756. if (!topPopup) return;
  757. const instance = PopupManager.getInstance(topPopup.id);
  758. return instance;
  759. }
  760. };
  761. if (!external_vue_default.a.prototype.$isServer) {
  762. // handle `esc` key when the popup is shown
  763. window.addEventListener('keydown', function(event) {
  764. if (event.keyCode === 27) {
  765. const topPopup = getTopPopup();
  766. if (topPopup && topPopup.closeOnPressEscape) {
  767. topPopup.handleClose
  768. ? topPopup.handleClose()
  769. : (topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close());
  770. }
  771. }
  772. });
  773. }
  774. /* harmony default export */ var popup_manager = (PopupManager);
  775. // CONCATENATED MODULE: ./node_modules/element-ui/src/utils/scrollbar-width.js
  776. let scrollBarWidth;
  777. /* harmony default export */ var scrollbar_width = (function() {
  778. if (external_vue_default.a.prototype.$isServer) return 0;
  779. if (scrollBarWidth !== undefined) return scrollBarWidth;
  780. const outer = document.createElement('div');
  781. outer.className = 'el-scrollbar__wrap';
  782. outer.style.visibility = 'hidden';
  783. outer.style.width = '100px';
  784. outer.style.position = 'absolute';
  785. outer.style.top = '-9999px';
  786. document.body.appendChild(outer);
  787. const widthNoScroll = outer.offsetWidth;
  788. outer.style.overflow = 'scroll';
  789. const inner = document.createElement('div');
  790. inner.style.width = '100%';
  791. outer.appendChild(inner);
  792. const widthWithScroll = inner.offsetWidth;
  793. outer.parentNode.removeChild(outer);
  794. scrollBarWidth = widthNoScroll - widthWithScroll;
  795. return scrollBarWidth;
  796. });;
  797. // CONCATENATED MODULE: ./node_modules/element-ui/src/utils/popup/index.js
  798. let idSeed = 1;
  799. let popup_scrollBarWidth;
  800. /* harmony default export */ var popup = ({
  801. props: {
  802. visible: {
  803. type: Boolean,
  804. default: false
  805. },
  806. openDelay: {},
  807. closeDelay: {},
  808. zIndex: {},
  809. modal: {
  810. type: Boolean,
  811. default: false
  812. },
  813. modalFade: {
  814. type: Boolean,
  815. default: true
  816. },
  817. modalClass: {},
  818. modalAppendToBody: {
  819. type: Boolean,
  820. default: false
  821. },
  822. lockScroll: {
  823. type: Boolean,
  824. default: true
  825. },
  826. closeOnPressEscape: {
  827. type: Boolean,
  828. default: false
  829. },
  830. closeOnClickModal: {
  831. type: Boolean,
  832. default: false
  833. }
  834. },
  835. beforeMount() {
  836. this._popupId = 'popup-' + idSeed++;
  837. popup_manager.register(this._popupId, this);
  838. },
  839. beforeDestroy() {
  840. popup_manager.deregister(this._popupId);
  841. popup_manager.closeModal(this._popupId);
  842. this.restoreBodyStyle();
  843. },
  844. data() {
  845. return {
  846. opened: false,
  847. bodyPaddingRight: null,
  848. computedBodyPaddingRight: 0,
  849. withoutHiddenClass: true,
  850. rendered: false
  851. };
  852. },
  853. watch: {
  854. visible(val) {
  855. if (val) {
  856. if (this._opening) return;
  857. if (!this.rendered) {
  858. this.rendered = true;
  859. external_vue_default.a.nextTick(() => {
  860. this.open();
  861. });
  862. } else {
  863. this.open();
  864. }
  865. } else {
  866. this.close();
  867. }
  868. }
  869. },
  870. methods: {
  871. open(options) {
  872. if (!this.rendered) {
  873. this.rendered = true;
  874. }
  875. const props = Object(merge["a" /* default */])({}, this.$props || this, options);
  876. if (this._closeTimer) {
  877. clearTimeout(this._closeTimer);
  878. this._closeTimer = null;
  879. }
  880. clearTimeout(this._openTimer);
  881. const openDelay = Number(props.openDelay);
  882. if (openDelay > 0) {
  883. this._openTimer = setTimeout(() => {
  884. this._openTimer = null;
  885. this.doOpen(props);
  886. }, openDelay);
  887. } else {
  888. this.doOpen(props);
  889. }
  890. },
  891. doOpen(props) {
  892. if (this.$isServer) return;
  893. if (this.willOpen && !this.willOpen()) return;
  894. if (this.opened) return;
  895. this._opening = true;
  896. const dom = this.$el;
  897. const modal = props.modal;
  898. const zIndex = props.zIndex;
  899. if (zIndex) {
  900. popup_manager.zIndex = zIndex;
  901. }
  902. if (modal) {
  903. if (this._closing) {
  904. popup_manager.closeModal(this._popupId);
  905. this._closing = false;
  906. }
  907. popup_manager.openModal(this._popupId, popup_manager.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);
  908. if (props.lockScroll) {
  909. this.withoutHiddenClass = !Object(utils_dom["c" /* hasClass */])(document.body, 'el-popup-parent--hidden');
  910. if (this.withoutHiddenClass) {
  911. this.bodyPaddingRight = document.body.style.paddingRight;
  912. this.computedBodyPaddingRight = parseInt(Object(utils_dom["b" /* getStyle */])(document.body, 'paddingRight'), 10);
  913. }
  914. popup_scrollBarWidth = scrollbar_width();
  915. let bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;
  916. let bodyOverflowY = Object(utils_dom["b" /* getStyle */])(document.body, 'overflowY');
  917. if (popup_scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {
  918. document.body.style.paddingRight = this.computedBodyPaddingRight + popup_scrollBarWidth + 'px';
  919. }
  920. Object(utils_dom["a" /* addClass */])(document.body, 'el-popup-parent--hidden');
  921. }
  922. }
  923. if (getComputedStyle(dom).position === 'static') {
  924. dom.style.position = 'absolute';
  925. }
  926. dom.style.zIndex = popup_manager.nextZIndex();
  927. this.opened = true;
  928. this.onOpen && this.onOpen();
  929. this.doAfterOpen();
  930. },
  931. doAfterOpen() {
  932. this._opening = false;
  933. },
  934. close() {
  935. if (this.willClose && !this.willClose()) return;
  936. if (this._openTimer !== null) {
  937. clearTimeout(this._openTimer);
  938. this._openTimer = null;
  939. }
  940. clearTimeout(this._closeTimer);
  941. const closeDelay = Number(this.closeDelay);
  942. if (closeDelay > 0) {
  943. this._closeTimer = setTimeout(() => {
  944. this._closeTimer = null;
  945. this.doClose();
  946. }, closeDelay);
  947. } else {
  948. this.doClose();
  949. }
  950. },
  951. doClose() {
  952. this._closing = true;
  953. this.onClose && this.onClose();
  954. if (this.lockScroll) {
  955. setTimeout(this.restoreBodyStyle, 200);
  956. }
  957. this.opened = false;
  958. this.doAfterClose();
  959. },
  960. doAfterClose() {
  961. popup_manager.closeModal(this._popupId);
  962. this._closing = false;
  963. },
  964. restoreBodyStyle() {
  965. if (this.modal && this.withoutHiddenClass) {
  966. document.body.style.paddingRight = this.bodyPaddingRight;
  967. Object(utils_dom["g" /* removeClass */])(document.body, 'el-popup-parent--hidden');
  968. }
  969. this.withoutHiddenClass = true;
  970. }
  971. }
  972. });
  973. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/@nuxt/components/dist/loader.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./node_modules/element-ui/packages/image/src/image-viewer.vue?vue&type=script&lang=js
  974. const Mode = {
  975. CONTAIN: {
  976. name: 'contain',
  977. icon: 'el-icon-full-screen'
  978. },
  979. ORIGINAL: {
  980. name: 'original',
  981. icon: 'el-icon-c-scale-to-original'
  982. }
  983. };
  984. const mousewheelEventName = Object(util["a" /* isFirefox */])() ? 'DOMMouseScroll' : 'mousewheel';
  985. /* harmony default export */ var image_viewervue_type_script_lang_js = ({
  986. name: 'elImageViewer',
  987. props: {
  988. urlList: {
  989. type: Array,
  990. default: () => []
  991. },
  992. zIndex: {
  993. type: Number,
  994. default: 2000
  995. },
  996. onSwitch: {
  997. type: Function,
  998. default: () => {}
  999. },
  1000. onClose: {
  1001. type: Function,
  1002. default: () => {}
  1003. },
  1004. initialIndex: {
  1005. type: Number,
  1006. default: 0
  1007. },
  1008. appendToBody: {
  1009. type: Boolean,
  1010. default: true
  1011. },
  1012. maskClosable: {
  1013. type: Boolean,
  1014. default: true
  1015. }
  1016. },
  1017. data() {
  1018. return {
  1019. index: this.initialIndex,
  1020. isShow: false,
  1021. infinite: true,
  1022. loading: false,
  1023. mode: Mode.CONTAIN,
  1024. transform: {
  1025. scale: 1,
  1026. deg: 0,
  1027. offsetX: 0,
  1028. offsetY: 0,
  1029. enableTransition: false
  1030. }
  1031. };
  1032. },
  1033. computed: {
  1034. isSingle() {
  1035. return this.urlList.length <= 1;
  1036. },
  1037. isFirst() {
  1038. return this.index === 0;
  1039. },
  1040. isLast() {
  1041. return this.index === this.urlList.length - 1;
  1042. },
  1043. currentImg() {
  1044. return this.urlList[this.index];
  1045. },
  1046. imgStyle() {
  1047. const {
  1048. scale,
  1049. deg,
  1050. offsetX,
  1051. offsetY,
  1052. enableTransition
  1053. } = this.transform;
  1054. const style = {
  1055. transform: `scale(${scale}) rotate(${deg}deg)`,
  1056. transition: enableTransition ? 'transform .3s' : '',
  1057. 'margin-left': `${offsetX}px`,
  1058. 'margin-top': `${offsetY}px`
  1059. };
  1060. if (this.mode === Mode.CONTAIN) {
  1061. style.maxWidth = style.maxHeight = '100%';
  1062. }
  1063. return style;
  1064. },
  1065. viewerZIndex() {
  1066. const nextZIndex = popup_manager.nextZIndex();
  1067. return this.zIndex > nextZIndex ? this.zIndex : nextZIndex;
  1068. }
  1069. },
  1070. watch: {
  1071. index: {
  1072. handler: function (val) {
  1073. this.reset();
  1074. this.onSwitch(val);
  1075. }
  1076. },
  1077. currentImg(val) {
  1078. this.$nextTick(_ => {
  1079. const $img = this.$refs.img[0];
  1080. if (!$img.complete) {
  1081. this.loading = true;
  1082. }
  1083. });
  1084. }
  1085. },
  1086. methods: {
  1087. hide() {
  1088. this.deviceSupportUninstall();
  1089. this.onClose();
  1090. },
  1091. deviceSupportInstall() {
  1092. this._keyDownHandler = e => {
  1093. e.stopPropagation();
  1094. const keyCode = e.keyCode;
  1095. switch (keyCode) {
  1096. // ESC
  1097. case 27:
  1098. this.hide();
  1099. break;
  1100. // SPACE
  1101. case 32:
  1102. this.toggleMode();
  1103. break;
  1104. // LEFT_ARROW
  1105. case 37:
  1106. this.prev();
  1107. break;
  1108. // UP_ARROW
  1109. case 38:
  1110. this.handleActions('zoomIn');
  1111. break;
  1112. // RIGHT_ARROW
  1113. case 39:
  1114. this.next();
  1115. break;
  1116. // DOWN_ARROW
  1117. case 40:
  1118. this.handleActions('zoomOut');
  1119. break;
  1120. }
  1121. };
  1122. this._mouseWheelHandler = Object(util["d" /* rafThrottle */])(e => {
  1123. const delta = e.wheelDelta ? e.wheelDelta : -e.detail;
  1124. if (delta > 0) {
  1125. this.handleActions('zoomIn', {
  1126. zoomRate: 0.015,
  1127. enableTransition: false
  1128. });
  1129. } else {
  1130. this.handleActions('zoomOut', {
  1131. zoomRate: 0.015,
  1132. enableTransition: false
  1133. });
  1134. }
  1135. });
  1136. Object(utils_dom["e" /* on */])(document, 'keydown', this._keyDownHandler);
  1137. Object(utils_dom["e" /* on */])(document, mousewheelEventName, this._mouseWheelHandler);
  1138. },
  1139. deviceSupportUninstall() {
  1140. Object(utils_dom["d" /* off */])(document, 'keydown', this._keyDownHandler);
  1141. Object(utils_dom["d" /* off */])(document, mousewheelEventName, this._mouseWheelHandler);
  1142. this._keyDownHandler = null;
  1143. this._mouseWheelHandler = null;
  1144. },
  1145. handleImgLoad(e) {
  1146. this.loading = false;
  1147. },
  1148. handleImgError(e) {
  1149. this.loading = false;
  1150. e.target.alt = '加载失败';
  1151. },
  1152. handleMouseDown(e) {
  1153. if (this.loading || e.button !== 0) return;
  1154. const {
  1155. offsetX,
  1156. offsetY
  1157. } = this.transform;
  1158. const startX = e.pageX;
  1159. const startY = e.pageY;
  1160. this._dragHandler = Object(util["d" /* rafThrottle */])(ev => {
  1161. this.transform.offsetX = offsetX + ev.pageX - startX;
  1162. this.transform.offsetY = offsetY + ev.pageY - startY;
  1163. });
  1164. Object(utils_dom["e" /* on */])(document, 'mousemove', this._dragHandler);
  1165. Object(utils_dom["e" /* on */])(document, 'mouseup', ev => {
  1166. Object(utils_dom["d" /* off */])(document, 'mousemove', this._dragHandler);
  1167. });
  1168. e.preventDefault();
  1169. },
  1170. handleMaskClick() {
  1171. if (this.maskClosable) {
  1172. this.hide();
  1173. }
  1174. },
  1175. reset() {
  1176. this.transform = {
  1177. scale: 1,
  1178. deg: 0,
  1179. offsetX: 0,
  1180. offsetY: 0,
  1181. enableTransition: false
  1182. };
  1183. },
  1184. toggleMode() {
  1185. if (this.loading) return;
  1186. const modeNames = Object.keys(Mode);
  1187. const modeValues = Object.values(Mode);
  1188. const index = modeValues.indexOf(this.mode);
  1189. const nextIndex = (index + 1) % modeNames.length;
  1190. this.mode = Mode[modeNames[nextIndex]];
  1191. this.reset();
  1192. },
  1193. prev() {
  1194. if (this.isFirst && !this.infinite) return;
  1195. const len = this.urlList.length;
  1196. this.index = (this.index - 1 + len) % len;
  1197. },
  1198. next() {
  1199. if (this.isLast && !this.infinite) return;
  1200. const len = this.urlList.length;
  1201. this.index = (this.index + 1) % len;
  1202. },
  1203. handleActions(action, options = {}) {
  1204. if (this.loading) return;
  1205. const {
  1206. zoomRate,
  1207. rotateDeg,
  1208. enableTransition
  1209. } = {
  1210. zoomRate: 0.2,
  1211. rotateDeg: 90,
  1212. enableTransition: true,
  1213. ...options
  1214. };
  1215. const {
  1216. transform
  1217. } = this;
  1218. switch (action) {
  1219. case 'zoomOut':
  1220. if (transform.scale > 0.2) {
  1221. transform.scale = parseFloat((transform.scale - zoomRate).toFixed(3));
  1222. }
  1223. break;
  1224. case 'zoomIn':
  1225. transform.scale = parseFloat((transform.scale + zoomRate).toFixed(3));
  1226. break;
  1227. case 'clocelise':
  1228. transform.deg += rotateDeg;
  1229. break;
  1230. case 'anticlocelise':
  1231. transform.deg -= rotateDeg;
  1232. break;
  1233. }
  1234. transform.enableTransition = enableTransition;
  1235. }
  1236. },
  1237. mounted() {
  1238. this.deviceSupportInstall();
  1239. if (this.appendToBody) {
  1240. document.body.appendChild(this.$el);
  1241. }
  1242. // add tabindex then wrapper can be focusable via Javascript
  1243. // focus wrapper so arrow key can't cause inner scroll behavior underneath
  1244. this.$refs['el-image-viewer__wrapper'].focus();
  1245. },
  1246. destroyed() {
  1247. // if appendToBody is true, remove DOM node after destroy
  1248. if (this.appendToBody && this.$el && this.$el.parentNode) {
  1249. this.$el.parentNode.removeChild(this.$el);
  1250. }
  1251. }
  1252. });
  1253. // CONCATENATED MODULE: ./node_modules/element-ui/packages/image/src/image-viewer.vue?vue&type=script&lang=js
  1254. /* harmony default export */ var src_image_viewervue_type_script_lang_js = (image_viewervue_type_script_lang_js);
  1255. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  1256. var componentNormalizer = __webpack_require__(2);
  1257. // CONCATENATED MODULE: ./node_modules/element-ui/packages/image/src/image-viewer.vue
  1258. /* normalize component */
  1259. var component = Object(componentNormalizer["a" /* default */])(
  1260. src_image_viewervue_type_script_lang_js,
  1261. render,
  1262. staticRenderFns,
  1263. false,
  1264. null,
  1265. null,
  1266. "17d24eb5"
  1267. )
  1268. /* harmony default export */ var image_viewer = __webpack_exports__["a"] = (component.exports);
  1269. /***/ }),
  1270. /***/ 177:
  1271. /***/ (function(module, exports) {
  1272. // Exports
  1273. module.exports = {
  1274. };
  1275. /***/ }),
  1276. /***/ 197:
  1277. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1278. "use strict";
  1279. // ESM COMPAT FLAG
  1280. __webpack_require__.r(__webpack_exports__);
  1281. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/@nuxt/components/dist/loader.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./components/Zoom.vue?vue&type=template&id=5b247e95&scoped=true
  1282. var render = function render() {
  1283. var _vm = this,
  1284. _c = _vm._self._c;
  1285. return _c('div', {
  1286. staticClass: "spec-preview"
  1287. }, [_c('el-image', {
  1288. staticStyle: {
  1289. "width": "100%",
  1290. "height": "100%"
  1291. },
  1292. attrs: {
  1293. "src": _vm.imgUrl,
  1294. "alt": "",
  1295. "fit": "cover"
  1296. }
  1297. }), _vm._ssrNode(" <div class=\"event\" data-v-5b247e95></div> <div class=\"mask\" data-v-5b247e95></div>")], 2);
  1298. };
  1299. var staticRenderFns = [];
  1300. // CONCATENATED MODULE: ./components/Zoom.vue?vue&type=template&id=5b247e95&scoped=true
  1301. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/@nuxt/components/dist/loader.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./components/Zoom.vue?vue&type=script&lang=js
  1302. /* harmony default export */ var Zoomvue_type_script_lang_js = ({
  1303. name: "Zoom",
  1304. props: {
  1305. imgUrl: String
  1306. },
  1307. data() {
  1308. return {};
  1309. },
  1310. methods: {
  1311. handler(event) {
  1312. let mask = this.$refs.mask;
  1313. // let bigImg = this.$refs.big;
  1314. // 遮罩层可移动的范围:鼠标的当前坐标到该元素的距离(左侧、顶部)减去 遮罩层宽、高的一半(遮罩层始终是一个以鼠标为中心的正方形)
  1315. let left = event.offsetX - mask.offsetWidth / 2;
  1316. let top = event.offsetY - mask.offsetHeight / 2;
  1317. // 约束遮罩层可移动的范围
  1318. if (left <= 0) left = 0;
  1319. if (left >= mask.offsetWidth) left = mask.offsetWidth;
  1320. if (top <= 0) top = 0;
  1321. if (top >= mask.offsetHeight) top = mask.offsetHeight;
  1322. // 修改元素的left|top属性值
  1323. mask.style.left = left + "px";
  1324. mask.style.top = top + "px";
  1325. // bigImg.style.left = -2 * left + "px";
  1326. // bigImg.style.top = -2 * top + "px";
  1327. let obj = {};
  1328. obj.left = left;
  1329. obj.top = top;
  1330. obj.bigShow = true;
  1331. this.$emit("sendStyle", obj);
  1332. },
  1333. leave() {
  1334. let obj = {};
  1335. obj.left = 0;
  1336. obj.top = 0;
  1337. obj.bigShow = false;
  1338. this.$emit("sendStyle", obj);
  1339. }
  1340. }
  1341. });
  1342. // CONCATENATED MODULE: ./components/Zoom.vue?vue&type=script&lang=js
  1343. /* harmony default export */ var components_Zoomvue_type_script_lang_js = (Zoomvue_type_script_lang_js);
  1344. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  1345. var componentNormalizer = __webpack_require__(2);
  1346. // CONCATENATED MODULE: ./components/Zoom.vue
  1347. function injectStyles (context) {
  1348. var style0 = __webpack_require__(214)
  1349. if (style0.__inject__) style0.__inject__(context)
  1350. }
  1351. /* normalize component */
  1352. var component = Object(componentNormalizer["a" /* default */])(
  1353. components_Zoomvue_type_script_lang_js,
  1354. render,
  1355. staticRenderFns,
  1356. false,
  1357. injectStyles,
  1358. "5b247e95",
  1359. "626916fe"
  1360. )
  1361. /* harmony default export */ var Zoom = __webpack_exports__["default"] = (component.exports);
  1362. /***/ }),
  1363. /***/ 214:
  1364. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1365. "use strict";
  1366. __webpack_require__.r(__webpack_exports__);
  1367. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Zoom_vue_vue_type_style_index_0_id_5b247e95_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(177);
  1368. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Zoom_vue_vue_type_style_index_0_id_5b247e95_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Zoom_vue_vue_type_style_index_0_id_5b247e95_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
  1369. /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Zoom_vue_vue_type_style_index_0_id_5b247e95_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Zoom_vue_vue_type_style_index_0_id_5b247e95_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
  1370. /***/ }),
  1371. /***/ 215:
  1372. /***/ (function(module, exports) {
  1373. // Exports
  1374. module.exports = {
  1375. };
  1376. /***/ }),
  1377. /***/ 234:
  1378. /***/ (function(module, exports) {
  1379. module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAYCAYAAAAPtVbGAAAAAXNSR0IArs4c6QAAAepJREFUSEu9lk2IT2EUxn9Pk2SaBWWhbAYlalKk5GMhZKNYMWYnC6TMzhZjMRs7OxbKQr5WpmYjHwthMyspUj5SJDOYhZSFHp1/5+rOnTtzh9z/u7of7z2/8/Gc817RsGyvA4aAXcAAsDQ/mQaeAw+A65JezmVKc72wvRa4AOzPPb+AMPQp71cA4UBP3o8BpyW9qtqshdg+BlwEFgNP8npc0veyAdt9wD5gGNgG/IxrSZfL+2ZBbJ8DzgLfgOOSbjelNN7bPghcApYBI5LCTmfNgGQEsfE1sFfSm4UAij22VwN3gTXpYCeiP5CswTPgB7D5bwEV0ATQC2yIGpUhd7LIh+pSZHsj8F7Sl6boMnW3gDFJBzqQlOmLKLKk7VUjtpcDn4EAnJJ0YwGgxymG9QVkBDgDHJZ0swbSD7wtPY+oT0gq5DyLaXsQCGfOF5BHwNZotKpMM9IC8hBYBOwAvqZcr9VFlfKOhn1aQEKuHyRFR9d5VUCuAkezL0aBJUBEdVLSx5oMxERYWUAM3Je0pwki6UhGtwq4AuwEwuMt1W63fQ/Y3VVIV9LVlcJ3RcIxspuacRKY+udmTLU0jZVNwDtJ0R/zrtqxkpA4pNodkAmKw6q9UV8a1e0eWiVQu8dvCdTuj0RZOv/jl+g3/RhEvhTk7TEAAAAASUVORK5CYII="
  1380. /***/ }),
  1381. /***/ 235:
  1382. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1383. "use strict";
  1384. __webpack_require__.r(__webpack_exports__);
  1385. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ProductLeft_vue_vue_type_style_index_0_id_200035a3_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(215);
  1386. /* harmony import */ var _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ProductLeft_vue_vue_type_style_index_0_id_200035a3_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ProductLeft_vue_vue_type_style_index_0_id_200035a3_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
  1387. /* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ProductLeft_vue_vue_type_style_index_0_id_200035a3_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__) if(["default"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) (function(key) { __webpack_require__.d(__webpack_exports__, key, function() { return _node_modules_css_loader_dist_cjs_js_ref_7_oneOf_1_0_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_ref_7_oneOf_1_1_node_modules_sass_loader_dist_cjs_js_ref_7_oneOf_1_2_node_modules_nuxt_components_dist_loader_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ProductLeft_vue_vue_type_style_index_0_id_200035a3_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__[key]; }) }(__WEBPACK_IMPORT_KEY__));
  1388. /***/ }),
  1389. /***/ 292:
  1390. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  1391. "use strict";
  1392. // ESM COMPAT FLAG
  1393. __webpack_require__.r(__webpack_exports__);
  1394. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/@nuxt/components/dist/loader.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./components/product/ProductLeft.vue?vue&type=template&id=200035a3&scoped=true
  1395. var render = function render() {
  1396. var _vm$comInfo$mergeImag;
  1397. var _vm = this,
  1398. _c = _vm._self._c;
  1399. return _c('div', {
  1400. staticClass: "product-left"
  1401. }, [_vm._ssrNode("<div class=\"media\" data-v-200035a3>", "</div>", [_vm._ssrNode("<div class=\"big\"" + _vm._ssrStyle(null, null, {
  1402. display: _vm.bigShow ? '' : 'none'
  1403. }) + " data-v-200035a3><img" + _vm._ssrAttr("src", _vm.$utils.generateResizedImageUrl(_vm.comInfo.mergeImages[_vm.currentPre], 1800)) + " alt data-v-200035a3></div> "), _c('el-carousel', {
  1404. ref: "carousel",
  1405. attrs: {
  1406. "interval": 5000,
  1407. "arrow": "always",
  1408. "height": "578px",
  1409. "indicator-position": "none",
  1410. "autoplay": false
  1411. },
  1412. on: {
  1413. "change": _vm.changeCarousel
  1414. }
  1415. }, [_vm._l(_vm.comInfo.mergeImages, function (item) {
  1416. return _c('el-carousel-item', {
  1417. key: item
  1418. }, [_c('zoom', {
  1419. attrs: {
  1420. "imgUrl": _vm.$utils.generateResizedImageUrl(_vm.comInfo.mergeImages[_vm.currentPre], 1800)
  1421. },
  1422. on: {
  1423. "sendStyle": _vm.getStyle,
  1424. "handleViwer": _vm.handleViwer
  1425. }
  1426. })], 1);
  1427. }), _vm._v(" "), _vm.comInfo.video ? _c('el-carousel-item', [_c('video', {
  1428. ref: "video",
  1429. attrs: {
  1430. "controls": "",
  1431. "width": "100%",
  1432. "height": "100%"
  1433. }
  1434. }, [_c('source', {
  1435. attrs: {
  1436. "src": _vm.comInfo.video
  1437. }
  1438. }), _vm._v("\n Your browser does not support the video tag.\n ")])]) : _vm._e()], 2)], 2), _vm._ssrNode(" "), _vm._ssrNode("<div class=\"smImgUl\" data-v-200035a3>", "</div>", [_vm._ssrNode("<ul data-v-200035a3>", "</ul>", [_vm._l(_vm.comInfo.mergeImages, function (item, index) {
  1439. return _vm._ssrNode("<li" + _vm._ssrClass("banner", _vm.currentPre == index ? 'slip' : '') + " data-v-200035a3>", "</li>", [_c('el-image', {
  1440. staticClass: "card-img-1",
  1441. staticStyle: {
  1442. "width": "100%",
  1443. "height": "100%"
  1444. },
  1445. attrs: {
  1446. "src": _vm.$utils.generateResizedImageUrl(item, 100),
  1447. "fit": "cover"
  1448. }
  1449. })], 1);
  1450. }), _vm._ssrNode(" " + (_vm.comInfo.video ? "<li" + _vm._ssrClass(null, _vm.currentPre == ((_vm$comInfo$mergeImag = _vm.comInfo.mergeImages) === null || _vm$comInfo$mergeImag === void 0 ? void 0 : _vm$comInfo$mergeImag.length) ? 'slip' : '') + " data-v-200035a3><video width=\"100%\" height=\"100%\"" + _vm._ssrAttr("src", _vm.comInfo.video) + " data-v-200035a3></video> <div class=\"playMask\" data-v-200035a3><img" + _vm._ssrAttr("src", __webpack_require__(234)) + " alt data-v-200035a3></div></li>" : "<!---->"))], 2)]), _vm._ssrNode(" "), _vm.showViewer ? _c('ElImageViewer', {
  1451. attrs: {
  1452. "initial-index": _vm.currentPre,
  1453. "on-close": _vm.closeViewer,
  1454. "url-list": _vm.comS3Img
  1455. }
  1456. }) : _vm._e()], 2);
  1457. };
  1458. var staticRenderFns = [];
  1459. // CONCATENATED MODULE: ./components/product/ProductLeft.vue?vue&type=template&id=200035a3&scoped=true
  1460. // EXTERNAL MODULE: external "vuex"
  1461. var external_vuex_ = __webpack_require__(6);
  1462. // EXTERNAL MODULE: ./node_modules/element-ui/packages/image/src/image-viewer.vue + 7 modules
  1463. var image_viewer = __webpack_require__(157);
  1464. // EXTERNAL MODULE: ./components/Zoom.vue + 4 modules
  1465. var Zoom = __webpack_require__(197);
  1466. // CONCATENATED MODULE: ./node_modules/babel-loader/lib??ref--2-0!./node_modules/@nuxt/components/dist/loader.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./components/product/ProductLeft.vue?vue&type=script&lang=js
  1467. /* harmony default export */ var ProductLeftvue_type_script_lang_js = ({
  1468. components: {
  1469. Zoom: Zoom["default"],
  1470. ElImageViewer: image_viewer["a" /* default */]
  1471. },
  1472. props: {
  1473. pageData: {
  1474. type: Object,
  1475. default: () => {
  1476. return {};
  1477. }
  1478. },
  1479. id: {
  1480. type: Number,
  1481. default: 0
  1482. }
  1483. },
  1484. data() {
  1485. return {
  1486. indexBanner: [],
  1487. btnObj: ["View larger", "3D Preview"],
  1488. current3D: 0,
  1489. // 3D图序号
  1490. btnShow: true,
  1491. // 所有按钮显示
  1492. bigShow: false,
  1493. showViewer: false
  1494. };
  1495. },
  1496. computed: {
  1497. currentPre() {
  1498. return this.$store.state.product.smImgUlIdx;
  1499. },
  1500. comInfo() {
  1501. const {
  1502. main
  1503. } = this.pageData;
  1504. const images = main.image_color.map(i => i.image);
  1505. if (main.image) {
  1506. images.unshift(main.image);
  1507. }
  1508. main.mergeImages = images;
  1509. return main;
  1510. },
  1511. comS3Img() {
  1512. return this.comInfo.mergeImages.map(url => this.$utils.repaceDomain(url));
  1513. }
  1514. },
  1515. watch: {
  1516. currentPre(newVal) {
  1517. this.$refs.carousel.setActiveItem(newVal);
  1518. }
  1519. },
  1520. mounted() {
  1521. if (this.comInfo.video) {
  1522. this.$refs.video.volume = 0.5;
  1523. }
  1524. },
  1525. methods: {
  1526. ...Object(external_vuex_["mapMutations"])({
  1527. setSmImgUlIdx: 'product/setSmImgUlIdx'
  1528. }),
  1529. changeCarousel(val) {
  1530. var _this$comInfo$mergeIm;
  1531. this.setSmImgUlIdx(val);
  1532. if (val === ((_this$comInfo$mergeIm = this.comInfo.mergeImages) === null || _this$comInfo$mergeIm === void 0 ? void 0 : _this$comInfo$mergeIm.length)) {
  1533. this.btnShow = false;
  1534. this.comInfo.video && this.$refs.video.play();
  1535. } else {
  1536. this.btnShow = true;
  1537. this.comInfo.video && this.$refs.video.pause();
  1538. }
  1539. },
  1540. selectCurrent3D(val) {
  1541. this.current3D = val;
  1542. },
  1543. getStyle(val) {
  1544. const bigImg = this.$refs.big;
  1545. bigImg.style.left = -2 * val.left + "px";
  1546. bigImg.style.top = -2 * val.top + "px";
  1547. this.bigShow = val.bigShow;
  1548. },
  1549. closeViewer() {
  1550. this.showViewer = false;
  1551. },
  1552. handleViwer() {
  1553. this.showViewer = true;
  1554. }
  1555. }
  1556. });
  1557. // CONCATENATED MODULE: ./components/product/ProductLeft.vue?vue&type=script&lang=js
  1558. /* harmony default export */ var product_ProductLeftvue_type_script_lang_js = (ProductLeftvue_type_script_lang_js);
  1559. // EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
  1560. var componentNormalizer = __webpack_require__(2);
  1561. // CONCATENATED MODULE: ./components/product/ProductLeft.vue
  1562. function injectStyles (context) {
  1563. var style0 = __webpack_require__(235)
  1564. if (style0.__inject__) style0.__inject__(context)
  1565. }
  1566. /* normalize component */
  1567. var component = Object(componentNormalizer["a" /* default */])(
  1568. product_ProductLeftvue_type_script_lang_js,
  1569. render,
  1570. staticRenderFns,
  1571. false,
  1572. injectStyles,
  1573. "200035a3",
  1574. "94a05490"
  1575. )
  1576. /* harmony default export */ var ProductLeft = __webpack_exports__["default"] = (component.exports);
  1577. /* nuxt-component-imports */
  1578. installComponents(component, {Zoom: __webpack_require__(197).default})
  1579. /***/ })
  1580. };;
  1581. //# sourceMappingURL=product-left.js.map