e381ccafae07c97ff11ea590004ea259.json 78 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\system\\backendRouting\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\system\\backendRouting\\index.vue","mtime":1761614939067},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQppbXBvcnQgew0KICByb3V0ZUNhdGUsDQogIHN5bmNSb3V0ZSwNCiAgcm91dGVMaXN0LA0KICByb3V0ZURldCwNCiAgcm91dGVTYXZlLA0KICBpbnRlcmZhY2VFZGl0TmFtZSwNCiAgcm91dGVEZWwsDQogIHJvdXRlRWRpdCwNCiAgcm91dGVDYXRlRGVsLA0KfSBmcm9tICdAL2FwaS9zeXN0ZW1CYWNrZW5kUm91dGluZyc7DQppbXBvcnQgeyBWdWVUcmVlTGlzdCwgVHJlZSwgVHJlZU5vZGUgfSBmcm9tICd2dWUtdHJlZS1saXN0JzsNCmltcG9ydCBkZWJ1Z2dpbmcgZnJvbSAnLi9kZWJ1Z2dpbmcudnVlJzsNCg0KaW1wb3J0IHsgbWFwU3RhdGUgfSBmcm9tICd2dWV4JzsNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ3N5c3RlbU91dEludGVyZmFjZScsDQogIGNvbXBvbmVudHM6IHsNCiAgICBWdWVUcmVlTGlzdCwNCiAgICBkZWJ1Z2dpbmcsDQogIH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIHZhbHVlOiAnJywNCiAgICAgIGlzRWRpdDogZmFsc2UsDQogICAgICBuYW1lTW9kYWw6IGZhbHNlLA0KICAgICAgZGVidWdnaW5nTW9kYWw6IGZhbHNlLA0KICAgICAgZm9ybVZhbGlkYXRlOiB7fSwNCiAgICAgIGdyaWQ6IHsNCiAgICAgICAgeGw6IDcsDQogICAgICAgIGxnOiA3LA0KICAgICAgICBtZDogMTIsDQogICAgICAgIHNtOiAyNCwNCiAgICAgICAgeHM6IDI0LA0KICAgICAgfSwNCiAgICAgIHJ1bGVWYWxpZGF0ZTogew0KICAgICAgICB0aXRsZTogW3sgbWVzc2FnZTogJ+ivt+i+k+WFpeato+ehrueahOaPj+i/sCAo5LiN6IO95aSa5LqOMjAw5L2N5pWwKScsIHRyaWdnZXI6ICdibHVyJywgbWF4OiAyMDAgfV0sDQogICAgICB9LA0KICAgICAgbG9hZGluZzogZmFsc2UsDQogICAgICBpbnRUeXBlTGlzdDogWw0KICAgICAgICB7DQogICAgICAgICAgdmFsdWU6ICdzdHJpbmcnLA0KICAgICAgICAgIGxhYmVsOiAnU3RyaW5nJywNCiAgICAgICAgfSwNCiAgICAgICAgLy8gew0KICAgICAgICAvLyAgIHZhbHVlOiAnYXJyYXknLA0KICAgICAgICAvLyAgIGxhYmVsOiAnQXJyYXknLA0KICAgICAgICAvLyB9LA0KICAgICAgICAvLyB7DQogICAgICAgIC8vICAgdmFsdWU6ICdvYmplY3QnLA0KICAgICAgICAvLyAgIGxhYmVsOiAnT2JqZWN0JywNCiAgICAgICAgLy8gfSwNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAnbnVtYmVyJywNCiAgICAgICAgICBsYWJlbDogJ051bWJlcicsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogJ2Jvb2xlYW4nLA0KICAgICAgICAgIGxhYmVsOiAnQm9vbGVhbicsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogJ251bGwnLA0KICAgICAgICAgIGxhYmVsOiAnTnVsbCcsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogJ2FueScsDQogICAgICAgICAgbGFiZWw6ICdBbnknLA0KICAgICAgICB9LA0KICAgICAgXSwNCiAgICAgIHR5cGVMaXN0OiBbDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogJ3N0cmluZycsDQogICAgICAgICAgbGFiZWw6ICdTdHJpbmcnLA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgdmFsdWU6ICdhcnJheScsDQogICAgICAgICAgbGFiZWw6ICdBcnJheScsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogJ29iamVjdCcsDQogICAgICAgICAgbGFiZWw6ICdPYmplY3QnLA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgdmFsdWU6ICdudW1iZXInLA0KICAgICAgICAgIGxhYmVsOiAnTnVtYmVyJywNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAnYm9vbGVhbicsDQogICAgICAgICAgbGFiZWw6ICdCb29sZWFuJywNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAnbnVsbCcsDQogICAgICAgICAgbGFiZWw6ICdOdWxsJywNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAnYW55JywNCiAgICAgICAgICBsYWJlbDogJ0FueScsDQogICAgICAgIH0sDQogICAgICBdLA0KICAgICAgcmVxdWVzdFR5cGVMaXN0OiBbDQogICAgICAgIHsNCiAgICAgICAgICB2YWx1ZTogJ0dFVCcsDQogICAgICAgICAgbGFiZWw6ICdHRVQnLA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgdmFsdWU6ICdQT1NUJywNCiAgICAgICAgICBsYWJlbDogJ1BPU1QnLA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgdmFsdWU6ICdERUxFVEUnLA0KICAgICAgICAgIGxhYmVsOiAnREVMRVRFJywNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHZhbHVlOiAnUFVUJywNCiAgICAgICAgICBsYWJlbDogJ1BVVCcsDQogICAgICAgIH0sDQogICAgICBdLA0KICAgICAgY29udGV4dERhdGE6IG51bGwsIC8v5bem5L6n5a+86Iiq5Y+z6ZSu54K55Ye75piv5Lqn55Sf55qE5pWw5o2u5a+56LGhDQogICAgICB0cmVlRGF0YTogdW5kZWZpbmVkLA0KICAgICAgYnV0dG9uUHJvcHM6IHsNCiAgICAgICAgdHlwZTogJ2RlZmF1bHQnLA0KICAgICAgICBzaXplOiAnc21hbGwnLA0KICAgICAgfSwNCiAgICAgIG1ldGhvZENvbG9yOiAnI2ZmZicsDQogICAgICBhcGlUeXBlOiAnYWRtaW5hcGknLA0KICAgICAgcGFyYW1zSWQ6IDAsDQogICAgICB3aW5Mb2FkaW5nOiBmYWxzZSwNCiAgICB9Ow0KICB9LA0KICB3YXRjaDogew0KICAgIFsnZm9ybVZhbGlkYXRlLm1ldGhvZCddOiB7DQogICAgICBkZWVwOiB0cnVlLA0KICAgICAgaGFuZGxlcihuZXdWYWwsIG9sZFZhbCkgew0KICAgICAgICBpZiAobmV3VmFsKSB7DQogICAgICAgICAgbGV0IG1ldGhvZCA9IG5ld1ZhbC50b1VwcGVyQ2FzZSgpOw0KICAgICAgICAgIGlmIChtZXRob2QgPT0gJ0dFVCcpIHsNCiAgICAgICAgICAgIHRoaXMubWV0aG9kQ29sb3IgPSAnIzYxYWZmZSc7DQogICAgICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT0gJ1BPU1QnKSB7DQogICAgICAgICAgICB0aGlzLm1ldGhvZENvbG9yID0gJyM0OWNjOTAnOw0KICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdQVVQnKSB7DQogICAgICAgICAgICB0aGlzLm1ldGhvZENvbG9yID0gJyNmY2ExMzAnOw0KICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdERUwnIHx8IG1ldGhvZCA9PSAnREVMRVRFJykgew0KICAgICAgICAgICAgdGhpcy5tZXRob2RDb2xvciA9ICcjZjkzZTNlJzsNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgIH0sDQogICAgfSwNCiAgICBhcGlUeXBlKG5ld1ZhbCkgew0KICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICB0aGlzLndpbkxvYWRpbmcgPSB0cnVlOw0KICAgICAgICB0aGlzLmdldEludGVyZmFjZUxpc3QoJ29uZScpOw0KICAgICAgfQ0KICAgIH0sDQogICAgaXNFZGl0KG5ld1ZhbCkgew0KICAgICAgaWYgKG5ld1ZhbCkgew0KICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5yZXNwb25zZV9leGFtcGxlLm1hcCgoZSkgPT4gew0KICAgICAgICAgIGUuZGF0YSA9IEpTT04uc3RyaW5naWZ5KGUuZGF0YSk7DQogICAgICAgIH0pOw0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucmVzcG9uc2VfZXhhbXBsZS5tYXAoKGUpID0+IHsNCiAgICAgICAgICBlLmRhdGEgPSBKU09OLnBhcnNlKGUuZGF0YSk7DQogICAgICAgIH0pOw0KICAgICAgfQ0KICAgIH0sDQogIH0sDQogIGNvbXB1dGVkOiB7DQogICAgLi4ubWFwU3RhdGUoJ21lZGlhJywgWydpc01vYmlsZSddKSwNCiAgICBsYWJlbFdpZHRoKCkgew0KICAgICAgcmV0dXJuIHRoaXMuaXNNb2JpbGUgPyB1bmRlZmluZWQgOiAnNTBweCc7DQogICAgfSwNCiAgICBsYWJlbFBvc2l0aW9uKCkgew0KICAgICAgcmV0dXJuIHRoaXMuaXNNb2JpbGUgPyAndG9wJyA6ICdyaWdodCc7DQogICAgfSwNCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICB0aGlzLmdldEludGVyZmFjZUxpc3QoJ29uZScpOw0KICB9LA0KICBtZXRob2RzOiB7DQogICAgc3luY1JvdXRlKCkgew0KICAgICAgdGhpcy4kbXNnYm94KHsNCiAgICAgICAgdGl0bGU6ICfnq4vljbPlkIzmraUnLA0KICAgICAgICBtZXNzYWdlOiAn5ZCM5q2l5LmL5ZCO77yM6Lev55Sx5paH5Lu25Lit5paw5aKe55qE5o6l5Y+j5re75Yqg5Yiw5o6l5Y+j5YiX6KGo5Lit77yM6Lev55Sx5paH5Lu25Lit5Yig6Zmk55qE6Lev55Sx5Lya5ZCM5q2l55qE5Zyo5o6l5Y+j5YiX6KGo5Lit5Yig6ZmkJywNCiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSwNCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsDQogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywNCiAgICAgICAgaWNvbkNsYXNzOiAnZWwtaWNvbi13YXJuaW5nJywNCiAgICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnYnRuLWN1c3RvbS1jYW5jZWwnLA0KICAgICAgfSkNCiAgICAgICAgLnRoZW4oKCkgPT4gew0KICAgICAgICAgIHN5bmNSb3V0ZSh0aGlzLmFwaVR5cGUpLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgdGhpcy5nZXRJbnRlcmZhY2VMaXN0KCdvbmUnKTsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsNCiAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKCgpID0+IHt9KTsNCiAgICB9LA0KICAgIGRlYnVnZ2luZygpIHsNCiAgICAgIHRoaXMuZGVidWdnaW5nTW9kYWwgPSB0cnVlOw0KICAgIH0sDQogICAgb25DbGlja3NzcyhlKSB7fSwNCiAgICBtZXRob2RzQ29sb3IobmV3VmFsKSB7DQogICAgICBsZXQgbWV0aG9kID0gbmV3VmFsLnRvVXBwZXJDYXNlKCk7DQogICAgICBpZiAobWV0aG9kID09ICdHRVQnKSB7DQogICAgICAgIHJldHVybiAnIzYxYWZmZSc7DQogICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PSAnUE9TVCcpIHsNCiAgICAgICAgcmV0dXJuICcjNDljYzkwJzsNCiAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdQVVQnKSB7DQogICAgICAgIHJldHVybiAnI2ZjYTEzMCc7DQogICAgICB9IGVsc2UgaWYgKG1ldGhvZCA9PSAnREVMJyB8fCBtZXRob2QgPT0gJ0RFTEVURScpIHsNCiAgICAgICAgcmV0dXJuICcjZjkzZTNlJzsNCiAgICAgIH0NCiAgICB9LA0KICAgIGluc2VydEJlZm9yZShwYXJhbXMpIHt9LA0KICAgIGluc2VydEFmdGVyKHBhcmFtcykge30sDQogICAgbW92ZUludG8ocGFyYW1zKSB7fSwNCiAgICBhc3luYyBhZGRUYWJsZURhdGEoKSB7DQogICAgICBjb25zdCB7IHJvdzogZGF0YSB9ID0gYXdhaXQgJHRhYmxlLmluc2VydEF0KG5ld1JvdywgLTEpOw0KICAgICAgYXdhaXQgJHRhYmxlLnNldEFjdGl2ZUNlbGwoZGF0YSwgJ25hbWUnKTsNCiAgICB9LA0KICAgIGdldEludGVyZmFjZUxpc3QoZGlza190eXBlKSB7DQogICAgICB0cnkgew0KICAgICAgICByb3V0ZUxpc3QodGhpcy5hcGlUeXBlKQ0KICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgcmVzLmRhdGFbMF0uZXhwYW5kID0gZmFsc2U7DQogICAgICAgICAgICAgIHRoaXMudHJlZURhdGEgPSBuZXcgVHJlZShyZXMuZGF0YSk7DQogICAgICAgICAgICAgIGxldCBpOw0KICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoZSkgPT4gew0KICAgICAgICAgICAgICAgIGlmIChkaXNrX3R5cGUpIHsNCiAgICAgICAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGFbMF0uY2hpbGRyZW4gJiYNCiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGFbMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW4gJiYNCiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGFbMF0uY2hpbGRyZW5bMF0uY2hpbGRyZW4ubGVuZ3RoDQogICAgICAgICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZ0bC1pY29uLWNhcmV0LXJpZ2h0JylbMF0uY2xpY2soKTsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZ0bC1pY29uLWNhcmV0LXJpZ2h0JylbMV0uY2xpY2soKTsNCiAgICAgICAgICAgICAgICAgICAgaSA9IHJlcy5kYXRhWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdOw0KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnZ0bC1pY29uLWNhcmV0LXJpZ2h0JylbMF0uY2xpY2soKTsNCiAgICAgICAgICAgICAgICAgICAgaSA9IHJlcy5kYXRhWzBdLmNoaWxkcmVuWzBdOw0KICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsaWNrKGkpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAvLyB0aGlzLiRyZWZzLnRyZWVMaXN0LmNsZWFyKCk7DQogICAgICAgICAgICAgIHRoaXMudHJlZURhdGEgPSBuZXcgVHJlZSh7fSk7DQogICAgICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlID0ge307DQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLndpbkxvYWRpbmcgPSBmYWxzZTsNCiAgICAgICAgICB9KQ0KICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7DQogICAgICAgICAgICB0aGlzLndpbkxvYWRpbmcgPSBmYWxzZTsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgICAgfSk7DQogICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7DQogICAgICB9DQogICAgfSwNCiAgICBvbkNsaWNrKHBhcmFtcykgew0KICAgICAgdHJ5IHsNCiAgICAgICAgaWYgKHBhcmFtcy5tZXRob2QpIHsNCiAgICAgICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlOw0KICAgICAgICAgIHRoaXMucGFyYW1zSWQgPSBwYXJhbXMuaWQ7DQogICAgICAgICAgdGhpcy5nZXRSb3RlRGF0YShwYXJhbXMuaWQpOw0KICAgICAgICB9DQogICAgICB9IGNhdGNoIChlcnJvcikge30NCiAgICB9LA0KICAgIGdldFJvdGVEYXRhKGlkKSB7DQogICAgICByb3V0ZURldChpZCkNCiAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlID0gcmVzLmRhdGE7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlcnIubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICBhc3luYyBoYW5kbGVTdWJtaXQoKSB7DQogICAgICBpZiAoIXRoaXMuZm9ybVZhbGlkYXRlLm5hbWUpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36L6T5YWl5o6l5Y+j5ZCN56ewJyk7DQogICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvcm1WYWxpZGF0ZS5tZXRob2QpIHsNCiAgICAgICAgcmV0dXJuIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+36YCJ5oup6K+35rGC57G75Z6LJyk7DQogICAgICB9IGVsc2UgaWYgKCF0aGlzLmZvcm1WYWxpZGF0ZS5wYXRoKSB7DQogICAgICAgIHJldHVybiB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+i+k+WFpei3r+eUseWcsOWdgCcpOw0KICAgICAgfQ0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucmVxdWVzdCA9IGF3YWl0IHRoaXMuJHJlZnMuYm9keVRhYmxlLmdldFRhYmxlRGF0YSgpLnRhYmxlRGF0YTsNCiAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLnJlc3BvbnNlID0gYXdhaXQgdGhpcy4kcmVmcy5yZXNUYWJsZS5nZXRUYWJsZURhdGEoKS50YWJsZURhdGE7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5lcnJvcl9jb2RlID0gYXdhaXQgdGhpcy4kcmVmcy5jb2RlVGFibGUuZ2V0VGFibGVEYXRhKCkudGFibGVEYXRhOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUuaGVhZGVyID0gYXdhaXQgdGhpcy4kcmVmcy5oZWFkVGFibGUuZ2V0VGFibGVEYXRhKCkudGFibGVEYXRhOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucXVlcnkgPSBhd2FpdCB0aGlzLiRyZWZzLnhUYWJsZS5nZXRUYWJsZURhdGEoKS50YWJsZURhdGE7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5hcGlUeXBlID0gdGhpcy5hcGlUeXBlOw0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUucmVzcG9uc2VfZXhhbXBsZS5tYXAoKGUpID0+IHsNCiAgICAgICAgZS5kYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpOw0KICAgICAgfSk7DQogICAgICBhd2FpdCByb3V0ZVNhdmUodGhpcy5mb3JtVmFsaWRhdGUpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgdGhpcy5nZXRSb3RlRGF0YSh0aGlzLnBhcmFtc0lkKTsNCiAgICAgICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlOw0KICAgICAgICB9KQ0KICAgICAgICAuY2F0Y2goKGVycikgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgIH0pOw0KICAgIH0sDQogICAgYXN5bmMgaW5zZXJ0RXZlbnQodHlwZSkgew0KICAgICAgY29uc3QgJHRhYmxlID0gdGhpcy4kcmVmc1t0eXBlXTsNCiAgICAgIGxldCBuZXdSb3c7DQogICAgICBpZiAodHlwZSA9PSAneFRhYmxlJykgew0KICAgICAgICBuZXdSb3cgPSB7DQogICAgICAgICAgYXR0cmlidXRlOiAnJywNCiAgICAgICAgICB0eXBlOiAnJywNCiAgICAgICAgICBtdXN0OiAwLA0KICAgICAgICAgIHRyaXA6ICcnLA0KICAgICAgICB9Ow0KICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdyZXNUYWJsZScpIHsNCiAgICAgICAgbmV3Um93ID0gew0KICAgICAgICAgIGF0dHJpYnV0ZTogJycsDQogICAgICAgICAgdHlwZTogJycsDQogICAgICAgICAgdHJpcDogJycsDQogICAgICAgIH07DQogICAgICB9IGVsc2Ugew0KICAgICAgICBuZXdSb3cgPSB7DQogICAgICAgICAgY29kZTogJycsDQogICAgICAgICAgdmFsdWU6ICcnLA0KICAgICAgICAgIHNvbHV0aW9uOiAnJywNCiAgICAgICAgfTsNCiAgICAgIH0NCiAgICAgIC8vICR0YWJsZS5pbnNlcnQobmV3Um93KS50aGVuKCh7IHJvdyB9KSA9PiAkdGFibGUuc2V0RWRpdFJvdyhyb3csIC0xKSk7DQogICAgICBjb25zdCB7IHJvdzogZGF0YSB9ID0gYXdhaXQgJHRhYmxlLmluc2VydEF0KG5ld1JvdywgLTEpOw0KICAgICAgYXdhaXQgJHRhYmxlLnNldEFjdGl2ZUNlbGwoZGF0YSwgJ25hbWUnKTsNCiAgICB9LA0KICAgIGFzeW5jIGluc2VydFJvdyhjdXJyUm93LCB0eXBlKSB7DQogICAgICBjb25zdCAkdGFibGUgPSB0aGlzLiRyZWZzW3R5cGVdOw0KICAgICAgLy8g5aaC5p6cIG51bGwg5YiZ5o+S5YWl5Yiw55uu5qCH6IqC54K56aG26YOoDQogICAgICAvLyDlpoLmnpwgLTEg5YiZ5o+S5YWl5Yiw55uu5qCH6IqC54K55bqV6YOoDQogICAgICAvLyDlpoLmnpwgcm93IOWImeacieaPkuWFpeWIsOaViOeahOebruagh+iKgueCueivpeihjOeahOS9jee9rg0KICAgICAgbGV0IHJlY29yZDsNCiAgICAgIGlmICh0eXBlID09ICd4VGFibGUnKSB7DQogICAgICAgIHJlY29yZCA9IHsNCiAgICAgICAgICBhdHRyaWJ1dGU6ICcnLA0KICAgICAgICAgIHR5cGU6ICcnLA0KICAgICAgICAgIG11c3Q6IDAsDQogICAgICAgICAgdHJpcDogJycsDQogICAgICAgICAgaWQ6IERhdGUubm93KCksDQogICAgICAgICAgcGFyZW50SWQ6IGN1cnJSb3cuaWQsIC8vIOmcgOimgeaMh+WumueItuiKgueCue+8jOiHquWKqOaPkuWFpeivpeiKgueCueS4rQ0KICAgICAgICB9Ow0KICAgICAgfSBlbHNlIGlmICh0eXBlID09ICdyZXNUYWJsZScpIHsNCiAgICAgICAgcmVjb3JkID0gew0KICAgICAgICAgIGF0dHJpYnV0ZTogJycsDQogICAgICAgICAgdHlwZTogJycsDQogICAgICAgICAgdHJpcDogJycsDQogICAgICAgICAgaWQ6IERhdGUubm93KCksDQogICAgICAgICAgcGFyZW50SWQ6IGN1cnJSb3cuaWQsIC8vIOmcgOimgeaMh+WumueItuiKgueCue+8jOiHquWKqOaPkuWFpeivpeiKgueCueS4rQ0KICAgICAgICB9Ow0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgcmVjb3JkID0gew0KICAgICAgICAgIGNvZGU6ICcnLA0KICAgICAgICAgIHZhbHVlOiAnJywNCiAgICAgICAgICBzb2x1dGlvbjogJycsDQogICAgICAgICAgaWQ6IERhdGUubm93KCksDQogICAgICAgICAgcGFyZW50SWQ6IGN1cnJSb3cuaWQsIC8vIOmcgOimgeaMh+WumueItuiKgueCue+8jOiHquWKqOaPkuWFpeivpeiKgueCueS4rQ0KICAgICAgICB9Ow0KICAgICAgfQ0KICAgICAgY29uc3QgeyByb3c6IG5ld1JvdyB9ID0gYXdhaXQgJHRhYmxlLmluc2VydEF0KHJlY29yZCwgLTEpOw0KICAgICAgYXdhaXQgJHRhYmxlLnNldFRyZWVFeHBhbmQoY3VyclJvdywgdHJ1ZSk7IC8vIOWwhueItuiKgueCueWxleW8gA0KICAgICAgYXdhaXQgJHRhYmxlLnNldEFjdGl2ZVJvdyhuZXdSb3cpOyAvLyDmj5LlhaXlrZDoioLngrkNCiAgICB9LA0KICAgIGFzeW5jIHJlbW92ZVJvdyhyb3csIHR5cGUpIHsNCiAgICAgIGNvbnN0ICR0YWJsZSA9IHRoaXMuJHJlZnNbdHlwZV07DQogICAgICBhd2FpdCAkdGFibGUucmVtb3ZlKHJvdyk7DQogICAgfSwNCiAgICAvLyDkv67mlLnlkI3lrZcNCiAgICBhZGQoKSB7DQogICAgICB0aGlzLnZhbHVlID0gJyc7DQogICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5pZCA9IDA7DQogICAgICB0aGlzLm5hbWVNb2RhbCA9IHRydWU7DQogICAgfSwNCiAgICAvLyDngrnlh7voj5zljZUNCiAgICBjbGlja01lbnUobmFtZSwgcGFyYW1zKSB7DQogICAgICBpZiAobmFtZSA9PSAxKSB7DQogICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlID0ge307DQogICAgICAgIHRoaXMuZm9ybVZhbGlkYXRlLmNhdGVfaWQgPSBwYXJhbXMgPyBwYXJhbXMuaWQgOiAwOw0KICAgICAgICB0aGlzLmZvcm1WYWxpZGF0ZS5pZCA9IDA7DQogICAgICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTsNCiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAyKSB7DQogICAgICAgIC8vIHRoaXMudmFsdWUgPSBwYXJhbXMubmFtZSB8fCAnJzsNCiAgICAgICAgLy8gdGhpcy5mb3JtVmFsaWRhdGUuY2F0ZV9pZCA9IHBhcmFtcyA/IHBhcmFtcy5pZCA6IDA7DQogICAgICAgIC8vIHRoaXMubmFtZU1vZGFsID0gdHJ1ZTsNCiAgICAgICAgLy8gdGhpcy5vbkVkaXQocGFyYW1zKTsNCiAgICAgICAgdGhpcy4kbW9kYWxGb3JtKHJvdXRlRWRpdChwYXJhbXMuaWQsIHRoaXMuYXBpVHlwZSkpLnRoZW4oKCkgPT4gdGhpcy5nZXRJbnRlcmZhY2VMaXN0KCkpOw0KICAgICAgfSBlbHNlIGlmIChuYW1lID09IDMpIHsNCiAgICAgICAgdGhpcy5vbkRlbChwYXJhbXMpOw0KICAgICAgfSBlbHNlIGlmIChuYW1lID09IDQpIHsNCiAgICAgICAgLy8gdGhpcy5hZGQoKTsNCiAgICAgICAgdGhpcy4kbW9kYWxGb3JtKHJvdXRlQ2F0ZSh0aGlzLmFwaVR5cGUpKS50aGVuKCgpID0+IHRoaXMuZ2V0SW50ZXJmYWNlTGlzdCgpKTsNCiAgICAgIH0NCiAgICB9LA0KDQogICAgYWRkRmFjKHBhcmFtcykgew0KICAgICAgdGhpcy5mb3JtVmFsaWRhdGUgPSB7DQogICAgICAgIGlkOiBwYXJhbXMgPyBwYXJhbXMuaWQgOiAwLA0KICAgICAgfTsNCiAgICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTsNCiAgICB9LA0KICAgIGFzeW5jT0soKSB7DQogICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgaWQ6IHRoaXMuZm9ybVZhbGlkYXRlLmlkIHx8IDAsDQogICAgICAgIHR5cGU6IDAsDQogICAgICAgIG5hbWU6IHRoaXMudmFsdWUsDQogICAgICB9Ow0KICAgICAgcm91dGVTYXZlKGRhdGEpDQogICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MocmVzLm1zZyk7DQogICAgICAgICAgdGhpcy5nZXRJbnRlcmZhY2VMaXN0KCk7DQogICAgICAgIH0pDQogICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcihlcnIubXNnKTsNCiAgICAgICAgfSk7DQogICAgfSwNCiAgICAvL+S+p+i+ueagj+WPs+mUrueCueWHu+S6i+S7tg0KICAgIGhhbmRsZUNvbnRleHRNZW51KGRhdGEsIGV2ZW50LCBwb3NpdGlvbikgew0KICAgICAgcG9zaXRpb24ubGVmdCA9IE51bWJlcihwb3NpdGlvbi5sZWZ0LnNsaWNlKDAsIC0yKSkgKyA3NSArICdweCc7DQogICAgICB0aGlzLmNvbnRleHREYXRhID0gZGF0YTsNCiAgICB9LA0KICAgIGhhbmRsZUNvbnRleHRDcmVhdGVGb2xkZXIoKSB7fSwNCiAgICBoYW5kbGVDb250ZXh0Q3JlYXRlRmlsZSgpIHt9LA0KICAgIC8vIOiHquWumuS5ieaYvuekug0KICAgIHJlbmRlckNvbnRlbnQoaCwgeyByb290LCBub2RlLCBkYXRhIH0pIHsNCiAgICAgIGxldCB0aGF0ID0gdGhpczsNCiAgICAgIHJldHVybiBoKA0KICAgICAgICAnc3BhbicsDQogICAgICAgIHsNCiAgICAgICAgICBzdHlsZTogew0KICAgICAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsDQogICAgICAgICAgICB3aWR0aDogJzEwMCUnLA0KICAgICAgICAgIH0sDQogICAgICAgIH0sDQogICAgICAgIFsNCiAgICAgICAgICBoKCdzcGFuJywgWw0KICAgICAgICAgICAgaChyZXNvbHZlQ29tcG9uZW50KCdJY29uJyksIHsNCiAgICAgICAgICAgICAgdHlwZTogJ2lvcy1wYXBlci1vdXRsaW5lJywNCiAgICAgICAgICAgICAgc3R5bGU6IHsNCiAgICAgICAgICAgICAgICBtYXJnaW5SaWdodDogJzhweCcsDQogICAgICAgICAgICAgIH0sDQogICAgICAgICAgICB9KSwNCiAgICAgICAgICAgIGgoJ3NwYW4nLCBkYXRhLnRpdGxlKSwNCiAgICAgICAgICBdKSwNCiAgICAgICAgICBoKA0KICAgICAgICAgICAgJ3NwYW4nLA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBzdHlsZTogew0KICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUtYmxvY2snLA0KICAgICAgICAgICAgICAgIGZsb2F0OiAncmlnaHQnLA0KICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnMzJweCcsDQogICAgICAgICAgICAgIH0sDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgWw0KICAgICAgICAgICAgICBoKHJlc29sdmVDb21wb25lbnQoJ0J1dHRvbicpLCB7DQogICAgICAgICAgICAgICAgLi4udGhpcy5idXR0b25Qcm9wcywNCiAgICAgICAgICAgICAgICBpY29uOiAnaW9zLWFkZCcsDQogICAgICAgICAgICAgICAgc3R5bGU6IHsNCiAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0OiAnOHB4JywNCiAgICAgICAgICAgICAgICB9LA0KICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHsNCiAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kKGRhdGEpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgIH0pLA0KICAgICAgICAgICAgICBoKHJlc29sdmVDb21wb25lbnQoJ0J1dHRvbicpLCB7DQogICAgICAgICAgICAgICAgLi4udGhpcy5idXR0b25Qcm9wcywNCiAgICAgICAgICAgICAgICBpY29uOiAnaW9zLXJlbW92ZScsDQogICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4gew0KICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmUocm9vdCwgbm9kZSwgZGF0YSk7DQogICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgfSksDQogICAgICAgICAgICBdLA0KICAgICAgICAgICksDQogICAgICAgIF0sDQogICAgICApOw0KICAgIH0sDQogICAgLyoqDQogICAgICog5L6n6L655qCP54K55Ye75LqL5Lu2DQogICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGENCiAgICAgKi8NCiAgICBjbGlja0RpcihkYXRhLCByb290LCBub2RlKSB7DQogICAgICBsZXQgdGhhdCA9IHRoaXM7DQogICAgICB0aGF0Lm5hdkl0ZW0gPSBkYXRhOw0KICAgICAgdGhhdC5wYXRobmFtZSA9IGRhdGEucGF0aG5hbWU7DQogICAgfSwNCiAgICBhcHBlbmQoZGF0YSkgew0KICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLmNoaWxkcmVuIHx8IFtdOw0KICAgICAgY2hpbGRyZW4ucHVzaCh7DQogICAgICAgIHRpdGxlOiAnYXBwZW5kZWQgbm9kZScsDQogICAgICAgIGV4cGFuZDogdHJ1ZSwNCiAgICAgIH0pOw0KICAgICAgdGhpcy4kc2V0KGRhdGEsICdjaGlsZHJlbicsIGNoaWxkcmVuKTsNCiAgICB9LA0KICAgIHJlbW92ZShyb290LCBub2RlLCBkYXRhKSB7DQogICAgICBjb25zdCBwYXJlbnRLZXkgPSByb290LmZpbmQoKGVsKSA9PiBlbCA9PT0gbm9kZSkucGFyZW50Ow0KICAgICAgY29uc3QgcGFyZW50ID0gcm9vdC5maW5kKChlbCkgPT4gZWwubm9kZUtleSA9PT0gcGFyZW50S2V5KS5ub2RlOw0KICAgICAgY29uc3QgaW5kZXggPSBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihkYXRhKTsNCiAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpOw0KICAgIH0sDQogICAgb25Nb3VzZU92ZXIocm9vdCwgbm9kZSwgZGF0YSwgZSwgZCkgew0KICAgICAgY29uc29sZS5sb2cocm9vdCwgbm9kZSwgZGF0YSk7DQogICAgfSwNCiAgICAvLw0KICAgIG9uRGVsKG5vZGUpIHsNCiAgICAgIGxldCBtZXRob2QgPSBub2RlLmNhdGVfaWQgPyByb3V0ZURlbCA6IHJvdXRlQ2F0ZURlbDsNCiAgICAgIHRoaXMuJG1zZ2JveCh7DQogICAgICAgIHRpdGxlOiAn5o+Q56S6JywNCiAgICAgICAgbWVzc2FnZTogJ+WIoOmZpOWQjuaXoOazleaBouWkje+8jOivt+ehruiupOWQjuWIoOmZpO+8gScsDQogICAgICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsDQogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLA0KICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsDQogICAgICAgIGljb25DbGFzczogJ2VsLWljb24td2FybmluZycsDQogICAgICAgIGNvbmZpcm1CdXR0b25DbGFzczogJ2J0bi1jdXN0b20tY2FuY2VsJywNCiAgICAgIH0pDQogICAgICAgIC50aGVuKCgpID0+IHsNCiAgICAgICAgICBtZXRob2Qobm9kZS5pZCkNCiAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgICAgICBub2RlLnJlbW92ZSgpOw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSkNCiAgICAgICAgLmNhdGNoKCgpID0+IHt9KTsNCiAgICB9LA0KDQogICAgb25DaGFuZ2VOYW1lKHBhcmFtcykgew0KICAgICAgaWYgKHBhcmFtcy5ldmVudFR5cGUgPT0gJ2JsdXInKSB7DQogICAgICAgIGxldCBkYXRhID0gew0KICAgICAgICAgIG5hbWU6IHBhcmFtcy5uZXdOYW1lLA0KICAgICAgICAgIGlkOiBwYXJhbXMuaWQsDQogICAgICAgIH07DQogICAgICAgIGludGVyZmFjZUVkaXROYW1lKGRhdGEpDQogICAgICAgICAgLnRoZW4oKHJlcykgPT4gew0KICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOw0KICAgICAgICAgIH0pDQogICAgICAgICAgLmNhdGNoKChlcnIpID0+IHsNCiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoZXJyLm1zZyk7DQogICAgICAgICAgfSk7DQogICAgICB9DQogICAgfSwNCg0KICAgIG9uQWRkTm9kZShwYXJhbXMpIHsNCiAgICAgIC8vIHRoaXMuJHJvdXRlci5wdXNoKHsNCiAgICAgIC8vICAgcGF0aDogJy9hZG1pbi9zZXR0aW5nL3N5c3RlbV9vdXRfaW50ZXJmYWNlL2FkZCcsDQogICAgICAvLyAgIHF1ZXJ5OiB7DQogICAgICAvLyAgICAgcGlkOiBwYXJhbXMucGlkLA0KICAgICAgLy8gICB9LA0KICAgICAgLy8gfSk7DQogICAgfSwNCg0KICAgIGFkZE5vZGUoKSB7DQogICAgICB2YXIgbm9kZSA9IG5ldyBUcmVlTm9kZSh7IG5hbWU6ICduZXcgbm9kZScsIGlzTGVhZjogZmFsc2UgfSk7DQogICAgICBpZiAoIXRoaXMuZGF0YS5jaGlsZHJlbikgdGhpcy5kYXRhLmNoaWxkcmVuID0gW107DQogICAgICB0aGlzLmRhdGEuYWRkQ2hpbGRyZW4obm9kZSk7DQogICAgfSwNCg0KICAgIGdldE5ld1RyZWUoKSB7DQogICAgICB2YXIgdm0gPSB0aGlzOw0KICAgICAgZnVuY3Rpb24gX2RmcyhvbGROb2RlKSB7DQogICAgICAgIHZhciBuZXdOb2RlID0ge307DQoNCiAgICAgICAgZm9yICh2YXIgayBpbiBvbGROb2RlKSB7DQogICAgICAgICAgaWYgKGsgIT09ICdjaGlsZHJlbicgJiYgayAhPT0gJ3BhcmVudCcpIHsNCiAgICAgICAgICAgIG5ld05vZGVba10gPSBvbGROb2RlW2tdOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChvbGROb2RlLmNoaWxkcmVuICYmIG9sZE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgew0KICAgICAgICAgIG5ld05vZGUuY2hpbGRyZW4gPSBbXTsNCiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb2xkTm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykgew0KICAgICAgICAgICAgbmV3Tm9kZS5jaGlsZHJlbi5wdXNoKF9kZnMob2xkTm9kZS5jaGlsZHJlbltpXSkpOw0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gbmV3Tm9kZTsNCiAgICAgIH0NCg0KICAgICAgdm0ubmV3VHJlZSA9IF9kZnModm0uZGF0YSk7DQogICAgfSwNCiAgfSwNCn07DQo="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AAqmBA;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;;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/pages/system/backendRouting","sourcesContent":["<template>\r\n <div>\r\n <div class=\"tabs\">\r\n <el-tabs v-model=\"apiType\">\r\n <el-tab-pane label=\"管理端接口\" name=\"adminapi\"></el-tab-pane>\r\n <el-tab-pane label=\"用户端接口\" name=\"api\"></el-tab-pane>\r\n <el-tab-pane label=\"客服端接口\" name=\"kefuapi\"></el-tab-pane>\r\n <el-tab-pane label=\"对外接口\" name=\"outapi\"></el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n <div class=\"main\" v-loading=\"winLoading\">\r\n <div class=\"ivu-mt card-tree b-r-1\">\r\n <div class=\"tree\">\r\n <div class=\"main-btn\">\r\n <el-button class=\"mb5\" style=\"flex: 1\" type=\"primary\" v-db-click @click=\"clickMenu(4)\" long\r\n >新增分类</el-button\r\n >\r\n <el-button class=\"mb5 mr10\" type=\"success\" v-db-click @click=\"syncRoute()\">同步</el-button>\r\n </div>\r\n\r\n <vue-tree-list\r\n class=\"tree-list\"\r\n ref=\"treeList\"\r\n @change-name=\"onChangeName\"\r\n @delete-node=\"onDel\"\r\n :model=\"treeData\"\r\n default-tree-node-name=\"默认文件夹\"\r\n default-leaf-node-name=\"默认接口名\"\r\n v-bind:default-expanded=\"false\"\r\n :expand-only-one=\"true\"\r\n >\r\n <template v-slot:leafNameDisplay=\"slotProps\">\r\n <div></div>\r\n <div\r\n class=\"tree-node\"\r\n :class=\"{\r\n node: slotProps.model.method,\r\n open: formValidate.path == slotProps.model.path && formValidate.method == slotProps.model.method,\r\n }\"\r\n v-db-click\r\n @click.stop=\"onClick(slotProps.model)\"\r\n >\r\n <span\r\n class=\"\"\r\n :class=\"{\r\n open: formValidate.path == slotProps.model.path && formValidate.method == slotProps.model.method,\r\n }\"\r\n >{{ slotProps.model.name }}</span\r\n >\r\n <el-dropdown\r\n size=\"small\"\r\n transfer\r\n @command=\"\r\n (name) => {\r\n clickMenu(name, slotProps.model);\r\n }\r\n \"\r\n >\r\n <span class=\"el-dropdown-link\">\r\n <i class=\"el-icon-more\"></i>\r\n </span>\r\n <template slot=\"dropdown\">\r\n <el-dropdown-menu>\r\n <el-dropdown-item command=\"1\" v-if=\"!slotProps.model.method\">新增接口</el-dropdown-item>\r\n <el-dropdown-item command=\"2\" v-if=\"!slotProps.model.method\">编辑分类名</el-dropdown-item>\r\n <el-dropdown-item command=\"3\">删除</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n </div>\r\n </template>\r\n <!-- 新建文件夹 -->\r\n\r\n <span class=\"icon\" slot=\"addTreeNodeIcon\"></span>\r\n <span class=\"icon\" slot=\"addLeafNodeIcon\"></span>\r\n <span class=\"icon\" slot=\"editNodeIcon\"></span>\r\n <span class=\"icon\" slot=\"delNodeIcon\"></span>\r\n <template v-slot:treeNodeIcon=\"slotProps\">\r\n <span\r\n v-if=\"slotProps.model.method\"\r\n class=\"req-method\"\r\n :style=\"{\r\n color: methodsColor(slotProps.model.method),\r\n 'font-weight': slotProps.model.pid == formValidate.pid ? '500' : '500',\r\n }\"\r\n >{{ slotProps.model.method }}</span\r\n >\r\n\r\n <!-- <span v-if=\"slotProps.model.method\"></span> -->\r\n </template>\r\n </vue-tree-list>\r\n </div>\r\n </div>\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt right-card\">\r\n <div class=\"data\">\r\n <div class=\"eidt-sub\">\r\n <div class=\"name\">\r\n {{ formValidate.name }}\r\n </div>\r\n <div>\r\n <el-button class=\"submission\" v-db-click @click=\"debugging()\">调试</el-button>\r\n <el-button\r\n v-if=\"formValidate.id\"\r\n type=\"primary\"\r\n class=\"submission\"\r\n v-db-click\r\n @click=\"isEdit = !isEdit\"\r\n >{{ isEdit ? '取消' : '编辑' }}</el-button\r\n >\r\n <el-button\r\n v-if=\"isEdit\"\r\n type=\"primary\"\r\n class=\"submission\"\r\n v-db-click\r\n @click=\"handleSubmit('formValidate')\"\r\n >保存</el-button\r\n >\r\n </div>\r\n </div>\r\n <el-form\r\n class=\"formValidate mt20\"\r\n ref=\"formValidate\"\r\n :rules=\"ruleValidate\"\r\n :model=\"formValidate\"\r\n label-width=\"120px\"\r\n :label-position=\"labelPosition\"\r\n @submit.native.prevent\r\n >\r\n <el-row :gutter=\"24\">\r\n <el-col :span=\"24\">\r\n <div class=\"title\">接口信息</div>\r\n <el-form-item label=\"接口名称:\" prop=\"name\">\r\n <el-input\r\n v-if=\"isEdit\"\r\n class=\"perW20\"\r\n type=\"text\"\r\n :rows=\"4\"\r\n v-model.trim=\"formValidate.name\"\r\n placeholder=\"请输入\"\r\n />\r\n <span v-else>{{ formValidate.name || '' }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"请求类型:\" prop=\"name\">\r\n <el-select v-if=\"isEdit\" v-model=\"formValidate.method\" style=\"width: 120px\">\r\n <el-option\r\n v-for=\"(item, index) in requestTypeList\"\r\n :key=\"index\"\r\n :value=\"item.value\"\r\n :label=\"item.label\"\r\n ></el-option>\r\n </el-select>\r\n <span v-else class=\"req-method\" :style=\"'background-color:' + methodColor\">{{\r\n formValidate.method || ''\r\n }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"功能描述:\" prop=\"name\">\r\n <el-input\r\n v-if=\"isEdit\"\r\n class=\"perW20\"\r\n type=\"textarea\"\r\n :rows=\"4\"\r\n v-model.trim=\"formValidate.describe\"\r\n placeholder=\"请输入\"\r\n />\r\n <span v-else class=\"text-area\">{{ formValidate.describe || '--' }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"所属分类:\" prop=\"name\" v-if=\"isEdit\">\r\n <el-cascader\r\n v-model=\"formValidate.cate_id\"\r\n size=\"small\"\r\n :options=\"formValidate.cate_tree\"\r\n :props=\"{ checkStrictly: true, multiple: false, emitPath: false, value: 'id', label: 'name' }\"\r\n clearable\r\n ></el-cascader>\r\n </el-form-item>\r\n <el-form-item label=\"是否公共:\" prop=\"name\">\r\n <el-switch v-if=\"isEdit\" v-model=\"formValidate.type\" :active-value=\"1\" :inactive-value=\"0\">\r\n </el-switch>\r\n <span v-else class=\"text-area\">{{ formValidate.type ? '是' : '否' }}</span>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"24\">\r\n <el-col :span=\"24\">\r\n <div class=\"title\">调用方式</div>\r\n <el-form-item label=\"路由地址:\" prop=\"path\">\r\n <span>{{ formValidate.path || '' }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"文件地址:\" prop=\"path\">\r\n <span>{{ formValidate.file_path || '' }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"方法名:\" prop=\"path\">\r\n <span>{{ formValidate.action || '' }}</span>\r\n </el-form-item>\r\n <el-form-item label=\"header参数:\">\r\n <vxe-table\r\n resizable\r\n show-overflow\r\n keep-source\r\n ref=\"headTable\"\r\n row-id=\"id\"\r\n :print-config=\"{}\"\r\n :export-config=\"{}\"\r\n :loading=\"loading\"\r\n :tree-config=\"{ transform: true, rowField: 'id', parentField: 'parentId' }\"\r\n :data=\"formValidate.header\"\r\n >\r\n <!-- <vxe-column type=\"checkbox\" width=\"60\"></vxe-column> -->\r\n <vxe-column field=\"attribute\" width=\"300\" title=\"属性\" tree-node :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.attribute\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.attribute || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"type\" title=\"类型\" width=\"200\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <!-- <vxe-select v-if=\"isEdit\" v-model=\"row.type\" type=\"text\" :optionGroups=\"typeList\"></vxe-select> -->\r\n <vxe-select v-if=\"isEdit\" v-model=\"row.type\" transfer>\r\n <vxe-option\r\n v-for=\"item in typeList\"\r\n :key=\"item.value\"\r\n :value=\"item.value\"\r\n :label=\"item.label\"\r\n ></vxe-option>\r\n </vxe-select>\r\n <span v-else>{{ row.type || '' }}</span>\r\n\r\n <!-- <vxe-select v-model=\"row.type\">\r\n\t\t\t\t\t\t\t\t\t <vxe-option v-for=\"num in 12\" :key=\"num\" :value=\"num\" :label=\"num\"></vxe-option>\r\n\t\t\t\t\t\t\t\t\t </vxe-select> -->\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"must\" title=\"必填\" width=\"100\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-checkbox\r\n v-if=\"isEdit\"\r\n v-model=\"row.must\"\r\n :unchecked-value=\"'0'\"\r\n :checked-value=\"'1'\"\r\n ></vxe-checkbox>\r\n <span v-else>{{ row.must == '1' ? '是' : '否' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"trip\" title=\"说明\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.trip\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.trip || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column title=\"操作\" width=\"200\" v-if=\"isEdit\">\r\n <template #default=\"{ row }\">\r\n <vxe-button\r\n type=\"text\"\r\n v-if=\"row.type === 'array' || row.type === 'object'\"\r\n status=\"primary\"\r\n v-db-click\r\n @click=\"insertRow(row, 'headTable')\"\r\n >插入</vxe-button\r\n >\r\n <vxe-button type=\"text\" status=\"primary\" v-db-click @click=\"removeRow(row, 'headTable')\"\r\n >删除</vxe-button\r\n >\r\n </template>\r\n </vxe-column>\r\n </vxe-table>\r\n\r\n <el-button class=\"mt10\" v-if=\"isEdit\" type=\"primary\" v-db-click @click=\"insertEvent('headTable')\"\r\n >添加参数</el-button\r\n >\r\n </el-form-item>\r\n <el-form-item label=\"query参数:\">\r\n <vxe-table\r\n resizable\r\n show-overflow\r\n keep-source\r\n ref=\"xTable\"\r\n row-id=\"id\"\r\n :print-config=\"{}\"\r\n :export-config=\"{}\"\r\n :loading=\"loading\"\r\n :tree-config=\"{ transform: true, rowField: 'id', parentField: 'parentId' }\"\r\n :data=\"formValidate.query\"\r\n >\r\n <vxe-column field=\"attribute\" width=\"300\" title=\"属性\" tree-node :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.attribute\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.attribute || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"type\" title=\"类型\" width=\"200\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-select v-if=\"isEdit\" v-model=\"row.type\" transfer>\r\n <vxe-option\r\n v-for=\"item in typeList\"\r\n :key=\"item.value\"\r\n :value=\"item.value\"\r\n :label=\"item.label\"\r\n ></vxe-option>\r\n </vxe-select>\r\n <span v-else>{{ row.type || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"must\" title=\"必填\" width=\"100\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-checkbox\r\n v-if=\"isEdit\"\r\n v-model=\"row.must\"\r\n :unchecked-value=\"'0'\"\r\n :checked-value=\"'1'\"\r\n ></vxe-checkbox>\r\n <span v-else>{{ row.must == '1' ? '是' : '否' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"trip\" title=\"说明\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.trip\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.trip || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column title=\"操作\" width=\"200\" v-if=\"isEdit\">\r\n <template #default=\"{ row }\">\r\n <vxe-button\r\n type=\"text\"\r\n v-if=\"row.type === 'array' || row.type === 'object'\"\r\n status=\"primary\"\r\n v-db-click\r\n @click=\"insertRow(row, 'xTable')\"\r\n >插入</vxe-button\r\n >\r\n <vxe-button type=\"text\" status=\"primary\" v-db-click @click=\"removeRow(row, 'xTable')\"\r\n >删除</vxe-button\r\n >\r\n </template>\r\n </vxe-column>\r\n </vxe-table>\r\n <el-button class=\"mt10\" v-if=\"isEdit\" type=\"primary\" v-db-click @click=\"insertEvent('xTable')\"\r\n >添加参数</el-button\r\n >\r\n </el-form-item>\r\n <el-form-item label=\"body参数:\">\r\n <vxe-table\r\n resizable\r\n show-overflow\r\n keep-source\r\n ref=\"bodyTable\"\r\n row-id=\"id\"\r\n :print-config=\"{}\"\r\n :export-config=\"{}\"\r\n :loading=\"loading\"\r\n :tree-config=\"{ transform: true, rowField: 'id', parentField: 'parentId' }\"\r\n :data=\"formValidate.request\"\r\n >\r\n <!-- <vxe-column type=\"checkbox\" width=\"60\"></vxe-column> -->\r\n <vxe-column field=\"attribute\" width=\"300\" title=\"属性\" tree-node :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.attribute\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.attribute || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"type\" title=\"类型\" width=\"200\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <!-- <vxe-select v-if=\"isEdit\" v-model=\"row.type\" type=\"text\" :optionGroups=\"typeList\"></vxe-select> -->\r\n <vxe-select v-if=\"isEdit\" v-model=\"row.type\" transfer>\r\n <vxe-option\r\n v-for=\"item in typeList\"\r\n :key=\"item.value\"\r\n :value=\"item.value\"\r\n :label=\"item.label\"\r\n ></vxe-option>\r\n </vxe-select>\r\n <span v-else>{{ row.type || '' }}</span>\r\n\r\n <!-- <vxe-select v-model=\"row.type\">\r\n <vxe-option v-for=\"num in 12\" :key=\"num\" :value=\"num\" :label=\"num\"></vxe-option>\r\n </vxe-select> -->\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"must\" title=\"必填\" width=\"100\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-checkbox\r\n v-if=\"isEdit\"\r\n v-model=\"row.must\"\r\n :unchecked-value=\"'0'\"\r\n :checked-value=\"'1'\"\r\n ></vxe-checkbox>\r\n <span v-else>{{ row.must == '1' ? '是' : '否' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"trip\" title=\"说明\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.trip\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.trip || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column title=\"操作\" width=\"200\" v-if=\"isEdit\">\r\n <template #default=\"{ row }\">\r\n <vxe-button\r\n type=\"text\"\r\n v-if=\"row.type === 'array' || row.type === 'object'\"\r\n status=\"primary\"\r\n v-db-click\r\n @click=\"insertRow(row, 'bodyTable')\"\r\n >插入</vxe-button\r\n >\r\n <vxe-button type=\"text\" status=\"primary\" v-db-click @click=\"removeRow(row, 'bodyTable')\"\r\n >删除</vxe-button\r\n >\r\n </template>\r\n </vxe-column>\r\n </vxe-table>\r\n\r\n <el-button class=\"mt10\" v-if=\"isEdit\" type=\"primary\" v-db-click @click=\"insertEvent('bodyTable')\"\r\n >添加参数</el-button\r\n >\r\n </el-form-item>\r\n <el-form-item label=\"返回参数:\">\r\n <vxe-table\r\n resizable\r\n show-overflow\r\n keep-source\r\n ref=\"resTable\"\r\n row-id=\"id\"\r\n :print-config=\"{}\"\r\n :export-config=\"{}\"\r\n :loading=\"loading\"\r\n :tree-config=\"{ transform: true, rowField: 'id', parentField: 'parentId' }\"\r\n :data=\"formValidate.response\"\r\n >\r\n <!-- <vxe-column type=\"checkbox\" width=\"60\"></vxe-column> -->\r\n <vxe-column field=\"attribute\" title=\"属性\" width=\"300\" tree-node :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.attribute\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.attribute || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"type\" title=\"类型\" width=\"200\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-select v-if=\"isEdit\" v-model=\"row.type\" transfer>\r\n <vxe-option\r\n v-for=\"item in typeList\"\r\n :key=\"item.value\"\r\n :value=\"item.value\"\r\n :label=\"item.label\"\r\n ></vxe-option>\r\n </vxe-select>\r\n <span v-else>{{ row.type || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <!-- <vxe-column field=\"type\" title=\"必填\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-checkbox v-model=\"row.must\" :unchecked-value=\"0\" :checked-value=\"1\"></vxe-checkbox\r\n >{{ row.must }}\r\n </template>\r\n </vxe-column> -->\r\n <vxe-column field=\"trip\" title=\"说明\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.trip\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.trip || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column title=\"操作\" width=\"200\" v-if=\"isEdit\">\r\n <template #default=\"{ row }\">\r\n <vxe-button\r\n type=\"text\"\r\n v-if=\"row.type === 'array' || row.type === 'object'\"\r\n status=\"primary\"\r\n v-db-click\r\n @click=\"insertRow(row, 'resTable')\"\r\n >插入</vxe-button\r\n >\r\n <vxe-button type=\"text\" status=\"primary\" v-db-click @click=\"removeRow(row, 'resTable')\"\r\n >删除</vxe-button\r\n >\r\n </template>\r\n </vxe-column>\r\n </vxe-table>\r\n <el-button class=\"mt10\" v-if=\"isEdit\" type=\"primary\" v-db-click @click=\"insertEvent('resTable')\"\r\n >添加参数</el-button\r\n >\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"24\">\r\n <el-col :span=\"24\">\r\n <div class=\"title\">调用示例</div>\r\n <!-- <el-form-item label=\"请求数据示例:\" prop=\"request_example\">\r\n <el-input\r\n v-if=\"isEdit\"\r\n class=\"perW20\"\r\n type=\"textarea\"\r\n :rows=\"4\"\r\n v-model.trim=\"formValidate.request_example\"\r\n placeholder=\"请输入\"\r\n />\r\n <span v-else class=\"text-area\">{{ formValidate.request_example || '' }}</span>\r\n </el-form-item> -->\r\n <el-form-item v-if=\"formValidate.response_example\" label=\"返回数据示例:\" prop=\"response_example\">\r\n <el-collapse v-for=\"(item, index) in formValidate.response_example\" accordion :key=\"index\">\r\n <el-collapse-item>\r\n <template slot=\"title\">\r\n {{ item.name || '' }}\r\n </template>\r\n <el-input\r\n v-if=\"isEdit\"\r\n class=\"perW20\"\r\n type=\"textarea\"\r\n :rows=\"4\"\r\n v-model.trim=\"item.data\"\r\n placeholder=\"请输入\"\r\n />\r\n <span v-else class=\"text-area\">{{ item.data || '' }}</span>\r\n </el-collapse-item>\r\n </el-collapse>\r\n </el-form-item>\r\n <el-form-item label=\"错误码:\">\r\n <vxe-table\r\n resizable\r\n show-overflow\r\n keep-source\r\n ref=\"codeTable\"\r\n row-id=\"id\"\r\n is-tree-view\r\n :print-config=\"{}\"\r\n :export-config=\"{}\"\r\n :loading=\"loading\"\r\n :tree-config=\"{ rowField: 'id', parentField: 'parentId' }\"\r\n :data=\"formValidate.error_code\"\r\n >\r\n <!-- <vxe-column type=\"checkbox\" width=\"60\"></vxe-column> -->\r\n <vxe-column field=\"code\" title=\"错误码\" tree-node :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.code\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.code || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"value\" title=\"错误码取值\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.value\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.value || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column field=\"solution\" title=\"解决方案\" :edit-render=\"{}\">\r\n <template #default=\"{ row }\">\r\n <vxe-input v-if=\"isEdit\" v-model=\"row.solution\" type=\"text\"></vxe-input>\r\n <span v-else>{{ row.solution || '' }}</span>\r\n </template>\r\n </vxe-column>\r\n <vxe-column title=\"操作\" v-if=\"isEdit\">\r\n <template #default=\"{ row }\">\r\n <vxe-button type=\"text\" status=\"primary\" v-db-click @click=\"removeRow(row, 'codeTable')\"\r\n >删除</vxe-button\r\n >\r\n </template>\r\n </vxe-column>\r\n </vxe-table>\r\n <el-button class=\"mt10\" v-if=\"isEdit\" type=\"primary\" v-db-click @click=\"insertEvent('codeTable')\"\r\n >添加参数</el-button\r\n >\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <!-- <el-row :gutter=\"24\" >\r\n <el-col :span=\"24\">\r\n <el-form-item>\r\n <el-button type=\"primary\" class=\"submission\" v-db-click @click=\"handleSubmit('formValidate')\">保存</el-button>\r\n </el-form-item>\r\n </el-col>\r\n </el-row> -->\r\n </el-form>\r\n </div>\r\n <!-- <div v-else class=\"nothing\">\r\n <div class=\"box\" v-db-click @click=\"clickMenu(4)\">\r\n <div class=\"icon\">\r\n <Icon type=\"ios-folder\" />\r\n </div>\r\n <div class=\"text\">新建文件</div>\r\n </div>\r\n <div class=\"box\" v-db-click @click=\"clickMenu(1)\">\r\n <div class=\"icon\">\r\n <Icon type=\"logo-linkedin\" />\r\n </div>\r\n <div class=\"text\">新建接口</div>\r\n </div>\r\n </div> -->\r\n </el-card>\r\n </div>\r\n <el-dialog :visible.sync=\"nameModal\" width=\"470px\" title=\"分组名称\">\r\n <label>分组名称:</label>\r\n <el-input v-model=\"value\" placeholder=\"请输入分组名称\" style=\"width: 85%\" />\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=\"asyncOK\">确 定</el-button>\r\n </span>\r\n </el-dialog>\r\n <el-drawer\r\n :visible.sync=\"debuggingModal\"\r\n :title=\"formValidate.name\"\r\n size=\"70%\"\r\n :wrapperClosable=\"false\"\r\n :loading=\"loading\"\r\n >\r\n <debugging\r\n v-if=\"debuggingModal\"\r\n :formValidate=\"formValidate\"\r\n :typeList=\"intTypeList\"\r\n :requestTypeList=\"requestTypeList\"\r\n :apiType=\"apiType\"\r\n />\r\n </el-drawer>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n routeCate,\r\n syncRoute,\r\n routeList,\r\n routeDet,\r\n routeSave,\r\n interfaceEditName,\r\n routeDel,\r\n routeEdit,\r\n routeCateDel,\r\n} from '@/api/systemBackendRouting';\r\nimport { VueTreeList, Tree, TreeNode } from 'vue-tree-list';\r\nimport debugging from './debugging.vue';\r\n\r\nimport { mapState } from 'vuex';\r\nexport default {\r\n name: 'systemOutInterface',\r\n components: {\r\n VueTreeList,\r\n debugging,\r\n },\r\n data() {\r\n return {\r\n value: '',\r\n isEdit: false,\r\n nameModal: false,\r\n debuggingModal: false,\r\n formValidate: {},\r\n grid: {\r\n xl: 7,\r\n lg: 7,\r\n md: 12,\r\n sm: 24,\r\n xs: 24,\r\n },\r\n ruleValidate: {\r\n title: [{ message: '请输入正确的描述 (不能多于200位数)', trigger: 'blur', max: 200 }],\r\n },\r\n loading: false,\r\n intTypeList: [\r\n {\r\n value: 'string',\r\n label: 'String',\r\n },\r\n // {\r\n // value: 'array',\r\n // label: 'Array',\r\n // },\r\n // {\r\n // value: 'object',\r\n // label: 'Object',\r\n // },\r\n {\r\n value: 'number',\r\n label: 'Number',\r\n },\r\n {\r\n value: 'boolean',\r\n label: 'Boolean',\r\n },\r\n {\r\n value: 'null',\r\n label: 'Null',\r\n },\r\n {\r\n value: 'any',\r\n label: 'Any',\r\n },\r\n ],\r\n typeList: [\r\n {\r\n value: 'string',\r\n label: 'String',\r\n },\r\n {\r\n value: 'array',\r\n label: 'Array',\r\n },\r\n {\r\n value: 'object',\r\n label: 'Object',\r\n },\r\n {\r\n value: 'number',\r\n label: 'Number',\r\n },\r\n {\r\n value: 'boolean',\r\n label: 'Boolean',\r\n },\r\n {\r\n value: 'null',\r\n label: 'Null',\r\n },\r\n {\r\n value: 'any',\r\n label: 'Any',\r\n },\r\n ],\r\n requestTypeList: [\r\n {\r\n value: 'GET',\r\n label: 'GET',\r\n },\r\n {\r\n value: 'POST',\r\n label: 'POST',\r\n },\r\n {\r\n value: 'DELETE',\r\n label: 'DELETE',\r\n },\r\n {\r\n value: 'PUT',\r\n label: 'PUT',\r\n },\r\n ],\r\n contextData: null, //左侧导航右键点击是产生的数据对象\r\n treeData: undefined,\r\n buttonProps: {\r\n type: 'default',\r\n size: 'small',\r\n },\r\n methodColor: '#fff',\r\n apiType: 'adminapi',\r\n paramsId: 0,\r\n winLoading: false,\r\n };\r\n },\r\n watch: {\r\n ['formValidate.method']: {\r\n deep: true,\r\n handler(newVal, oldVal) {\r\n if (newVal) {\r\n let method = newVal.toUpperCase();\r\n if (method == 'GET') {\r\n this.methodColor = '#61affe';\r\n } else if (method == 'POST') {\r\n this.methodColor = '#49cc90';\r\n } else if (method == 'PUT') {\r\n this.methodColor = '#fca130';\r\n } else if (method == 'DEL' || method == 'DELETE') {\r\n this.methodColor = '#f93e3e';\r\n }\r\n }\r\n },\r\n },\r\n apiType(newVal) {\r\n if (newVal) {\r\n this.winLoading = true;\r\n this.getInterfaceList('one');\r\n }\r\n },\r\n isEdit(newVal) {\r\n if (newVal) {\r\n this.formValidate.response_example.map((e) => {\r\n e.data = JSON.stringify(e.data);\r\n });\r\n } else {\r\n this.formValidate.response_example.map((e) => {\r\n e.data = JSON.parse(e.data);\r\n });\r\n }\r\n },\r\n },\r\n computed: {\r\n ...mapState('media', ['isMobile']),\r\n labelWidth() {\r\n return this.isMobile ? undefined : '50px';\r\n },\r\n labelPosition() {\r\n return this.isMobile ? 'top' : 'right';\r\n },\r\n },\r\n created() {\r\n this.getInterfaceList('one');\r\n },\r\n methods: {\r\n syncRoute() {\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 syncRoute(this.apiType).then((res) => {\r\n this.getInterfaceList('one');\r\n this.$message.success(res.msg);\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n debugging() {\r\n this.debuggingModal = true;\r\n },\r\n onClicksss(e) {},\r\n methodsColor(newVal) {\r\n let method = newVal.toUpperCase();\r\n if (method == 'GET') {\r\n return '#61affe';\r\n } else if (method == 'POST') {\r\n return '#49cc90';\r\n } else if (method == 'PUT') {\r\n return '#fca130';\r\n } else if (method == 'DEL' || method == 'DELETE') {\r\n return '#f93e3e';\r\n }\r\n },\r\n insertBefore(params) {},\r\n insertAfter(params) {},\r\n moveInto(params) {},\r\n async addTableData() {\r\n const { row: data } = await $table.insertAt(newRow, -1);\r\n await $table.setActiveCell(data, 'name');\r\n },\r\n getInterfaceList(disk_type) {\r\n try {\r\n routeList(this.apiType)\r\n .then((res) => {\r\n if (res.data.length) {\r\n res.data[0].expand = false;\r\n this.treeData = new Tree(res.data);\r\n let i;\r\n this.$nextTick((e) => {\r\n if (disk_type) {\r\n if (\r\n res.data[0].children &&\r\n res.data[0].children[0].children &&\r\n res.data[0].children[0].children.length\r\n ) {\r\n document.querySelectorAll('.vtl-icon-caret-right')[0].click();\r\n document.querySelectorAll('.vtl-icon-caret-right')[1].click();\r\n i = res.data[0].children[0].children[0];\r\n } else {\r\n document.querySelectorAll('.vtl-icon-caret-right')[0].click();\r\n i = res.data[0].children[0];\r\n }\r\n this.onClick(i);\r\n }\r\n });\r\n } else {\r\n // this.$refs.treeList.clear();\r\n this.treeData = new Tree({});\r\n this.formValidate = {};\r\n }\r\n this.winLoading = false;\r\n })\r\n .catch((err) => {\r\n this.winLoading = false;\r\n this.$message.error(err.msg);\r\n });\r\n } catch (error) {\r\n console.log(error);\r\n }\r\n },\r\n onClick(params) {\r\n try {\r\n if (params.method) {\r\n this.isEdit = false;\r\n this.paramsId = params.id;\r\n this.getRoteData(params.id);\r\n }\r\n } catch (error) {}\r\n },\r\n getRoteData(id) {\r\n routeDet(id)\r\n .then((res) => {\r\n this.formValidate = res.data;\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n async handleSubmit() {\r\n if (!this.formValidate.name) {\r\n return this.$message.warning('请输入接口名称');\r\n } else if (!this.formValidate.method) {\r\n return this.$message.warning('请选择请求类型');\r\n } else if (!this.formValidate.path) {\r\n return this.$message.warning('请输入路由地址');\r\n }\r\n this.formValidate.request = await this.$refs.bodyTable.getTableData().tableData;\r\n this.formValidate.response = await this.$refs.resTable.getTableData().tableData;\r\n this.formValidate.error_code = await this.$refs.codeTable.getTableData().tableData;\r\n this.formValidate.header = await this.$refs.headTable.getTableData().tableData;\r\n this.formValidate.query = await this.$refs.xTable.getTableData().tableData;\r\n this.formValidate.apiType = this.apiType;\r\n this.formValidate.response_example.map((e) => {\r\n e.data = JSON.parse(e.data);\r\n });\r\n await routeSave(this.formValidate)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getRoteData(this.paramsId);\r\n this.isEdit = false;\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n async insertEvent(type) {\r\n const $table = this.$refs[type];\r\n let newRow;\r\n if (type == 'xTable') {\r\n newRow = {\r\n attribute: '',\r\n type: '',\r\n must: 0,\r\n trip: '',\r\n };\r\n } else if (type == 'resTable') {\r\n newRow = {\r\n attribute: '',\r\n type: '',\r\n trip: '',\r\n };\r\n } else {\r\n newRow = {\r\n code: '',\r\n value: '',\r\n solution: '',\r\n };\r\n }\r\n // $table.insert(newRow).then(({ row }) => $table.setEditRow(row, -1));\r\n const { row: data } = await $table.insertAt(newRow, -1);\r\n await $table.setActiveCell(data, 'name');\r\n },\r\n async insertRow(currRow, type) {\r\n const $table = this.$refs[type];\r\n // 如果 null 则插入到目标节点顶部\r\n // 如果 -1 则插入到目标节点底部\r\n // 如果 row 则有插入到效的目标节点该行的位置\r\n let record;\r\n if (type == 'xTable') {\r\n record = {\r\n attribute: '',\r\n type: '',\r\n must: 0,\r\n trip: '',\r\n id: Date.now(),\r\n parentId: currRow.id, // 需要指定父节点,自动插入该节点中\r\n };\r\n } else if (type == 'resTable') {\r\n record = {\r\n attribute: '',\r\n type: '',\r\n trip: '',\r\n id: Date.now(),\r\n parentId: currRow.id, // 需要指定父节点,自动插入该节点中\r\n };\r\n } else {\r\n record = {\r\n code: '',\r\n value: '',\r\n solution: '',\r\n id: Date.now(),\r\n parentId: currRow.id, // 需要指定父节点,自动插入该节点中\r\n };\r\n }\r\n const { row: newRow } = await $table.insertAt(record, -1);\r\n await $table.setTreeExpand(currRow, true); // 将父节点展开\r\n await $table.setActiveRow(newRow); // 插入子节点\r\n },\r\n async removeRow(row, type) {\r\n const $table = this.$refs[type];\r\n await $table.remove(row);\r\n },\r\n // 修改名字\r\n add() {\r\n this.value = '';\r\n this.formValidate.id = 0;\r\n this.nameModal = true;\r\n },\r\n // 点击菜单\r\n clickMenu(name, params) {\r\n if (name == 1) {\r\n this.formValidate = {};\r\n this.formValidate.cate_id = params ? params.id : 0;\r\n this.formValidate.id = 0;\r\n this.isEdit = true;\r\n } else if (name == 2) {\r\n // this.value = params.name || '';\r\n // this.formValidate.cate_id = params ? params.id : 0;\r\n // this.nameModal = true;\r\n // this.onEdit(params);\r\n this.$modalForm(routeEdit(params.id, this.apiType)).then(() => this.getInterfaceList());\r\n } else if (name == 3) {\r\n this.onDel(params);\r\n } else if (name == 4) {\r\n // this.add();\r\n this.$modalForm(routeCate(this.apiType)).then(() => this.getInterfaceList());\r\n }\r\n },\r\n\r\n addFac(params) {\r\n this.formValidate = {\r\n id: params ? params.id : 0,\r\n };\r\n this.isEdit = true;\r\n },\r\n asyncOK() {\r\n let data = {\r\n id: this.formValidate.id || 0,\r\n type: 0,\r\n name: this.value,\r\n };\r\n routeSave(data)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getInterfaceList();\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n //侧边栏右键点击事件\r\n handleContextMenu(data, event, position) {\r\n position.left = Number(position.left.slice(0, -2)) + 75 + 'px';\r\n this.contextData = data;\r\n },\r\n handleContextCreateFolder() {},\r\n handleContextCreateFile() {},\r\n // 自定义显示\r\n renderContent(h, { root, node, data }) {\r\n let that = this;\r\n return h(\r\n 'span',\r\n {\r\n style: {\r\n display: 'inline-block',\r\n width: '100%',\r\n },\r\n },\r\n [\r\n h('span', [\r\n h(resolveComponent('Icon'), {\r\n type: 'ios-paper-outline',\r\n style: {\r\n marginRight: '8px',\r\n },\r\n }),\r\n h('span', data.title),\r\n ]),\r\n h(\r\n 'span',\r\n {\r\n style: {\r\n display: 'inline-block',\r\n float: 'right',\r\n marginRight: '32px',\r\n },\r\n },\r\n [\r\n h(resolveComponent('Button'), {\r\n ...this.buttonProps,\r\n icon: 'ios-add',\r\n style: {\r\n marginRight: '8px',\r\n },\r\n onClick: () => {\r\n this.append(data);\r\n },\r\n }),\r\n h(resolveComponent('Button'), {\r\n ...this.buttonProps,\r\n icon: 'ios-remove',\r\n onClick: () => {\r\n this.remove(root, node, data);\r\n },\r\n }),\r\n ],\r\n ),\r\n ],\r\n );\r\n },\r\n /**\r\n * 侧边栏点击事件\r\n * @param {Object} data\r\n */\r\n clickDir(data, root, node) {\r\n let that = this;\r\n that.navItem = data;\r\n that.pathname = data.pathname;\r\n },\r\n append(data) {\r\n const children = data.children || [];\r\n children.push({\r\n title: 'appended node',\r\n expand: true,\r\n });\r\n this.$set(data, 'children', children);\r\n },\r\n remove(root, node, data) {\r\n const parentKey = root.find((el) => el === node).parent;\r\n const parent = root.find((el) => el.nodeKey === parentKey).node;\r\n const index = parent.children.indexOf(data);\r\n parent.children.splice(index, 1);\r\n },\r\n onMouseOver(root, node, data, e, d) {\r\n console.log(root, node, data);\r\n },\r\n //\r\n onDel(node) {\r\n let method = node.cate_id ? routeDel : routeCateDel;\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 method(node.id)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n node.remove();\r\n })\r\n .catch((err) => {\r\n this.$message.error(err.msg);\r\n });\r\n })\r\n .catch(() => {});\r\n },\r\n\r\n onChangeName(params) {\r\n if (params.eventType == 'blur') {\r\n let data = {\r\n name: params.newName,\r\n id: params.id,\r\n };\r\n interfaceEditName(data)\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\r\n onAddNode(params) {\r\n // this.$router.push({\r\n // path: '/admin/setting/system_out_interface/add',\r\n // query: {\r\n // pid: params.pid,\r\n // },\r\n // });\r\n },\r\n\r\n addNode() {\r\n var node = new TreeNode({ name: 'new node', isLeaf: false });\r\n if (!this.data.children) this.data.children = [];\r\n this.data.addChildren(node);\r\n },\r\n\r\n getNewTree() {\r\n var vm = this;\r\n function _dfs(oldNode) {\r\n var newNode = {};\r\n\r\n for (var k in oldNode) {\r\n if (k !== 'children' && k !== 'parent') {\r\n newNode[k] = oldNode[k];\r\n }\r\n }\r\n\r\n if (oldNode.children && oldNode.children.length > 0) {\r\n newNode.children = [];\r\n for (var i = 0, len = oldNode.children.length; i < len; i++) {\r\n newNode.children.push(_dfs(oldNode.children[i]));\r\n }\r\n }\r\n return newNode;\r\n }\r\n\r\n vm.newTree = _dfs(vm.data);\r\n },\r\n },\r\n};\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n.reset {\r\n margin-left: 10px;\r\n}\r\n.b-r-1 {\r\n border-right: 1px solid #f2f2f2;\r\n}\r\n.card-tree {\r\n background: #fff;\r\n height: 72px;\r\n box-sizing: border-box;\r\n overflow-x: scroll; /* 设置溢出滚动 */\r\n white-space: nowrap;\r\n overflow-y: hidden;\r\n /* 隐藏滚动条 */\r\n border-radius: 4px;\r\n scrollbar-width: none; /* firefox */\r\n -ms-overflow-style: none; /* IE 10+ */\r\n}\r\n.card-tree::-webkit-scrollbar {\r\n display: none; /* Chrome Safari */\r\n}\r\n::v-deep .el-tabs__item {\r\n height: 54px !important;\r\n line-height: 54px !important;\r\n}\r\n.tabs {\r\n background: #fff;\r\n padding-left: 20px;\r\n border-radius: 5px 5px 0 0;\r\n}\r\n.main {\r\n width: 100%;\r\n display: flex;\r\n padding-bottom: 16px;\r\n background: #fff;\r\n border-radius: 6px;\r\n .main-btn {\r\n display: flex;\r\n position: sticky;\r\n padding: 0px 5px 0 15px;\r\n width: 100%;\r\n background: #fff;\r\n top: 0px;\r\n background-color: rgba(255, 255, 255, 0.6);\r\n backdrop-filter: blur(4px);\r\n z-index: 99;\r\n }\r\n .card-tree {\r\n width: 290px;\r\n height: calc(100vh - 205px);\r\n overflow-y: scroll;\r\n }\r\n ::v-deep .tree {\r\n .tree-list {\r\n margin-left: 10px;\r\n padding: 0 15px;\r\n margin-top: 10px;\r\n }\r\n .vtl-caret {\r\n padding-right: 2px;\r\n }\r\n .req-method {\r\n display: block;\r\n padding: 0px 2px;\r\n font-size: 13px;\r\n line-height: 13px;\r\n margin-right: 5px;\r\n border-radius: 4px;\r\n\r\n text-transform: uppercase;\r\n }\r\n .tree-node {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n cursor: pointer;\r\n\r\n padding: 3px 7px 3px 0;\r\n }\r\n .node {\r\n }\r\n .open {\r\n font-weight: 500;\r\n color: #333;\r\n }\r\n }\r\n ::v-deep .vtl-node-main .vtl-operation {\r\n position: absolute;\r\n right: 20px;\r\n }\r\n ::v-deep .vtl-node-content {\r\n width: 100%;\r\n }\r\n .pop-menu {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n ::v-deep .vtl-node-content .add {\r\n display: none;\r\n margin-right: 10px;\r\n }\r\n ::v-deep .vtl-node-content:hover .add {\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n border-radius: 50%;\r\n width: 18px;\r\n height: 18px;\r\n }\r\n ::v-deep .vtl-node-content:hover .add:hover {\r\n background-color: #fff;\r\n .pop-menu {\r\n font-size: 16px;\r\n }\r\n }\r\n ::v-deep .vtl-node-main {\r\n padding: 3px 0;\r\n }\r\n ::v-deep .line1 {\r\n display: table-caption;\r\n white-space: nowrap;\r\n width: 120px;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n ::v-deep .ivu-form-item {\r\n margin-bottom: 10px;\r\n }\r\n .right-card {\r\n flex: 1;\r\n ::v-deep .el-card__body {\r\n max-height: calc(100vh - 205px);\r\n overflow-y: scroll;\r\n padding-bottom: 16px;\r\n }\r\n ::v-deep .el-form-item--small.el-form-item {\r\n margin-bottom: 6px;\r\n }\r\n }\r\n .data {\r\n flex: 1;\r\n .req-method {\r\n text-transform: uppercase;\r\n border-radius: 4px;\r\n color: #fff;\r\n padding: 3px 7px;\r\n }\r\n .eidt-sub {\r\n display: flex;\r\n justify-content: space-between;\r\n .name {\r\n font-size: 20px;\r\n font-weight: 500;\r\n }\r\n }\r\n .title {\r\n font-size: 16px;\r\n font-weight: 500;\r\n margin-bottom: 15px;\r\n }\r\n .perW20 {\r\n width: 500px;\r\n }\r\n .text-area {\r\n white-space: pre-wrap;\r\n word-break: break-word;\r\n }\r\n }\r\n ::v-deep .ivu-tree-title {\r\n width: 100% !important;\r\n }\r\n ::v-deep .vtl-tree-margin {\r\n margin-left: 15px;\r\n }\r\n ::v-deep .ivu-btn-icon-only.ivu-btn-small {\r\n width: 28px;\r\n }\r\n ::v-deep .tree-node > span {\r\n font-size: 14px;\r\n }\r\n ::v-deep .tree-node.node > span {\r\n font-size: 13px;\r\n }\r\n .nothing {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n min-height: 800px;\r\n .box:hover {\r\n border: 1px solid pink;\r\n }\r\n .box {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n flex-direction: column;\r\n width: 150px;\r\n height: 200px;\r\n margin: 0 20px;\r\n border-radius: 10px;\r\n cursor: pointer;\r\n overflow: hidden;\r\n border: 1px solid #fff;\r\n .icon {\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n width: 100%;\r\n height: 150px;\r\n font-size: 40px;\r\n color: #2d8cf0;\r\n background: #f1f1f1;\r\n }\r\n .text {\r\n width: 100%;\r\n height: 50px;\r\n background: #ddd;\r\n text-align: center;\r\n line-height: 50px;\r\n font-size: 14px;\r\n font-weight: 500;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"]}]}