| 1 |
- {"remainingRequest":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\pages\\product\\productList\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\pages\\product\\productList\\index.vue","mtime":1761185180166},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgZXhwYW5kUm93IGZyb20gJy4vdGFibGVFeHBhbmQudnVlJzsNCmltcG9ydCBhdHRyaWJ1dGUgZnJvbSAnLi9hdHRyaWJ1dGUnOw0KaW1wb3J0IHRvRXhjZWwgZnJvbSAnLi4vLi4vLi4vdXRpbHMvRXhjZWwuanMnOw0KaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICd2dWV4JzsNCmltcG9ydCB0YW9CYW8gZnJvbSAnLi90YW9CYW8nOw0KaW1wb3J0IGdvb2RzRGV0YWlsIGZyb20gJy4vY29tcG9uZW50cy9nb29kc0RldGFpbC52dWUnOw0KaW1wb3J0IGNvdXBvbkxpc3QgZnJvbSAnQC9jb21wb25lbnRzL2NvdXBvbkxpc3QnOw0KaW1wb3J0IHsgZXhwb3J0UHJvZHVjdExpc3QsIGV4cG9ydFByb2R1Y3RFeHBvcnQgfSBmcm9tICdAL2FwaS9leHBvcnQnOw0KaW1wb3J0IHNldHRpbmdzIGZyb20gJ0Avc2V0dGluZyc7DQppbXBvcnQgZ29vZHNJbXBvcnQgZnJvbSAnLi9jb21wb25lbnRzL2dvb2RzSW1wb3J0LnZ1ZSc7DQppbXBvcnQgYnJva2VyYWdlU2V0IGZyb20gJy4uL2NvbXBvbmVudHMvYnJva2VyYWdlU2V0LnZ1ZSc7DQppbXBvcnQgdmlwUHJpY2VTZXQgZnJvbSAnLi4vY29tcG9uZW50cy92aXBQcmljZVNldC52dWUnOw0KaW1wb3J0IHsNCiAgZ2V0R29vZEhlYWRlLA0KICBnZXRHb29kcywNCiAgUG9zdGdvb2RzSXNTaG93LA0KICBjYXNjYWRlckxpc3RBcGksIC8vIOWIhuexu+WIl+ihqA0KICBwcm9kdWN0U2hvd0FwaSwNCiAgcHJvZHVjdFVuc2hvd0FwaSwNCiAgc3RvcmVQcm9kdWN0QXBpLA0KICBiYXRjaFNldHRpbmcsDQogIHByb2R1Y3RHZXRUZW1wbGF0ZUFwaSwNCiAgcHJvZHVjdExhYmVsVXNlTGlzdEFwaSwNCiAgcHJvZHVjdEJhdGNoRGVsZXRlLA0KfSBmcm9tICdAL2FwaS9wcm9kdWN0JzsNCmltcG9ydCB1c2VyTGFiZWwgZnJvbSAnQC9jb21wb25lbnRzL2xhYmVsTGlzdCc7DQppbXBvcnQgc3RvcmVMYWJlbExpc3QgZnJvbSAnQC9jb21wb25lbnRzL3N0b3JlTGFiZWxMaXN0JzsNCmltcG9ydCBnb29kc0xhYmVsIGZyb20gJ0AvY29tcG9uZW50cy9nb29kc0xhYmVsJzsNCg0KZXhwb3J0IGRlZmF1bHQgew0KICBuYW1lOiAncHJvZHVjdF9wcm9kdWN0TGlzdCcsDQogIGNvbXBvbmVudHM6IHsNCiAgICBleHBhbmRSb3csDQogICAgYXR0cmlidXRlLA0KICAgIHRhb0JhbywNCiAgICBnb29kc0RldGFpbCwNCiAgICB1c2VyTGFiZWwsDQogICAgY291cG9uTGlzdCwNCiAgICBnb29kc0ltcG9ydCwNCiAgICBicm9rZXJhZ2VTZXQsDQogICAgdmlwUHJpY2VTZXQsDQogICAgc3RvcmVMYWJlbExpc3QsDQogICAgZ29vZHNMYWJlbCwNCiAgfSwNCiAgY29tcHV0ZWQ6IHsNCiAgICAuLi5tYXBTdGF0ZSgndXNlckxldmVsJywgWydjYXRlZ29yeUlkJ10pLA0KICB9LA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICByb3V0ZVByZTogc2V0dGluZ3Mucm91dGVQcmUsDQogICAgICBwaWNrZXJPcHRpb25zOiB0aGlzLiR0aW1lT3B0aW9ucywNCiAgICAgIHRlbXBsYXRlOiBmYWxzZSwNCiAgICAgIG1vZGFsczogZmFsc2UsDQogICAgICBpbXBvcnRTaG93OiBmYWxzZSwNCiAgICAgIGJhdGNoTW9kYWw6IGZhbHNlLA0KICAgICAgbGFiZWxTaG93OiBmYWxzZSwNCiAgICAgIGJhdGNoVHlwZTogMSwgLy8g5om56YeP6K6+572u57G75Z6LDQogICAgICBiYXRjaEZvcm1EYXRhOiB7DQogICAgICAgIGNhdGVfaWQ6IFtdLA0KICAgICAgICBsb2dpc3RpY3M6IFtdLA0KICAgICAgICBmcmVpZ2h0OiAyLA0KICAgICAgICBwb3N0YWdlOiAwLA0KICAgICAgICB0ZW1wX2lkOiBudWxsLA0KICAgICAgICBnaXZlX2ludGVncmFsOiAwLA0KICAgICAgICBsYWJlbF9pZDogW10sDQogICAgICAgIGNvdXBvbl9pZHM6IFtdLA0KICAgICAgICByZWNvbW1lbmQ6IFtdLA0KICAgICAgfSwNCiAgICAgIHJ1bGVCYXRjaDoge30sDQogICAgICBjb3Vwb25OYW1lOiBbXSwgLy8g5LyY5oOg5Yi4DQogICAgICBkYXRhTGFiZWw6IFtdLCAvLyDmoIfnrb4NCiAgICAgIHRlbXBsYXRlTGlzdDogW10sIC8vIOi/kOi0ueaooeeJiA0KICAgICAgZ3JpZDogew0KICAgICAgICB4bDogNiwNCiAgICAgICAgbGc6IDgsDQogICAgICAgIG1kOiAxMiwNCiAgICAgICAgc206IDI0LA0KICAgICAgICB4czogMjQsDQogICAgICB9LA0KICAgICAgYXJ0RnJvbTogew0KICAgICAgICBwYWdlOiAxLA0KICAgICAgICBsaW1pdDogMTUsDQogICAgICAgIGNhdGVfaWQ6ICcnLA0KICAgICAgICB0eXBlOiAnMScsDQogICAgICAgIHN0b3JlX25hbWU6ICcnLA0KICAgICAgICBzcGVjX3R5cGU6ICcnLA0KICAgICAgICBsb2dpc3RpY3M6ICcnLA0KICAgICAgICB2aXBfcHJvZHVjdDogJycsDQogICAgICAgIGlzX2dpZnQ6ICcnLA0KICAgICAgICBzYWxlc19zOiBbJycsICcnXSwNCiAgICAgICAgc3RvY2tfczogWycnLCAnJ10sDQogICAgICAgIHByaWNlX3M6IFsnJywgJyddLA0KICAgICAgICBzdG9yZV9sYWJlbF9pZDogW10sDQogICAgICAgIHRpbWU6ICcnLA0KICAgICAgICB2aXJ0dWFsX3R5cGU6ICcnLA0KICAgICAgfSwNCiAgICAgIGxpc3Q6IFtdLA0KICAgICAgdGFibGVMaXN0OiBbXSwNCiAgICAgIGhlYWRlTnVtOiBbXSwNCiAgICAgIGxvYWRpbmc6IGZhbHNlLA0KICAgICAgZGF0YTogW10sDQogICAgICB0b3RhbDogMCwNCiAgICAgIGF0dHJUZW1wbGF0ZTogZmFsc2UsDQogICAgICBpZHM6IFtdLA0KICAgICAgZ29vZHNJZDogJycsDQogICAgICBpc1Byb2R1Y3RCb3g6IGZhbHNlLA0KICAgICAgdHJlZVNlbGVjdDogW10sDQogICAgICBtdWx0aXBsZVNlbGVjdGlvbjogW10sDQogICAgICBzaG93QnJva2VyYWdlOiBmYWxzZSwNCiAgICAgIHNob3dWaXBQcmljZTogZmFsc2UsDQogICAgICBzdG9yZUxhYmVsU2hvdzogZmFsc2UsDQogICAgICB0YWdTaG93OiBmYWxzZSwNCiAgICAgIHByb2R1Y3RJZDogMCwNCiAgICAgIHN0b3JlTGFiZWxMaXN0OiBbXSwNCiAgICAgIGdvb2RzTGFiZWxMaXN0OiBbXSwNCiAgICAgIHRpbWVWYWw6IFtdLA0KICAgICAgY29sbGFwc2U6IGZhbHNlLA0KICAgIH07DQogIH0sDQogIHdhdGNoOiB7DQogICAgJHJvdXRlKCkgew0KICAgICAgaWYgKHRoaXMuJHJvdXRlLmZ1bGxQYXRoID09PSB0aGlzLiRyb3V0ZVByb1N0ciArICcvcHJvZHVjdC9wcm9kdWN0X2xpc3Q/dHlwZT01Jykgew0KICAgICAgICB0aGlzLmdldFBhdGgoKTsNCiAgICAgIH0NCiAgICB9LA0KICB9LA0KICBjcmVhdGVkKCkge30sDQogIGFjdGl2YXRlZCgpIHsNCiAgICB0aGlzLmdvb2RIZWFkZSgpOw0KICAgIHRoaXMuZ29vZHNDYXRlZ29yeSgpOw0KICAgIHRoaXMuZ2V0TGFiZWxMaXN0KCk7DQogICAgaWYgKHRoaXMuJHJvdXRlLmZ1bGxQYXRoID09PSB0aGlzLiRyb3V0ZVByb1N0ciArICcvcHJvZHVjdC9wcm9kdWN0X2xpc3Q/dHlwZT01Jykgew0KICAgICAgdGhpcy5nZXRQYXRoKCk7DQogICAgfSBlbHNlIHsNCiAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICB9DQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvLyDlhbfkvZPml6XmnJ8NCiAgICBvbmNoYW5nZVRpbWUoZSkgew0KICAgICAgdGhpcy50aW1lVmFsID0gZTsNCiAgICAgIHRoaXMuYXJ0RnJvbS50aW1lID0gdGhpcy50aW1lVmFsID8gdGhpcy50aW1lVmFsLmpvaW4oJy0nKSA6ICcnOw0KICAgICAgdGhpcy5hcnRGcm9tLnBhZ2UgPSAxOw0KICAgICAgdGhpcy5nZXREYXRhTGlzdCgpOw0KICAgIH0sDQogICAgLy8g5qCH562+5by556qX5YWz6ZetDQogICAgc3RvcmVMYWJlbENsb3NlKCkgew0KICAgICAgdGhpcy5zdG9yZUxhYmVsU2hvdyA9IGZhbHNlOw0KICAgIH0sDQogICAgZ2V0TGFiZWxMaXN0KCkgew0KICAgICAgcHJvZHVjdExhYmVsVXNlTGlzdEFwaSgpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICByZXMuZGF0YS5tYXAoKGVsKSA9PiB7DQogICAgICAgICAgICBpZiAoZWwubGlzdCAmJiBlbC5saXN0Lmxlbmd0aCkgew0KICAgICAgICAgICAgICBlbC5saXN0Lm1hcCgobGFiZWwpID0+IHsNCiAgICAgICAgICAgICAgICBsYWJlbC5hY3RpdmUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5nb29kc0xhYmVsTGlzdCA9IHJlcy5kYXRhOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgb3BlblN0b3JlTGFiZWwocm93KSB7DQogICAgICB0aGlzLnN0b3JlTGFiZWxTaG93ID0gdHJ1ZTsNCiAgICAgIHRoaXMuJG5leHRUaWNrKChlKSA9PiB7DQogICAgICAgIHRoaXMuJHJlZnMuc3RvcmVMYWJlbC5zdG9yZUxhYmVsKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdG9yZUxhYmVsTGlzdCkpKTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgY2xvc2VTdG9yZUxhYmVsKGxhYmVsKSB7DQogICAgICBsZXQgaW5kZXggPSB0aGlzLnN0b3JlTGFiZWxMaXN0LmluZGV4T2YodGhpcy5zdG9yZUxhYmVsTGlzdC5maWx0ZXIoKGQpID0+IGQuaWQgPT0gbGFiZWwuaWQpWzBdKTsNCiAgICAgIHRoaXMuc3RvcmVMYWJlbExpc3Quc3BsaWNlKGluZGV4LCAxKTsNCiAgICAgIHRoaXMuZ2V0TGFiZWxJZCh0aGlzLnN0b3JlTGFiZWxMaXN0KTsNCiAgICB9LA0KICAgIGFjdGl2ZVN0b3JlRGF0YShzdG9yZURhdGFMYWJlbCkgew0KICAgICAgdGhpcy5zdG9yZUxhYmVsU2hvdyA9IGZhbHNlOw0KICAgICAgdGhpcy5zdG9yZUxhYmVsTGlzdCA9IHN0b3JlRGF0YUxhYmVsOw0KICAgICAgdGhpcy5nZXRMYWJlbElkKHN0b3JlRGF0YUxhYmVsKTsNCiAgICB9LA0KICAgIGdldExhYmVsSWQoc3RvcmVEYXRhTGFiZWwpIHsNCiAgICAgIGxldCBzdG9yZUFjdGl2ZUlkcyA9IFtdOw0KICAgICAgc3RvcmVEYXRhTGFiZWwuZm9yRWFjaCgoaXRlbSkgPT4gew0KICAgICAgICBzdG9yZUFjdGl2ZUlkcy5wdXNoKGl0ZW0uaWQpOw0KICAgICAgfSk7DQogICAgICB0aGlzLmFydEZyb20uc3RvcmVfbGFiZWxfaWQgPSBzdG9yZUFjdGl2ZUlkczsNCiAgICAgIHRoaXMuYXJ0RnJvbS5wYWdlID0gMTsNCiAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICB9LA0KICAgIGFjdGl2aXR5RGV0YWlsKHJvdywgdHlwZSkgew0KICAgICAgbGV0IG5hbWUgPSAnJzsNCiAgICAgIGlmICh0eXBlID09PSAwKSB7DQogICAgICAgIG5hbWUgPSAnbWFya2V0aW5nX3N0b3JlQmFyZ2Fpbic7DQogICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IDEpIHsNCiAgICAgICAgbmFtZSA9ICdtYXJrZXRpbmdfY29tYmluYWxpc3QnOw0KICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAyKSB7DQogICAgICAgIG5hbWUgPSAnbWFya2V0aW5nX3N0b3JlU2Vja2lsbCc7DQogICAgICB9DQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7DQogICAgICAgIG5hbWUsDQogICAgICAgIHBhcmFtczogew0KICAgICAgICAgIHByb2R1Y3RfaWQ6IHJvdy5pZCwNCiAgICAgICAgfSwNCiAgICAgIH0pOw0KICAgIH0sDQogICAgb3Blbk1vZGFsKHJvdywgdHlwZSkgew0KICAgICAgdGhpcy5wcm9kdWN0SWQgPSByb3cuaWQ7DQogICAgICB0aGlzLiRyZWZzW3R5cGVdLnZpc2libGUgPSB0cnVlOw0KICAgIH0sDQogICAgYmF0Y2hTdWIoKSB7DQogICAgICBsZXQgZGF0YSA9IHRoaXMuYmF0Y2hGb3JtRGF0YTsNCiAgICAgIGRhdGEuaWRzID0gdGhpcy5pZHM7DQogICAgICBkYXRhLnR5cGUgPSB0aGlzLmJhdGNoVHlwZTsNCiAgICAgIGxldCBhY3RpdmVJZHMgPSBbXTsNCiAgICAgIHRoaXMuZGF0YUxhYmVsLmZvckVhY2goKGl0ZW0pID0+IHsNCiAgICAgICAgYWN0aXZlSWRzLnB1c2goaXRlbS5pZCk7DQogICAgICB9KTsNCiAgICAgIGRhdGEubGFiZWxfaWQgPSBhY3RpdmVJZHM7DQogICAgICBpZiAodGhpcy5iYXRjaFR5cGUgPT0gMiAmJiAhdGhpcy5iYXRjaEZvcm1EYXRhLmxvZ2lzdGljcy5sZW5ndGgpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup54mp5rWB5pa55byPJyk7DQogICAgICB9DQogICAgICBiYXRjaFNldHRpbmcoZGF0YSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB0aGlzLmdldERhdGFMaXN0KCk7DQogICAgICAgICAgdGhpcy5jbGVhckJhdGNoRGF0YShmYWxzZSk7DQogICAgICAgICAgdGhpcy5pZHMgPSBbXTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVyci5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIGNsZWFyQmF0Y2hEYXRhKHN0YXR1cykgew0KICAgICAgaWYgKCFzdGF0dXMpIHsNCiAgICAgICAgdGhpcy5iYXRjaEZvcm1EYXRhID0gew0KICAgICAgICAgIGNhdGVfaWQ6IFtdLA0KICAgICAgICAgIGxvZ2lzdGljczogW10sDQogICAgICAgICAgZnJlaWdodDogMCwNCiAgICAgICAgICBwb3N0YWdlOiBudWxsLA0KICAgICAgICAgIHRlbXBfaWQ6IG51bGwsDQogICAgICAgICAgZ2l2ZV9pbnRlZ3JhbDogbnVsbCwNCiAgICAgICAgICBsYWJlbF9pZDogW10sDQogICAgICAgICAgY291cG9uX2lkczogW10sDQogICAgICAgICAgcmVjb21tZW5kOiBbXSwNCiAgICAgICAgICBpc19naWZ0OiBudWxsLA0KICAgICAgICAgIGxhYmVsX2xpc3Q6IFtdLA0KICAgICAgICB9Ow0KICAgICAgICB0aGlzLmRhdGFMYWJlbCA9IFtdOw0KICAgICAgfQ0KICAgICAgdGhpcy5iYXRjaE1vZGFsID0gZmFsc2U7DQogICAgICB0aGlzLiRyZWZzLnRhYmxlLmNsZWFyU2VsZWN0aW9uKCk7DQogICAgfSwNCiAgICAvLyDmibnph4/orr7nva7llYblk4ENCiAgICBiYXRjaFNlbGVjdCh0eXBlKSB7DQogICAgICBpZiAoIXRoaXMuaWRzLmxlbmd0aCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mAieaLqeimgeS/ruaUueeahOWVhuWTgScpOw0KICAgICAgfSBlbHNlIGlmICh0eXBlID09PSA3KSB7DQogICAgICAgIHRoaXMub25EaXNtb3VudCgpOw0KICAgICAgfSBlbHNlIGlmICh0eXBlID09PSA4KSB7DQogICAgICAgIHRoaXMub25TaGVsdmVzKCk7DQogICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IDkpIHsNCiAgICAgICAgdGhpcy5iYXRjaFR5cGUgPSB0eXBlOw0KICAgICAgICB0aGlzLnRhZ1Nob3cgPSB0cnVlOw0KICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAxMSkgew0KICAgICAgICB0aGlzLmJhdGNoR29vZHNTZXR0aW5nKCflhajpg6jnp7vliLDlm57mlLbnq5knLCAxKTsNCiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gMTIpIHsNCiAgICAgICAgdGhpcy5iYXRjaEdvb2RzU2V0dGluZygn5oGi5aSN6YCJ5Lit5ZWG5ZOBJywgMik7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLmJhdGNoVHlwZSA9IHR5cGU7DQogICAgICAgIHRoaXMuYmF0Y2hNb2RhbCA9IHRydWU7DQogICAgICAgIHRoaXMucHJvZHVjdEdldFRlbXBsYXRlKCk7DQogICAgICB9DQogICAgfSwNCiAgICBiYXRjaEdvb2RzU2V0dGluZyh0aXQsIHR5cGUpIHsNCiAgICAgIGxldCB1cmwgPSB0eXBlID09IDEgPyAncHJvZHVjdC9wcm9kdWN0L2JhdGNoX2RlbGV0ZScgOiAncHJvZHVjdC9wcm9kdWN0L2JhdGNoX3JlY292ZXInOw0KICAgICAgbGV0IGRlbGZyb21EYXRhID0gew0KICAgICAgICB0aXRsZTogdGl0LA0KICAgICAgICB1cmwsDQogICAgICAgIG1ldGhvZDogJ3Bvc3QnLA0KICAgICAgICBpZHM6IHsNCiAgICAgICAgICBpZHM6IHRoaXMuaWRzLA0KICAgICAgICB9LA0KICAgICAgICB1bjogMSwNCiAgICAgIH07DQogICAgICB0aGlzLiRtb2RhbFN1cmUoZGVsZnJvbURhdGEpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgdGhpcy5nb29kSGVhZGUoKTsNCiAgICAgICAgICB0aGlzLmdldERhdGFMaXN0KCk7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBnb29kc01vdmUodHlwZSkgew0KICAgICAgaWYgKHR5cGUgPT09IDEpIHsNCiAgICAgICAgdGhpcy5vbkltcG9ydCgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5vbkV4cG9ydHMoMik7DQogICAgICB9DQogICAgfSwNCiAgICBhY3RpdmVEYXRhKGRhdGFMYWJlbCkgew0KICAgICAgdGhpcy5sYWJlbFNob3cgPSBmYWxzZTsNCiAgICAgIHRoaXMuZGF0YUxhYmVsID0gZGF0YUxhYmVsOw0KICAgIH0sDQogICAgbmFtZUlkKGlkLCBuYW1lcykgew0KICAgICAgdGhpcy5iYXRjaEZvcm1EYXRhLmNvdXBvbl9pZHMgPSBpZDsNCiAgICAgIHRoaXMuY291cG9uTmFtZSA9IHRoaXMudW5pcXVlKG5hbWVzKTsNCiAgICB9LA0KICAgIGhhbmRsZUNsb3NlKG5hbWUpIHsNCiAgICAgIGxldCBpbmRleCA9IHRoaXMuY291cG9uTmFtZS5pbmRleE9mKG5hbWUpOw0KICAgICAgdGhpcy5jb3Vwb25OYW1lLnNwbGljZShpbmRleCwgMSk7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5jb3Vwb25faWRzLnNwbGljZShpbmRleCwgMSk7DQogICAgfSwNCiAgICAvL+WvueixoeaVsOe7hOWOu+mHje+8mw0KICAgIHVuaXF1ZShhcnIpIHsNCiAgICAgIGNvbnN0IHJlcyA9IG5ldyBNYXAoKTsNCiAgICAgIHJldHVybiBhcnIuZmlsdGVyKChhcnIpID0+ICFyZXMuaGFzKGFyci5pZCkgJiYgcmVzLnNldChhcnIuaWQsIDEpKTsNCiAgICB9LA0KICAgIC8vIOiOt+WPlui/kOi0ueaooeadv++8mw0KICAgIHByb2R1Y3RHZXRUZW1wbGF0ZSgpIHsNCiAgICAgIHByb2R1Y3RHZXRUZW1wbGF0ZUFwaSgpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICB0aGlzLnRlbXBsYXRlTGlzdCA9IHJlcy5kYXRhOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDmoIfnrb7lvLnnqpflhbPpl60NCiAgICBsYWJlbENsb3NlKCkgew0KICAgICAgdGhpcy5sYWJlbFNob3cgPSBmYWxzZTsNCiAgICAgIHRoaXMudGFnU2hvdyA9IGZhbHNlOw0KICAgIH0sDQogICAgLy8g6YCJ5oup5ZWG5ZOB5qCH562+DQogICAgYWN0aXZlR29vZHNMYWJlbChkYXRhKSB7DQogICAgICBjb25zb2xlLmxvZyhkYXRhLCAnZGF0YScpOw0KICAgICAgdGhpcy50YWdTaG93ID0gZmFsc2U7DQogICAgICB0aGlzLmJhdGNoRm9ybURhdGEubGFiZWxfbGlzdCA9IEFycmF5LmZyb20obmV3IFNldChkYXRhKSk7DQogICAgICB0aGlzLmJhdGNoU3ViKCk7DQogICAgfSwNCiAgICBsb29rKHJvdykgew0KICAgICAgdGhpcy5nb29kc0lkID0gcm93LmlkOw0KICAgICAgdGhpcy5pc1Byb2R1Y3RCb3ggPSB0cnVlOw0KICAgIH0sDQogICAgLy8g54mp5rWB5pa55byPDQogICAgbG9naXN0aWNzQnRuKGUpIHsNCiAgICAgIHRoaXMuYmF0Y2hGb3JtRGF0YS5sb2dpc3RpY3MgPSBlOw0KICAgIH0sDQogICAgLy8g5YWz6IGU55So5oi35qCH562+DQogICAgb3BlbkxhYmVsKCkgew0KICAgICAgdGhpcy5sYWJlbFNob3cgPSB0cnVlOw0KICAgICAgLy8gdGhpcy4kcmVmcy51c2VyTGFiZWwuc2V0TGFiZWwoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFMYWJlbCkpKTsNCiAgICB9LA0KICAgIGNsb3NlTGFiZWwobGFiZWwpIHsNCiAgICAgIGxldCBpbmRleCA9IHRoaXMuZGF0YUxhYmVsLmluZGV4T2YodGhpcy5kYXRhTGFiZWwuZmlsdGVyKChkKSA9PiBkLmlkID09IGxhYmVsLmlkKVswXSk7DQogICAgICB0aGlzLmRhdGFMYWJlbC5zcGxpY2UoaW5kZXgsIDEpOw0KICAgIH0sDQogICAgLy8g5re75Yqg5LyY5oOg5Yi4DQogICAgYWRkQ291cG9uKCkgew0KICAgICAgdGhpcy4kcmVmcy5jb3Vwb25UZW1wbGF0ZXMuaXNUZW1wbGF0ZSA9IHRydWU7DQogICAgICB0aGlzLiRyZWZzLmNvdXBvblRlbXBsYXRlcy50YWJsZUxpc3QoKTsNCiAgICB9LA0KICAgIGdldFBhdGgoKSB7DQogICAgICB0aGlzLmFydEZyb20ucGFnZSA9IDE7DQogICAgICB0aGlzLmFydEZyb20udHlwZSA9IHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGUudG9TdHJpbmcoKTsNCiAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICB9LA0KICAgIG9uSW1wb3J0KCkgew0KICAgICAgdGhpcy5pbXBvcnRTaG93ID0gdHJ1ZTsNCiAgICB9LA0KICAgIC8vIOWvvOWHug0KICAgIGFzeW5jIG9uRXhwb3J0cyh0eXBlKSB7DQogICAgICBsZXQgW3RoLCBmaWxla2V5LCBkYXRhLCBmaWxlTmFtZV0gPSBbW10sIFtdLCBbXSwgJyddOw0KICAgICAgbGV0IGV4Y2VsRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5hcnRGcm9tKSk7DQogICAgICBleGNlbERhdGEucGFnZSA9IDE7DQogICAgICBleGNlbERhdGEubGltaXQgPSA1MDsNCiAgICAgIGV4Y2VsRGF0YS5pZHMgPSB0aGlzLmlkczsNCiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhjZWxEYXRhLnBhZ2UgKyAxOyBpKyspIHsNCiAgICAgICAgbGV0IGxlYkRhdGEgPSBhd2FpdCB0aGlzLmdldEV4Y2VsRGF0YShleGNlbERhdGEsIHR5cGUpOw0KICAgICAgICBpZiAoIWZpbGVOYW1lKSBmaWxlTmFtZSA9IGxlYkRhdGEuZmlsZW5hbWU7DQogICAgICAgIGlmICghZmlsZWtleS5sZW5ndGgpIHsNCiAgICAgICAgICBmaWxla2V5ID0gbGViRGF0YS5maWxlS2V5Ow0KICAgICAgICB9DQogICAgICAgIGlmICghdGgubGVuZ3RoKSB0aCA9IGxlYkRhdGEuaGVhZGVyOw0KICAgICAgICBpZiAobGViRGF0YS5leHBvcnQubGVuZ3RoKSB7DQogICAgICAgICAgZGF0YSA9IGRhdGEuY29uY2F0KGxlYkRhdGEuZXhwb3J0KTsNCiAgICAgICAgICBleGNlbERhdGEucGFnZSsrOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMuJGV4cG9ydEV4Y2VsKHRoLCBmaWxla2V5LCBmaWxlTmFtZSwgZGF0YSk7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCiAgICBnZXRFeGNlbERhdGEoZXhjZWxEYXRhLCB0eXBlKSB7DQogICAgICBsZXQgZnVuID0gdHlwZSA/IGV4cG9ydFByb2R1Y3RFeHBvcnQgOiBleHBvcnRQcm9kdWN0TGlzdDsNCiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7DQogICAgICAgIGZ1bihleGNlbERhdGEpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpOw0KICAgICAgICB9KTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgZnJlaWdodCgpIHsNCiAgICAgIHRoaXMuJHJlZnMudGVtcGxhdGUuaXNUZW1wbGF0ZSA9IHRydWU7DQogICAgfSwNCiAgICAvLyDmibnph4/kuIrmnrYNCiAgICBvblNoZWx2ZXMoKSB7DQogICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB5LiK5p6255qE5ZWG5ZOBJyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgICBpZHM6IHRoaXMuaWRzLA0KICAgICAgICB9Ow0KICAgICAgICBwcm9kdWN0U2hvd0FwaShkYXRhKQ0KICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICAgIHRoaXMuZ29vZEhlYWRlKCk7DQogICAgICAgICAgICB0aGlzLmdldERhdGFMaXN0KCk7DQogICAgICAgICAgfSkNCiAgICAgICAgICAuY2F0Y2goKHJlcykgPT4gew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9LA0KICAgIC8vIOaJuemHj+S4i+aetg0KICAgIG9uRGlzbW91bnQoKSB7DQogICAgICBpZiAodGhpcy5pZHMubGVuZ3RoID09PSAwKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6KaB5LiL5p6255qE5ZWG5ZOBJyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgICBpZHM6IHRoaXMuaWRzLA0KICAgICAgICB9Ow0KICAgICAgICBwcm9kdWN0VW5zaG93QXBpKGRhdGEpDQogICAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgICAgdGhpcy5hcnRGcm9tLnBhZ2UgPSAxOw0KICAgICAgICAgICAgdGhpcy5nb29kSGVhZGUoKTsNCiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICAgICAgICB9KQ0KICAgICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQoNCiAgICAvLyDlhajpgIkNCiAgICAvLyBvblNlbGVjdFRhYiAoc2VsZWN0aW9uKSB7DQogICAgLy8gICAgIGxldCBkYXRhID0gW10NCiAgICAvLyAgICAgc2VsZWN0aW9uLm1hcCgoaXRlbSkgPT4gew0KICAgIC8vICAgICAgICAgZGF0YS5wdXNoKGl0ZW0uaWQpDQogICAgLy8gICAgIH0pDQogICAgLy8gICAgIHRoaXMuaWRzID0gZGF0YQ0KICAgIC8vIH0sDQogICAgZ2V0Um93S2V5KHJvdykgew0KICAgICAgcmV0dXJuIHJvdy5pZDsNCiAgICB9LA0KICAgIC8vICDpgInkuK3mn5DkuIDooYwNCiAgICBoYW5kbGVTZWxlY3RSb3coc2VsZWN0aW9uKSB7DQogICAgICBjb25zdCB1bmlxdWVBcnIgPSBbXTsNCiAgICAgIGNvbnN0IGlkcyA9IFtdOw0KICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb24ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgY29uc3QgaXRlbSA9IHNlbGVjdGlvbltpXTsNCiAgICAgICAgaWYgKCFpZHMuaW5jbHVkZXMoaXRlbS5pZCkpIHsNCiAgICAgICAgICB1bmlxdWVBcnIucHVzaChpdGVtKTsNCiAgICAgICAgICBpZHMucHVzaChpdGVtLmlkKTsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdGhpcy5pZHMgPSBpZHM7DQogICAgICB0aGlzLm11bHRpcGxlU2VsZWN0aW9uID0gdW5pcXVlQXJyOw0KICAgIH0sDQogICAgLy8g5re75Yqg5reY5a6d5ZWG5ZOB5oiQ5YqfDQogICAgb25DbG9zZSgpIHsNCiAgICAgIHRoaXMubW9kYWxzID0gZmFsc2U7DQogICAgfSwNCiAgICAvLyDlpI3liLbmt5jlrp0NCiAgICBvbkNvcHkoKSB7DQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7DQogICAgICAgIHBhdGg6IHRoaXMuJHJvdXRlUHJvU3RyICsgJy9wcm9kdWN0L2FkZF9wcm9kdWN0JywNCiAgICAgICAgcXVlcnk6IHsgdHlwZTogLTEgfSwNCiAgICAgIH0pOw0KICAgICAgLy8gdGhpcy5tb2RhbHMgPSB0cnVlDQogICAgfSwNCiAgICAvLyB0YWLpgInmi6kNCiAgICBvbkNsaWNrVGFiKCkgew0KICAgICAgdGhpcy5hcnRGcm9tLnBhZ2UgPSAxOw0KICAgICAgdGhpcy5tdWx0aXBsZVNlbGVjdGlvbiA9IFtdOw0KICAgICAgdGhpcy4kcmVmcy50YWJsZS5jbGVhclNlbGVjdGlvbigpOw0KICAgICAgdGhpcy5nZXREYXRhTGlzdCgpOw0KICAgIH0sDQogICAgLy8g5LiL5ouJ5qCRDQogICAgaGFuZGxlQ2hlY2tDaGFuZ2UoZGF0YSkgew0KICAgICAgbGV0IHZhbHVlID0gJyc7DQogICAgICBsZXQgdGl0bGUgPSAnJzsNCiAgICAgIHRoaXMubGlzdCA9IFtdOw0KICAgICAgdGhpcy5hcnRGcm9tLmNhdGVfaWQgPSAwOw0KICAgICAgZGF0YS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4gew0KICAgICAgICB2YWx1ZSArPSBgJHtpdGVtLmlkfSxgOw0KICAgICAgICB0aXRsZSArPSBgJHtpdGVtLnRpdGxlfSxgOw0KICAgICAgfSk7DQogICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5sZW5ndGggLSAxKTsNCiAgICAgIHRpdGxlID0gdGl0bGUuc3Vic3RyaW5nKDAsIHRpdGxlLmxlbmd0aCAtIDEpOw0KICAgICAgdGhpcy5saXN0LnB1c2goew0KICAgICAgICB2YWx1ZSwNCiAgICAgICAgdGl0bGUsDQogICAgICB9KTsNCiAgICAgIHRoaXMuYXJ0RnJvbS5jYXRlX2lkID0gdmFsdWU7DQogICAgICB0aGlzLmdldERhdGFMaXN0KCk7DQogICAgfSwNCiAgICAvLyDojrflj5bllYblk4HooajljZXlpLTmlbDph48NCiAgICBnb29kSGVhZGUoKSB7DQogICAgICBnZXRHb29kSGVhZGUodGhpcy5hcnRGcm9tKQ0KICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy5oZWFkZU51bSA9IHJlcy5kYXRhLmxpc3Q7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDllYblk4HliIbnsbvvvJsNCiAgICBnb29kc0NhdGVnb3J5KCkgew0KICAgICAgY2FzY2FkZXJMaXN0QXBpKDEpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLnRyZWVTZWxlY3QgPSByZXMuZGF0YTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOWVhuWTgeWIl+ihqO+8mw0KICAgIGdldERhdGFMaXN0KCkgew0KICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsNCiAgICAgIHRoaXMuYXJ0RnJvbS5jYXRlX2lkID0gdGhpcy5hcnRGcm9tLmNhdGVfaWQgfHwgJyc7DQogICAgICBnZXRHb29kcyh0aGlzLmFydEZyb20pDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICBsZXQgZGF0YSA9IHJlcy5kYXRhOw0KICAgICAgICAgIHRoaXMudGFibGVMaXN0ID0gZGF0YS5saXN0Ow0KICAgICAgICAgIHRoaXMudG90YWwgPSByZXMuZGF0YS5jb3VudDsNCiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgICAgICAvL+ehruS/nWRvbeWKoOi9veWujOavlQ0KICAgICAgICAgICAgLy8gdGhpcy5zZXRDaGVja2VkKCk7DQogICAgICAgICAgICB0aGlzLnNob3dTZWxlY3REYXRhKCk7DQogICAgICAgICAgfSk7DQogICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBzaG93U2VsZWN0RGF0YSgpIHsNCiAgICAgIGlmICh0aGlzLm11bHRpcGxlU2VsZWN0aW9uLmxlbmd0aCA+IDApIHsNCiAgICAgICAgLy8g5Yik5pat5piv5ZCm5a2Y5Zyo5Yu+6YCJ6L+H55qE5pWw5o2uDQogICAgICAgIHRoaXMudGFibGVMaXN0LmZvckVhY2goKHJvdykgPT4gew0KICAgICAgICAgIC8vIOiOt+WPluaVsOaNruWIl+ihqOaOpeWPo+ivt+axguWIsOeahOaVsOaNrg0KICAgICAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3Rpb24uZm9yRWFjaCgoaXRlbSkgPT4gew0KICAgICAgICAgICAgLy8g5Yu+6YCJ5Yiw55qE5pWw5o2uDQogICAgICAgICAgICBpZiAocm93LmlkID09PSBpdGVtLmlkKSB7DQogICAgICAgICAgICAgIHRoaXMuJHJlZnMudGFibGUudG9nZ2xlUm93U2VsZWN0aW9uKGl0ZW0sIHRydWUpOyAvLyDoi6XmnInph43lkIjvvIzliJnlm57mmL7or6XmnaHmlbDmja4NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCiAgICAvLyDooajmoLzmkJzntKINCiAgICB1c2VyU2VhcmNocygpIHsNCiAgICAgIHRoaXMuYXJ0RnJvbS5wYWdlID0gMTsNCiAgICAgIHRoaXMuZ29vZEhlYWRlKCk7DQogICAgICB0aGlzLmdldERhdGFMaXN0KCk7DQogICAgfSwNCiAgICAvLyDkuIrkuIvmnrYNCiAgICBjaGFuZ2VTd2l0Y2gocm93KSB7DQogICAgICBQb3N0Z29vZHNJc1Nob3cocm93LmlkLCByb3cuaXNfc2hvdykNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB0aGlzLmdvb2RIZWFkZSgpOw0KICAgICAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICByb3cuaXNfc2hvdyA9ICFyb3cuaXNfc2hvdyA/IDEgOiAwOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g5pWw5o2u5a+85Ye677ybDQogICAgZXhwb3J0RGF0YTogZnVuY3Rpb24gKCkgew0KICAgICAgbGV0IHRoID0gWyfllYblk4HlkI3np7AnLCAn5ZWG5ZOB566A5LuLJywgJ+WVhuWTgeWIhuexuycsICfku7fmoLwnLCAn5bqT5a2YJywgJ+mUgOmHjycsICfmlLbol4/kurrmlbAnXTsNCiAgICAgIGxldCBmaWx0ZXJWYWwgPSBbJ3N0b3JlX25hbWUnLCAnc3RvcmVfaW5mbycsICdjYXRlX25hbWUnLCAncHJpY2UnLCAnc3RvY2snLCAnc2FsZXMnLCAnY29sbGVjdCddOw0KICAgICAgdGhpcy53aGVyZS5wYWdlID0gJ25vcGFnZSc7DQogICAgICBnZXRHb29kcyh0aGlzLndoZXJlKS50aGVuKChyZXMpID0+IHsNCiAgICAgICAgbGV0IGRhdGEgPSByZXMuZGF0YS5tYXAoKHYpID0+IGZpbHRlclZhbC5tYXAoKGspID0+IHZba10pKTsNCiAgICAgICAgbGV0IGZpbGVUaW1lID0gRGF0ZS5wYXJzZShuZXcgRGF0ZSgpKTsNCiAgICAgICAgbGV0IFtmaWxlTmFtZSwgZmlsZVR5cGUsIHNoZWV0TmFtZV0gPSBbJ+WVhuaIt+aVsOaNrl8nICsgZmlsZVRpbWUsICd4bHN4JywgJ+WVhuaIt+aVsOaNriddOw0KICAgICAgICB0b0V4Y2VsKHsgdGgsIGRhdGEsIGZpbGVOYW1lLCBmaWxlVHlwZSwgc2hlZXROYW1lIH0pOw0KICAgICAgfSk7DQogICAgfSwNCiAgICAvLyDlsZ7mgKflvLnlh7rvvJsNCiAgICBhdHRyVGFwKCkgew0KICAgICAgdGhpcy5hdHRyVGVtcGxhdGUgPSB0cnVlOw0KICAgIH0sDQogICAgY2hhbmdlVGVtcGxhdGUobXNnKSB7DQogICAgICB0aGlzLmF0dHJUZW1wbGF0ZSA9IG1zZzsNCiAgICB9LA0KICAgIC8vIOe8lui+kQ0KICAgIGVkaXQocm93KSB7DQogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6IHRoaXMuJHJvdXRlUHJvU3RyICsgJy9wcm9kdWN0L2FkZF9wcm9kdWN0LycgKyByb3cuaWQgfSk7DQogICAgfSwNCiAgICAvLyDnoa7orqQNCiAgICBkZWwocm93LCB0aXQsIG51bSkgew0KICAgICAgbGV0IGRlbGZyb21EYXRhID0gew0KICAgICAgICB0aXRsZTogdGl0LA0KICAgICAgICBudW06IG51bSwNCiAgICAgICAgdXJsOiBgcHJvZHVjdC9wcm9kdWN0LyR7cm93LmlkfWAsDQogICAgICAgIG1ldGhvZDogJ0RFTEVURScsDQogICAgICAgIGlkczogJycsDQogICAgICAgIHVuOiAxLA0KICAgICAgfTsNCiAgICAgIHRoaXMuJG1vZGFsU3VyZShkZWxmcm9tRGF0YSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB0aGlzLnRhYmxlTGlzdC5zcGxpY2UobnVtLCAxKTsNCiAgICAgICAgICB0aGlzLmdvb2RIZWFkZSgpOw0KICAgICAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIGZ1bGxEZWwocm93LCB0aXQsIG51bSkgew0KICAgICAgbGV0IGRlbGZyb21EYXRhID0gew0KICAgICAgICB0aXRsZTogdGl0LA0KICAgICAgICBudW06IG51bSwNCiAgICAgICAgdXJsOiBgcHJvZHVjdC9mdWxsX2RlbC8ke3Jvdy5pZH1gLA0KICAgICAgICBtZXRob2Q6ICdERUxFVEUnLA0KICAgICAgfTsNCiAgICAgIHRoaXMuJG1vZGFsU3VyZShkZWxmcm9tRGF0YSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB0aGlzLnRhYmxlTGlzdC5zcGxpY2UobnVtLCAxKTsNCiAgICAgICAgICB0aGlzLmdvb2RIZWFkZSgpOw0KICAgICAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKHJlcy5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOmHjee9rg0KICAgIHJlc2V0KG5hbWUpIHsNCiAgICAgIHRoaXMuYXJ0RnJvbSA9IHsNCiAgICAgICAgcGFnZTogMSwNCiAgICAgICAgbGltaXQ6IDE1LA0KICAgICAgICBjYXRlX2lkOiAnJywNCiAgICAgICAgdHlwZTogJzEnLA0KICAgICAgICBzdG9yZV9uYW1lOiAnJywNCiAgICAgICAgc3BlY190eXBlOiAnJywNCiAgICAgICAgbG9naXN0aWNzOiAnJywNCiAgICAgICAgdmlwX3Byb2R1Y3Q6ICcnLA0KICAgICAgICBpc19naWZ0OiAnJywNCiAgICAgICAgc2FsZXNfczogWycnLCAnJ10sDQogICAgICAgIHN0b2NrX3M6IFsnJywgJyddLA0KICAgICAgICBwcmljZV9zOiBbJycsICcnXSwNCiAgICAgICAgc3RvcmVfbGFiZWxfaWQ6IFtdLA0KICAgICAgICB0aW1lOiAnJywNCiAgICAgICAgdmlydHVhbF90eXBlOiAnJywNCiAgICAgIH07DQogICAgICB0aGlzLnN0b3JlTGFiZWxMaXN0ID0gW107DQogICAgICB0aGlzLnRhYmxlTGlzdCA9IFtdOw0KICAgICAgdGhpcy50b3RhbCA9IDA7DQogICAgICB0aGlzLnRpbWVWYWwgPSBbXTsNCiAgICAgIHRoaXMuZ2V0RGF0YUxpc3QoKTsNCiAgICB9LA0KICB9LA0KfTsNCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAyiBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/pages/product/productList","sourcesContent":["<template>\r\n <div class=\"article-manager\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\" :body-style=\"{ padding: 0 }\">\r\n <div class=\"padding-add\">\r\n <el-form ref=\"artFrom\" :model=\"artFrom\" label-width=\"80px\" label-position=\"right\" inline @submit.native.prevent>\r\n <div class=\"acea-row search-form\">\r\n <div class=\"search-form-box\">\r\n <el-form-item label=\"商品搜索:\" label-for=\"store_name\">\r\n <el-input\r\n clearable\r\n placeholder=\"请输入商品名称/关键字/ID\"\r\n v-model=\"artFrom.store_name\"\r\n class=\"form_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"商品类型:\">\r\n <el-select v-model=\"artFrom.virtual_type\" clearable placeholder=\"全部\" class=\"form_content_width\">\r\n <el-option label=\"全部\" value=\"\" />\r\n <el-option label=\"普通商品\" value=\"0\" />\r\n <el-option label=\"卡密商品\" value=\"1\" />\r\n <el-option label=\"优惠券商品\" value=\"2\" />\r\n <el-option label=\"虚拟商品\" value=\"3\" />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"商品分类:\" label-for=\"pid\">\r\n <el-cascader\r\n v-model=\"artFrom.cate_id\"\r\n size=\"small\"\r\n :options=\"treeSelect\"\r\n :props=\"{ multiple: false, emitPath: false, checkStrictly: true }\"\r\n clearable\r\n class=\"form_content_width\"\r\n ></el-cascader>\r\n </el-form-item>\r\n <el-form-item label=\"配送方式:\">\r\n <el-select v-model=\"artFrom.logistics\" clearable placeholder=\"全部\" class=\"form_content_width\">\r\n <el-option label=\"全部\" value=\"\" />\r\n <el-option label=\"快递配送\" value=\"1\" />\r\n <el-option label=\"到店自提\" value=\"2\" />\r\n </el-select>\r\n </el-form-item>\r\n <template v-if=\"collapse\">\r\n <el-form-item label=\"商品标签:\" label-for=\"store_name\">\r\n <div class=\"labelInput acea-row row-between-wrapper form_content_width\" @click=\"openStoreLabel\">\r\n <div style=\"width: 90%\">\r\n <div v-if=\"storeLabelList.length\">\r\n <el-tag\r\n class=\"mr5\"\r\n closable\r\n v-for=\"(item, index) in storeLabelList\"\r\n :key=\"index\"\r\n @close=\"closeStoreLabel(item)\"\r\n >{{ item.label_name }}</el-tag\r\n >\r\n </div>\r\n <span class=\"span\" v-else>选择商品标签</span>\r\n </div>\r\n <div class=\"iconfont iconxiayi\"></div>\r\n </div>\r\n </el-form-item>\r\n <el-form-item label=\"商品规格:\">\r\n <el-select v-model=\"artFrom.spec_type\" clearable placeholder=\"全部\" class=\"form_content_width\">\r\n <el-option label=\"全部\" value=\"\" />\r\n <el-option label=\"单规格\" value=\"0\" />\r\n <el-option label=\"多规格\" value=\"1\" />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"会员专属:\">\r\n <el-select v-model=\"artFrom.vip_product\" clearable placeholder=\"全部\" class=\"form_content_width\">\r\n <el-option label=\"全部\" value=\"\" />\r\n <el-option label=\"否\" value=\"0\" />\r\n <el-option label=\"是\" value=\"1\" />\r\n </el-select>\r\n </el-form-item>\r\n\r\n <el-form-item label=\"添加时间:\">\r\n <el-date-picker\r\n class=\"form_range_content_width\"\r\n clearable\r\n v-model=\"timeVal\"\r\n type=\"daterange\"\r\n :editable=\"false\"\r\n @change=\"onchangeTime\"\r\n format=\"yyyy/MM/dd\"\r\n value-format=\"yyyy/MM/dd\"\r\n start-placeholder=\"开始日期\"\r\n end-placeholder=\"结束日期\"\r\n :picker-options=\"pickerOptions\"\r\n style=\"width: 250px\"\r\n ></el-date-picker>\r\n </el-form-item>\r\n <el-form-item label=\"库存:\" label-for=\"store_name\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"artFrom.stock_s[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"artFrom.stock_s[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"价格:\" label-for=\"store_name\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"artFrom.price_s[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"artFrom.price_s[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"销量:\" label-for=\"store_name\">\r\n <el-input\r\n clearable\r\n placeholder=\"最小值\"\r\n v-model=\"artFrom.sales_s[0]\"\r\n class=\"form_range_content_width\"\r\n />\r\n ~\r\n <el-input\r\n clearable\r\n placeholder=\"最大值\"\r\n v-model=\"artFrom.sales_s[1]\"\r\n class=\"form_range_content_width\"\r\n />\r\n </el-form-item>\r\n </template>\r\n </div>\r\n <div class=\"search-form-sub\">\r\n <el-button type=\"primary\" v-db-click @click=\"userSearchs\">查询</el-button>\r\n <el-button class=\"ResetSearch\" v-db-click @click=\"reset\">重置</el-button>\r\n <a class=\"ivu-ml-8 font12 ml10\" v-db-click @click=\"collapse = !collapse\">\r\n <template v-if=\"!collapse\"> 展开 <i class=\"el-icon-arrow-down\" /> </template>\r\n <template v-else> 收起 <i class=\"el-icon-arrow-up\" /> </template>\r\n </a>\r\n </div>\r\n </div>\r\n </el-form>\r\n </div>\r\n </el-card>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt mt16\" :body-style=\"{ padding: '0 20px 20px' }\">\r\n <el-tabs v-model=\"artFrom.type\" @tab-click=\"onClickTab\">\r\n <el-tab-pane\r\n :label=\"item.name + '(' + item.count + ')'\"\r\n :name=\"item.type.toString()\"\r\n v-for=\"(item, index) in headeNum\"\r\n :key=\"index\"\r\n />\r\n </el-tabs>\r\n <div class=\"Button\">\r\n <router-link v-auth=\"['product-product-save']\" :to=\"$routeProStr + '/product/add_product'\"\r\n ><el-button type=\"primary\" class=\"mr14\">添加商品</el-button></router-link\r\n >\r\n <el-button v-auth=\"['product-crawl-save']\" type=\"success\" class=\"mr14\" v-db-click @click=\"onCopy\"\r\n >商品采集</el-button\r\n >\r\n <el-dropdown class=\"bnt mr14\" @command=\"batchSelect\">\r\n <el-button>批量修改<i class=\"el-icon-arrow-down el-icon--right\"></i></el-button>\r\n <el-dropdown-menu slot=\"dropdown\">\r\n <el-dropdown-item :command=\"1\">商品分类</el-dropdown-item>\r\n <el-dropdown-item :command=\"2\">物流设置</el-dropdown-item>\r\n <el-dropdown-item :command=\"3\">购买送积分</el-dropdown-item>\r\n <el-dropdown-item :command=\"4\">购买送优惠券</el-dropdown-item>\r\n <el-dropdown-item :command=\"5\">关联用户标签</el-dropdown-item>\r\n <el-dropdown-item :command=\"6\">活动推荐</el-dropdown-item>\r\n <el-dropdown-item v-auth=\"['product-product-product_show']\" v-if=\"artFrom.type === '1'\" :command=\"7\"\r\n >批量下架</el-dropdown-item\r\n >\r\n <el-dropdown-item v-auth=\"['product-product-product_show']\" v-if=\"artFrom.type === '2'\" :command=\"8\"\r\n >批量上架</el-dropdown-item\r\n >\r\n <el-dropdown-item v-auth=\"['product-product-product_show']\" :command=\"9\">设置商品标签</el-dropdown-item>\r\n <el-dropdown-item v-auth=\"['product-product-product_show']\" v-if=\"artFrom.type !== '6'\" :command=\"11\"\r\n >移到回收站</el-dropdown-item\r\n >\r\n <el-dropdown-item v-auth=\"['product-product-product_show']\" v-if=\"artFrom.type == '6'\" :command=\"12\"\r\n >恢复商品</el-dropdown-item\r\n >\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-dropdown class=\"bnt mr14\" @command=\"goodsMove\">\r\n <el-button>商品迁移<i class=\"el-icon-arrow-down el-icon--right\"></i></el-button>\r\n <el-dropdown-menu slot=\"dropdown\">\r\n <el-dropdown-item :command=\"1\">商品导入</el-dropdown-item>\r\n <el-dropdown-item :command=\"2\">商品导出</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n <el-button v-auth=\"['export-storeProduct']\" class=\"export\" v-db-click @click=\"onExports(0)\">数据导出</el-button>\r\n </div>\r\n <el-table\r\n ref=\"table\"\r\n :data=\"tableList\"\r\n class=\"ivu-mt mt14\"\r\n v-loading=\"loading\"\r\n highlight-current-row\r\n :row-key=\"getRowKey\"\r\n @selection-change=\"handleSelectRow\"\r\n empty-text=\"暂无数据\"\r\n >\r\n <el-table-column type=\"expand\" width=\"50\" v-if=\"['1', '2'].includes(artFrom.type)\">\r\n <template slot-scope=\"scope\">\r\n <expandRow :row=\"scope.row\"></expandRow>\r\n </template>\r\n </el-table-column>\r\n <el-table-column type=\"selection\" width=\"60\" :reserve-selection=\"true\"> </el-table-column>\r\n <el-table-column label=\"商品ID\" width=\"80\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.id }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"商品图\" min-width=\"90\">\r\n <template slot-scope=\"scope\">\r\n <div class=\"tabBox_img\" v-viewer>\r\n <img v-lazy=\"scope.row.image\" />\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"商品名称\" min-width=\"250\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.store_name }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"参与活动\" width=\"90\">\r\n <template slot-scope=\"scope\">\r\n <el-tag\r\n class=\"mb5 cup\"\r\n v-if=\"scope.row.activityExist.bargain\"\r\n type=\"\"\r\n @click=\"activityDetail(scope.row, 0)\"\r\n effect=\"dark\"\r\n >\r\n 砍价\r\n </el-tag>\r\n <el-tag\r\n class=\"mb5 cup\"\r\n v-if=\"scope.row.activityExist.combination\"\r\n type=\"success\"\r\n @click=\"activityDetail(scope.row, 1)\"\r\n effect=\"dark\"\r\n >\r\n 拼团\r\n </el-tag>\r\n <el-tag\r\n class=\"mb5 cup\"\r\n v-if=\"scope.row.activityExist.seckill\"\r\n type=\"warning\"\r\n @click=\"activityDetail(scope.row, 2)\"\r\n effect=\"dark\"\r\n >\r\n 秒杀\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"商品类型\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.product_type }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"商品售价\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.price }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"销量\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.sales }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"库存\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.stock }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"排序\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.sort }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"状态\" min-width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <el-switch\r\n class=\"defineSwitch\"\r\n :active-value=\"1\"\r\n :inactive-value=\"0\"\r\n v-model=\"scope.row.is_show\"\r\n :value=\"scope.row.is_show\"\r\n :disabled=\"scope.row.stop_status ? true : false\"\r\n @change=\"changeSwitch(scope.row)\"\r\n size=\"large\"\r\n active-text=\"上架\"\r\n inactive-text=\"下架\"\r\n >\r\n </el-switch>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" fixed=\"right\" minWidth=\"100\">\r\n <template slot-scope=\"scope\">\r\n <!-- <a v-db-click @click=\"look(scope.row)\">查看</a>\r\n <el-divider direction=\"vertical\"></el-divider> -->\r\n <a v-db-click @click=\"edit(scope.row)\">编辑</a>\r\n <el-divider direction=\"vertical\"></el-divider>\r\n <el-dropdown size=\"small\">\r\n <span class=\"el-dropdown-link\">更多<i class=\"el-icon-arrow-down el-icon--right\"></i> </span>\r\n <el-dropdown-menu slot=\"dropdown\">\r\n <el-dropdown-item>\r\n <router-link :to=\"{ path: $routeProStr + '/product/product_reply/' + scope.row.id }\"\r\n ><a>查看评论</a></router-link\r\n >\r\n </el-dropdown-item>\r\n <el-dropdown-item v-db-click @click.native=\"openModal(scope.row, 'vipPriceSet')\"\r\n >会员价管理</el-dropdown-item\r\n >\r\n <el-dropdown-item v-db-click @click.native=\"openModal(scope.row, 'brokerageSet')\"\r\n >佣金管理</el-dropdown-item\r\n >\r\n <el-dropdown-item\r\n v-if=\"artFrom.type === '6'\"\r\n v-db-click\r\n @click.native=\"del(scope.row, '恢复商品', scope.$index)\"\r\n >恢复商品</el-dropdown-item\r\n >\r\n <el-dropdown-item\r\n v-if=\"artFrom.type === '6'\"\r\n v-db-click\r\n @click.native=\"fullDel(scope.row, '彻底删除', scope.$index)\"\r\n >彻底删除</el-dropdown-item\r\n >\r\n <el-dropdown-item v-else v-db-click @click.native=\"del(scope.row, '移入回收站', scope.$index)\"\r\n >移到回收站</el-dropdown-item\r\n >\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"acea-row row-right page\">\r\n <pagination\r\n v-if=\"total\"\r\n :total=\"total\"\r\n :page.sync=\"artFrom.page\"\r\n :limit.sync=\"artFrom.limit\"\r\n @pagination=\"getDataList\"\r\n />\r\n </div>\r\n <attribute :attrTemplate=\"attrTemplate\" v-on:changeTemplate=\"changeTemplate\"></attribute>\r\n </el-card>\r\n <!-- 生成淘宝京东表单-->\r\n <el-dialog\r\n :visible.sync=\"modals\"\r\n class=\"Box\"\r\n title=\"复制淘宝、天猫、京东、苏宁、1688\"\r\n :close-on-click-modal=\"false\"\r\n width=\"720px\"\r\n >\r\n <tao-bao ref=\"taobaos\" v-if=\"modals\" @on-close=\"onClose\"></tao-bao>\r\n </el-dialog>\r\n <el-dialog\r\n :visible.sync=\"batchModal\"\r\n class=\"batch-box\"\r\n title=\"批量设置\"\r\n :show-close=\"true\"\r\n :close-on-click-modal=\"false\"\r\n width=\"540px\"\r\n >\r\n <el-form\r\n class=\"batchFormData\"\r\n ref=\"batchFormData\"\r\n :rules=\"ruleBatch\"\r\n :model=\"batchFormData\"\r\n label-width=\"90px\"\r\n label-position=\"right\"\r\n @submit.native.prevent\r\n >\r\n <el-row :gutter=\"24\">\r\n <el-col :span=\"24\" v-if=\"batchType == 1\">\r\n <!-- <el-divider content-position=\"left\">基础设置</el-divider>-->\r\n <el-form-item label=\"商品分类:\" prop=\"cate_id\">\r\n <!-- <el-select v-model=\"batchFormData.cate_id\" placeholder=\"请选择商品分类\" multiple class=\"perW20\">\r\n <el-option v-for=\"item in treeSelect\" :disabled=\"item.pid === 0\" :value=\"item.id\" :key=\"item.id\">{{\r\n item.html + item.cate_name\r\n }}</el-option>\r\n </el-select> -->\r\n <el-cascader\r\n v-model=\"batchFormData.cate_id\"\r\n size=\"small\"\r\n :options=\"treeSelect\"\r\n :props=\"{ multiple: true, emitPath: false, checkStrictly: true }\"\r\n clearable\r\n style=\"width: 400px\"\r\n ></el-cascader>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"24\" v-if=\"batchType == 2\">\r\n <el-form-item label=\"物流方式:\" prop=\"logistics\">\r\n <el-checkbox-group v-model=\"batchFormData.logistics\" @change=\"logisticsBtn\">\r\n <el-checkbox label=\"1\">快递</el-checkbox>\r\n <el-checkbox label=\"2\">到店</el-checkbox>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n <el-form-item label=\"运费设置:\">\r\n <el-radio-group v-model=\"batchFormData.freight\">\r\n <!-- <el-radio :label=\"1\">包邮</el-radio> -->\r\n <el-radio :label=\"2\">固定邮费</el-radio>\r\n <el-radio :label=\"3\">运费模板</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n <el-form-item label=\"\" v-if=\"batchFormData.freight == 2\">\r\n <div class=\"acea-row\">\r\n <el-input-number\r\n :controls=\"false\"\r\n :min=\"0\"\r\n v-model=\"batchFormData.postage\"\r\n placeholder=\"请输入金额\"\r\n class=\"perW20 maxW\"\r\n />\r\n </div>\r\n </el-form-item>\r\n <el-form-item label=\"\" v-if=\"batchFormData.freight == 3\" prop=\"temp_id\">\r\n <div class=\"acea-row\">\r\n <el-select v-model=\"batchFormData.temp_id\" clearable placeholder=\"请选择运费模板\" style=\"width: 414px\">\r\n <el-option\r\n v-for=\"(item, index) in templateList\"\r\n :value=\"item.id\"\r\n :key=\"index\"\r\n :label=\"item.name\"\r\n ></el-option>\r\n </el-select>\r\n </div>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"24\" v-if=\"[3, 4, 5, 6].includes(batchType)\">\r\n <!-- <el-divider content-position=\"left\" v-if=\"[3, 4, 5, 6].includes(batchType)\">营销设置</el-divider>-->\r\n <el-form-item label=\"赠送积分:\" prop=\"give_integral\" v-if=\"batchType == 3\">\r\n <el-input-number\r\n :controls=\"false\"\r\n v-model=\"batchFormData.give_integral\"\r\n :min=\"0\"\r\n :max=\"9999999999\"\r\n placeholder=\"请输入积分\"\r\n style=\"width: 100%\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"赠送优惠券:\" v-if=\"batchType == 4\">\r\n <div v-if=\"couponName.length\" class=\"mb20\">\r\n <el-tag closable v-for=\"(item, index) in couponName\" :key=\"index\" @close=\"handleClose(item)\">{{\r\n item.title\r\n }}</el-tag>\r\n </div>\r\n <el-button type=\"primary\" v-db-click @click=\"addCoupon\">添加优惠券</el-button>\r\n </el-form-item>\r\n <el-form-item label=\"关联标签:\" prop=\"label_id\" v-if=\"batchType == 5\">\r\n <div class=\"acea-row label_width\">\r\n <div class=\"labelInput acea-row row-between-wrapper\" v-db-click @click=\"openLabel\">\r\n <div style=\"width: auto\">\r\n <div v-if=\"dataLabel.length\">\r\n <el-tag\r\n class=\"m-r-2\"\r\n closable\r\n v-for=\"(item, index) in dataLabel\"\r\n @close=\"closeLabel(item)\"\r\n :key=\"index\"\r\n >{{ item.label_name }}</el-tag\r\n >\r\n </div>\r\n <span class=\"span\" v-else>选择用户关联标签</span>\r\n </div>\r\n <div class=\"iconfont iconxiayi\"></div>\r\n </div>\r\n </div>\r\n </el-form-item>\r\n <el-form-item label=\"商品推荐:\" v-if=\"batchType == 6\">\r\n <el-checkbox-group v-model=\"batchFormData.recommend\">\r\n <el-checkbox label=\"is_hot\">热卖单品</el-checkbox>\r\n <!-- <el-checkbox label=\"is_benefit\">促销单品</el-checkbox> -->\r\n <el-checkbox label=\"is_best\">精品推荐</el-checkbox>\r\n <el-checkbox label=\"is_new\">首发新品</el-checkbox>\r\n <el-checkbox label=\"is_good\">优品推荐</el-checkbox>\r\n </el-checkbox-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <span slot=\"footer\" class=\"dialog-footer\">\r\n <el-button v-db-click @click=\"clearBatchData\">取 消</el-button>\r\n <el-button type=\"primary\" v-db-click @click=\"batchSub\">确 定</el-button>\r\n </span>\r\n </el-dialog>\r\n <!-- 商品标签 -->\r\n <el-dialog\r\n :visible.sync=\"tagShow\"\r\n title=\"请选择商品标签\"\r\n :show-close=\"true\"\r\n width=\"540px\"\r\n :close-on-click-modal=\"false\"\r\n >\r\n <goodsLabel\r\n ref=\"goodsLabel\"\r\n :defaultLabelList=\"goodsLabelList\"\r\n @activeLabel=\"activeGoodsLabel\"\r\n @close=\"labelClose\"\r\n ></goodsLabel>\r\n </el-dialog>\r\n <!-- 用户标签 -->\r\n <el-dialog\r\n :visible.sync=\"labelShow\"\r\n title=\"请选择用户标签\"\r\n width=\"540px\"\r\n :show-close=\"true\"\r\n :close-on-click-modal=\"false\"\r\n >\r\n <userLabel ref=\"userLabel\" @activeData=\"activeData\" @close=\"labelClose\"></userLabel>\r\n </el-dialog>\r\n <!-- 商品弹窗 -->\r\n <div v-if=\"isProductBox\">\r\n <div class=\"bg\" v-db-click @click=\"isProductBox = false\"></div>\r\n <goodsDetail :goodsId=\"goodsId\"></goodsDetail>\r\n </div>\r\n <coupon-list ref=\"couponTemplates\" @nameId=\"nameId\" :couponids=\"batchFormData.coupon_ids\"></coupon-list>\r\n <!-- 商品导入 -->\r\n <el-dialog\r\n :visible.sync=\"importShow\"\r\n title=\"商品导入\"\r\n width=\"900px\"\r\n :show-close=\"true\"\r\n :close-on-click-modal=\"false\"\r\n >\r\n <goodsImport v-if=\"importShow\" @close=\"importShow = false\"></goodsImport>\r\n </el-dialog>\r\n <brokerageSet ref=\"brokerageSet\" :productId=\"productId\"></brokerageSet>\r\n <vipPriceSet ref=\"vipPriceSet\" :productId=\"productId\"></vipPriceSet>\r\n <!-- 商品标签 -->\r\n <el-dialog :visible.sync=\"storeLabelShow\" title=\"选择商品标签\" width=\"540\">\r\n <storeLabelList\r\n v-if=\"storeLabelShow\"\r\n ref=\"storeLabel\"\r\n @activeData=\"activeStoreData\"\r\n @close=\"storeLabelClose\"\r\n ></storeLabelList>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport expandRow from './tableExpand.vue';\r\nimport attribute from './attribute';\r\nimport toExcel from '../../../utils/Excel.js';\r\nimport { mapState } from 'vuex';\r\nimport taoBao from './taoBao';\r\nimport goodsDetail from './components/goodsDetail.vue';\r\nimport couponList from '@/components/couponList';\r\nimport { exportProductList, exportProductExport } from '@/api/export';\r\nimport settings from '@/setting';\r\nimport goodsImport from './components/goodsImport.vue';\r\nimport brokerageSet from '../components/brokerageSet.vue';\r\nimport vipPriceSet from '../components/vipPriceSet.vue';\r\nimport {\r\n getGoodHeade,\r\n getGoods,\r\n PostgoodsIsShow,\r\n cascaderListApi, // 分类列表\r\n productShowApi,\r\n productUnshowApi,\r\n storeProductApi,\r\n batchSetting,\r\n productGetTemplateApi,\r\n productLabelUseListApi,\r\n productBatchDelete,\r\n} from '@/api/product';\r\nimport userLabel from '@/components/labelList';\r\nimport storeLabelList from '@/components/storeLabelList';\r\nimport goodsLabel from '@/components/goodsLabel';\r\n\r\nexport default {\r\n name: 'product_productList',\r\n components: {\r\n expandRow,\r\n attribute,\r\n taoBao,\r\n goodsDetail,\r\n userLabel,\r\n couponList,\r\n goodsImport,\r\n brokerageSet,\r\n vipPriceSet,\r\n storeLabelList,\r\n goodsLabel,\r\n },\r\n computed: {\r\n ...mapState('userLevel', ['categoryId']),\r\n },\r\n data() {\r\n return {\r\n routePre: settings.routePre,\r\n pickerOptions: this.$timeOptions,\r\n template: false,\r\n modals: false,\r\n importShow: false,\r\n batchModal: false,\r\n labelShow: false,\r\n batchType: 1, // 批量设置类型\r\n batchFormData: {\r\n cate_id: [],\r\n logistics: [],\r\n freight: 2,\r\n postage: 0,\r\n temp_id: null,\r\n give_integral: 0,\r\n label_id: [],\r\n coupon_ids: [],\r\n recommend: [],\r\n },\r\n ruleBatch: {},\r\n couponName: [], // 优惠券\r\n dataLabel: [], // 标签\r\n templateList: [], // 运费模版\r\n grid: {\r\n xl: 6,\r\n lg: 8,\r\n md: 12,\r\n sm: 24,\r\n xs: 24,\r\n },\r\n artFrom: {\r\n page: 1,\r\n limit: 15,\r\n cate_id: '',\r\n type: '1',\r\n store_name: '',\r\n spec_type: '',\r\n logistics: '',\r\n vip_product: '',\r\n is_gift: '',\r\n sales_s: ['', ''],\r\n stock_s: ['', ''],\r\n price_s: ['', ''],\r\n store_label_id: [],\r\n time: '',\r\n virtual_type: '',\r\n },\r\n list: [],\r\n tableList: [],\r\n headeNum: [],\r\n loading: false,\r\n data: [],\r\n total: 0,\r\n attrTemplate: false,\r\n ids: [],\r\n goodsId: '',\r\n isProductBox: false,\r\n treeSelect: [],\r\n multipleSelection: [],\r\n showBrokerage: false,\r\n showVipPrice: false,\r\n storeLabelShow: false,\r\n tagShow: false,\r\n productId: 0,\r\n storeLabelList: [],\r\n goodsLabelList: [],\r\n timeVal: [],\r\n collapse: false,\r\n };\r\n },\r\n watch: {\r\n $route() {\r\n if (this.$route.fullPath === this.$routeProStr + '/product/product_list?type=5') {\r\n this.getPath();\r\n }\r\n },\r\n },\r\n created() {},\r\n activated() {\r\n this.goodHeade();\r\n this.goodsCategory();\r\n this.getLabelList();\r\n if (this.$route.fullPath === this.$routeProStr + '/product/product_list?type=5') {\r\n this.getPath();\r\n } else {\r\n this.getDataList();\r\n }\r\n },\r\n methods: {\r\n // 具体日期\r\n onchangeTime(e) {\r\n this.timeVal = e;\r\n this.artFrom.time = this.timeVal ? this.timeVal.join('-') : '';\r\n this.artFrom.page = 1;\r\n this.getDataList();\r\n },\r\n // 标签弹窗关闭\r\n storeLabelClose() {\r\n this.storeLabelShow = false;\r\n },\r\n getLabelList() {\r\n productLabelUseListApi()\r\n .then((res) => {\r\n res.data.map((el) => {\r\n if (el.list && el.list.length) {\r\n el.list.map((label) => {\r\n label.active = false;\r\n });\r\n }\r\n });\r\n this.goodsLabelList = res.data;\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n openStoreLabel(row) {\r\n this.storeLabelShow = true;\r\n this.$nextTick((e) => {\r\n this.$refs.storeLabel.storeLabel(JSON.parse(JSON.stringify(this.storeLabelList)));\r\n });\r\n },\r\n closeStoreLabel(label) {\r\n let index = this.storeLabelList.indexOf(this.storeLabelList.filter((d) => d.id == label.id)[0]);\r\n this.storeLabelList.splice(index, 1);\r\n this.getLabelId(this.storeLabelList);\r\n },\r\n activeStoreData(storeDataLabel) {\r\n this.storeLabelShow = false;\r\n this.storeLabelList = storeDataLabel;\r\n this.getLabelId(storeDataLabel);\r\n },\r\n getLabelId(storeDataLabel) {\r\n let storeActiveIds = [];\r\n storeDataLabel.forEach((item) => {\r\n storeActiveIds.push(item.id);\r\n });\r\n this.artFrom.store_label_id = storeActiveIds;\r\n this.artFrom.page = 1;\r\n this.getDataList();\r\n },\r\n activityDetail(row, type) {\r\n let name = '';\r\n if (type === 0) {\r\n name = 'marketing_storeBargain';\r\n } else if (type === 1) {\r\n name = 'marketing_combinalist';\r\n } else if (type === 2) {\r\n name = 'marketing_storeSeckill';\r\n }\r\n this.$router.push({\r\n name,\r\n params: {\r\n product_id: row.id,\r\n },\r\n });\r\n },\r\n openModal(row, type) {\r\n this.productId = row.id;\r\n this.$refs[type].visible = true;\r\n },\r\n batchSub() {\r\n let data = this.batchFormData;\r\n data.ids = this.ids;\r\n data.type = this.batchType;\r\n let activeIds = [];\r\n this.dataLabel.forEach((item) => {\r\n activeIds.push(item.id);\r\n });\r\n data.label_id = activeIds;\r\n if (this.batchType == 2 && !this.batchFormData.logistics.length) {\r\n return this.$message.warning('请选择物流方式');\r\n }\r\n batchSetting(data)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getDataList();\r\n this.clearBatchData(false);\r\n this.ids = [];\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n clearBatchData(status) {\r\n if (!status) {\r\n this.batchFormData = {\r\n cate_id: [],\r\n logistics: [],\r\n freight: 0,\r\n postage: null,\r\n temp_id: null,\r\n give_integral: null,\r\n label_id: [],\r\n coupon_ids: [],\r\n recommend: [],\r\n is_gift: null,\r\n label_list: [],\r\n };\r\n this.dataLabel = [];\r\n }\r\n this.batchModal = false;\r\n this.$refs.table.clearSelection();\r\n },\r\n // 批量设置商品\r\n batchSelect(type) {\r\n if (!this.ids.length) {\r\n this.$message.warning('请选择要修改的商品');\r\n } else if (type === 7) {\r\n this.onDismount();\r\n } else if (type === 8) {\r\n this.onShelves();\r\n } else if (type === 9) {\r\n this.batchType = type;\r\n this.tagShow = true;\r\n } else if (type === 11) {\r\n this.batchGoodsSetting('全部移到回收站', 1);\r\n } else if (type === 12) {\r\n this.batchGoodsSetting('恢复选中商品', 2);\r\n } else {\r\n this.batchType = type;\r\n this.batchModal = true;\r\n this.productGetTemplate();\r\n }\r\n },\r\n batchGoodsSetting(tit, type) {\r\n let url = type == 1 ? 'product/product/batch_delete' : 'product/product/batch_recover';\r\n let delfromData = {\r\n title: tit,\r\n url,\r\n method: 'post',\r\n ids: {\r\n ids: this.ids,\r\n },\r\n un: 1,\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.goodHeade();\r\n this.getDataList();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n goodsMove(type) {\r\n if (type === 1) {\r\n this.onImport();\r\n } else {\r\n this.onExports(2);\r\n }\r\n },\r\n activeData(dataLabel) {\r\n this.labelShow = false;\r\n this.dataLabel = dataLabel;\r\n },\r\n nameId(id, names) {\r\n this.batchFormData.coupon_ids = id;\r\n this.couponName = this.unique(names);\r\n },\r\n handleClose(name) {\r\n let index = this.couponName.indexOf(name);\r\n this.couponName.splice(index, 1);\r\n this.formValidate.coupon_ids.splice(index, 1);\r\n },\r\n //对象数组去重;\r\n unique(arr) {\r\n const res = new Map();\r\n return arr.filter((arr) => !res.has(arr.id) && res.set(arr.id, 1));\r\n },\r\n // 获取运费模板;\r\n productGetTemplate() {\r\n productGetTemplateApi().then((res) => {\r\n this.templateList = res.data;\r\n });\r\n },\r\n // 标签弹窗关闭\r\n labelClose() {\r\n this.labelShow = false;\r\n this.tagShow = false;\r\n },\r\n // 选择商品标签\r\n activeGoodsLabel(data) {\r\n console.log(data, 'data');\r\n this.tagShow = false;\r\n this.batchFormData.label_list = Array.from(new Set(data));\r\n this.batchSub();\r\n },\r\n look(row) {\r\n this.goodsId = row.id;\r\n this.isProductBox = true;\r\n },\r\n // 物流方式\r\n logisticsBtn(e) {\r\n this.batchFormData.logistics = e;\r\n },\r\n // 关联用户标签\r\n openLabel() {\r\n this.labelShow = true;\r\n // this.$refs.userLabel.setLabel(JSON.parse(JSON.stringify(this.dataLabel)));\r\n },\r\n closeLabel(label) {\r\n let index = this.dataLabel.indexOf(this.dataLabel.filter((d) => d.id == label.id)[0]);\r\n this.dataLabel.splice(index, 1);\r\n },\r\n // 添加优惠券\r\n addCoupon() {\r\n this.$refs.couponTemplates.isTemplate = true;\r\n this.$refs.couponTemplates.tableList();\r\n },\r\n getPath() {\r\n this.artFrom.page = 1;\r\n this.artFrom.type = this.$route.query.type.toString();\r\n this.getDataList();\r\n },\r\n onImport() {\r\n this.importShow = true;\r\n },\r\n // 导出\r\n async onExports(type) {\r\n let [th, filekey, data, fileName] = [[], [], [], ''];\r\n let excelData = JSON.parse(JSON.stringify(this.artFrom));\r\n excelData.page = 1;\r\n excelData.limit = 50;\r\n excelData.ids = this.ids;\r\n for (let i = 0; i < excelData.page + 1; i++) {\r\n let lebData = await this.getExcelData(excelData, type);\r\n if (!fileName) fileName = lebData.filename;\r\n if (!filekey.length) {\r\n filekey = lebData.fileKey;\r\n }\r\n if (!th.length) th = lebData.header;\r\n if (lebData.export.length) {\r\n data = data.concat(lebData.export);\r\n excelData.page++;\r\n } else {\r\n this.$exportExcel(th, filekey, fileName, data);\r\n return;\r\n }\r\n }\r\n },\r\n getExcelData(excelData, type) {\r\n let fun = type ? exportProductExport : exportProductList;\r\n return new Promise((resolve, reject) => {\r\n fun(excelData).then((res) => {\r\n resolve(res.data);\r\n });\r\n });\r\n },\r\n freight() {\r\n this.$refs.template.isTemplate = true;\r\n },\r\n // 批量上架\r\n onShelves() {\r\n if (this.ids.length === 0) {\r\n this.$message.warning('请选择要上架的商品');\r\n } else {\r\n let data = {\r\n ids: this.ids,\r\n };\r\n productShowApi(data)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.goodHeade();\r\n this.getDataList();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n }\r\n },\r\n // 批量下架\r\n onDismount() {\r\n if (this.ids.length === 0) {\r\n this.$message.warning('请选择要下架的商品');\r\n } else {\r\n let data = {\r\n ids: this.ids,\r\n };\r\n productUnshowApi(data)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.artFrom.page = 1;\r\n this.goodHeade();\r\n this.getDataList();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n }\r\n },\r\n\r\n // 全选\r\n // onSelectTab (selection) {\r\n // let data = []\r\n // selection.map((item) => {\r\n // data.push(item.id)\r\n // })\r\n // this.ids = data\r\n // },\r\n getRowKey(row) {\r\n return row.id;\r\n },\r\n // 选中某一行\r\n handleSelectRow(selection) {\r\n const uniqueArr = [];\r\n const ids = [];\r\n for (let i = 0; i < selection.length; i++) {\r\n const item = selection[i];\r\n if (!ids.includes(item.id)) {\r\n uniqueArr.push(item);\r\n ids.push(item.id);\r\n }\r\n }\r\n this.ids = ids;\r\n this.multipleSelection = uniqueArr;\r\n },\r\n // 添加淘宝商品成功\r\n onClose() {\r\n this.modals = false;\r\n },\r\n // 复制淘宝\r\n onCopy() {\r\n this.$router.push({\r\n path: this.$routeProStr + '/product/add_product',\r\n query: { type: -1 },\r\n });\r\n // this.modals = true\r\n },\r\n // tab选择\r\n onClickTab() {\r\n this.artFrom.page = 1;\r\n this.multipleSelection = [];\r\n this.$refs.table.clearSelection();\r\n this.getDataList();\r\n },\r\n // 下拉树\r\n handleCheckChange(data) {\r\n let value = '';\r\n let title = '';\r\n this.list = [];\r\n this.artFrom.cate_id = 0;\r\n data.forEach((item, index) => {\r\n value += `${item.id},`;\r\n title += `${item.title},`;\r\n });\r\n value = value.substring(0, value.length - 1);\r\n title = title.substring(0, title.length - 1);\r\n this.list.push({\r\n value,\r\n title,\r\n });\r\n this.artFrom.cate_id = value;\r\n this.getDataList();\r\n },\r\n // 获取商品表单头数量\r\n goodHeade() {\r\n getGoodHeade(this.artFrom)\r\n .then((res) => {\r\n this.headeNum = res.data.list;\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 商品分类;\r\n goodsCategory() {\r\n cascaderListApi(1)\r\n .then((res) => {\r\n this.treeSelect = res.data;\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 商品列表;\r\n getDataList() {\r\n this.loading = true;\r\n this.artFrom.cate_id = this.artFrom.cate_id || '';\r\n getGoods(this.artFrom)\r\n .then((res) => {\r\n let data = res.data;\r\n this.tableList = data.list;\r\n this.total = res.data.count;\r\n this.$nextTick(() => {\r\n //确保dom加载完毕\r\n // this.setChecked();\r\n this.showSelectData();\r\n });\r\n this.loading = false;\r\n })\r\n .catch((res) => {\r\n this.loading = false;\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n showSelectData() {\r\n if (this.multipleSelection.length > 0) {\r\n // 判断是否存在勾选过的数据\r\n this.tableList.forEach((row) => {\r\n // 获取数据列表接口请求到的数据\r\n this.multipleSelection.forEach((item) => {\r\n // 勾选到的数据\r\n if (row.id === item.id) {\r\n this.$refs.table.toggleRowSelection(item, true); // 若有重合,则回显该条数据\r\n }\r\n });\r\n });\r\n }\r\n },\r\n // 表格搜索\r\n userSearchs() {\r\n this.artFrom.page = 1;\r\n this.goodHeade();\r\n this.getDataList();\r\n },\r\n // 上下架\r\n changeSwitch(row) {\r\n PostgoodsIsShow(row.id, row.is_show)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.goodHeade();\r\n this.getDataList();\r\n })\r\n .catch((res) => {\r\n row.is_show = !row.is_show ? 1 : 0;\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 数据导出;\r\n exportData: function () {\r\n let th = ['商品名称', '商品简介', '商品分类', '价格', '库存', '销量', '收藏人数'];\r\n let filterVal = ['store_name', 'store_info', 'cate_name', 'price', 'stock', 'sales', 'collect'];\r\n this.where.page = 'nopage';\r\n getGoods(this.where).then((res) => {\r\n let data = res.data.map((v) => filterVal.map((k) => v[k]));\r\n let fileTime = Date.parse(new Date());\r\n let [fileName, fileType, sheetName] = ['商户数据_' + fileTime, 'xlsx', '商户数据'];\r\n toExcel({ th, data, fileName, fileType, sheetName });\r\n });\r\n },\r\n // 属性弹出;\r\n attrTap() {\r\n this.attrTemplate = true;\r\n },\r\n changeTemplate(msg) {\r\n this.attrTemplate = msg;\r\n },\r\n // 编辑\r\n edit(row) {\r\n this.$router.push({ path: this.$routeProStr + '/product/add_product/' + row.id });\r\n },\r\n // 确认\r\n del(row, tit, num) {\r\n let delfromData = {\r\n title: tit,\r\n num: num,\r\n url: `product/product/${row.id}`,\r\n method: 'DELETE',\r\n ids: '',\r\n un: 1,\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.tableList.splice(num, 1);\r\n this.goodHeade();\r\n this.getDataList();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n fullDel(row, tit, num) {\r\n let delfromData = {\r\n title: tit,\r\n num: num,\r\n url: `product/full_del/${row.id}`,\r\n method: 'DELETE',\r\n };\r\n this.$modalSure(delfromData)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.tableList.splice(num, 1);\r\n this.goodHeade();\r\n this.getDataList();\r\n })\r\n .catch((res) => {\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n // 重置\r\n reset(name) {\r\n this.artFrom = {\r\n page: 1,\r\n limit: 15,\r\n cate_id: '',\r\n type: '1',\r\n store_name: '',\r\n spec_type: '',\r\n logistics: '',\r\n vip_product: '',\r\n is_gift: '',\r\n sales_s: ['', ''],\r\n stock_s: ['', ''],\r\n price_s: ['', ''],\r\n store_label_id: [],\r\n time: '',\r\n virtual_type: '',\r\n };\r\n this.storeLabelList = [];\r\n this.tableList = [];\r\n this.total = 0;\r\n this.timeVal = [];\r\n this.getDataList();\r\n },\r\n },\r\n};\r\n</script>\r\n<style scoped lang=\"scss\">\r\n::v-deep .el-tabs__item {\r\n height: 54px !important;\r\n line-height: 54px !important;\r\n}\r\n::v-deep .ivu-modal-mask {\r\n z-index: 999 !important;\r\n}\r\n\r\n::v-deep .ivu-modal-wrap {\r\n z-index: 999 !important;\r\n}\r\n\r\n.Box {\r\n ::v-deep .ivu-modal-body {\r\n height: 700px;\r\n overflow: auto;\r\n }\r\n}\r\n\r\n.batch-box {\r\n ::v-deep .ivu-modal-body {\r\n overflow: auto;\r\n min-height: 350px;\r\n }\r\n}\r\n\r\n.tabBox_img {\r\n width: 36px;\r\n height: 36px;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n}\r\n\r\n.bg {\r\n position: fixed;\r\n left: 0;\r\n top: 0;\r\n width: 100%;\r\n height: 100%;\r\n background: rgba(0, 0, 0, 0.5);\r\n z-index: 11;\r\n}\r\n\r\n::v-deep .happy-scroll-content {\r\n width: 100%;\r\n\r\n .demo-spin-icon-load {\r\n animation: ani-demo-spin 1s linear infinite;\r\n }\r\n\r\n @keyframes ani-demo-spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n 50% {\r\n transform: rotate(180deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n }\r\n\r\n .demo-spin-col {\r\n height: 100px;\r\n position: relative;\r\n border: 1px solid #eee;\r\n }\r\n}\r\n\r\n.labelInput {\r\n border: 1px solid #dcdee2;\r\n padding: 0 15px 0 10px;\r\n border-radius: 5px;\r\n min-height: 30px;\r\n cursor: pointer;\r\n font-size: 12px;\r\n\r\n .span {\r\n color: #c5c8ce;\r\n }\r\n\r\n .iconxiayi {\r\n margin-left: 5px;\r\n font-size: 12px;\r\n }\r\n}\r\n.el-dropdown-link {\r\n cursor: pointer;\r\n color: var(--prev-color-primary);\r\n font-size: 12px;\r\n}\r\n.el-icon-arrow-down {\r\n font-size: 12px;\r\n}\r\n.el-dropdown-menu__item {\r\n a {\r\n color: #606266;\r\n }\r\n}\r\n.label_width {\r\n width: 400px;\r\n}\r\n.search-form {\r\n display: flex;\r\n justify-content: space-between;\r\n .search-form-box {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex: 1;\r\n }\r\n .search-form-sub {\r\n display: flex;\r\n align-items: baseline;\r\n }\r\n}\r\n</style>\r\n"]}]}
|