| 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\\setting\\devise\\diyIndex.vue?vue&type=script&crossorigin=anonymous&lang=js","dependencies":[{"path":"C:\\Users\\Administrator\\Desktop\\crmeb5.0\\template\\admin\\src\\pages\\setting\\devise\\diyIndex.vue","mtime":1761185180172},{"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:DQppbXBvcnQgeyBjYXRlZ29yeUxpc3QsIGRpeVByb0luZm8sIGRpeVByb1NhdmUsIHNldERlZmF1bHQsIHJlY292ZXJ5LCBkaXlVcGRhdGVOYW1lLCBnZXRSb3V0aW5lQ29kZSB9IGZyb20gJ0AvYXBpL2RpeSc7DQppbXBvcnQgdnVlZHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSc7DQppbXBvcnQgbVBhZ2UgZnJvbSAnQC9jb21wb25lbnRzL21vYmlsZVBhZ2UvaW5kZXguanMnOw0KaW1wb3J0IG1Db25maWcgZnJvbSAnQC9jb21wb25lbnRzL21vYmlsZUNvbmZpZy9pbmRleC5qcyc7DQppbXBvcnQgZm9vdFBhZ2UgZnJvbSAnQC9jb21wb25lbnRzL3BhZ2VzRm9vdCc7DQppbXBvcnQgeyBtYXBTdGF0ZSB9IGZyb20gJ3Z1ZXgnOw0KaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJzsNCmltcG9ydCB0aGVtZSBmcm9tICdAL21peGlucy90aGVtZSc7DQppbXBvcnQgU2V0dGluZyBmcm9tICdAL3NldHRpbmcnOw0KaW1wb3J0IFFSQ29kZSBmcm9tICdxcmNvZGVqczInOw0KDQpleHBvcnQgZGVmYXVsdCB7DQogIGluamVjdDogWydyZWxvYWQnXSwNCiAgbmFtZTogJ2luZGV4LnZ1ZScsDQogIGNvbXBvbmVudHM6IHsNCiAgICBmb290UGFnZSwNCiAgICBodG1sMmNhbnZhcywNCiAgICBkcmFnZ2FibGU6IHZ1ZWRyYWdnYWJsZSwNCiAgICAuLi5tUGFnZSwNCiAgICAuLi5tQ29uZmlnLA0KICB9LA0KICBmaWx0ZXJzOiB7DQogICAgZmlsdGVyVHh0KHZhbCkgew0KICAgICAgaWYgKHZhbCkgew0KICAgICAgICByZXR1cm4gKHZhbCA9IHZhbC5zdWJzdHIoMCwgdmFsLmxlbmd0aCAtIDEpKTsNCiAgICAgIH0NCiAgICB9LA0KICB9LA0KICBjb21wdXRlZDogew0KICAgIC4uLm1hcFN0YXRlKHsNCiAgICAgIHRpdGxlVHh0OiAoc3RhdGUpID0+IHN0YXRlLm1vYmlsZENvbmZpZy5wYWdlVGl0bGUgfHwgJ+mmlumhtScsDQogICAgICBzaG93VHh0OiAoc3RhdGUpID0+IHN0YXRlLm1vYmlsZENvbmZpZy5wYWdlU2hvdywNCiAgICAgIGNvbG9yVHh0OiAoc3RhdGUpID0+IHN0YXRlLm1vYmlsZENvbmZpZy5wYWdlQ29sb3IsDQogICAgICBwaWNUeHQ6IChzdGF0ZSkgPT4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VQaWMsDQogICAgICBjb2xvclBpY2tlclR4dDogKHN0YXRlKSA9PiBzdGF0ZS5tb2JpbGRDb25maWcucGFnZUNvbG9yUGlja2VyLA0KICAgICAgdGFiVmFsVHh0OiAoc3RhdGUpID0+IHN0YXRlLm1vYmlsZENvbmZpZy5wYWdlVGFiVmFsLA0KICAgICAgcGljVXJsVHh0OiAoc3RhdGUpID0+IHN0YXRlLm1vYmlsZENvbmZpZy5wYWdlUGljVXJsLA0KICAgICAgcGFnZUZvb3RlclR5cGU6IChzdGF0ZSkgPT4gc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VGb290ZXIubmF2Q29uZmlnLnRhYlZhbCB8fCAwLA0KICAgICAgcGFnZUZvb3RlckJvdHRvbTogKHN0YXRlKSA9PiBzdGF0ZS5tb2JpbGRDb25maWcucGFnZUZvb3Rlci5tYkNvbmZpZy52YWwsDQogICAgICBkZWZhdWx0QXJyYXlzOiAoc3RhdGUpID0+IHN0YXRlLm1vYmlsZENvbmZpZy5kZWZhdWx0QXJyYXksDQogICAgfSksDQogICAgbmFtZVR4dDogew0KICAgICAgZ2V0KCkgew0KICAgICAgICByZXR1cm4gdGhpcy4kc3RvcmUuc3RhdGUubW9iaWxkQ29uZmlnLnBhZ2VOYW1lOw0KICAgICAgfSwNCiAgICAgIHNldCh2YWx1ZSkgew0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9VUE5BTUUnLCB2YWx1ZSk7DQogICAgICB9LA0KICAgIH0sDQogIH0sDQogIG1peGluczogW3RoZW1lXSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgQmFzZVVSTDogU2V0dGluZy5hcGlCYXNlVVJMLnJlcGxhY2UoL2FkbWluYXBpLywgJycpLA0KICAgICAgcXJjb2RlSW1nOiAnJywNCiAgICAgIG1vZGFsOiBmYWxzZSwNCiAgICAgIGNsaWVudEhlaWdodDogJycsIC8v6aG16Z2i5Yqo5oCB6auY5bqmDQogICAgICByb2xsSGVpZ2h0OiAnJywNCiAgICAgIGxlZnRNZW51OiBbXSwgLy8g5bem5L6n6I+c5Y2VDQogICAgICBsQ29uZmlnOiBbXSwgLy8g5bem5L6n57uE5Lu2DQogICAgICBtQ29uZmlnOiBbXSwgLy8g5Lit6Ze057uE5Lu25riy5p+TDQogICAgICByQ29uZmlnOiBbXSwgLy8g5Y+z5L6n57uE5Lu26YWN572uDQogICAgICBhY3RpdmVDb25maWdOYW1lOiAnJywNCiAgICAgIHByb3BzT2JqOiB7fSwgLy8g57uE5Lu25Lyg6YCS55qE5pWw5o2uLA0KICAgICAgYWN0aXZlSW5kZXg6IC0xMDAsIC8vIOmAieS4reeahOS4i+aghw0KICAgICAgbnVtYmVyOiAwLA0KICAgICAgcGFnZUlkOiAnJywNCiAgICAgIHBhZ2VOYW1lOiAnJywNCiAgICAgIHBhZ2VUeXBlOiAnJywNCiAgICAgIGNhdGVnb3J5OiBbXSwNCiAgICAgIHRhYkxpc3Q6IFsNCiAgICAgICAgew0KICAgICAgICAgIHRpdGxlOiAn57uE5Lu25bqTJywNCiAgICAgICAgICBrZXk6IDAsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB0aXRsZTogJ+mhtemdoumTvuaOpScsDQogICAgICAgICAga2V5OiAxLA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIGZvb3RBY3RpdmU6IGZhbHNlLA0KICAgICAgbG9hZGluZzogZmFsc2UsDQogICAgICByZWxMb2FkaW5nOiBmYWxzZSwNCiAgICAgIGlzU2VhcmNoOiBmYWxzZSwNCiAgICAgIGlzVGFiOiBmYWxzZSwNCiAgICAgIGlzRmxsb3c6IGZhbHNlLA0KICAgICAgaXNDb21iOiBmYWxzZSwNCiAgICAgIGlzU2VydmljZTogZmFsc2UsDQogICAgICB2aXNpYmxlOiB0cnVlLA0KICAgICAgZGl5U3RhdHVzOiAwLA0KICAgICAgbmFtZU1vZGFsOiBmYWxzZSwNCiAgICAgIHNhdmVOYW1lOiAnJywNCiAgICB9Ow0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMuY2F0ZWdvcnlMaXN0KCk7DQogICAgdGhpcy5wYWdlSWQgPSB0aGlzLiRyb3V0ZS5xdWVyeS5pZDsNCiAgICB0aGlzLnBhZ2VOYW1lID0gdGhpcy4kcm91dGUucXVlcnkubmFtZTsNCiAgICB0aGlzLnBhZ2VUeXBlID0gdGhpcy4kcm91dGUucXVlcnkudHlwZTsNCiAgICB0aGlzLmxDb25maWcgPSB0aGlzLm9ialRvQXJyKG1QYWdlKTsNCiAgICBsZXQgaW1nTGlzdCA9IHsNCiAgICAgIGltZ0xpc3Q6IFtyZXF1aXJlKCdAL2Fzc2V0cy9pbWFnZXMvZm9vdC0wMDUucG5nJyksIHJlcXVpcmUoJ0AvYXNzZXRzL2ltYWdlcy9mb290LTAwNi5wbmcnKV0sDQogICAgICBuYW1lOiAn6LSt54mp6L2mJywNCiAgICAgIGxpbms6ICcvcGFnZXMvb3JkZXJfYWRkY2FydC9vcmRlcl9hZGRjYXJ0JywNCiAgICB9Ow0KICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL0ZPT1RFUicsIHsgdGl0bGU6ICfmmK/lkKboh6rlrprkuYknLCBuYW1lOiBpbWdMaXN0IH0pOw0KICAgICAgdGhpcy5hcnJheVNvcnQoKTsNCiAgICAgIGlmICh0aGlzLnBhZ2VJZCAhPSAwKSB7DQogICAgICAgIHRoaXMuZ2V0RGVmYXVsdENvbmZpZygpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5zaG93VGl0bGUoKTsNCiAgICAgIH0NCiAgICAgIHRoaXMuY2xpZW50SGVpZ2h0ID0gYCR7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodH1gIC0gNjUuODE7IC8v6I635Y+W5rWP6KeI5Zmo5Y+v6KeG5Yy65Z+f6auY5bqmDQogICAgICBsZXQgSCA9IGAke2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9YCAtIDE4MDsNCiAgICAgIHRoaXMucm9sbEhlaWdodCA9IEggPiA2NTAgPyA2NTAgOiBIOw0KICAgICAgbGV0IHRoYXQgPSB0aGlzOw0KICAgICAgd2luZG93Lm9ucmVzaXplID0gZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGF0LmNsaWVudEhlaWdodCA9IGAke2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9YCAtIDY1LjgxOw0KICAgICAgICBsZXQgSCA9IGAke2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHR9YCAtIDE4MDsNCiAgICAgICAgdGhhdC5yb2xsSGVpZ2h0ID0gSCA+IDY1MCA/IDY1MCA6IEg7DQogICAgICB9Ow0KICAgIH0pOw0KICB9LA0KICBtZXRob2RzOiB7DQogICAgZXhwb3J0VmlldygpIHsNCiAgICAgIGxldCB0aGF0ID0gdGhpczsNCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7DQogICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7DQogICAgICAgIGNvbnNvbGUubG9nKHRoaXMubUNvbmZpZyk7DQogICAgICB9KTsNCiAgICB9LA0KICAgIGltcG9ydFZpZXcoKSB7fSwNCiAgICBwcmV2aWV3KCkgew0KICAgICAgdGhpcy5tb2RhbCA9IHRydWU7DQogICAgICB0aGlzLmNyZWF0UXJDb2RlKHRoaXMucGFnZUlkLCB0aGlzLmRpeVN0YXR1cyk7DQogICAgICB0aGlzLnJvdXRpbmVDb2RlKHRoaXMucGFnZUlkKTsNCiAgICB9LA0KICAgIC8v5bCP56iL5bqP5LqM57u056CBDQogICAgcm91dGluZUNvZGUoaWQpIHsNCiAgICAgIGdldFJvdXRpbmVDb2RlKGlkKQ0KICAgICAgICAudGhlbigocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy5xcmNvZGVJbWcgPSByZXMuZGF0YS5pbWFnZTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVycik7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy/nlJ/miJDkuoznu7TnoIENCiAgICBjcmVhdFFyQ29kZShpZCwgc3RhdHVzKSB7DQogICAgICB0aGlzLiRyZWZzLnFyQ29kZVVybC5pbm5lckhUTUwgPSAnJzsNCiAgICAgIGxldCB1cmwgPSAnJzsNCiAgICAgIGlmIChzdGF0dXMpIHsNCiAgICAgICAgdXJsID0gYCR7dGhpcy5CYXNlVVJMfXBhZ2VzL2luZGV4L2luZGV4YDsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHVybCA9IGAke3RoaXMuQmFzZVVSTH1wYWdlcy9hbm5leC9zcGVjaWFsL2luZGV4P2lkPSR7aWR9YDsNCiAgICAgIH0NCiAgICAgIHZhciBxcmNvZGUgPSBuZXcgUVJDb2RlKHRoaXMuJHJlZnMucXJDb2RlVXJsLCB7DQogICAgICAgIHRleHQ6IHVybCwgLy8g6ZyA6KaB6L2s5o2i5Li65LqM57u056CB55qE5YaF5a65DQogICAgICAgIHdpZHRoOiAxNjAsDQogICAgICAgIGhlaWdodDogMTYwLA0KICAgICAgICBjb2xvckRhcms6ICcjMDAwMDAwJywNCiAgICAgICAgY29sb3JMaWdodDogJyNmZmZmZmYnLA0KICAgICAgICBjb3JyZWN0TGV2ZWw6IFFSQ29kZS5Db3JyZWN0TGV2ZWwuSCwNCiAgICAgIH0pOw0KICAgIH0sDQogICAgY2hhbmdOYW1lKHZhbCkgew0KICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvVVBOQU1FJywgdmFsKTsNCiAgICB9LA0KICAgIGNhbmNlbCgpIHsNCiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOw0KICAgIH0sDQogICAgZGV0ZXJtaW5lKCkgew0KICAgICAgaWYgKHRoaXMubmFtZVR4dC50cmltKCkgPT0gJycpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+i+k+WFpeaooeadv+WQjeensCcpOw0KICAgICAgfQ0KICAgICAgaWYgKHRoaXMucGFnZUlkID09IDApIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfkv67mlLnmiJDlip8nKTsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgfQ0KICAgICAgZGl5VXBkYXRlTmFtZSh0aGlzLnBhZ2VJZCwgeyBuYW1lOiB0aGlzLm5hbWVUeHQgfSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVyci5tc2cpOw0KICAgICAgICB9KTsNCiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOw0KICAgIH0sDQogICAgcmV0dXJuVGFwKCkgew0KICAgICAgdGhpcy4kbXNnYm94KHsNCiAgICAgICAgdGl0bGU6ICfmuKnppqjmj5DnpLonLA0KICAgICAgICBtZXNzYWdlOiAn56Gu5a6a56a75byA5q2k6aG16Z2i77yf57O757uf5Y+v6IO95LiN5Lya5L+d5a2Y5oKo5omA5YGa55qE5pu05pS544CCJywNCiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSwNCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsDQogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywNCiAgICAgICAgaWNvbkNsYXNzOiAnZWwtaWNvbi13YXJuaW5nJywNCiAgICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnYnRuLWN1c3RvbS1jYW5jZWwnLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuJHJvdXRlUHJvU3RyICsgJy9zZXR0aW5nL3BhZ2VzL2RldmlzZS8wJyk7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgoKSA9PiB7fSk7DQogICAgfSwNCiAgICBsZWZ0UmVtb3ZlKHsgdG8sIGZyb20sIGl0ZW0sIGNsb25lLCBvbGRJbmRleCwgbmV3SW5kZXggfSkgew0KICAgICAgaWYgKHRoaXMuaXNTZWFyY2ggJiYgbmV3SW5kZXggPT0gMCkgew0KICAgICAgICBpZiAoaXRlbS5fdW5kZXJseWluZ192bV8ubmFtZSA9PSAnel93ZWNoYXRfYXR0ZW50aW9uJykgew0KICAgICAgICAgIHRoaXMuaXNGbGxvdyA9IHRydWU7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvQVJSQVlSRUFTVCcsIHRoaXMubUNvbmZpZ1swXS5udW0pOw0KICAgICAgICAgIHRoaXMubUNvbmZpZy5zcGxpY2UoMCwgMSk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGlmICgodGhpcy5pc0ZsbG93ID0gdHJ1ZSAmJiBuZXdJbmRleCA+PSAxKSkgew0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9BUlJBWVJFQVNUJywgdGhpcy5tQ29uZmlnWzBdLm51bSk7DQogICAgICB9DQogICAgfSwNCiAgICBvbk1vdmUoZSkgew0KICAgICAgaWYgKGUucmVsYXRlZENvbnRleHQuZWxlbWVudC5uYW1lID09ICdzZWFyY2hfYm94JykgcmV0dXJuIGZhbHNlOw0KICAgICAgaWYgKGUucmVsYXRlZENvbnRleHQuZWxlbWVudC5uYW1lID09ICduYXZfYmFyJykgcmV0dXJuIGZhbHNlOw0KICAgICAgaWYgKGUucmVsYXRlZENvbnRleHQuZWxlbWVudC5uYW1lID09ICdob21lX2NvbWInKSByZXR1cm4gZmFsc2U7DQogICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9LA0KICAgIG9uQ29weSgpIHsNCiAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5aSN5Yi25oiQ5YqfJyk7DQogICAgfSwNCiAgICBvbkVycm9yKCkgew0KICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign5aSN5Yi25aSx6LSlJyk7DQogICAgfSwNCiAgICAvL+iuvue9rum7mOiupOaVsOaNrg0KICAgIHNldG1vcmVuKCkgew0KICAgICAgc2V0RGVmYXVsdCh0aGlzLnBhZ2VJZCkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKGVyci5tc2cpOw0KICAgICAgICB9KTsNCiAgICB9LA0KICAgIC8v5oGi5aSN6buY6K6kDQogICAgZ2V0bW9yZW4oKSB7DQogICAgICByZWNvdmVyeSh0aGlzLnBhZ2VJZCkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB0aGlzLnJlbG9hZCgpOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKGVycikgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g6aG16Z2i5qCH6aKY54K55Ye7DQogICAgc2hvd1RpdGxlKCkgew0KICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IC0xMDA7DQogICAgICBsZXQgb2JqID0ge307DQogICAgICBmb3IgKHZhciBpIGluIG1Db25maWcpIHsNCiAgICAgICAgaWYgKGkgPT0gJ3BhZ2VUaXRsZScpIHsNCiAgICAgICAgICAvLyB0aGlzLnJDb25maWcgPSBvYmoNCiAgICAgICAgICBvYmogPSBtQ29uZmlnW2ldOw0KICAgICAgICAgIG9iai5jb25maWdOYW1lID0gbUNvbmZpZ1tpXS5uYW1lOw0KICAgICAgICAgIG9iai5jbmFtZSA9ICfpobXpnaLorr7nva4nOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBsZXQgYWJjID0gb2JqOw0KICAgICAgdGhpcy5yQ29uZmlnID0gW107DQogICAgICB0aGlzLnJDb25maWdbMF0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpOw0KICAgIH0sDQogICAgLy8g6aG16Z2i5bqV6YOo54K55Ye7DQogICAgc2hvd0Zvb3QoKSB7DQogICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gLTEwMTsNCiAgICAgIGxldCBvYmogPSB7fTsNCiAgICAgIGZvciAodmFyIGkgaW4gbUNvbmZpZykgew0KICAgICAgICBpZiAoaSA9PSAncGFnZUZvb3QnKSB7DQogICAgICAgICAgLy8gdGhpcy5yQ29uZmlnID0gb2JqDQogICAgICAgICAgb2JqID0gbUNvbmZpZ1tpXTsNCiAgICAgICAgICBvYmouY29uZmlnTmFtZSA9IG1Db25maWdbaV0ubmFtZTsNCiAgICAgICAgICBvYmouY25hbWUgPSAn5bqV6YOo6I+c5Y2VJzsNCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgbGV0IGFiYyA9IG9iajsNCiAgICAgIHRoaXMuckNvbmZpZyA9IFtdOw0KICAgICAgdGhpcy5yQ29uZmlnWzBdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTsNCiAgICB9LA0KICAgIC8vIOWvueixoei9rOaVsOe7hA0KICAgIG9ialRvQXJyKGRhdGEpIHsNCiAgICAgIGxldCBvYmogPSBPYmplY3Qua2V5cyhkYXRhKTsNCiAgICAgIGxldCBtID0gb2JqLm1hcCgoa2V5KSA9PiBkYXRhW2tleV0pOw0KICAgICAgcmV0dXJuIG07DQogICAgfSwNCiAgICBsb2coZXZ0KSB7DQogICAgICAvLyDkuK3pl7Tmi5bmi73mjpLluo8NCiAgICAgIGlmIChldnQubW92ZWQpIHsNCiAgICAgICAgaWYgKGV2dC5tb3ZlZC5lbGVtZW50Lm5hbWUgPT0gJ3NlYXJjaF9ib3gnKSB7DQogICAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+l57uE5Lu256aB5q2i5ouW5ou9Jyk7DQogICAgICAgIH0NCiAgICAgICAgLy8gaWYgKGV2dC5tb3ZlZC5lbGVtZW50Lm5hbWUgPT0gIm5hdl9iYXIiKSB7DQogICAgICAgIC8vICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor6Xnu4Tku7bnpoHmraLmi5bmi70iKTsNCiAgICAgICAgLy8gfQ0KICAgICAgICBldnQubW92ZWQub2xkTnVtID0gdGhpcy5tQ29uZmlnW2V2dC5tb3ZlZC5vbGRJbmRleF0ubnVtOw0KICAgICAgICBldnQubW92ZWQubmV3TnVtID0gdGhpcy5tQ29uZmlnW2V2dC5tb3ZlZC5uZXdJbmRleF0ubnVtOw0KICAgICAgICBldnQubW92ZWQuc3RhdHVzID0gZXZ0Lm1vdmVkLm9sZEluZGV4ID4gZXZ0Lm1vdmVkLm5ld0luZGV4Ow0KICAgICAgICB0aGlzLm1Db25maWcuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7DQogICAgICAgICAgZWwubnVtID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAxMDAwICsgaW5kZXg7DQogICAgICAgIH0pOw0KICAgICAgICBldnQubW92ZWQubGlzdCA9IHRoaXMubUNvbmZpZzsNCiAgICAgICAgdGhpcy5yQ29uZmlnID0gW107DQogICAgICAgIGxldCBpdGVtID0gZXZ0Lm1vdmVkLmVsZW1lbnQ7DQogICAgICAgIGxldCB0ZW1wSXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpOw0KICAgICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7DQogICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBldnQubW92ZWQubmV3SW5kZXg7DQogICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL1NFVENPTkZJR05BTUUnLCBpdGVtLm5hbWUpOw0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9kZWZhdWx0QXJyYXlTb3J0JywgZXZ0Lm1vdmVkKTsNCiAgICAgIH0NCiAgICAgIC8vIOS7juW3puWQkeWPs+aLluaLveaOkuW6jw0KICAgICAgaWYgKGV2dC5hZGRlZCkgew0KICAgICAgICBsZXQgZGF0YSA9IGV2dC5hZGRlZC5lbGVtZW50Ow0KICAgICAgICBsZXQgb2JqID0ge307DQogICAgICAgIGxldCB0aW1lc3RhbXAgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDEwMDA7DQogICAgICAgIGRhdGEubnVtID0gdGltZXN0YW1wOw0KICAgICAgICB0aGlzLmFjdGl2ZUNvbmZpZ05hbWUgPSBkYXRhLm5hbWU7DQogICAgICAgIGxldCB0ZW1wSXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOw0KICAgICAgICB0ZW1wSXRlbS5pZCA9ICdpZCcgKyB0ZW1wSXRlbS5udW07DQogICAgICAgIHRoaXMubUNvbmZpZ1tldnQuYWRkZWQubmV3SW5kZXhdID0gdGVtcEl0ZW07DQogICAgICAgIHRoaXMuckNvbmZpZyA9IFtdOw0KICAgICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7DQogICAgICAgIHRoaXMubUNvbmZpZy5mb3JFYWNoKChlbCwgaW5kZXgpID0+IHsNCiAgICAgICAgICBlbC5udW0gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAqIDEwMDAgKyBpbmRleDsNCiAgICAgICAgfSk7DQogICAgICAgIGV2dC5hZGRlZC5saXN0ID0gdGhpcy5tQ29uZmlnOw0KICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gZXZ0LmFkZGVkLm5ld0luZGV4Ow0KICAgICAgICAvLyDkv53lrZjnu4Tku7blkI3np7ANCiAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvU0VUQ09ORklHTkFNRScsIGRhdGEubmFtZSk7DQogICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL2RlZmF1bHRBcnJheVNvcnQnLCBldnQuYWRkZWQpOw0KICAgICAgfQ0KICAgIH0sDQogICAgY2xvbmVEb2coZGF0YSkgew0KICAgICAgLy8gdGhpcy5tQ29uZmlnLnB1c2godGVtcEl0ZW0pDQogICAgICByZXR1cm4gew0KICAgICAgICAuLi5kYXRhLA0KICAgICAgfTsNCiAgICB9LA0KICAgIC8v5pWw57uE5YWD57Sg5LqS5o2i5L2N572uDQogICAgc3dhcEFycmF5KGFyciwgaW5kZXgxLCBpbmRleDIpIHsNCiAgICAgIGFycltpbmRleDFdID0gYXJyLnNwbGljZShpbmRleDIsIDEsIGFycltpbmRleDFdKVswXTsNCiAgICAgIHJldHVybiBhcnI7DQogICAgfSwNCiAgICAvL+eCueWHu+S4iuS4i+enu+WKqO+8mw0KICAgIG1vdmVQYWdlKGl0ZW0sIGluZGV4LCB0eXBlKSB7DQogICAgICBpZiAodHlwZSkgew0KICAgICAgICBpZiAoaW5kZXggPT0gMCkgew0KICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgaWYgKGluZGV4ID09IHRoaXMubUNvbmZpZy5sZW5ndGggLSAxKSB7DQogICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoaXRlbS5uYW1lID09ICdzZWFyY2hfYm94JyB8fCBpdGVtLm5hbWUgPT0gJ25hdl9iYXInIHx8IGl0ZW0ubmFtZSA9PSAnaG9tZV9jb21iJykgew0KICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor6Xnu4Tku7bnpoHmraLnp7vliqgnKTsNCiAgICAgIH0NCiAgICAgIGlmICh0eXBlKSB7DQogICAgICAgIGlmICgNCiAgICAgICAgICB0aGlzLm1Db25maWdbaW5kZXggLSAxXS5uYW1lID09ICdzZWFyY2hfYm94JyB8fA0KICAgICAgICAgIHRoaXMubUNvbmZpZ1tpbmRleCAtIDFdLm5hbWUgPT0gJ25hdl9iYXInIHx8DQogICAgICAgICAgdGhpcy5tQ29uZmlnW2luZGV4IC0gMV0ubmFtZSA9PSAnaG9tZV9jb21iJw0KICAgICAgICApIHsNCiAgICAgICAgICByZXR1cm4gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfmkJzntKLmoYbmiJbpgInpobnljaHmiJbova7mkq3mkJzntKLlv4XpobvkuLrpobbpg6gnKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLnN3YXBBcnJheSh0aGlzLm1Db25maWcsIGluZGV4IC0gMSwgaW5kZXgpOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5zd2FwQXJyYXkodGhpcy5tQ29uZmlnLCBpbmRleCwgaW5kZXggKyAxKTsNCiAgICAgIH0NCiAgICAgIGxldCBvYmogPSB7fTsNCiAgICAgIHRoaXMuckNvbmZpZyA9IFtdOw0KICAgICAgb2JqLm9sZEluZGV4ID0gaW5kZXg7DQogICAgICBpZiAodHlwZSkgew0KICAgICAgICBvYmoubmV3SW5kZXggPSBpbmRleCAtIDE7DQogICAgICB9IGVsc2Ugew0KICAgICAgICBvYmoubmV3SW5kZXggPSBpbmRleCArIDE7DQogICAgICB9DQogICAgICB0aGlzLm1Db25maWcuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7DQogICAgICAgIGVsLm51bSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICogMTAwMCArIGluZGV4Ow0KICAgICAgfSk7DQogICAgICBsZXQgdGVtcEl0ZW0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKTsNCiAgICAgIHRoaXMuckNvbmZpZy5wdXNoKHRlbXBJdGVtKTsNCiAgICAgIG9iai5lbGVtZW50ID0gaXRlbTsNCiAgICAgIG9iai5saXN0ID0gdGhpcy5tQ29uZmlnOw0KICAgICAgaWYgKHR5cGUpIHsNCiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4IC0gMTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCArIDE7DQogICAgICB9DQoNCiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL1NFVENPTkZJR05BTUUnLCBpdGVtLm5hbWUpOw0KICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvZGVmYXVsdEFycmF5U29ydCcsIG9iaik7DQogICAgfSwNCiAgICAvLyDnu4Tku7bmt7vliqANCiAgICBhZGREb21Db24oaXRlbSwgdHlwZSwgaW5kZXgpIHsNCiAgICAgIGlmIChpdGVtLm5hbWUgPT0gJ3NlYXJjaF9ib3gnKSB7DQogICAgICAgIGlmICh0aGlzLmlzU2VhcmNoKSByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+l57uE5Lu25Y+q6IO95re75Yqg5LiA5qyhJyk7DQogICAgICAgIGlmICh0aGlzLmlzQ29tYikgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+i9ruaSreaQnOe0ouS4jeiDveWSjOaQnOe0oue7hOS7tuS4jumAiemhueWNoee7hOS7tuWQjOaXtuWtmOWcqCcpOw0KICAgICAgICB0aGlzLmlzU2VhcmNoID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIGlmIChpdGVtLm5hbWUgPT0gJ25hdl9iYXInKSB7DQogICAgICAgIGlmICh0aGlzLmlzVGFiKSByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+l57uE5Lu25Y+q6IO95re75Yqg5LiA5qyhJyk7DQogICAgICAgIGlmICh0aGlzLmlzQ29tYikgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+i9ruaSreaQnOe0ouS4jeiDveWSjOaQnOe0oue7hOS7tuS4jumAiemhueWNoee7hOS7tuWQjOaXtuWtmOWcqCcpOw0KICAgICAgICB0aGlzLmlzVGFiID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIGlmIChpdGVtLm5hbWUgPT0gJ2hvbWVfY29tYicpIHsNCiAgICAgICAgaWYgKHRoaXMuaXNDb21iKSByZXR1cm4gdGhpcy4kbWVzc2FnZS5lcnJvcign6K+l57uE5Lu25Y+q6IO95re75Yqg5LiA5qyhJyk7DQogICAgICAgIGlmICh0aGlzLmlzU2VhcmNoIHx8IHRoaXMuaXNUYWIpIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfova7mkq3mkJzntKLkuI3og73lkozmkJzntKLnu4Tku7bkuI7pgInpobnljaHnu4Tku7blkIzml7blrZjlnKgnKTsNCiAgICAgICAgdGhpcy5pc0NvbWIgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnaG9tZV9zZXJ2aWNlJykgew0KICAgICAgICBpZiAodGhpcy5pc1NlcnZpY2UpIHJldHVybiB0aGlzLiRtZXNzYWdlLmVycm9yKCfor6Xnu4Tku7blj6rog73mt7vliqDkuIDmrKEnKTsNCiAgICAgICAgdGhpcy5pc1NlcnZpY2UgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgbGV0IG9iaiA9IHt9Ow0KICAgICAgbGV0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICogMTAwMDsNCiAgICAgIGl0ZW0ubnVtID0gYCR7dGltZXN0YW1wfWA7DQogICAgICBpdGVtLmlkID0gYGlkJHt0aW1lc3RhbXB9YDsNCiAgICAgIHRoaXMuYWN0aXZlQ29uZmlnTmFtZSA9IGl0ZW0ubmFtZTsNCiAgICAgIGxldCB0ZW1wSXRlbSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpOw0KICAgICAgaWYgKGl0ZW0ubmFtZSA9PSAnaG9tZV9jb21iJykgew0KICAgICAgICB0aGlzLnJDb25maWcgPSBbXTsNCiAgICAgICAgdGhpcy5tQ29uZmlnLnVuc2hpZnQodGVtcEl0ZW0pOw0KICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDsNCiAgICAgICAgdGhpcy5yQ29uZmlnLnB1c2godGVtcEl0ZW0pOw0KICAgICAgfSBlbHNlIGlmIChpdGVtLm5hbWUgPT0gJ3NlYXJjaF9ib3gnKSB7DQogICAgICAgIHRoaXMuckNvbmZpZyA9IFtdOw0KICAgICAgICB0aGlzLm1Db25maWcudW5zaGlmdCh0ZW1wSXRlbSk7DQogICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwOw0KICAgICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7DQogICAgICB9IGVsc2UgaWYgKGl0ZW0ubmFtZSA9PSAnbmF2X2JhcicpIHsNCiAgICAgICAgdGhpcy5yQ29uZmlnID0gW107DQogICAgICAgIGlmICh0aGlzLm1Db25maWdbMF0gJiYgdGhpcy5tQ29uZmlnWzBdLm5hbWUgPT09ICdzZWFyY2hfYm94Jykgew0KICAgICAgICAgIHRoaXMubUNvbmZpZy5zcGxpY2UoMSwgMCwgdGVtcEl0ZW0pOw0KICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAxOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMubUNvbmZpZy5zcGxpY2UoMCwgMCwgdGVtcEl0ZW0pOw0KICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAwOw0KICAgICAgICB9DQogICAgICAgIHRoaXMuckNvbmZpZy5wdXNoKHRlbXBJdGVtKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGlmICh0eXBlKSB7DQogICAgICAgICAgdGhpcy5yQ29uZmlnID0gW107DQogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT0gMCAmJiB0aGlzLm1Db25maWdbMV0gJiYgdGhpcy5tQ29uZmlnWzFdLm5hbWUgPT0gJ25hdl9iYXInKSB7DQogICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMjsNCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXggPj0gMCA/IHRoaXMuYWN0aXZlSW5kZXggKyAxIDogdGhpcy5tQ29uZmlnLmxlbmd0aDsNCiAgICAgICAgICB9DQogICAgICAgICAgdGhpcy5tQ29uZmlnLnNwbGljZSh0aGlzLmFjdGl2ZUluZGV4LCAwLCB0ZW1wSXRlbSk7DQogICAgICAgICAgdGhpcy5yQ29uZmlnLnB1c2godGVtcEl0ZW0pOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMubUNvbmZpZy5zcGxpY2UoaW5kZXggKyAxLCAwLCB0ZW1wSXRlbSk7DQogICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGluZGV4Ow0KICAgICAgICB9DQogICAgICB9DQogICAgICB0aGlzLm1Db25maWcuZm9yRWFjaCgoZWwsIGluZGV4KSA9PiB7DQogICAgICAgIGVsLm51bSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpICogMTAwMCArIGluZGV4Ow0KICAgICAgfSk7DQogICAgICAvLyDkv53lrZjnu4Tku7blkI3np7ANCiAgICAgIG9iai5lbGVtZW50ID0gaXRlbTsNCiAgICAgIG9iai5saXN0ID0gdGhpcy5tQ29uZmlnOw0KICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvU0VUQ09ORklHTkFNRScsIGl0ZW0ubmFtZSk7DQogICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9kZWZhdWx0QXJyYXlTb3J0Jywgb2JqKTsNCiAgICB9LA0KICAgIC8v5Lit6Ze06aG154K55Ye75re75Yqg5qih5Z2X77ybDQogICAgYmluZEFkZERvbShpdGVtLCB0eXBlLCBpbmRleCkgew0KICAgICAgbGV0IGkgPSBpdGVtOw0KICAgICAgdGhpcy5sQ29uZmlnLmZvckVhY2goKGopID0+IHsNCiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBqLm5hbWUpIHsNCiAgICAgICAgICBpID0gajsNCiAgICAgICAgfQ0KICAgICAgfSk7DQogICAgICB0aGlzLmFkZERvbUNvbihpLCB0eXBlLCBpbmRleCk7DQogICAgfSwNCiAgICAvL+W3pui+uemFjee9ruaooeWdl+eCueWHu+a3u+WKoO+8mw0KICAgIGFkZERvbShpdGVtLCB0eXBlKSB7DQogICAgICB0aGlzLmFkZERvbUNvbihpdGVtLCB0eXBlKTsNCiAgICB9LA0KICAgIC8vIOeCueWHu+aYvuekuuebuOW6lOeahOmFjee9rg0KICAgIGJpbmRjb25maWcoaXRlbSwgaW5kZXgpIHsNCiAgICAgIHRoaXMuckNvbmZpZyA9IFtdOw0KICAgICAgbGV0IHRlbXBJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7DQogICAgICB0aGlzLnJDb25maWcucHVzaCh0ZW1wSXRlbSk7DQogICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7DQogICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9TRVRDT05GSUdOQU1FJywgaXRlbS5uYW1lKTsNCiAgICB9LA0KICAgIGJpbmRIaWRlKGl0ZW0pIHsNCiAgICAgIGxldCBvYmogPSB0aGlzLiRzdG9yZS5zdGF0ZS5tb2JpbGRDb25maWcuZGVmYXVsdEFycmF5Ow0KICAgICAgbGV0IG51bSA9IHRoaXMuckNvbmZpZ1swXS5udW07DQogICAgICBvYmpbbnVtXS5pc0hpZGUgPSAhb2JqW251bV0uaXNIaWRlOw0KICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvVVBEQVRFQVJSJywgeyBudW06IG51bSwgdmFsOiBvYmpbbnVtXSB9KTsNCiAgICB9LA0KICAgIC8vIOe7hOS7tuWIoOmZpA0KICAgIGJpbmREZWxldGUoaXRlbSwga2V5KSB7DQogICAgICBpZiAoaXRlbS5uYW1lID09ICdzZWFyY2hfYm94Jykgew0KICAgICAgICB0aGlzLmlzU2VhcmNoID0gZmFsc2U7DQogICAgICB9DQogICAgICBpZiAoaXRlbS5uYW1lID09ICduYXZfYmFyJykgew0KICAgICAgICB0aGlzLmlzVGFiID0gZmFsc2U7DQogICAgICB9DQogICAgICBpZiAoaXRlbS5uYW1lID09ICdob21lX2NvbWInKSB7DQogICAgICAgIHRoaXMuaXNDb21iID0gZmFsc2U7DQogICAgICB9DQogICAgICBpZiAoaXRlbS5uYW1lID09ICdob21lX3NlcnZpY2UnKSB7DQogICAgICAgIHRoaXMuaXNTZXJ2aWNlID0gZmFsc2U7DQogICAgICB9DQogICAgICB0aGlzLm1Db25maWcuc3BsaWNlKGtleSwgMSk7DQogICAgICB0aGlzLnJDb25maWcuc3BsaWNlKDAsIDEpOw0KICAgICAgaWYgKHRoaXMubUNvbmZpZy5sZW5ndGggIT0ga2V5KSB7DQogICAgICAgIHRoaXMuckNvbmZpZy5wdXNoKHRoaXMubUNvbmZpZ1trZXldKTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGlmICh0aGlzLm1Db25maWcubGVuZ3RoKSB7DQogICAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IGtleSAtIDE7DQogICAgICAgICAgdGhpcy5yQ29uZmlnLnB1c2godGhpcy5tQ29uZmlnW2tleSAtIDFdKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICB0aGlzLnNob3dUaXRsZSgpOw0KICAgICAgICB9DQogICAgICB9DQogICAgICAvLyDliKDpmaTnrKzlh6DkuKrphY3nva4NCiAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL0RFTEVURUFSUkFZJywgaXRlbSk7DQogICAgfSwNCiAgICAvLyDnu4Tku7bov5Tlm54NCiAgICBjb25maWcoZGF0YSkgew0KICAgICAgbGV0IHByb3BzT2JqID0gdGhpcy5wcm9wc09iajsNCiAgICAgIHByb3BzT2JqLmRhdGEgPSBkYXRhOw0KICAgICAgcHJvcHNPYmoubmFtZSA9IHRoaXMuYWN0aXZlQ29uZmlnTmFtZTsNCiAgICB9LA0KICAgIGFkZFNvcnQoYXJyLCBpbmRleDEsIGluZGV4Mikgew0KICAgICAgYXJyW2luZGV4MV0gPSBhcnIuc3BsaWNlKGluZGV4MiwgMSwgYXJyW2luZGV4MV0pWzBdOw0KICAgICAgcmV0dXJuIGFycjsNCiAgICB9LA0KICAgIC8vIOaVsOe7hOaOkuW6jw0KICAgIGFycmF5U29ydCgpIHsNCiAgICAgIGxldCB0ZW1wQXJyID0gW107DQogICAgICBsZXQgYmFzaXMgPSB7DQogICAgICAgIHRpdGxlOiAn5Z+656GA57uE5Lu2JywNCiAgICAgICAgbGlzdDogW10sDQogICAgICAgIGlzT3BlbjogdHJ1ZSwNCiAgICAgIH07DQogICAgICBsZXQgbWFya2V0aW5nID0gew0KICAgICAgICB0aXRsZTogJ+iQpemUgOe7hOS7ticsDQogICAgICAgIGxpc3Q6IFtdLA0KICAgICAgICBpc09wZW46IHRydWUsDQogICAgICB9Ow0KICAgICAgbGV0IHRvb2wgPSB7DQogICAgICAgIHRpdGxlOiAn5bel5YW357uE5Lu2JywNCiAgICAgICAgbGlzdDogW10sDQogICAgICAgIGlzT3BlbjogdHJ1ZSwNCiAgICAgIH07DQogICAgICB0aGlzLmxDb25maWcubWFwKChlbCwgaW5kZXgpID0+IHsNCiAgICAgICAgaWYgKGVsLnR5cGUgPT0gMCkgew0KICAgICAgICAgIGJhc2lzLmxpc3QucHVzaChlbCk7DQogICAgICAgIH0NCiAgICAgICAgaWYgKGVsLnR5cGUgPT0gMSkgew0KICAgICAgICAgIG1hcmtldGluZy5saXN0LnB1c2goZWwpOw0KICAgICAgICB9DQogICAgICAgIGlmIChlbC50eXBlID09IDIpIHsNCiAgICAgICAgICB0b29sLmxpc3QucHVzaChlbCk7DQogICAgICAgIH0NCiAgICAgIH0pOw0KICAgICAgdGVtcEFyci5wdXNoKGJhc2lzLCBtYXJrZXRpbmcsIHRvb2wpOw0KICAgICAgdGhpcy5sZWZ0TWVudSA9IHRlbXBBcnI7DQogICAgfSwNCiAgICAvLyB0b0ltYWdlKHZhbCl7DQogICAgLy8gICAgIGh0bWwyY2FudmFzKHRoaXMuJHJlZnMuaW1nQ29udGFpbmVyLHsNCiAgICAvLyAgICAgICAgIHVzZUNPUlM6dHJ1ZSwNCiAgICAvLyAgICAgICAgIGxvZ2dpbmc6dHJ1ZSwNCiAgICAvLyAgICAgICAgIHRhaW50VGVzdDogZmFsc2UsDQogICAgLy8gICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bGwNCiAgICAvLyAgICAgfSkudGhlbigoY2FudmFzKSA9PiB7DQogICAgLy8gICAgICAgICBsZXQgaW1nVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpOw0KICAgIC8vICAgICAgICAgdGhpcy5kaXlTYXZlRGF0ZSh2YWwsaW1nVXJsKQ0KICAgIC8vICAgICB9KTsNCiAgICAvLyB9LA0KICAgIGRpeVNhdmVEYXRlKHZhbCwgbnVtLCB0eXBlLCBzYXZlKSB7DQogICAgICBkaXlQcm9TYXZlKHR5cGUgPyAwIDogdGhpcy5wYWdlSWQsIHsNCiAgICAgICAgdHlwZTogdGhpcy5wYWdlVHlwZSB8fCBzYXZlLA0KICAgICAgICB2YWx1ZTogdmFsLA0KICAgICAgICB0aXRsZTogdGhpcy50aXRsZVR4dCwNCiAgICAgICAgbmFtZTogdGhpcy5uYW1lVHh0IHx8ICfmqKHmnb8nLA0KICAgICAgICBpc19zaG93OiB0aGlzLnNob3dUeHQgPyAxIDogMCwNCiAgICAgICAgaXNfYmdfY29sb3I6IHRoaXMuY29sb3JUeHQgPyAxIDogMCwNCiAgICAgICAgY29sb3JfcGlja2VyOiB0aGlzLmNvbG9yUGlja2VyVHh0LA0KICAgICAgICBiZ19waWM6IHRoaXMucGljVXJsVHh0LA0KICAgICAgICBiZ190YWJfdmFsOiB0aGlzLnRhYlZhbFR4dCwNCiAgICAgICAgaXNfYmdfcGljOiB0aGlzLnBpY1R4dCA/IDEgOiAwLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMucGFnZUlkID0gcmVzLmRhdGEuaWQ7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgIGxldCB0aGF0ID0gdGhpczsNCiAgICAgICAgICB0aGlzLm5hbWVNb2RhbCA9IGZhbHNlOw0KICAgICAgICAgIGlmIChudW0gPT0gMikgew0KICAgICAgICAgICAgdGhpcy5yZWxMb2FkaW5nID0gZmFsc2U7DQogICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy4kcm91dGVQcm9TdHIgKyAnL3NldHRpbmcvcGFnZXMvZGV2aXNlLzAnKTsNCiAgICAgICAgICAgIH0sIDIwMDApOw0KICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgocmVzKSA9PiB7DQogICAgICAgICAgdGhpcy5yZWxMb2FkaW5nID0gZmFsc2U7DQogICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBzYXZlTW9kYWwoKSB7DQogICAgICBpZiAoIXRoaXMuc2F2ZU5hbWUpIHJldHVybiB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOi+k+WFpeaooeadv+WQjeensCcpOw0KICAgICAgdGhpcy5zYXZlQ29uZmlnKDEsIHRoaXMuc2F2ZU5hbWUpOw0KICAgIH0sDQogICAgY2xvc2VXaW5kb3coKSB7DQogICAgICB0aGlzLiRtc2dib3goew0KICAgICAgICB0aXRsZTogJ+aPkOekuicsDQogICAgICAgIG1lc3NhZ2U6ICflhbPpl63pobXpnaLliY3or7flhYjkv53lrZjmlbDmja7vvIzmnKrkv53lrZjnmoTor53mlbDmja7kvJrkuKLlpLEnLA0KICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLA0KICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywNCiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLA0KICAgICAgICBpY29uQ2xhc3M6ICdlbC1pY29uLXdhcm5pbmcnLA0KICAgICAgICBjb25maXJtQnV0dG9uQ2xhc3M6ICdidG4tY3VzdG9tLWNhbmNlbCcsDQogICAgICB9KQ0KICAgICAgICAudGhlbigoKSA9PiB7DQogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICAvLyB0aGlzLnNhdmVDb25maWcoKTsNCiAgICAgICAgICAgIHdpbmRvdy5jbG9zZSgpOw0KICAgICAgICAgIH0sIDEwMDApOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKCkgPT4ge30pOw0KICAgIH0sDQogICAgLy8g5L+d5a2Y6YWN572uDQogICAgc2F2ZUNvbmZpZyhudW0sIHR5cGUsIHNhdmUpIHsNCiAgICAgIGlmICh0aGlzLm1Db25maWcubGVuZ3RoID09IDApIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+aaguacqua3u+WKoOS7u+S9lee7hOS7tu+8jOS/neWtmOWksei0pe+8gScpOw0KICAgICAgfQ0KICAgICAgaWYgKG51bSA9PSAxKSB7DQogICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLnJlbExvYWRpbmcgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgbGV0IHZhbCA9IHRoaXMuJHN0b3JlLnN0YXRlLm1vYmlsZENvbmZpZy5kZWZhdWx0QXJyYXk7DQogICAgICBpZiAoIXRoaXMuZm9vdEFjdGl2ZSkgew0KICAgICAgICBsZXQgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKiAxMDAwOw0KICAgICAgICB2YWxbdGltZXN0YW1wXSA9IHRoaXMuJHN0b3JlLnN0YXRlLm1vYmlsZENvbmZpZy5wYWdlRm9vdGVyOw0KICAgICAgICB0aGlzLmZvb3RBY3RpdmUgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICB0aGlzLmRpeVNhdmVEYXRlKHZhbCwgbnVtLCB0eXBlLCBzYXZlKTsNCiAgICAgIH0pOw0KICAgIH0sDQogICAgLy8g6I635Y+W6buY6K6k6YWN572uDQogICAgZ2V0RGVmYXVsdENvbmZpZygpIHsNCiAgICAgIGRpeVByb0luZm8odGhpcy5wYWdlSWQsIHsNCiAgICAgICAgdHlwZTogMSwNCiAgICAgIH0pLnRoZW4oKHsgZGF0YSB9KSA9PiB7DQogICAgICAgIGxldCBvYmogPSB7fTsNCiAgICAgICAgbGV0IHRlbXBBUlIgPSBbXTsNCiAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvdGl0bGVVcGRhdGEnLCBkYXRhLmluZm8udGl0bGUpOw0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9uYW1lVXBkYXRhJywgZGF0YS5pbmZvLm5hbWUpOw0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9zaG93VXBkYXRhJywgZGF0YS5pbmZvLmlzX3Nob3cpOw0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9jb2xvclVwZGF0YScsIGRhdGEuaW5mby5pc19iZ19jb2xvciB8fCAwKTsNCiAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcGljVXBkYXRhJywgZGF0YS5pbmZvLmlzX2JnX3BpYyB8fCAwKTsNCiAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcGlja2VyVXBkYXRhJywgZGF0YS5pbmZvLmNvbG9yX3BpY2tlciB8fCAnI2Y1ZjVmNScpOw0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9yYWRpb1VwZGF0YScsIGRhdGEuaW5mby5iZ190YWJfdmFsIHx8IDApOw0KICAgICAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWN1cmxVcGRhdGEnLCBkYXRhLmluZm8uYmdfcGljIHx8ICcnKTsNCiAgICAgICAgdGhpcy5kaXlTdGF0dXMgPSBkYXRhLmluZm8uc3RhdHVzOw0KICAgICAgICBsZXQgbmV3QXJyID0gdGhpcy5vYmpUb0FycihkYXRhLmluZm8udmFsdWUpOw0KDQogICAgICAgIGZ1bmN0aW9uIHNvcnROdW1iZXIoYSwgYikgew0KICAgICAgICAgIHJldHVybiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wOw0KICAgICAgICB9DQogICAgICAgIG5ld0Fyci5zb3J0KHNvcnROdW1iZXIpOw0KICAgICAgICBuZXdBcnIubWFwKChlbCwgaW5kZXgpID0+IHsNCiAgICAgICAgICBpZiAoZWwubmFtZSA9PSAnaGVhZGVyU2VyY2gnKSB7DQogICAgICAgICAgICB0aGlzLmlzU2VhcmNoID0gdHJ1ZTsNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKGVsLm5hbWUgPT0gJ3RhYk5hdicpIHsNCiAgICAgICAgICAgIHRoaXMuaXNUYWIgPSB0cnVlOw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZWwubmFtZSA9PSAnaG9tZUNvbWInKSB7DQogICAgICAgICAgICB0aGlzLmlzQ29tYiA9IHRydWU7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmIChlbC5uYW1lID09ICdjdXN0b21lclNlcnZpY2UnKSB7DQogICAgICAgICAgICB0aGlzLmlzU2VydmljZSA9IHRydWU7DQogICAgICAgICAgfQ0KICAgICAgICAgIGlmIChlbC5uYW1lID09ICdnb29kTGlzdCcpIHsNCiAgICAgICAgICAgIC8vIGxldCBzdG9yYWdlID0gd2luZG93LmxvY2FsU3RvcmFnZTsNCiAgICAgICAgICAgIC8vIHN0b3JhZ2Uuc2V0SXRlbShlbC50aW1lc3RhbXAsIGVsLnNlbGVjdENvbmZpZy5hY3RpdmVWYWx1ZSk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsLmlkID0gJ2lkJyArIGVsLnRpbWVzdGFtcDsNCiAgICAgICAgICB0aGlzLmxDb25maWcubWFwKChpdGVtLCBqKSA9PiB7DQogICAgICAgICAgICBpZiAoZWwubmFtZSA9PSBpdGVtLmRlZmF1bHROYW1lKSB7DQogICAgICAgICAgICAgIGl0ZW0ubnVtID0gZWwudGltZXN0YW1wOw0KICAgICAgICAgICAgICBpdGVtLmlkID0gJ2lkJyArIGVsLnRpbWVzdGFtcDsNCiAgICAgICAgICAgICAgbGV0IHRlbXBJdGVtID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtKSk7DQogICAgICAgICAgICAgIHRlbXBBUlIucHVzaCh0ZW1wSXRlbSk7DQogICAgICAgICAgICAgIG9ialtlbC50aW1lc3RhbXBdID0gZWw7DQogICAgICAgICAgICAgIHRoaXMubUNvbmZpZy5wdXNoKHRlbXBJdGVtKTsNCiAgICAgICAgICAgICAgLy8g5L+d5a2Y6buY6K6k57uE5Lu26YWN572uDQogICAgICAgICAgICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL0FEREFSUkFZJywgew0KICAgICAgICAgICAgICAgIG51bTogZWwudGltZXN0YW1wLA0KICAgICAgICAgICAgICAgIHZhbDogZWwsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCg0KICAgICAgICBsZXQgb2JqcyA9IG5ld0FycltuZXdBcnIubGVuZ3RoIC0gMV07DQoNCiAgICAgICAgaWYgKG9ianMubmFtZSA9PSAncGFnZUZvb3QnKSB7DQogICAgICAgICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvZm9vdFBhZ2VVcGRhdGEnLCBvYmpzKTsNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLnNob3dUaXRsZSgpOw0KICAgICAgfSk7DQogICAgfSwNCiAgICBjYXRlZ29yeUxpc3QoKSB7DQogICAgICBjYXRlZ29yeUxpc3QoKHJlcykgPT4gew0KICAgICAgICB0aGlzLmNhdGVnb3J5ID0gcmVzLmRhdGE7DQogICAgICB9KTsNCiAgICB9LA0KICAgIC8vIOmHjee9rg0KICAgIHJlYXN0KCkgew0KICAgICAgaWYgKHRoaXMucGFnZUlkID09IDApIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign5paw5aKe6aG16Z2i77yM5peg5rOV6YeN572uJyk7DQogICAgICB9IGVsc2Ugew0KICAgICAgICB0aGlzLiRjb25maXJtKCfmraTmk43kvZzlsIbmuIXnqbrmqKHmnb/lhoXlrrksIOaYr+WQpue7p+e7rT8nLCAn5o+Q56S6Jywgew0KICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywNCiAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywNCiAgICAgICAgICB0eXBlOiAnd2FybmluZycsDQogICAgICAgIH0pLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMubUNvbmZpZyA9IFtdOw0KICAgICAgICAgIHRoaXMuckNvbmZpZyA9IFtdOw0KICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSAtOTk7DQogICAgICAgICAgdGhpcy5nZXREZWZhdWx0Q29uZmlnKCk7DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogIH0sDQogIGJlZm9yZURlc3Ryb3koKSB7DQogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvdGl0bGVVcGRhdGEnLCAnJyk7DQogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvbmFtZVVwZGF0YScsICcnKTsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9zaG93VXBkYXRhJywgMSk7DQogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvY29sb3JVcGRhdGEnLCAwKTsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWNVcGRhdGEnLCAwKTsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWNrZXJVcGRhdGEnLCAnI2Y1ZjVmNScpOw0KICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3JhZGlvVXBkYXRhJywgMCk7DQogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcGljdXJsVXBkYXRhJywgJycpOw0KICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL1NFVEVNUFRZJyk7DQogIH0sDQogIGRlc3Ryb3llZCgpIHsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy90aXRsZVVwZGF0YScsICcnKTsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9uYW1lVXBkYXRhJywgJycpOw0KICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3Nob3dVcGRhdGEnLCAxKTsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9jb2xvclVwZGF0YScsIDApOw0KICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3BpY1VwZGF0YScsIDApOw0KICAgIHRoaXMuJHN0b3JlLmNvbW1pdCgnbW9iaWxkQ29uZmlnL3BpY2tlclVwZGF0YScsICcjZjVmNWY1Jyk7DQogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvcmFkaW9VcGRhdGEnLCAwKTsNCiAgICB0aGlzLiRzdG9yZS5jb21taXQoJ21vYmlsZENvbmZpZy9waWN1cmxVcGRhdGEnLCAnJyk7DQogICAgdGhpcy4kc3RvcmUuY29tbWl0KCdtb2JpbGRDb25maWcvU0VURU1QVFknKTsNCiAgfSwNCn07DQo="},{"version":3,"sources":["diyIndex.vue"],"names":[],"mappings":";AAwPA;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;;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;;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;;AAEA;;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","file":"diyIndex.vue","sourceRoot":"src/pages/setting/devise","sourcesContent":["<template>\r\n <!-- 添加主题-首页装修 -->\r\n <div class=\"diy-page\">\r\n <div class=\"i-layout-page-header header-title\">\r\n <div class=\"fl_header\">\r\n <!-- <span class=\"ivu-page-header-title mr20\" style=\"padding: 0\" v-text=\"$route.meta.title\"></span> -->\r\n <div class=\"f-title acea-row row-middle\">\r\n <div class=\"acea-row row-middle cup\" @click=\"returnTap\">\r\n <div class=\"iconfont iconfanhui\"></div>\r\n <div class=\"return\">返回</div>\r\n </div>\r\n <div class=\"mr20\">\r\n <span class=\"name mr5\">当前页面:{{ nameTxt || '模板' }}</span>\r\n <el-popover v-model=\"visible\" width=\"347\">\r\n <span slot=\"reference\" class=\"iconfont iconzidingyicaidan cup\"></span>\r\n <template>\r\n <div class=\"flex\">\r\n <el-input\r\n v-model=\"nameTxt\"\r\n placeholder=\"必填不超过15个字\"\r\n maxlength=\"15\"\r\n style=\"width: 200px\"\r\n ></el-input>\r\n <el-button type=\"text\" @click=\"cancel\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"determine\">确定</el-button>\r\n </div>\r\n </template>\r\n </el-popover>\r\n </div>\r\n </div>\r\n <div class=\"rbtn\">\r\n <!-- <el-button class=\"ml20 header-btn look\" v-db-click @click=\"exportView\" :loading=\"loading\">导出</el-button>\r\n <el-button class=\"ml20 header-btn look\" v-db-click @click=\"importView\" :loading=\"loading\">导入</el-button> -->\r\n <el-button class=\"ml20 header-btn look\" v-db-click @click=\"preview\" :loading=\"loading\">预览</el-button>\r\n <el-button class=\"ml20 header-btn close\" v-db-click @click=\"saveConfig(1)\" :loading=\"loading\">保存</el-button>\r\n <el-button class=\"ml20 header-btn save\" v-db-click @click=\"saveConfig(2)\" :loading=\"loading\"\r\n >保存并关闭</el-button\r\n >\r\n </div>\r\n </div>\r\n </div>\r\n <el-card :bordered=\"false\" shadow=\"never\">\r\n <div class=\"diy-wrapper\" :style=\"'height:' + clientHeight + 'px;'\">\r\n <!-- 左侧 -->\r\n <div class=\"left\">\r\n <div class=\"wrapper\" :style=\"'height:' + clientHeight + 'px;'\">\r\n <div class=\"list\" v-for=\"(item, index) in leftMenu\" :key=\"index\">\r\n <div class=\"tips\" @click=\"item.isOpen = !item.isOpen\">\r\n {{ item.title }}\r\n <div class=\"iconfont iconyou\" v-if=\"!item.isOpen\"></div>\r\n <div class=\"iconfont iconxia\" v-else></div>\r\n </div>\r\n <!-- 拖拽组件 -->\r\n <draggable\r\n class=\"dragArea list-group\"\r\n :list=\"item.list\"\r\n :group=\"{ name: 'people', pull: 'clone', put: false }\"\r\n :clone=\"cloneDog\"\r\n dragClass=\"dragClass\"\r\n filter=\".search , .navbar , .homeComb , .service\"\r\n >\r\n <div\r\n class=\"list-group-item\"\r\n :class=\"{\r\n search: element.cname == '搜索框',\r\n navbar: element.cname == '选项卡',\r\n homeComb: element.cname == '轮播搜索',\r\n service: element.cname == '悬浮按钮',\r\n }\"\r\n v-for=\"(element, index) in item.list\"\r\n :key=\"element.id\"\r\n @click=\"addDom(element, 1)\"\r\n v-show=\"item.isOpen\"\r\n >\r\n <div>\r\n <div class=\"position\" style=\"display: none\">释放鼠标将组建添加到此处</div>\r\n <svg class=\"conter iconfont-diy icon svg-icon\" aria-hidden=\"true\">\r\n <use :xlink:href=\"element.icon\"></use>\r\n </svg>\r\n <p class=\"conter\">{{ element.cname }}</p>\r\n </div>\r\n </div>\r\n </draggable>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 中间自定义配置移动端页面 -->\r\n <div class=\"wrapper-con\">\r\n <div class=\"content\">\r\n <div class=\"contxt\">\r\n <div class=\"overflowy\">\r\n <div class=\"picture\"><img src=\"@/assets/images/electric.png\" /></div>\r\n <div class=\"page-title\" :class=\"{ on: activeIndex == -100 }\" @click=\"showTitle\">\r\n {{ titleTxt }}\r\n <div class=\"delete-box\"></div>\r\n <div class=\"handle\"></div>\r\n </div>\r\n </div>\r\n <div class=\"scrollCon\" :style=\"'height:' + rollHeight + 'px;'\">\r\n <div style=\"width: 460px; margin: 0 auto\">\r\n <div\r\n class=\"scroll-box\"\r\n :class=\"\r\n picTxt && tabValTxt == 2\r\n ? 'fullsize noRepeat'\r\n : picTxt && tabValTxt == 1\r\n ? 'repeat ysize'\r\n : 'noRepeat ysize'\r\n \"\r\n :style=\"\r\n 'background-color:' +\r\n (colorTxt ? colorPickerTxt : '') +\r\n ';background-image: url(' +\r\n (picTxt ? picUrlTxt : '') +\r\n ');min-height:' +\r\n rollHeight +\r\n 'px;'\r\n \"\r\n ref=\"imgContainer\"\r\n >\r\n <draggable\r\n class=\"dragArea list-group\"\r\n :list=\"mConfig\"\r\n group=\"people\"\r\n @change=\"log\"\r\n filter=\".top\"\r\n :move=\"onMove\"\r\n animation=\"300\"\r\n >\r\n <div\r\n class=\"mConfig-item\"\r\n :class=\"{\r\n on: activeIndex == key,\r\n top: item.name == 'search_box' || item.name == 'nav_bar',\r\n hide: defaultArrays[item.num].isHide,\r\n }\"\r\n v-for=\"(item, key) in mConfig\"\r\n :key=\"key\"\r\n @click.stop=\"bindconfig(item, key)\"\r\n :style=\"colorTxt ? 'background-color:' + colorPickerTxt + ';' : 'background-color:#fff;'\"\r\n >\r\n <component\r\n :is=\"item.name\"\r\n ref=\"getComponentData\"\r\n :configData=\"propsObj\"\r\n :index=\"key\"\r\n :num=\"item.num\"\r\n :colorStyle=\"colorStyle\"\r\n ></component>\r\n <div class=\"delete-box\">\r\n <div class=\"handleType\">\r\n <div\r\n class=\"iconfont\"\r\n :class=\"defaultArrays[item.num].isHide ? 'iconyincang' : 'iconxianshi'\"\r\n @click.stop=\"bindHide(item)\"\r\n ></div>\r\n <div class=\"iconfont iconshanchu3\" @click.stop=\"bindDelete(item, key)\"></div>\r\n <div class=\"iconfont icona-fuzhi1\" @click.stop=\"bindAddDom(item, 0, key)\"></div>\r\n <div\r\n class=\"iconfont iconshang\"\r\n :class=\"key === 0 ? 'on' : ''\"\r\n @click.stop=\"movePage(item, key, 1)\"\r\n ></div>\r\n <div\r\n class=\"iconfont iconxia\"\r\n :class=\"key === mConfig.length - 1 ? 'on' : ''\"\r\n @click.stop=\"movePage(item, key, 0)\"\r\n ></div>\r\n </div>\r\n </div>\r\n <div class=\"handle\"></div>\r\n <div class=\"delete-name\" :class=\"{ on: activeIndex == key }\">{{ item.cname }}</div>\r\n </div>\r\n </draggable>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"overflowy\">\r\n <div\r\n class=\"page-foot\"\r\n @click=\"showFoot\"\r\n :class=\"{ on: activeIndex == -101 }\"\r\n :style=\"pageFooterType == 1 ? 'bottom:' + (50 + pageFooterBottom) + 'px' : ''\"\r\n >\r\n <footPage></footPage>\r\n <div class=\"delete-box\"></div>\r\n <div class=\"handle\"></div>\r\n </div>\r\n </div>\r\n <div class=\"defaultData\" v-if=\"pageId !== 0\">\r\n <!-- <div class=\"data\" @click=\"setmoren\">设置默认</div>\r\n <div class=\"data\" @click=\"getmoren\">恢复默认</div> -->\r\n <el-button class=\"data\" @click=\"showTitle\">页面设置</el-button>\r\n <el-button class=\"data\" @click=\"nameModal = true\">另存模板</el-button>\r\n <el-button class=\"data\" @click=\"reast\">重置</el-button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- 右侧页面设置 -->\r\n <div class=\"right-box\">\r\n <div class=\"mConfig-item\" style=\"background-color: #fff\" v-for=\"(item, key) in rConfig\" :key=\"key\">\r\n <!-- <div class=\"title-bar\">{{ item.cname }}</div> -->\r\n <component\r\n :is=\"item.configName\"\r\n @config=\"config\"\r\n :activeIndex=\"activeIndex\"\r\n :num=\"item.num\"\r\n :index=\"key\"\r\n ></component>\r\n </div>\r\n </div>\r\n </div>\r\n </el-card>\r\n <el-dialog :visible.sync=\"modal\" width=\"540px\" title=\"预览\">\r\n <div>\r\n <div v-viewer class=\"acea-row row-around code\">\r\n <div class=\"acea-row row-column-around row-between-wrapper\">\r\n <div class=\"QRpic\" ref=\"qrCodeUrl\"></div>\r\n <span class=\"mt10\">公众号二维码</span>\r\n </div>\r\n <div class=\"acea-row row-column-around row-between-wrapper\">\r\n <div class=\"QRpic\">\r\n <img v-lazy=\"qrcodeImg\" />\r\n </div>\r\n <span class=\"mt10\">小程序二维码</span>\r\n </div>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n <el-dialog :visible.sync=\"nameModal\" width=\"470px\" title=\"设置模版名称\" :show-close=\"true\">\r\n <el-input v-model=\"saveName\" placeholder=\"请输入模版名称\"></el-input>\r\n <span slot=\"footer\" class=\"dialog-footer\">\r\n <el-button v-db-click @click=\"nameModal = false\">取 消</el-button>\r\n <el-button type=\"primary\" v-db-click @click=\"saveModal\">确 定</el-button>\r\n </span>\r\n </el-dialog>\r\n <!--<div class=\"foot-box\">-->\r\n <!--<Button @click=\"reast\">重置</Button>-->\r\n <!--<Button type=\"primary\" @click=\"saveConfig\" :loading=\"loading\"-->\r\n <!-->保存-->\r\n <!--</Button-->\r\n <!-->-->\r\n <!--</div>-->\r\n </div>\r\n</template>\r\n\r\n<script crossorigin=\"anonymous\">\r\nimport { categoryList, diyProInfo, diyProSave, setDefault, recovery, diyUpdateName, getRoutineCode } from '@/api/diy';\r\nimport vuedraggable from 'vuedraggable';\r\nimport mPage from '@/components/mobilePage/index.js';\r\nimport mConfig from '@/components/mobileConfig/index.js';\r\nimport footPage from '@/components/pagesFoot';\r\nimport { mapState } from 'vuex';\r\nimport html2canvas from 'html2canvas';\r\nimport theme from '@/mixins/theme';\r\nimport Setting from '@/setting';\r\nimport QRCode from 'qrcodejs2';\r\n\r\nexport default {\r\n inject: ['reload'],\r\n name: 'index.vue',\r\n components: {\r\n footPage,\r\n html2canvas,\r\n draggable: vuedraggable,\r\n ...mPage,\r\n ...mConfig,\r\n },\r\n filters: {\r\n filterTxt(val) {\r\n if (val) {\r\n return (val = val.substr(0, val.length - 1));\r\n }\r\n },\r\n },\r\n computed: {\r\n ...mapState({\r\n titleTxt: (state) => state.mobildConfig.pageTitle || '首页',\r\n showTxt: (state) => state.mobildConfig.pageShow,\r\n colorTxt: (state) => state.mobildConfig.pageColor,\r\n picTxt: (state) => state.mobildConfig.pagePic,\r\n colorPickerTxt: (state) => state.mobildConfig.pageColorPicker,\r\n tabValTxt: (state) => state.mobildConfig.pageTabVal,\r\n picUrlTxt: (state) => state.mobildConfig.pagePicUrl,\r\n pageFooterType: (state) => state.mobildConfig.pageFooter.navConfig.tabVal || 0,\r\n pageFooterBottom: (state) => state.mobildConfig.pageFooter.mbConfig.val,\r\n defaultArrays: (state) => state.mobildConfig.defaultArray,\r\n }),\r\n nameTxt: {\r\n get() {\r\n return this.$store.state.mobildConfig.pageName;\r\n },\r\n set(value) {\r\n this.$store.commit('mobildConfig/UPNAME', value);\r\n },\r\n },\r\n },\r\n mixins: [theme],\r\n data() {\r\n return {\r\n BaseURL: Setting.apiBaseURL.replace(/adminapi/, ''),\r\n qrcodeImg: '',\r\n modal: false,\r\n clientHeight: '', //页面动态高度\r\n rollHeight: '',\r\n leftMenu: [], // 左侧菜单\r\n lConfig: [], // 左侧组件\r\n mConfig: [], // 中间组件渲染\r\n rConfig: [], // 右侧组件配置\r\n activeConfigName: '',\r\n propsObj: {}, // 组件传递的数据,\r\n activeIndex: -100, // 选中的下标\r\n number: 0,\r\n pageId: '',\r\n pageName: '',\r\n pageType: '',\r\n category: [],\r\n tabList: [\r\n {\r\n title: '组件库',\r\n key: 0,\r\n },\r\n {\r\n title: '页面链接',\r\n key: 1,\r\n },\r\n ],\r\n footActive: false,\r\n loading: false,\r\n relLoading: false,\r\n isSearch: false,\r\n isTab: false,\r\n isFllow: false,\r\n isComb: false,\r\n isService: false,\r\n visible: true,\r\n diyStatus: 0,\r\n nameModal: false,\r\n saveName: '',\r\n };\r\n },\r\n created() {\r\n this.categoryList();\r\n this.pageId = this.$route.query.id;\r\n this.pageName = this.$route.query.name;\r\n this.pageType = this.$route.query.type;\r\n this.lConfig = this.objToArr(mPage);\r\n let imgList = {\r\n imgList: [require('@/assets/images/foot-005.png'), require('@/assets/images/foot-006.png')],\r\n name: '购物车',\r\n link: '/pages/order_addcart/order_addcart',\r\n };\r\n this.$nextTick(() => {\r\n this.$store.commit('mobildConfig/FOOTER', { title: '是否自定义', name: imgList });\r\n this.arraySort();\r\n if (this.pageId != 0) {\r\n this.getDefaultConfig();\r\n } else {\r\n this.showTitle();\r\n }\r\n this.clientHeight = `${document.documentElement.clientHeight}` - 65.81; //获取浏览器可视区域高度\r\n let H = `${document.documentElement.clientHeight}` - 180;\r\n this.rollHeight = H > 650 ? 650 : H;\r\n let that = this;\r\n window.onresize = function () {\r\n that.clientHeight = `${document.documentElement.clientHeight}` - 65.81;\r\n let H = `${document.documentElement.clientHeight}` - 180;\r\n that.rollHeight = H > 650 ? 650 : H;\r\n };\r\n });\r\n },\r\n methods: {\r\n exportView() {\r\n let that = this;\r\n this.loading = true;\r\n this.$nextTick(() => {\r\n console.log(this.mConfig);\r\n });\r\n },\r\n importView() {},\r\n preview() {\r\n this.modal = true;\r\n this.creatQrCode(this.pageId, this.diyStatus);\r\n this.routineCode(this.pageId);\r\n },\r\n //小程序二维码\r\n routineCode(id) {\r\n getRoutineCode(id)\r\n .then((res) => {\r\n this.qrcodeImg = res.data.image;\r\n })\r\n .catch((err) => {\r\n this.$message.error(err);\r\n });\r\n },\r\n //生成二维码\r\n creatQrCode(id, status) {\r\n this.$refs.qrCodeUrl.innerHTML = '';\r\n let url = '';\r\n if (status) {\r\n url = `${this.BaseURL}pages/index/index`;\r\n } else {\r\n url = `${this.BaseURL}pages/annex/special/index?id=${id}`;\r\n }\r\n var qrcode = new QRCode(this.$refs.qrCodeUrl, {\r\n text: url, // 需要转换为二维码的内容\r\n width: 160,\r\n height: 160,\r\n colorDark: '#000000',\r\n colorLight: '#ffffff',\r\n correctLevel: QRCode.CorrectLevel.H,\r\n });\r\n },\r\n changName(val) {\r\n this.$store.commit('mobildConfig/UPNAME', val);\r\n },\r\n cancel() {\r\n this.visible = false;\r\n },\r\n determine() {\r\n if (this.nameTxt.trim() == '') {\r\n return this.$message.error('请输入模板名称');\r\n }\r\n if (this.pageId == 0) {\r\n this.$message.success('修改成功');\r\n return false;\r\n }\r\n diyUpdateName(this.pageId, { name: this.nameTxt })\r\n .then((res) => {\r\n this.visible = false;\r\n this.$message.success(res.msg);\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n this.visible = false;\r\n },\r\n returnTap() {\r\n this.$msgbox({\r\n title: '温馨提示',\r\n message: '确定离开此页面?系统可能不会保存您所做的更改。',\r\n showCancelButton: true,\r\n cancelButtonText: '取消',\r\n confirmButtonText: '确定',\r\n iconClass: 'el-icon-warning',\r\n confirmButtonClass: 'btn-custom-cancel',\r\n })\r\n .then(() => {\r\n this.$router.push(this.$routeProStr + '/setting/pages/devise/0');\r\n })\r\n .catch(() => {});\r\n },\r\n leftRemove({ to, from, item, clone, oldIndex, newIndex }) {\r\n if (this.isSearch && newIndex == 0) {\r\n if (item._underlying_vm_.name == 'z_wechat_attention') {\r\n this.isFllow = true;\r\n } else {\r\n this.$store.commit('mobildConfig/ARRAYREAST', this.mConfig[0].num);\r\n this.mConfig.splice(0, 1);\r\n }\r\n }\r\n if ((this.isFllow = true && newIndex >= 1)) {\r\n this.$store.commit('mobildConfig/ARRAYREAST', this.mConfig[0].num);\r\n }\r\n },\r\n onMove(e) {\r\n if (e.relatedContext.element.name == 'search_box') return false;\r\n if (e.relatedContext.element.name == 'nav_bar') return false;\r\n if (e.relatedContext.element.name == 'home_comb') return false;\r\n return true;\r\n },\r\n onCopy() {\r\n this.$message.success('复制成功');\r\n },\r\n onError() {\r\n this.$message.error('复制失败');\r\n },\r\n //设置默认数据\r\n setmoren() {\r\n setDefault(this.pageId)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n //恢复默认\r\n getmoren() {\r\n recovery(this.pageId)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.reload();\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n // 页面标题点击\r\n showTitle() {\r\n this.activeIndex = -100;\r\n let obj = {};\r\n for (var i in mConfig) {\r\n if (i == 'pageTitle') {\r\n // this.rConfig = obj\r\n obj = mConfig[i];\r\n obj.configName = mConfig[i].name;\r\n obj.cname = '页面设置';\r\n }\r\n }\r\n let abc = obj;\r\n this.rConfig = [];\r\n this.rConfig[0] = JSON.parse(JSON.stringify(obj));\r\n },\r\n // 页面底部点击\r\n showFoot() {\r\n this.activeIndex = -101;\r\n let obj = {};\r\n for (var i in mConfig) {\r\n if (i == 'pageFoot') {\r\n // this.rConfig = obj\r\n obj = mConfig[i];\r\n obj.configName = mConfig[i].name;\r\n obj.cname = '底部菜单';\r\n }\r\n }\r\n let abc = obj;\r\n this.rConfig = [];\r\n this.rConfig[0] = JSON.parse(JSON.stringify(obj));\r\n },\r\n // 对象转数组\r\n objToArr(data) {\r\n let obj = Object.keys(data);\r\n let m = obj.map((key) => data[key]);\r\n return m;\r\n },\r\n log(evt) {\r\n // 中间拖拽排序\r\n if (evt.moved) {\r\n if (evt.moved.element.name == 'search_box') {\r\n return this.$message.warning('该组件禁止拖拽');\r\n }\r\n // if (evt.moved.element.name == \"nav_bar\") {\r\n // return this.$message.warning(\"该组件禁止拖拽\");\r\n // }\r\n evt.moved.oldNum = this.mConfig[evt.moved.oldIndex].num;\r\n evt.moved.newNum = this.mConfig[evt.moved.newIndex].num;\r\n evt.moved.status = evt.moved.oldIndex > evt.moved.newIndex;\r\n this.mConfig.forEach((el, index) => {\r\n el.num = new Date().getTime() * 1000 + index;\r\n });\r\n evt.moved.list = this.mConfig;\r\n this.rConfig = [];\r\n let item = evt.moved.element;\r\n let tempItem = JSON.parse(JSON.stringify(item));\r\n this.rConfig.push(tempItem);\r\n this.activeIndex = evt.moved.newIndex;\r\n this.$store.commit('mobildConfig/SETCONFIGNAME', item.name);\r\n this.$store.commit('mobildConfig/defaultArraySort', evt.moved);\r\n }\r\n // 从左向右拖拽排序\r\n if (evt.added) {\r\n let data = evt.added.element;\r\n let obj = {};\r\n let timestamp = new Date().getTime() * 1000;\r\n data.num = timestamp;\r\n this.activeConfigName = data.name;\r\n let tempItem = JSON.parse(JSON.stringify(data));\r\n tempItem.id = 'id' + tempItem.num;\r\n this.mConfig[evt.added.newIndex] = tempItem;\r\n this.rConfig = [];\r\n this.rConfig.push(tempItem);\r\n this.mConfig.forEach((el, index) => {\r\n el.num = new Date().getTime() * 1000 + index;\r\n });\r\n evt.added.list = this.mConfig;\r\n this.activeIndex = evt.added.newIndex;\r\n // 保存组件名称\r\n this.$store.commit('mobildConfig/SETCONFIGNAME', data.name);\r\n this.$store.commit('mobildConfig/defaultArraySort', evt.added);\r\n }\r\n },\r\n cloneDog(data) {\r\n // this.mConfig.push(tempItem)\r\n return {\r\n ...data,\r\n };\r\n },\r\n //数组元素互换位置\r\n swapArray(arr, index1, index2) {\r\n arr[index1] = arr.splice(index2, 1, arr[index1])[0];\r\n return arr;\r\n },\r\n //点击上下移动;\r\n movePage(item, index, type) {\r\n if (type) {\r\n if (index == 0) {\r\n return;\r\n }\r\n } else {\r\n if (index == this.mConfig.length - 1) {\r\n return;\r\n }\r\n }\r\n if (item.name == 'search_box' || item.name == 'nav_bar' || item.name == 'home_comb') {\r\n return this.$message.warning('该组件禁止移动');\r\n }\r\n if (type) {\r\n if (\r\n this.mConfig[index - 1].name == 'search_box' ||\r\n this.mConfig[index - 1].name == 'nav_bar' ||\r\n this.mConfig[index - 1].name == 'home_comb'\r\n ) {\r\n return this.$message.warning('搜索框或选项卡或轮播搜索必须为顶部');\r\n }\r\n this.swapArray(this.mConfig, index - 1, index);\r\n } else {\r\n this.swapArray(this.mConfig, index, index + 1);\r\n }\r\n let obj = {};\r\n this.rConfig = [];\r\n obj.oldIndex = index;\r\n if (type) {\r\n obj.newIndex = index - 1;\r\n } else {\r\n obj.newIndex = index + 1;\r\n }\r\n this.mConfig.forEach((el, index) => {\r\n el.num = new Date().getTime() * 1000 + index;\r\n });\r\n let tempItem = JSON.parse(JSON.stringify(item));\r\n this.rConfig.push(tempItem);\r\n obj.element = item;\r\n obj.list = this.mConfig;\r\n if (type) {\r\n this.activeIndex = index - 1;\r\n } else {\r\n this.activeIndex = index + 1;\r\n }\r\n\r\n this.$store.commit('mobildConfig/SETCONFIGNAME', item.name);\r\n this.$store.commit('mobildConfig/defaultArraySort', obj);\r\n },\r\n // 组件添加\r\n addDomCon(item, type, index) {\r\n if (item.name == 'search_box') {\r\n if (this.isSearch) return this.$message.error('该组件只能添加一次');\r\n if (this.isComb) return this.$message.error('轮播搜索不能和搜索组件与选项卡组件同时存在');\r\n this.isSearch = true;\r\n }\r\n if (item.name == 'nav_bar') {\r\n if (this.isTab) return this.$message.error('该组件只能添加一次');\r\n if (this.isComb) return this.$message.error('轮播搜索不能和搜索组件与选项卡组件同时存在');\r\n this.isTab = true;\r\n }\r\n if (item.name == 'home_comb') {\r\n if (this.isComb) return this.$message.error('该组件只能添加一次');\r\n if (this.isSearch || this.isTab) return this.$message.error('轮播搜索不能和搜索组件与选项卡组件同时存在');\r\n this.isComb = true;\r\n }\r\n if (item.name == 'home_service') {\r\n if (this.isService) return this.$message.error('该组件只能添加一次');\r\n this.isService = true;\r\n }\r\n let obj = {};\r\n let timestamp = new Date().getTime() * 1000;\r\n item.num = `${timestamp}`;\r\n item.id = `id${timestamp}`;\r\n this.activeConfigName = item.name;\r\n let tempItem = JSON.parse(JSON.stringify(item));\r\n if (item.name == 'home_comb') {\r\n this.rConfig = [];\r\n this.mConfig.unshift(tempItem);\r\n this.activeIndex = 0;\r\n this.rConfig.push(tempItem);\r\n } else if (item.name == 'search_box') {\r\n this.rConfig = [];\r\n this.mConfig.unshift(tempItem);\r\n this.activeIndex = 0;\r\n this.rConfig.push(tempItem);\r\n } else if (item.name == 'nav_bar') {\r\n this.rConfig = [];\r\n if (this.mConfig[0] && this.mConfig[0].name === 'search_box') {\r\n this.mConfig.splice(1, 0, tempItem);\r\n this.activeIndex = 1;\r\n } else {\r\n this.mConfig.splice(0, 0, tempItem);\r\n this.activeIndex = 0;\r\n }\r\n this.rConfig.push(tempItem);\r\n } else {\r\n if (type) {\r\n this.rConfig = [];\r\n if (this.activeIndex == 0 && this.mConfig[1] && this.mConfig[1].name == 'nav_bar') {\r\n this.activeIndex = 2;\r\n } else {\r\n this.activeIndex = this.activeIndex >= 0 ? this.activeIndex + 1 : this.mConfig.length;\r\n }\r\n this.mConfig.splice(this.activeIndex, 0, tempItem);\r\n this.rConfig.push(tempItem);\r\n } else {\r\n this.mConfig.splice(index + 1, 0, tempItem);\r\n this.activeIndex = index;\r\n }\r\n }\r\n this.mConfig.forEach((el, index) => {\r\n el.num = new Date().getTime() * 1000 + index;\r\n });\r\n // 保存组件名称\r\n obj.element = item;\r\n obj.list = this.mConfig;\r\n this.$store.commit('mobildConfig/SETCONFIGNAME', item.name);\r\n this.$store.commit('mobildConfig/defaultArraySort', obj);\r\n },\r\n //中间页点击添加模块;\r\n bindAddDom(item, type, index) {\r\n let i = item;\r\n this.lConfig.forEach((j) => {\r\n if (item.name == j.name) {\r\n i = j;\r\n }\r\n });\r\n this.addDomCon(i, type, index);\r\n },\r\n //左边配置模块点击添加;\r\n addDom(item, type) {\r\n this.addDomCon(item, type);\r\n },\r\n // 点击显示相应的配置\r\n bindconfig(item, index) {\r\n this.rConfig = [];\r\n let tempItem = JSON.parse(JSON.stringify(item));\r\n this.rConfig.push(tempItem);\r\n this.activeIndex = index;\r\n this.$store.commit('mobildConfig/SETCONFIGNAME', item.name);\r\n },\r\n bindHide(item) {\r\n let obj = this.$store.state.mobildConfig.defaultArray;\r\n let num = this.rConfig[0].num;\r\n obj[num].isHide = !obj[num].isHide;\r\n this.$store.commit('mobildConfig/UPDATEARR', { num: num, val: obj[num] });\r\n },\r\n // 组件删除\r\n bindDelete(item, key) {\r\n if (item.name == 'search_box') {\r\n this.isSearch = false;\r\n }\r\n if (item.name == 'nav_bar') {\r\n this.isTab = false;\r\n }\r\n if (item.name == 'home_comb') {\r\n this.isComb = false;\r\n }\r\n if (item.name == 'home_service') {\r\n this.isService = false;\r\n }\r\n this.mConfig.splice(key, 1);\r\n this.rConfig.splice(0, 1);\r\n if (this.mConfig.length != key) {\r\n this.rConfig.push(this.mConfig[key]);\r\n } else {\r\n if (this.mConfig.length) {\r\n this.activeIndex = key - 1;\r\n this.rConfig.push(this.mConfig[key - 1]);\r\n } else {\r\n this.showTitle();\r\n }\r\n }\r\n // 删除第几个配置\r\n this.$store.commit('mobildConfig/DELETEARRAY', item);\r\n },\r\n // 组件返回\r\n config(data) {\r\n let propsObj = this.propsObj;\r\n propsObj.data = data;\r\n propsObj.name = this.activeConfigName;\r\n },\r\n addSort(arr, index1, index2) {\r\n arr[index1] = arr.splice(index2, 1, arr[index1])[0];\r\n return arr;\r\n },\r\n // 数组排序\r\n arraySort() {\r\n let tempArr = [];\r\n let basis = {\r\n title: '基础组件',\r\n list: [],\r\n isOpen: true,\r\n };\r\n let marketing = {\r\n title: '营销组件',\r\n list: [],\r\n isOpen: true,\r\n };\r\n let tool = {\r\n title: '工具组件',\r\n list: [],\r\n isOpen: true,\r\n };\r\n this.lConfig.map((el, index) => {\r\n if (el.type == 0) {\r\n basis.list.push(el);\r\n }\r\n if (el.type == 1) {\r\n marketing.list.push(el);\r\n }\r\n if (el.type == 2) {\r\n tool.list.push(el);\r\n }\r\n });\r\n tempArr.push(basis, marketing, tool);\r\n this.leftMenu = tempArr;\r\n },\r\n // toImage(val){\r\n // html2canvas(this.$refs.imgContainer,{\r\n // useCORS:true,\r\n // logging:true,\r\n // taintTest: false,\r\n // backgroundColor: null\r\n // }).then((canvas) => {\r\n // let imgUrl = canvas.toDataURL('image/jpeg');\r\n // this.diySaveDate(val,imgUrl)\r\n // });\r\n // },\r\n diySaveDate(val, num, type, save) {\r\n diyProSave(type ? 0 : this.pageId, {\r\n type: this.pageType || save,\r\n value: val,\r\n title: this.titleTxt,\r\n name: this.nameTxt || '模板',\r\n is_show: this.showTxt ? 1 : 0,\r\n is_bg_color: this.colorTxt ? 1 : 0,\r\n color_picker: this.colorPickerTxt,\r\n bg_pic: this.picUrlTxt,\r\n bg_tab_val: this.tabValTxt,\r\n is_bg_pic: this.picTxt ? 1 : 0,\r\n })\r\n .then((res) => {\r\n this.pageId = res.data.id;\r\n this.$message.success(res.msg);\r\n let that = this;\r\n this.nameModal = false;\r\n if (num == 2) {\r\n this.relLoading = false;\r\n setTimeout(() => {\r\n window.location.replace(this.$routeProStr + '/setting/pages/devise/0');\r\n }, 2000);\r\n } else {\r\n this.loading = false;\r\n }\r\n })\r\n .catch((res) => {\r\n this.relLoading = false;\r\n this.loading = false;\r\n this.$message.error(res.msg);\r\n });\r\n },\r\n saveModal() {\r\n if (!this.saveName) return this.$message.warning('请先输入模板名称');\r\n this.saveConfig(1, this.saveName);\r\n },\r\n closeWindow() {\r\n this.$msgbox({\r\n title: '提示',\r\n message: '关闭页面前请先保存数据,未保存的话数据会丢失',\r\n showCancelButton: true,\r\n cancelButtonText: '取消',\r\n confirmButtonText: '确定',\r\n iconClass: 'el-icon-warning',\r\n confirmButtonClass: 'btn-custom-cancel',\r\n })\r\n .then(() => {\r\n setTimeout(() => {\r\n // this.saveConfig();\r\n window.close();\r\n }, 1000);\r\n })\r\n .catch(() => {});\r\n },\r\n // 保存配置\r\n saveConfig(num, type, save) {\r\n if (this.mConfig.length == 0) {\r\n return this.$message.error('暂未添加任何组件,保存失败!');\r\n }\r\n if (num == 1) {\r\n this.loading = true;\r\n } else {\r\n this.relLoading = true;\r\n }\r\n let val = this.$store.state.mobildConfig.defaultArray;\r\n if (!this.footActive) {\r\n let timestamp = new Date().getTime() * 1000;\r\n val[timestamp] = this.$store.state.mobildConfig.pageFooter;\r\n this.footActive = true;\r\n }\r\n this.$nextTick(() => {\r\n this.diySaveDate(val, num, type, save);\r\n });\r\n },\r\n // 获取默认配置\r\n getDefaultConfig() {\r\n diyProInfo(this.pageId, {\r\n type: 1,\r\n }).then(({ data }) => {\r\n let obj = {};\r\n let tempARR = [];\r\n this.$store.commit('mobildConfig/titleUpdata', data.info.title);\r\n this.$store.commit('mobildConfig/nameUpdata', data.info.name);\r\n this.$store.commit('mobildConfig/showUpdata', data.info.is_show);\r\n this.$store.commit('mobildConfig/colorUpdata', data.info.is_bg_color || 0);\r\n this.$store.commit('mobildConfig/picUpdata', data.info.is_bg_pic || 0);\r\n this.$store.commit('mobildConfig/pickerUpdata', data.info.color_picker || '#f5f5f5');\r\n this.$store.commit('mobildConfig/radioUpdata', data.info.bg_tab_val || 0);\r\n this.$store.commit('mobildConfig/picurlUpdata', data.info.bg_pic || '');\r\n this.diyStatus = data.info.status;\r\n let newArr = this.objToArr(data.info.value);\r\n\r\n function sortNumber(a, b) {\r\n return a.timestamp - b.timestamp;\r\n }\r\n newArr.sort(sortNumber);\r\n newArr.map((el, index) => {\r\n if (el.name == 'headerSerch') {\r\n this.isSearch = true;\r\n }\r\n if (el.name == 'tabNav') {\r\n this.isTab = true;\r\n }\r\n if (el.name == 'homeComb') {\r\n this.isComb = true;\r\n }\r\n if (el.name == 'customerService') {\r\n this.isService = true;\r\n }\r\n if (el.name == 'goodList') {\r\n // let storage = window.localStorage;\r\n // storage.setItem(el.timestamp, el.selectConfig.activeValue);\r\n }\r\n el.id = 'id' + el.timestamp;\r\n this.lConfig.map((item, j) => {\r\n if (el.name == item.defaultName) {\r\n item.num = el.timestamp;\r\n item.id = 'id' + el.timestamp;\r\n let tempItem = JSON.parse(JSON.stringify(item));\r\n tempARR.push(tempItem);\r\n obj[el.timestamp] = el;\r\n this.mConfig.push(tempItem);\r\n // 保存默认组件配置\r\n this.$store.commit('mobildConfig/ADDARRAY', {\r\n num: el.timestamp,\r\n val: el,\r\n });\r\n }\r\n });\r\n });\r\n\r\n let objs = newArr[newArr.length - 1];\r\n\r\n if (objs.name == 'pageFoot') {\r\n this.$store.commit('mobildConfig/footPageUpdata', objs);\r\n }\r\n this.showTitle();\r\n });\r\n },\r\n categoryList() {\r\n categoryList((res) => {\r\n this.category = res.data;\r\n });\r\n },\r\n // 重置\r\n reast() {\r\n if (this.pageId == 0) {\r\n this.$message.error('新增页面,无法重置');\r\n } else {\r\n this.$confirm('此操作将清空模板内容, 是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning',\r\n }).then((res) => {\r\n this.mConfig = [];\r\n this.rConfig = [];\r\n this.activeIndex = -99;\r\n this.getDefaultConfig();\r\n });\r\n }\r\n },\r\n },\r\n beforeDestroy() {\r\n this.$store.commit('mobildConfig/titleUpdata', '');\r\n this.$store.commit('mobildConfig/nameUpdata', '');\r\n this.$store.commit('mobildConfig/showUpdata', 1);\r\n this.$store.commit('mobildConfig/colorUpdata', 0);\r\n this.$store.commit('mobildConfig/picUpdata', 0);\r\n this.$store.commit('mobildConfig/pickerUpdata', '#f5f5f5');\r\n this.$store.commit('mobildConfig/radioUpdata', 0);\r\n this.$store.commit('mobildConfig/picurlUpdata', '');\r\n this.$store.commit('mobildConfig/SETEMPTY');\r\n },\r\n destroyed() {\r\n this.$store.commit('mobildConfig/titleUpdata', '');\r\n this.$store.commit('mobildConfig/nameUpdata', '');\r\n this.$store.commit('mobildConfig/showUpdata', 1);\r\n this.$store.commit('mobildConfig/colorUpdata', 0);\r\n this.$store.commit('mobildConfig/picUpdata', 0);\r\n this.$store.commit('mobildConfig/pickerUpdata', '#f5f5f5');\r\n this.$store.commit('mobildConfig/radioUpdata', 0);\r\n this.$store.commit('mobildConfig/picurlUpdata', '');\r\n this.$store.commit('mobildConfig/SETEMPTY');\r\n },\r\n};\r\n</script>\r\n<style>\r\n.el-main {\r\n padding: 0px !important;\r\n}\r\n</style>\r\n<style scoped>\r\n.header-title {\r\n background: var(--prev-color-primary);\r\n border-radius: 0;\r\n margin-bottom: 0;\r\n padding: 16px;\r\n}\r\n.ivu-page-header-title {\r\n color: #fff;\r\n font-size: 16px;\r\n}\r\n</style>\r\n<style scoped lang=\"scss\">\r\n::v-deep .el-card__body {\r\n padding: 0;\r\n}\r\n::v-deep {\r\n .icondel_1,\r\n .upload-box {\r\n cursor: pointer;\r\n }\r\n .el-checkbox,\r\n .el-radio {\r\n margin-bottom: 15px;\r\n margin-right: 15px;\r\n }\r\n}\r\n.c_label {\r\n margin-top: 0;\r\n}\r\n::v-deep .el-button--small {\r\n // border-radius: 0;\r\n border-radius: 4px;\r\n}\r\n.look,\r\n.look:hover,\r\n.look:focus,\r\n.look:active,\r\n.close,\r\n.close:hover,\r\n.close:focus,\r\n.close:active {\r\n background: var(--prev-color-primary);\r\n color: #fff;\r\n border-color: #fff;\r\n}\r\n\r\n.save,\r\n.save:hover,\r\n.save:active,\r\n.save:focus {\r\n background: #fff;\r\n color: var(--prev-color-primary);\r\n border-color: var(--prev-color-primary);\r\n}\r\n::v-deep .c_row-item {\r\n margin-bottom: 15px;\r\n}\r\n.ysize {\r\n background-size: 100%;\r\n}\r\n\r\n.fullsize {\r\n background-size: 100% 100%;\r\n}\r\n\r\n.repeat {\r\n background-repeat: repeat;\r\n}\r\n\r\n.noRepeat {\r\n background-repeat: no-repeat;\r\n}\r\n.fl_header {\r\n color: #fff;\r\n .f-title {\r\n position: relative;\r\n }\r\n .return {\r\n color: #fff;\r\n margin-right: 34px;\r\n margin-left: 5px;\r\n &::after {\r\n content: ' ';\r\n position: absolute;\r\n width: 1px;\r\n height: 16px;\r\n background-color: rgba(238, 238, 238, 0.5);\r\n left: 65px;\r\n top: 50%;\r\n margin-top: -8px;\r\n }\r\n }\r\n .iconfont {\r\n color: #fff;\r\n }\r\n .f_title {\r\n &:hover {\r\n .return {\r\n color: rgba(255, 255, 255, 0.8);\r\n }\r\n .iconfanhui {\r\n color: rgba(255, 255, 255, 0.8);\r\n }\r\n }\r\n .name {\r\n font-size: 16px;\r\n }\r\n .iconfont {\r\n margin-left: 10px;\r\n color: #fff;\r\n }\r\n }\r\n}\r\n.wrapper-con {\r\n position: relative;\r\n flex: 1;\r\n background: #f0f2f5;\r\n display: flex;\r\n justify-content: center;\r\n padding-top: 20px;\r\n height: 100%;\r\n .acticons {\r\n position: absolute;\r\n right: 20px;\r\n top: 20px;\r\n display: flex;\r\n flex-direction: column;\r\n z-index: 1;\r\n .el-button + .el-button {\r\n margin-left: 0;\r\n }\r\n }\r\n /* min-width 700px; */\r\n}\r\n.main .content-wrapper {\r\n padding: 0 !important;\r\n}\r\n.defaultData {\r\n /* margin-left 20px; */\r\n cursor: pointer;\r\n position: absolute;\r\n left: 50%;\r\n margin-left: 245px;\r\n\r\n .data {\r\n display: block;\r\n margin-top: 20px;\r\n color: #282828;\r\n background-color: #fff;\r\n width: 94px;\r\n text-align: center;\r\n height: 32px;\r\n border-radius: 3px;\r\n font-size: 12px;\r\n margin-left: 0 !important;\r\n }\r\n\r\n .data:hover {\r\n background-color: #2d8cf0;\r\n color: #fff;\r\n border: 0;\r\n }\r\n}\r\n\r\n.overflowy {\r\n margin-right: 4px;\r\n\r\n .picture {\r\n width: 379px;\r\n height: 20px;\r\n margin: 0 auto;\r\n background-color: #fff;\r\n }\r\n}\r\n\r\n.bnt {\r\n width: 80px !important;\r\n}\r\n\r\n/* 定义滑块 内阴影+圆角 */\r\n::-webkit-scrollbar-thumb {\r\n -webkit-box-shadow: inset 0 0 6px #fff;\r\n display: none;\r\n}\r\n\r\n.left:hover::-webkit-scrollbar-thumb,\r\n.right-box:hover::-webkit-scrollbar-thumb {\r\n display: block;\r\n}\r\n\r\n.contxt:hover ::-webkit-scrollbar-thumb {\r\n display: block;\r\n}\r\n\r\n::-webkit-scrollbar {\r\n width: 4px !important; /* 对垂直流动条有效 */\r\n}\r\n\r\n.scrollCon {\r\n overflow-y: scroll;\r\n overflow-x: hidden;\r\n}\r\n\r\n.scroll-box .position {\r\n display: block !important;\r\n height: 40px;\r\n text-align: center;\r\n line-height: 40px;\r\n border: 1px dashed var(--prev-color-primary);\r\n color: var(--prev-color-primary);\r\n background-color: #edf4fb;\r\n}\r\n\r\n.scroll-box .conter {\r\n display: none !important;\r\n}\r\n.conter {\r\n margin-top: 3px;\r\n}\r\n.dragClass {\r\n background-color: #fff;\r\n}\r\n\r\n.ivu-mt {\r\n display: flex;\r\n justify-content: space-between;\r\n margin-bottom: 10px;\r\n}\r\n\r\n.iconfont-diy {\r\n font-size: 24px;\r\n color: var(--prev-color-primary);\r\n}\r\n\r\n.diy-wrapper {\r\n max-width: 100%;\r\n min-width: 1100px;\r\n display: flex;\r\n justify-content: space-between;\r\n height: calc(100vh - 62px);\r\n .left {\r\n min-width: 300px;\r\n max-width: 300px;\r\n /* border 1px solid #DDDDDD */\r\n border-radius: 4px;\r\n height: 100%;\r\n\r\n .title-bar {\r\n display: flex;\r\n color: #333;\r\n border-bottom: 1px solid #eee;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n\r\n .title-item {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex: 1;\r\n height: 45px;\r\n\r\n &.on {\r\n color: var(--prev-color-primary);\r\n font-size: 14px;\r\n border-bottom: 1px solid var(--prev-color-primary);\r\n }\r\n }\r\n }\r\n\r\n .wrapper {\r\n padding: 15px;\r\n overflow-y: scroll;\r\n -webkit-overflow-scrolling: touch;\r\n\r\n .tips {\r\n display: flex;\r\n justify-content: space-between;\r\n padding-bottom: 15px;\r\n font-size: 13px;\r\n color: #000;\r\n cursor: pointer;\r\n\r\n .ivu-icon {\r\n color: #000;\r\n }\r\n }\r\n }\r\n\r\n .link-item {\r\n padding: 10px;\r\n border-bottom: 1px solid #f5f5f5;\r\n font-size: 12px;\r\n color: #323232;\r\n\r\n .name {\r\n font-size: 14px;\r\n color: var(--prev-color-primary);\r\n }\r\n .copy_btn {\r\n cursor: pointer;\r\n }\r\n\r\n .link-txt {\r\n margin-top: 2px;\r\n word-break: break-all;\r\n }\r\n\r\n .params {\r\n margin-top: 5px;\r\n color: #1cbe6b;\r\n word-break: break-all;\r\n\r\n .txt {\r\n color: #323232;\r\n }\r\n\r\n span {\r\n &:last-child i {\r\n display: none;\r\n color: red;\r\n }\r\n }\r\n }\r\n\r\n .lable {\r\n display: flex;\r\n margin-top: 5px;\r\n color: #999;\r\n\r\n p {\r\n flex: 1;\r\n word-break: break-all;\r\n }\r\n\r\n button {\r\n margin-left: 30px;\r\n width: 38px;\r\n }\r\n }\r\n }\r\n\r\n .dragArea.list-group {\r\n display: flex;\r\n flex-wrap: wrap;\r\n\r\n .list-group-item {\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n justify-content: center;\r\n width: 74px;\r\n height: 66px;\r\n margin-right: 17px;\r\n margin-bottom: 10px;\r\n font-size: 12px;\r\n color: #666;\r\n cursor: pointer;\r\n border-radius: 5px;\r\n text-align: center;\r\n\r\n &:hover {\r\n box-shadow: 0 0 5px 0 rgba(24, 144, 255, 0.3);\r\n border-right: 5px;\r\n transform: scale(1.1);\r\n transition: all 0.2s;\r\n }\r\n\r\n &:nth-child(3n) {\r\n margin-right: 0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .content {\r\n position: relative;\r\n height: 100%;\r\n width: 100%;\r\n\r\n .page-foot {\r\n position: relative;\r\n width: 379px;\r\n margin: 0 auto 20px auto;\r\n\r\n .delete-box {\r\n display: none;\r\n position: absolute;\r\n left: -2px;\r\n top: 0;\r\n width: 383px;\r\n height: 100%;\r\n border: 2px dashed var(--prev-color-primary);\r\n padding: 10px 0;\r\n }\r\n\r\n &:hover,\r\n &.on {\r\n /* cursor: move; */\r\n .delete-box {\r\n /* display: block; */\r\n }\r\n }\r\n\r\n &.on {\r\n cursor: move;\r\n\r\n .delete-box {\r\n display: block;\r\n border: 2px solid var(--prev-color-primary);\r\n box-shadow: 0 0 10px 0 rgba(24, 144, 255, 0.3);\r\n }\r\n }\r\n }\r\n\r\n .page-title {\r\n position: relative;\r\n height: 35px;\r\n line-height: 35px;\r\n background: #fff;\r\n font-size: 15px;\r\n color: #333333;\r\n text-align: center;\r\n width: 379px;\r\n margin: 0 auto;\r\n\r\n .delete-box {\r\n display: none;\r\n position: absolute;\r\n left: -2px;\r\n top: 0;\r\n width: 383px;\r\n height: 100%;\r\n border: 2px dashed var(--prev-color-primary);\r\n padding: 10px 0;\r\n\r\n span {\r\n position: absolute;\r\n right: 0;\r\n bottom: 0;\r\n width: 32px;\r\n height: 16px;\r\n line-height: 16px;\r\n display: inline-block;\r\n text-align: center;\r\n font-size: 10px;\r\n color: #fff;\r\n background: rgba(0, 0, 0, 0.4);\r\n margin-left: 2px;\r\n cursor: pointer;\r\n z-index: 11;\r\n }\r\n }\r\n\r\n &:hover,\r\n &.on {\r\n /* cursor: move; */\r\n .delete-box {\r\n /* display: block; */\r\n }\r\n }\r\n\r\n &.on {\r\n cursor: move;\r\n\r\n .delete-box {\r\n display: block;\r\n border: 2px solid var(--prev-color-primary);\r\n box-shadow: 0 0 10px 0 rgba(24, 144, 255, 0.3);\r\n }\r\n }\r\n }\r\n\r\n .scroll-box {\r\n flex: 1;\r\n background-color: #fff;\r\n width: 379px;\r\n margin: 0 auto;\r\n padding-top: 1px;\r\n }\r\n\r\n .dragArea.list-group {\r\n width: 100%;\r\n height: 100%;\r\n\r\n .mConfig-item {\r\n position: relative;\r\n cursor: move;\r\n &.hide {\r\n &::before {\r\n position: absolute;\r\n content: '已隐藏';\r\n background: rgba(0, 0, 0, 0.5);\r\n width: 100%;\r\n height: 100%;\r\n z-index: 99;\r\n color: #fff;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n }\r\n }\r\n .delete-name.on {\r\n background: var(--prev-color-primary-light-3);\r\n color: #fff;\r\n &::before {\r\n background: var(--prev-color-primary-light-3);\r\n }\r\n }\r\n .delete-name {\r\n position: absolute;\r\n top: 0;\r\n background: #fff;\r\n left: -100px;\r\n width: 86px;\r\n height: 32px;\r\n text-align: center;\r\n line-height: 32px;\r\n font-size: 13px;\r\n color: #666;\r\n border-radius: 3px;\r\n\r\n &::before {\r\n content: '';\r\n position: absolute;\r\n width: 10px;\r\n height: 10px;\r\n background: #fff;\r\n transform: rotate(45deg);\r\n top: 50%;\r\n right: -5px;\r\n margin-top: -5px;\r\n }\r\n }\r\n .delete-box {\r\n display: none;\r\n position: absolute;\r\n left: -2px;\r\n top: 0;\r\n width: 383px;\r\n height: 100%;\r\n border: 2px dashed var(--prev-color-primary);\r\n\r\n /* padding: 10px 0; */\r\n .handleType {\r\n position: absolute;\r\n right: -43px;\r\n top: 0;\r\n width: 36px;\r\n border-radius: 4px;\r\n background-color: var(--prev-color-primary);\r\n cursor: pointer;\r\n color: #fff;\r\n font-weight: bold;\r\n text-align: center;\r\n padding: 4px 0;\r\n .el-tooltip {\r\n background-color: inherit;\r\n color: inherit;\r\n }\r\n .iconfont {\r\n padding: 5px 0;\r\n\r\n &.on {\r\n opacity: 0.4;\r\n }\r\n }\r\n }\r\n }\r\n\r\n &.on {\r\n cursor: move;\r\n\r\n .delete-box {\r\n display: block;\r\n border: 2px solid var(--prev-color-primary);\r\n box-shadow: 0 0 10px 0 rgba(24, 144, 255, 0.3);\r\n }\r\n }\r\n }\r\n\r\n .mConfig-item:hover {\r\n transform: scale(1.01);\r\n box-shadow: 0 0 10px 0 rgba(24, 144, 255, 0.3);\r\n transition: all 0.2s;\r\n }\r\n }\r\n }\r\n\r\n .right-box {\r\n max-width: 400px;\r\n min-width: 400px;\r\n height: 100%;\r\n border-radius: 4px;\r\n overflow: scroll;\r\n -webkit-overflow-scrolling: touch;\r\n\r\n ::v-deep .ivu-tabs-bar {\r\n margin-bottom: 16px;\r\n }\r\n\r\n .title-bar {\r\n width: 100%;\r\n height: 45px;\r\n line-height: 45px;\r\n padding-left: 24px;\r\n color: #000;\r\n border-radius: 4px;\r\n border-bottom: 1px solid #eee;\r\n font-size: 14px;\r\n }\r\n }\r\n\r\n ::-webkit-scrollbar {\r\n width: 6px;\r\n background-color: transparent;\r\n }\r\n\r\n ::-webkit-scrollbar-track {\r\n border-radius: 10px;\r\n }\r\n\r\n ::-webkit-scrollbar-thumb {\r\n background-color: #bfc1c4;\r\n }\r\n}\r\n\r\n.foot-box {\r\n position: relative;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n height: 80px;\r\n background: #fff;\r\n box-shadow: 0px -2px 4px 0px rgba(0, 0, 0, 0.03);\r\n\r\n button {\r\n width: 100px;\r\n height: 32px;\r\n font-size: 13px;\r\n\r\n &:first-child {\r\n margin-right: 20px;\r\n }\r\n }\r\n}\r\n\r\n::v-deep .ivu-scroll-loader {\r\n display: none;\r\n}\r\n\r\n::v-deep .ivu-card-body {\r\n width: 100%;\r\n padding: 0;\r\n height: calc(100vh - 73px);\r\n}\r\n\r\n.rbtn {\r\n position: absolute;\r\n right: 20px;\r\n}\r\n.code {\r\n position: relative;\r\n}\r\n\r\n.QRpic {\r\n width: 160px;\r\n height: 160px;\r\n\r\n img {\r\n width: 100%;\r\n height: 100%;\r\n }\r\n}\r\n.contxt {\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden;\r\n height: 100%;\r\n}\r\n\r\n.contxt:hover ::-webkit-scrollbar-thumb {\r\n display: block;\r\n}\r\n.iconfont-diy {\r\n font-size: 24px;\r\n color: var(--prev-color-primary);\r\n}\r\n.icon {\r\n width: 28px;\r\n height: 28px;\r\n // vertical-align: -0.15em;\r\n fill: currentColor;\r\n overflow: hidden;\r\n}\r\n</style>\r\n"]}]}
|