c82e1090053474af3355ca774b294417.json 86 KB

1
  1. {"remainingRequest":"D:\\qianger\\7\\jindouyunNewFront\\node_modules\\babel-loader\\lib\\index.js!D:\\qianger\\7\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\qianger\\7\\jindouyunNewFront\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\qianger\\7\\jindouyunNewFront\\src\\views\\Customer\\CustomerAdmin\\CustomerList.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\qianger\\7\\jindouyunNewFront\\src\\views\\Customer\\CustomerAdmin\\CustomerList.vue","mtime":1658126509869},{"path":"D:\\qianger\\7\\jindouyunNewFront\\babel.config.js","mtime":1655374732000},{"path":"D:\\qianger\\7\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\qianger\\7\\jindouyunNewFront\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\qianger\\7\\jindouyunNewFront\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\qianger\\7\\jindouyunNewFront\\node_modules\\vue-loader\\lib\\index.js","mtime":1655715099000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwppbXBvcnQgc3RhZmZMaXN0TW9kYWwgZnJvbSAiQC9jb21wb25lbnQvY29tbW9uL3N0YWZmTGlzdE1vZGFsIjsKaW1wb3J0IERlcGFydG1lbnRTZWwgZnJvbSAiQC9jb21wb25lbnQvY29tbW9uL0RlcGFydG1lbnRTZWwiOwppbXBvcnQgUmVnaW9uU2VsZWN0IGZyb20gIkAvY29tcG9uZW50L2NvbW1vbi9SZWdpb25TZWxlY3RKU09OIjsKaW1wb3J0IEVkaXRDdXN0b21lciBmcm9tICIuL0FkZEN1c3RvbWVyIjsKaW1wb3J0IFNlbGVjdFNob3AgZnJvbSAiQC9jb21wb25lbnQvZ29vZHMvU2VsZWN0U2hvcC52dWUiOyAvLyBpbXBvcnQgU2VsTWVtYmVyc2hpcCBmcm9tICJAL2NvbXBvbmVudC9nb29kcy9TZWxNZW1iZXJzaGlwLnZ1ZSI7CgppbXBvcnQgeyBnZXRBbGxTdGFmZiB9IGZyb20gIkAvYXBpL0RlcGFydG1lbnQiOwppbXBvcnQgeyBiYXRjaEVkaXRDdXN0b21lciwgdXBkYXRlQ3VzdG9tZXJTdGF0dXMsIHVwZGF0ZUN1c3RvbWVyQ2hlY2tTdGF0dXMsIGdldEFsbEN1c3RvbWVyLCBjdXN0b21lckV4cG9ydCwgLy8gc2VhcmNoQ3VzdG9tZXIsCmRlbEN1c3RvbWVyLCBnZXRBbGxDdXN0b21lckNvbW11bmljYXRpb24sIGFkZEN1c3RvbWVyQ29tbXVuaWNhdGlvbiwgZGVsQ3VzdG9tZXJDb21tdW5pY2F0aW9uLCB1cGRhdGVDdXN0b21lckNvbW11bmljYXRpb24sIHVwZGF0ZUN1c3RvbWVySW50ZWdyYWwsIHJlY2hhcmdlTWVtYmVyQmFsYW5jZSwgc2V0Q3VzdG9tZXJUeXBlIH0gZnJvbSAiQC9hcGkvQ3VzdG9tZXIiOwppbXBvcnQgeyBnZXRDdXN0b21lclNvdXJjZUxpc3QgfSBmcm9tICJAL2FwaS9TeXN0ZW0iOwppbXBvcnQgeyBtYXBHZXR0ZXJzIH0gZnJvbSAidnVleCI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAiQ3VzdG9tZXJMaXN0IiwKICBjb21wb25lbnRzOiB7CiAgICBEZXBhcnRtZW50U2VsLAogICAgUmVnaW9uU2VsZWN0LAogICAgRWRpdEN1c3RvbWVyLAogICAgU2VsZWN0U2hvcCwKICAgIHN0YWZmTGlzdE1vZGFsIC8vIFNlbE1lbWJlcnNoaXAsCgogIH0sCgogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlX29wdGlvbnM6IFt7CiAgICAgICAgdHlwZTogNSwKICAgICAgICBsYWJlbDogIuWKoCIKICAgICAgfSwgewogICAgICAgIHR5cGU6IDQsCiAgICAgICAgbGFiZWw6ICLlh48iCiAgICAgIH1dLAogICAgICBiYWxhbmNlX3R5cGU6IDUsCiAgICAgIC8vIOenr+WIhgogICAgICBpbnRlZ3JhbF90eXBlOiA1LAogICAgICAvLyDkvZnpop0KICAgICAgaW50ZWdyYWxfbnVtOiAwLAogICAgICAvLyDnp6/liIYKICAgICAgbWVtYmVyX2JhbGFuY2U6IDAsCiAgICAgIC8v5L2Z6aKdCiAgICAgIGZvbGxvd0xpc3Q6IFtdLAogICAgICBvcmRlcl9pZDogIiIsCiAgICAgIHN0YWZmX3Nob3c6IGZhbHNlLAogICAgICBjaGVja2VkQWxsOiBmYWxzZSwKICAgICAgY3VzdG9tZXJfaWQ6IDAsCiAgICAgIGRyYXdlcl90aXQ6ICIiLAogICAgICBkcmF3ZXI6IGZhbHNlLAogICAgICBjb250YWN0OiBbXSwKICAgICAgZGVwYXJ0bWVudDogW10sCiAgICAgIHJlZ2lvbjogW10sCiAgICAgIHNlYXJjaF9mb3JtOiB7CiAgICAgICAgcGhvbmU6ICIiLAogICAgICAgIHBhZ2U6IHRoaXMucGFnZSwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwKICAgICAgICBrZXl3b3JkOiAiIiwKICAgICAgICB0eXBlOiAiIiwKICAgICAgICBwcm92aW5jZUNvZGU6ICIiLAogICAgICAgIGNpdHlDb2RlOiAiIiwKICAgICAgICBkaXN0cmljdENvZGU6ICIiLAogICAgICAgIGVuYWJsZVN0YXR1czogIiIsCiAgICAgICAgZGVwYXJ0bWVudElkOiAiIiwKICAgICAgICBzaG9wSWQ6ICIiLAogICAgICAgIC8vIOWVhumTuklkCiAgICAgICAgLy8gbWVtYmVyc2hpcElkOiAiIiwgLy/kvJrlkZjljaFpZAogICAgICAgIHRpbWU6ICIiLAogICAgICAgIGNvbnRlbnQ6ICIiLAogICAgICAgIHNhbGVzTWFuSWQ6ICIiLAogICAgICAgIHNvdXJjZTogIiIsCiAgICAgICAgdGFnOiAiIgogICAgICB9LAogICAgICBVc2VyVHlwZTogW3sKICAgICAgICB2YWx1ZTogIjEiLAogICAgICAgIGxhYmVsOiAi5a6i5oi357G75Z6LIgogICAgICB9XSwKICAgICAgY3VzdG9tZXJMYWJlbDogW3sKICAgICAgICB2YWx1ZTogIumAiemhuTEiLAogICAgICAgIGxhYmVsOiAi5a6i5oi35qCH562+IgogICAgICB9XSwKICAgICAgY3VzdG9tZXJTdGF0dXM6IFt7CiAgICAgICAgdmFsdWU6ICI1IiwKICAgICAgICBsYWJlbDogIuW3suWQr+eUqCIKICAgICAgfSwgewogICAgICAgIHZhbHVlOiAiNCIsCiAgICAgICAgbGFiZWw6ICLlt7LlgZznlKgiCiAgICAgIH1dLAogICAgICB2YWx1ZTogIiIsCiAgICAgIGZvcm1MYWJlbFdpZHRoOiAiMTAwcHgiLAogICAgICBjaGVja2VkOiBmYWxzZSwKICAgICAgZm9ybTogewogICAgICAgIGtleTogIiIsCiAgICAgICAgdHlwZTogIiIsCiAgICAgICAgY2xhc3NpZnk6IFtdLAogICAgICAgIGJyYW5kOiAiIgogICAgICB9LAogICAgICB0b3RhbDogMCwKICAgICAgcGFnZTogMSwKICAgICAgcGFnZVNpemU6IDEwLAogICAgICByb2xlSWQ6ICIiLAogICAgICBzZWFyY2hfa2V5OiAiIiwKICAgICAgZGVwYXJ0bWVudFBpZFBhdGg6IFtdLAogICAgICB0YWJsZURhdGE6IFtdLAogICAgICB0b3RhbF9jb3VudDogMCwKICAgICAgYmF0Y2hTZXR0aW5nVmlzaWJsZTogZmFsc2UsCiAgICAgIC8vIOaJuemHj+iuvue9ruS4muWKoeWRmOaYvuekuuaOp+WItgogICAgICBiYXRjaFNldHRpbmdUeXBlOiBmYWxzZSwKICAgICAgLy8g5om56YeP6K6+572u5a6i5oi357G75Z6L5pi+56S65o6n5Yi2CiAgICAgIGJhdGNoU2V0dGluZzogewogICAgICAgIHJlZ2lvbjogIiIsCiAgICAgICAgdHlwZTogIiIKICAgICAgfSwKICAgICAgYmF0Y2hTZXR0aW5nV2lkdGg6ICI4MHB4IiwKICAgICAgLy8g5om56YeP6K6+572u5Lia5Yqh5ZGY5LitIumDqOmXqO+8miLnmoTplb/luqYKICAgICAgb3B0aW9uczogW10sCiAgICAgIC8vIOS4muWKoeWRmOWIl+ihqOaVsOe7hAogICAgICBpZHM6IFtdLAogICAgICAvLyDlrqLmiLdpZOaVsOe7hAogICAgICB1c2VyQ2VudGVySWRzOiBbXSwKICAgICAgLy8g5a6i5oi3aWTmlbDnu4QKICAgICAgZGVwYXJ0bWVudElkOiAiIiwKICAgICAgLy8g6YOo6ZeoaWQKICAgICAgc2FsZW1hbjogIiIsCiAgICAgIC8vIOS4muWKoeWRmGlkCiAgICAgIHNlbGVjdGlvbjogW10sCiAgICAgIC8vIOWuouaIt+WIl+ihqOmAieS4reaVsOe7hAogICAgICBjaGVja0xpc3Q6IFsi5a6i5oi357G75Z6LIiwgIuWVhumTuiIsICLkuJrliqHlkZgiLCAi5a6h5qC454q25oCBIiwgIuazqOWGjOaXtumXtCIsICLluJDlj7fnirbmgIEiXSwKICAgICAgY29sdW1uczogW3sKICAgICAgICBsYWJlbDogIuWuouaIt+exu+WeiyIKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAi5ZWG6ZO6IgogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICLkuJrliqHlkZgiCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogIuWuoeaguOeKtuaAgSIKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAi5rOo5YaM5pe26Ze0IgogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICLluJDlj7fnirbmgIEiCiAgICAgIH1dLAogICAgICB0eXBlRmxhZzogdHJ1ZSwKICAgICAgc2hvcEZsYWc6IHRydWUsCiAgICAgIHNhbGVzbWFuRmxhZzogdHJ1ZSwKICAgICAgYXVkaXRTdGF0dXNGbGFnOiB0cnVlLAogICAgICB0aW1lRmxhZzogdHJ1ZSwKICAgICAgYWNjb3VudFN0YXR1c0ZsYWc6IHRydWUsCiAgICAgIGZvbGxvd1VwUmVjb3Jkc0ZsYWc6IGZhbHNlLAogICAgICBjb3JlRmxhZzogZmFsc2UsCiAgICAgIGlzc2VyY2g6IHRydWUsCiAgICAgIHNlYXJjaERhdGU6IHt9LAogICAgICBjdXN0b21lcklkOiAiIiwKICAgICAgZm9sbG93UGFnZTogMSwKICAgICAgZm9sbG93UGFnZVNpemU6IDEwLAogICAgICBmb2xsb3dUb3RhbDogMCwKICAgICAgdXBkYXRlRm9sbG93VmFsdWU6IHt9LAogICAgICB1cGRhdGVGb2xsb3dMaXN0OiAiIiwKICAgICAgc291cmNlX2xpc3Q6IFt7CiAgICAgICAgbGFiZWw6ICJpb3MiLAogICAgICAgIHRhZzogImlvcyIsCiAgICAgICAgdmFsdWU6IDEKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAi5a6J5Y2TQVBQIiwKICAgICAgICB0YWc6ICJhbmRyb2lkIiwKICAgICAgICB2YWx1ZTogMgogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICLlsI/nqIvluo8iLAogICAgICAgIHRhZzogIm1pbmlQcm9ncmFtIiwKICAgICAgICB2YWx1ZTogMwogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICLlkI7lj7DliJvlu7oiLAogICAgICAgIHRhZzogIm1hbmFnZSIsCiAgICAgICAgdmFsdWU6IDQKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAiSDXpobXpnaIiLAogICAgICAgIHRhZzogIkg1IiwKICAgICAgICB2YWx1ZTogNQogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICJQY+mhtemdoiIsCiAgICAgICAgdGFnOiAiUGMiLAogICAgICAgIHZhbHVlOiA2CiAgICAgIH1dLAogICAgICBjdXN0b21lclR5cGU6IFtdCiAgICB9OwogIH0sCgogIGNvbXB1dGVkOiB7IC4uLm1hcEdldHRlcnMoewogICAgICBzdG9yZURhdGE6ICJNVXNlci9zdG9yZURhdGEiCiAgICB9KQogIH0sCgogIGFzeW5jIG1vdW50ZWQoKSB7CiAgICBpZiAoWzIsIDNdLmluY2x1ZGVzKHRoaXMuc3lzdGVtVHlwZSkpIHsvLyB0aGlzLnNlYXJjaF9mb3JtLnNob3BJZCA9IHRoaXMuc3RvcmVEYXRhLmlkOwogICAgfSAvLyDliLDmnJ/mj5DnpLoKCgogICAgYXdhaXQgdGhpcy5lbnRlckV4cGlyZVRpbWUoKTsKICAgIGF3YWl0IHRoaXMuZ2V0VXNlckxpc3QoKTsKICB9LAoKICBhY3RpdmF0ZWQoKSB7CiAgICBpZiAodGhpcy4kX2lzSW5pdCgpKSByZXR1cm47CiAgICB0aGlzLmdldFVzZXJMaXN0KCk7CiAgfSwKCiAgY3JlYXRlZCgpIHsKICAgIHRoaXMuZ2V0QWxsU3RhZmYoKTsKICAgIHRoaXMuZ2V0Q3VzdG9tZXJTb3VyY2VMaXN0KCk7CiAgfSwKCiAgbWV0aG9kczogewogICAgc2hvd1NldEludGVncmFsKGluZGV4KSB7CiAgICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmludGVncmFsX2ZhbHNlX3Zpc2libGUgPSBmYWxzZSk7CiAgICAgIHRoaXMuaW50ZWdyYWxfbnVtID0gdGhpcy50YWJsZURhdGFbaW5kZXhdLmludGVncmFsOwogICAgICB0aGlzLnRhYmxlRGF0YVtpbmRleF0uaW50ZWdyYWxfZmFsc2VfdmlzaWJsZSA9IHRydWU7CiAgICB9LAoKICAgIHNob3dTZXRCYWxhbmNlKGluZGV4KSB7CiAgICAgIHRoaXMudGFibGVEYXRhLmZvckVhY2goaXRlbSA9PiBpdGVtLmJhbGFuY2VfZmFsc2VfdmlzaWJsZSA9IGZhbHNlKTsKICAgICAgdGhpcy5tZW1iZXJfYmFsYW5jZSA9IHRoaXMudGFibGVEYXRhW2luZGV4XS5tZW1iZXJCYWxhbmNlOwogICAgICB0aGlzLnRhYmxlRGF0YVtpbmRleF0uYmFsYW5jZV9mYWxzZV92aXNpYmxlID0gdHJ1ZTsKICAgIH0sCgogICAgLy8g5L+u5pS556ev5YiGCiAgICBhc3luYyB1cGRhdGVDdXN0b21lckludGVncmFsKGluZGV4KSB7CiAgICAgIGlmICh0aGlzLmludGVncmFsX251bSA8PSAwKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXlpKfkuo4w55qE5YC8Iik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBkYXRhID0gYXdhaXQgdXBkYXRlQ3VzdG9tZXJJbnRlZ3JhbCh7CiAgICAgICAgY3VzdG9tZXJJZDogdGhpcy50YWJsZURhdGFbaW5kZXhdLmlkLAogICAgICAgIGludGVncmFsOiB0aGlzLmludGVncmFsX251bSwKICAgICAgICB0eXBlOiB0aGlzLmludGVncmFsX3R5cGUsCiAgICAgICAgZGVzYzogIuezu+e7n+WFheWAvCIKICAgICAgfSk7CiAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygi5L+u5pS55oiQ5YqfIik7CiAgICAgIHRoaXMudGFibGVEYXRhW2luZGV4XS5pbnRlZ3JhbF9mYWxzZV92aXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMuZ2V0VXNlckxpc3QoKTsKICAgIH0sCgogICAgLy8g5L+u5pS55L2Z6aKdCiAgICBhc3luYyByZWNoYXJnZU1lbWJlckJhbGFuY2UoaW5kZXgpIHsKICAgICAgaWYgKHRoaXMubWVtYmVyX2JhbGFuY2UgPD0gMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5aSn5LqOMOeahOWAvCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlY2hhcmdlTWVtYmVyQmFsYW5jZSh7CiAgICAgICAgY3VzdG9tZXJJZDogdGhpcy50YWJsZURhdGFbaW5kZXhdLmlkLAogICAgICAgIG1vbmV5OiB0aGlzLm1lbWJlcl9iYWxhbmNlLAogICAgICAgIHR5cGU6IHRoaXMuYmFsYW5jZV90eXBlLAogICAgICAgIHB1cnBvc2U6ICLns7vnu5/lhYXlgLwiCiAgICAgIH0pOwogICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoIuS/ruaUueaIkOWKnyIpOwogICAgICB0aGlzLnRhYmxlRGF0YVtpbmRleF0uYmFsYW5jZV9mYWxzZV92aXNpYmxlID0gZmFsc2U7CiAgICAgIHRoaXMuZ2V0VXNlckxpc3QoKTsKICAgIH0sCgogICAgLy8g5om56YeP6K6+572u5Lia5Yqh5ZGY56Gu5a6aCiAgICBkZXBhcnRtZW50Q2hhbmdlKHZhbCkgewogICAgICBpZiAodmFsLmxlbmd0aCkgewogICAgICAgIHRoaXMuZGVwYXJ0bWVudElkID0gdmFsOwogICAgICAgIHRoaXMuZ2V0QWxsU3RhZmYodmFsW3ZhbC5sZW5ndGggLSAxXSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8gIOiOt+WPluWIl+ihqAogICAgYXN5bmMgZ2V0QWxsU3RhZmYoZGVwYXJ0bWVudElkKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRBbGxTdGFmZih7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBwYWdlU2l6ZTogNTAsCiAgICAgICAgZGVwYXJ0bWVudElkOiBkZXBhcnRtZW50SWQKICAgICAgfSk7CiAgICAgIHRoaXMub3B0aW9ucyA9IGRhdGEuZGF0YTsKICAgIH0sCgogICAgLy8g5YiX6KGo5Y+M5Ye75LqL5Lu2CiAgICAvLyBnb0RldGFpbChyb3cpIHsKICAgIC8vICAgaWYgKCF0aGlzLiRhY2Nlc3NDaGVjayh0aGlzLiRBY2Nlc3MuQ3VzdG9tZXJMaXN0R2V0Q3VzdG9tZXJJbmZvKSkgewogICAgLy8gICAgIHJldHVybjsKICAgIC8vICAgfQogICAgLy8gICB0aGlzLiRyb3V0ZXIucHVzaChgL0N1c3RvbWVyL0N1c3RvbWVyQWRtaW4vQ3VzdG9tZXJEZXRhaWwvJHtyb3cuaWR9YCk7CiAgICAvLyB9LAogICAgLy8g5a+85Ye65pe25LqL5Lu2CiAgICBhc3luYyBleHBvcnREYXRhKCkgewogICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgcGFnZTogdGhpcy5wYWdlLAogICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLAogICAgICAgIGtleXdvcmQ6IHRoaXMuc2VhcmNoX2Zvcm0ua2V5d29yZCwKICAgICAgICB0eXBlOiB0aGlzLnNlYXJjaF9mb3JtLnR5cGUsCiAgICAgICAgcHJvdmluY2VDb2RlOiB0aGlzLnNlYXJjaF9mb3JtLnByb3ZpbmNlQ29kZSwKICAgICAgICBjaXR5Q29kZTogdGhpcy5zZWFyY2hfZm9ybS5jaXR5Q29kZSwKICAgICAgICBkaXN0cmljdENvZGU6IHRoaXMuc2VhcmNoX2Zvcm0uZGlzdHJpY3RDb2RlLAogICAgICAgIHN0YXR1czogMiwKICAgICAgICBlbmFibGVTdGF0dXM6IHRoaXMuc2VhcmNoX2Zvcm0uZW5hYmxlU3RhdHVzLAogICAgICAgIC8vIOemgeeUqOWQr+eUqAogICAgICAgIGRlcGFydG1lbnRJZDogdGhpcy5zZWFyY2hfZm9ybS5kZXBhcnRtZW50SWQsCiAgICAgICAgc2hvcElkOiB0aGlzLnNlYXJjaF9mb3JtLnNob3BJZCwKICAgICAgICBzYWxlc01hbklkOiAiIiwKICAgICAgICBzdGFydDogIiIsCiAgICAgICAgZW5kOiAiIgogICAgICB9OwogICAgICBjb25zdCB0YXJnZXQgPSBhd2FpdCBjdXN0b21lckV4cG9ydChwYXJhbXMpOwogICAgfSwKCiAgICAvLyDmsqHmnInnlKjliLDkuovku7YKICAgIGFzeW5jIHVwZGF0ZUF1ZGl0U3RhdHVzKHJvdykgewogICAgICB0aGlzLiRjb25maXJtKCLnoa7lrpropoHlrqHmoLjmraTnlKjmiLflkJc/IiwgIuaPkOekuiIsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgdHlwZTogIndhcm5pbmciCiAgICAgIH0pLnRoZW4oYXN5bmMgKCkgPT4gewogICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB1cGRhdGVDdXN0b21lckNoZWNrU3RhdHVzKHsKICAgICAgICAgIGlkOiByb3cuaWQsCiAgICAgICAgICBzdGF0dXM6IDIKICAgICAgICB9KTsKICAgICAgICB0aGlzLmdldFVzZXJMaXN0KCk7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICBtZXNzYWdlOiAi5a6h5qC45oiQ5YqfIgogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCgogICAgLy8g5p+l55yL57uE5Lu25a2Q5Lyg54i2CiAgICBzdWJTdWNjZXNzKCkgewogICAgICB0aGlzLmRyYXdlciA9IGZhbHNlOwogICAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7CiAgICB9LAoKICAgIC8vIOafpeeci+S6i+S7tgogICAgZWRpdERhdGEocm93KSB7CiAgICAgIHRoaXMuY3VzdG9tZXJfaWQgPSByb3cuaWQ7CiAgICAgIHRoaXMuZHJhd2VyX3RpdCA9IHJvdy5uYW1lOwogICAgICB0aGlzLmRyYXdlciA9IHRydWU7CiAgICB9LAoKICAgIC8vIOmAieaLqeWVhumTugogICAgc2VsU2hvcCh2YWwsIHJvdykgewogICAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7CiAgICB9LAoKICAgIC8v6YCJ5oup5Lya5ZGY5Y2hCiAgICAvLyBzZWxNZW1iZXJzaGlwSWQoKSB7CiAgICAvLyAgIHRoaXMucGFnZUNoYW5nZSgxKTsKICAgIC8vIH0sCiAgICBzaG9wQ2xlYXIoKSB7CiAgICAgIHRoaXMuc2VhcmNoX2Zvcm0uc2hvcElkID0gIiI7CiAgICAgIHRoaXMucGFnZUNoYW5nZSgxKTsKICAgIH0sCgogICAgLy8gbWVtYmVyc2hpcENsZWFyKCkgewogICAgLy8gICB0aGlzLnNlYXJjaF9mb3JtLm1lbWJlcnNoaXBJZCA9ICIiOwogICAgLy8gICB0aGlzLnBhZ2VDaGFuZ2UoMSk7CiAgICAvLyB9LAogICAgLy8g6YCJ5oup6YOo6ZeoCiAgICBzZWxCcmFuY2godmFsKSB7CiAgICAgIHRoaXMuc2VhcmNoX2Zvcm0uZGVwYXJ0bWVudElkID0gdmFsW3ZhbC5sZW5ndGggLSAxXTsKICAgICAgdGhpcy5wYWdlQ2hhbmdlKDEpOwogICAgfSwKCiAgICAvLyDpgInmi6nljLrln58KICAgIHJlZ2lvbkNoYW5nZSh2YWwpIHsKICAgICAgdGhpcy5zZWFyY2hfZm9ybS5wcm92aW5jZUNvZGUgPSB2YWxbMF07CiAgICAgIHRoaXMuc2VhcmNoX2Zvcm0uY2l0eUNvZGUgPSB2YWxbMV07CiAgICAgIHRoaXMuc2VhcmNoX2Zvcm0uZGlzdHJpY3RDb2RlID0gdmFsWzJdOwogICAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7CiAgICB9LAoKICAgIC8vICDlrqLmiLfnirbmgIEKICAgIGN1c3RvbWVyQ2hhbmdlKHZhbCkgewogICAgICB0aGlzLnNlYXJjaF9mb3JtLmVuYWJsZVN0YXR1cyA9IHZhbDsKICAgICAgdGhpcy5wYWdlQ2hhbmdlKDEpOwogICAgfSwKCiAgICAvLyDojrflj5blrqLmiLfliJfooaggIGdldEFsbEN1c3RvbWVyCiAgICBhc3luYyBnZXRBbGxDdXN0b21lcigpIHsKICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldEFsbEN1c3RvbWVyKHsKICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsCiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsCiAgICAgICAgc3RhdHVzOiAyLAogICAgICAgIHNob3BJZDogdGhpcy5zZWFyY2hfZm9ybS5zaG9wSWQsCiAgICAgICAga2V5d29yZDogdGhpcy5zZWFyY2hfZm9ybS5rZXl3b3JkLAogICAgICAgIGVuYWJsZVN0YXR1czogdGhpcy5zZWFyY2hfZm9ybS5lbmFibGVTdGF0dXMsCiAgICAgICAgLy8g56aB55So5ZCv55SoCiAgICAgICAgc2FsZXNNYW5JZDogdGhpcy5zZWFyY2hfZm9ybS5zYWxlc01hbklkLAogICAgICAgIHNvdXJjZTogdGhpcy5zZWFyY2hfZm9ybS5zb3VyY2UsCiAgICAgICAgdGFnOiB0aGlzLnNlYXJjaF9mb3JtLnRhZywKICAgICAgICBwcm92aW5jZUNvZGU6IHRoaXMuc2VhcmNoX2Zvcm0ucHJvdmluY2VDb2RlLAogICAgICAgIGNpdHlDb2RlOiB0aGlzLnNlYXJjaF9mb3JtLmNpdHlDb2RlLAogICAgICAgIGRpc3RyaWN0Q29kZTogdGhpcy5zZWFyY2hfZm9ybS5kaXN0cmljdENvZGUKICAgICAgfSk7CiAgICAgIHRoaXMudGFibGVEYXRhID0gZGF0YS5kYXRhLm1hcChpdGVtID0+IHsKICAgICAgICByZXR1cm4geyAuLi5pdGVtLAogICAgICAgICAgaW50ZWdyYWxfZmFsc2VfdmlzaWJsZTogZmFsc2UsCiAgICAgICAgICBiYWxhbmNlX2ZhbHNlX3Zpc2libGU6IGZhbHNlCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHRoaXMuY29udGFjdCA9IGRhdGEuZGF0YS5jb250YWN0OwogICAgICB0aGlzLnRvdGFsID0gZGF0YS5wYWdlVG90YWw7CiAgICB9LAoKICAgIC8vICDliKTmlq0KICAgIGdldFVzZXJMaXN0KCkgewogICAgICB0aGlzLmdldEFsbEN1c3RvbWVyKCk7CiAgICB9LAoKICAgIC8vICDliKDpmaTmjqXlj6MKICAgIC8vIGRlbEN1c3RvbWVyKGlkKSB7CiAgICAvLyAgIHRoaXMuJGNvbmZpcm0oIuS9oOehruWumuWIoOmZpOivpeeUqOaItyIsIHsKICAgIC8vICAgICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAvLyAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAvLyAgICAgdHlwZTogIndhcm5pbmciLAogICAgLy8gICB9KS50aGVuKGFzeW5jICgpID0+IHsKICAgIC8vICAgICBjb25zdCBkYXRhID0gYXdhaXQgZGVsQ3VzdG9tZXIoaWQpOwogICAgLy8KICAgIC8vICAgICB0aGlzLmdldFVzZXJMaXN0KCk7CiAgICAvLyAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAvLyAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAvLyAgICAgICBtZXNzYWdlOiAi5Yig6Zmk5oiQ5YqfISIsCiAgICAvLyAgICAgfSk7CiAgICAvLyAgIH0pOwogICAgLy8gfSwKICAgIC8vIOemgeeUqOWQr+eUqAogICAgYXN5bmMgdXBkYXRlRW5hYmxlU3RhdHVzKHZhbCwgcm93KSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHVwZGF0ZUN1c3RvbWVyU3RhdHVzKHsKICAgICAgICAgIGlkOiByb3cuaWQsCiAgICAgICAgICBlbmFibGVTdGF0dXM6IHZhbAogICAgICAgIH0pOwogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgdHlwZTogInN1Y2Nlc3MiLAogICAgICAgICAgbWVzc2FnZTogIuaTjeS9nOaIkOWKnyEiCiAgICAgICAgfSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICB0aGlzLmdldFVzZXJMaXN0KCk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5YiH6aG1CiAgICBwYWdlQ2hhbmdlKHZhbCkgewogICAgICB0aGlzLnBhZ2UgPSB2YWw7CiAgICAgIHRoaXMuZ2V0VXNlckxpc3QoKTsKICAgIH0sCgogICAgLy8g5q+P6aG15pWw5o2u5aSn5bCP5pS55Y+YCiAgICBzaXplQ2hhbmdlKHZhbCkgewogICAgICB0aGlzLnBhZ2VTaXplID0gdmFsOwogICAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7CiAgICB9LAoKICAgIC8vIOeCueWHuy3mibnph4/orr7nva7kuJrliqHlkZgKICAgIGNsaWNrQmF0Y2hTZXR0aW5nKCkgewogICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYmF0Y2hTZXR0aW5nVmlzaWJsZSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAid2FybmluZyIsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup6KaB5pON5L2c55qE5a6i5oi3IgogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIC8v5om56YeP6K6+572u5a6i5oi357G75Z6LCiAgICBjbGlja1NldHRpbmdUeXBlKCkgewogICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYmF0Y2hTZXR0aW5nVHlwZSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAid2FybmluZyIsCiAgICAgICAgICBtZXNzYWdlOiAi6K+36YCJ5oup6KaB5pON5L2c55qE5a6i5oi3IgogICAgICAgIH0pOwogICAgICB9CiAgICB9LAoKICAgIC8vIOaJuemHj+WIoOmZpOWuouaItwogICAgYmF0Y2hEZWxDdXN0b21lcigpIHsKICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLiRjb25maXJtKCLnoa7lrpropoHliKDpmaTov5nkupvlrqLmiLflkJc/IiwgIuaPkOekuiIsIHsKICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAi56Gu5a6aIiwKICAgICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgICAgdHlwZTogIndhcm5pbmciCiAgICAgICAgfSkudGhlbihhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnVzZXJDZW50ZXJJZHMgPSB0aGlzLnNlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtLnVzZXJDZW50ZXJJZCk7CiAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgIGRhdGEKICAgICAgICAgIH0gPSBhd2FpdCBkZWxDdXN0b21lcih0aGlzLnVzZXJDZW50ZXJJZHMpOwogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgICAgbWVzc2FnZTogIuWIoOmZpOaIkOWKnyEiCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMucGFnZUNoYW5nZSgxKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJ3YXJuaW5nIiwKICAgICAgICAgIG1lc3NhZ2U6ICLor7fpgInmi6nopoHmk43kvZznmoTlrqLmiLciCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCgogICAgLy8g5Yig6Zmk5a6i5oi3CiAgICBkZWxDdXN0b21lcihpZCkgewogICAgICB0aGlzLiRjb25maXJtKCLnoa7lrpropoHliKDpmaTor6XlrqLmiLflkJc/IiwgIuaPkOekuiIsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogIuehruWumiIsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogIuWPlua2iCIsCiAgICAgICAgdHlwZTogIndhcm5pbmciCiAgICAgIH0pLnRoZW4oYXN5bmMgKCkgPT4gewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGRhdGEKICAgICAgICB9ID0gYXdhaXQgZGVsQ3VzdG9tZXIoW2lkXSk7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAic3VjY2VzcyIsCiAgICAgICAgICBtZXNzYWdlOiAi5Yig6Zmk5oiQ5YqfISIKICAgICAgICB9KTsKICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UoMSk7CiAgICAgIH0pOwogICAgfSwKCiAgICAvL+aJuemHj+iuvue9ruWuouaIt+exu+Wei+WFs+mXrQogICAgY2xvc2VTZXR0aW5nVHlwZSgpIHsKICAgICAgdGhpcy5iYXRjaFNldHRpbmcudHlwZSA9ICIiOwogICAgICB0aGlzLmJhdGNoU2V0dGluZ1R5cGUgPSBmYWxzZTsKICAgIH0sCgogICAgLy8g6K+35rGCLeaJuemHj+iuvue9ruS4muWKoeWRmAogICAgYXN5bmMgYmF0Y2hFZGl0Q3VzdG9tZXIoKSB7CiAgICAgIHRoaXMuaWRzID0gdGhpcy5zZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbS5pZCk7CiAgICAgIGNvbnN0IHBhcmFtcyA9IHsKICAgICAgICBpZHM6IHRoaXMuaWRzLAogICAgICAgIGRlcGFydG1lbnRJZDogdGhpcy5kZXBhcnRtZW50SWRbMF0sCiAgICAgICAgc2FsZXNNYW5JZDogdGhpcy5zYWxlbWFuCiAgICAgIH07CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBiYXRjaEVkaXRDdXN0b21lcihwYXJhbXMpOwogICAgICB0aGlzLmdldFVzZXJMaXN0KCk7CiAgICB9LAoKICAgIC8vIOehruiupC3mibnph4/kv67mlLnkuJrliqHlkZgKICAgIGJhdGNoU2V0dGluZ0NvbigpIHsKICAgICAgaWYgKHRoaXMuZGVwYXJ0bWVudElkID09PSAiIiB8fCB0aGlzLnNhbGVtYW4gPT09ICIiKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcigi6K+35aGr5YaZ5a6M5pW05L+h5oGvIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5iYXRjaFNldHRpbmdWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgdGhpcy5iYXRjaEVkaXRDdXN0b21lcigpOwogICAgICB9CiAgICB9LAoKICAgIC8vIOehruiupC3mibnph4/kv67mlLnlrqLmiLfnsbvlnosKICAgIGFzeW5jIHNldEN1c3RvbWVyVHlwZSgpIHsKICAgICAgdGhpcy5pZHMgPSB0aGlzLnNlbGVjdGlvbi5tYXAoaXRlbSA9PiBpdGVtLmlkKTsKICAgICAgY29uc3QgcGFyYW1zID0gewogICAgICAgIGN1c3RvbWVySWRzOiB0aGlzLmlkcywKICAgICAgICB0eXBlOiB0aGlzLmJhdGNoU2V0dGluZy50eXBlCiAgICAgIH07CiAgICAgIGNvbnN0IHsKICAgICAgICBkYXRhCiAgICAgIH0gPSBhd2FpdCBzZXRDdXN0b21lclR5cGUocGFyYW1zKTsKICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCLkv67mlLnmiJDlip8iKTsKICAgICAgYXdhaXQgdGhpcy5jbG9zZVNldHRpbmdUeXBlKCk7CiAgICAgIHRoaXMuZ2V0VXNlckxpc3QoKTsKICAgIH0sCgogICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHZhbCkgewogICAgICB0aGlzLmNoZWNrZWRBbGwgPSB2YWwubGVuZ3RoID09PSB0aGlzLnRhYmxlRGF0YS5sZW5ndGg7CiAgICAgIHRoaXMuc2VsZWN0aW9uID0gdmFsOwogICAgfSwKCiAgICBjaGVja0FsbENoYW5nZSgpIHsKICAgICAgdGhpcy4kcmVmcy5jdXN0b21lclRhYmxlLnRvZ2dsZUFsbFNlbGVjdGlvbigpOwogICAgfSwKCiAgICBjaGFuZ2UoKSB7CiAgICAgIHRoaXMudHlwZUZsYWcgPSB0aGlzLmNoZWNrTGlzdC5zb21lKGl0ZW0gPT4gaXRlbSA9PT0gIuWuouaIt+exu+WeiyIpOwogICAgICB0aGlzLnNob3BGbGFnID0gdGhpcy5jaGVja0xpc3Quc29tZShpdGVtID0+IGl0ZW0gPT09ICLllYbpk7oiKTsKICAgICAgdGhpcy5zYWxlc21hbkZsYWcgPSB0aGlzLmNoZWNrTGlzdC5zb21lKGl0ZW0gPT4gaXRlbSA9PT0gIuS4muWKoeWRmCIpOwogICAgICB0aGlzLmF1ZGl0U3RhdHVzRmxhZyA9IHRoaXMuY2hlY2tMaXN0LnNvbWUoaXRlbSA9PiBpdGVtID09PSAi5a6h5qC454q25oCBIik7CiAgICAgIHRoaXMudGltZUZsYWcgPSB0aGlzLmNoZWNrTGlzdC5zb21lKGl0ZW0gPT4gaXRlbSA9PT0gIuazqOWGjOaXtumXtCIpOwogICAgICB0aGlzLmFjY291bnRTdGF0dXNGbGFnID0gdGhpcy5jaGVja0xpc3Quc29tZShpdGVtID0+IGl0ZW0gPT09ICLluJDlj7fnirbmgIEiKTsKICAgIH0sCgogICAgLy8g6Lef6L+b6K6w5b2V56ys5LiA5qyh5riy5p+T5YiX6KGoCiAgICBvcGVuRm9sbG93VXBSZWNvcmRzKGlkKSB7CiAgICAgIHRoaXMuZm9sbG93UGFnZSA9IDE7CiAgICAgIHRoaXMuZm9sbG93VXBSZWNvcmRzRmxhZyA9IHRydWU7CiAgICAgIHRoaXMuY3VzdG9tZXJJZCA9IGlkOwogICAgICB0aGlzLmZvbGxvd1VwUmVjb3JkcygpOwogICAgfSwKCiAgICAvLyDot5/ov5vorrDlvZXliJfooagKICAgIGFzeW5jIGZvbGxvd1VwUmVjb3JkcygpIHsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEsCiAgICAgICAgcGFnZVRvdGFsCiAgICAgIH0gPSBhd2FpdCBnZXRBbGxDdXN0b21lckNvbW11bmljYXRpb24oewogICAgICAgIC8vIHN0YWZmSWQ6ICIiLAogICAgICAgIGN1c3RvbWVySWQ6IHRoaXMuY3VzdG9tZXJJZCwKICAgICAgICAvLyBzdGFyOiAiIiwKICAgICAgICAvLyBlbmQ6ICIiLAogICAgICAgIHBhZ2U6IHRoaXMuZm9sbG93UGFnZSwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5mb2xsb3dQYWdlU2l6ZQogICAgICB9KTsKICAgICAgdGhpcy5mb2xsb3dMaXN0ID0gZGF0YTsKICAgICAgdGhpcy5mb2xsb3dUb3RhbCA9IHBhZ2VUb3RhbDsKICAgIH0sCgogICAgLy8g5riF6Zmk5ZGY5bel6L6T5YWl5qGGCiAgICBzdGFmZkNsZWFyKCkgewogICAgICB0aGlzLnNlYXJjaERhdGUuc2FsZXNNYW5JZCA9ICIiOwogICAgICB0aGlzLnNlYXJjaF9mb3JtLnN0YWZmID0gIiI7CiAgICAgIHRoaXMucGFnZUNoYW5nZSgxKTsKICAgIH0sCgogICAgLy8g6YCJ5oup5ZGY5belCiAgICBzdGFmZlNlbCh2YWwpIHsKICAgICAgY29uc3Qgcm93ID0gdmFsWzBdOwogICAgICB0aGlzLnNlYXJjaERhdGUuc2FsZXNNYW5JZCA9IHJvdy5pZDsKICAgICAgdGhpcy5zZWFyY2hfZm9ybS5zdGFmZiA9IHJvdy5zdGFmZk5hbWU7CiAgICAgIHRoaXMuaGFuZGxlQ3VycmVudENoYW5nZSgxKTsKICAgIH0sCgogICAgYXN5bmMgc2FsZUZuKGlzc2VyY2gsIGlkKSB7CiAgICAgIHRoaXMuc3RhZmZfc2hvdyA9IHRydWU7CiAgICAgIHRoaXMuaXNzZXJjaCA9IGlzc2VyY2g7CgogICAgICBpZiAoaWQpIHsKICAgICAgICB0aGlzLm9yZGVyX2lkID0gaWQ7CiAgICAgIH0KICAgIH0sCgogICAgLy8g6Lef6L+b6K6w5b2V5YiX6KGo5YiH6aG1CiAgICBhc3luYyBoYW5kbGVDdXJyZW50Q2hhbmdlKHZhbCkgewogICAgICB0aGlzLmZvbGxvd1BhZ2UgPSB2YWw7CiAgICAgIGF3YWl0IHRoaXMuZm9sbG93VXBSZWNvcmRzKCk7CiAgICB9LAoKICAgIC8vIOi3n+i/m+iusOW9leWIl+ihqOa3u+WKoAogICAgYXN5bmMgYWRkQ3VzdG9tZXJDb21tdW5pY2F0aW9uKCkgewogICAgICBpZiAoIXRoaXMuc2VhcmNoX2Zvcm0uY29udGVudC50cmltKCkpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIui3n+i/m+WGheWuueS4jeiDveS4uuepuiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKHRoaXMuc2VhcmNoX2Zvcm0udGltZSkuZ2V0VGltZSgpIC8gMTAwMDsKCiAgICAgIGlmICh0aGlzLnNlYXJjaERhdGUuc2FsZXNNYW5JZCAmJiB0aW1lICYmIHRoaXMuc2VhcmNoX2Zvcm0uY29udGVudCkgewogICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBhZGRDdXN0b21lckNvbW11bmljYXRpb24oewogICAgICAgICAgY3VzdG9tZXJJZDogdGhpcy5jdXN0b21lcklkLAogICAgICAgICAgc3RhZmZJZDogdGhpcy5zZWFyY2hEYXRlLnNhbGVzTWFuSWQsCiAgICAgICAgICBjb250ZW50OiB0aGlzLnNlYXJjaF9mb3JtLmNvbnRlbnQsCiAgICAgICAgICB0aW1lOiB0aW1lCiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgdGhpcy5mb2xsb3dVcFJlY29yZHMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoIuW/hemhu+Whq+WGmeWGheWuuei3n+i/m+S6uuWSjOaXtumXtCIpOwogICAgICB9CiAgICB9LAoKICAgIC8vIOi3n+i/m+iusOW9leWIoOmZpAogICAgZGVsQ3VzdG9tZXJDb21tdW5pY2F0aW9uKGlkKSB7CiAgICAgIHRoaXMuJGNvbmZpcm0oIuatpOaTjeS9nOWwhuawuOS5heWIoOmZpOivpeaWh+S7tiwg5piv5ZCm57un57utPyIsICLmj5DnpLoiLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICLlj5bmtogiLAogICAgICAgIHR5cGU6ICJ3YXJuaW5nIgogICAgICB9KS50aGVuKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBkYXRhCiAgICAgICAgfSA9IGF3YWl0IGRlbEN1c3RvbWVyQ29tbXVuaWNhdGlvbihpZCk7CiAgICAgICAgYXdhaXQgdGhpcy5mb2xsb3dVcFJlY29yZHMoKTsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJzdWNjZXNzIiwKICAgICAgICAgIG1lc3NhZ2U6ICLliKDpmaTmiJDlip8hIgogICAgICAgIH0pOwogICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAiaW5mbyIsCiAgICAgICAgICBtZXNzYWdlOiAi5bey5Y+W5raI5Yig6ZmkIgogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCgogICAgLy8g6Lef6L+b6K6w5b2V5L+u5pS56I635Y+WCiAgICB1cGRhdGVGb2xsb3codmFsdWUpIHsKICAgICAgdGhpcy5jb3JlRmxhZyA9IHRydWU7CiAgICAgIHRoaXMudXBkYXRlRm9sbG93VmFsdWUgPSB2YWx1ZTsKICAgICAgdGhpcy51cGRhdGVGb2xsb3dMaXN0ID0gdmFsdWUuY29udGVudDsKICAgIH0sCgogICAgLy8g6Lef6L+b6K6w5b2V5L+u5pS556Gu6K6kCiAgICBhc3luYyBwdXRVcGRhdGVGb2xsb3coKSB7CiAgICAgIHRoaXMuY29yZUZsYWcgPSBmYWxzZTsKICAgICAgY29uc3QgewogICAgICAgIGRhdGEKICAgICAgfSA9IGF3YWl0IHVwZGF0ZUN1c3RvbWVyQ29tbXVuaWNhdGlvbih0aGlzLnVwZGF0ZUZvbGxvd1ZhbHVlLmlkLCB7CiAgICAgICAgY3VzdG9tZXJJZDogdGhpcy51cGRhdGVGb2xsb3dWYWx1ZS5jdXN0b21lcklkLAogICAgICAgIHN0YWZmSWQ6IHRoaXMudXBkYXRlRm9sbG93VmFsdWUuc3RhZmZJZCwKICAgICAgICBjb250ZW50OiB0aGlzLnVwZGF0ZUZvbGxvd0xpc3QsCiAgICAgICAgdGltZTogdGhpcy51cGRhdGVGb2xsb3dWYWx1ZS50aW1lCiAgICAgIH0pOwogICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoIuS/ruaUueaIkOWKnyIpOwogICAgICBhd2FpdCB0aGlzLmZvbGxvd1VwUmVjb3JkcygpOwogICAgfSwKCiAgICBhc3luYyBnZXRDdXN0b21lclNvdXJjZUxpc3QoKSB7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBnZXRDdXN0b21lclNvdXJjZUxpc3QoKTsKCiAgICAgIGlmIChkYXRhLmRhdGEubGVuZ3RoKSB7CiAgICAgICAgdGhpcy5jdXN0b21lclR5cGUgPSBkYXRhLmRhdGE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jdXN0b21lclR5cGUgPSBbXTsKICAgICAgfQogICAgfQoKICB9Cn07"},{"version":3,"mappings":"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qB,2CALA;QAMAC,mCANA;QAOAC,2CAPA;QAQAkE,SARA;QASAjE,2CATA;QASA;QACAC,2CAVA;QAWAC,+BAXA;QAYAG,cAZA;QAaA6D,SAbA;QAcAC;MAdA;MAgBA;IACA,CAtFA;;IAuFA;IACA;MACA;QACAC,uBADA;QAEAC,sBAFA;QAGA7F;MAHA,GAIA8F,IAJA,CAIA;QACA;UACAC,UADA;UAEAN;QAFA;QAKA;QACA;UACAzF,eADA;UAEAgG;QAFA;MAIA,CAfA;IAgBA,CAzGA;;IA0GA;IACAC;MACA;MACA;IACA,CA9GA;;IA+GA;IACAC;MACA;MACA;MACA;IACA,CApHA;;IAqHA;IACAC;MACA;IACA,CAxHA;;IAyHA;IACA;IACA;IACA;IACAC;MACA;MACA;IACA,CAhIA;;IAiIA;IACA;IACA;IACA;IACA;IACAC;MACA;MACA;IACA,CAzIA;;IA0IA;IACAC;MACA;MACA;MACA;MACA;IACA,CAhJA;;IAiJA;IACAC;MACA;MACA;IACA,CArJA;;IAsJA;IACA;MACA;QACArF,eADA;QAEAC,uBAFA;QAGAsE,SAHA;QAIA/D,+BAJA;QAKAN,iCALA;QAMAI,2CANA;QAMA;QACAK,uCAPA;QAQAC,+BARA;QASAC,yBATA;QAUAV,2CAVA;QAWAC,mCAXA;QAYAC;MAZA;MAeA;QACA,SACA,OADA;UAEAiF,6BAFA;UAGAC;QAHA;MAKA,CANA;MAOA;MACA;IACA,CAhLA;;IAiLA;IACAC;MACA;IACA,CApLA;;IAqLA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;MACA;QACA;UACAX,UADA;UAEAvE;QAFA;QAIA;UACAxB,eADA;UAEAgG;QAFA;MAIA,CATA,CASA;QACA;MACA;IACA,CAnNA;;IAoNA;IACAW;MACA;MACA;IACA,CAxNA;;IAyNA;IACAC;MACA;MACA;IACA,CA7NA;;IA8NA;IACAC;MACA;QACA;MACA,CAFA,MAEA;QACA;UACA7G,eADA;UAEAgG;QAFA;MAIA;IACA,CAxOA;;IAyOA;IACAc;MACA;QACA;MACA,CAFA,MAEA;QACA;UACA9G,eADA;UAEAgG;QAFA;MAIA;IACA,CAnPA;;IAoPA;IACAe;MACA;QACA;UACAnB,uBADA;UAEAC,sBAFA;UAGA7F;QAHA,GAIA8F,IAJA,CAIA;UACA,wCACAkB,yBADA;UAGA;YAAAlH;UAAA;UACA;YACAE,eADA;YAEAgG;UAFA;UAIA;QACA,CAdA;MAeA,CAhBA,MAgBA;QACA;UACAhG,eADA;UAEAgG;QAFA;MAIA;IACA,CA5QA;;IA6QA;IACAjH;MACA;QACA6G,uBADA;QAEAC,sBAFA;QAGA7F;MAHA,GAIA8F,IAJA,CAIA;QACA;UAAAhG;QAAA;QACA;UACAE,eADA;UAEAgG;QAFA;QAIA;MACA,CAXA;IAYA,CA3RA;;IA4RA;IACAiB;MACA;MACA;IACA,CAhSA;;IAiSA;IACA;MACA;MACA;QACA5D,aADA;QAEA5B,kCAFA;QAGAI;MAHA;MAKA;MACA;IACA,CA3SA;;IA4SA;IACAqF;MACA;QACA;MACA,CAFA,MAEA;QACA;QACA;MACA;IACA,CApTA;;IAqTA;IACA;MACA;MACA;QACAC,qBADA;QAEAnH;MAFA;MAIA;QAAAF;MAAA;MACA;MACA;MACA;IACA,CAhUA;;IAiUAsH;MACA;MACA;IACA,CApUA;;IAqUAC;MACA;IACA,CAvUA;;IAwUAC;MACA;MACA;MACA;MACA,2CACAN,uBADA;MAGA;MACA,6CACAA,uBADA;IAGA,CAnVA;;IAoVA;IACAO;MACA;MACA;MACA;MACA;IACA,CA1VA;;IA2VA;IACA;MACA;QAAAzH;QAAA0H;MAAA;QACA;QACAnD,2BAFA;QAGA;QACA;QACAnD,qBALA;QAMAC;MANA;MAQA;MACA;IACA,CAvWA;;IAwWA;IACAsG;MACA;MACA;MACA;IACA,CA7WA;;IA8WA;IACAC;MACA;MACA;MACA;MACA;IACA,CApXA;;IAqXA;MACA;MACA;;MACA;QACA;MACA;IACA,CA3XA;;IA4XA;IACA;MACA;MACA;IACA,CAhYA;;IAiYA;IACA;MACA;QACA;QACA;MACA;;MACA;;MACA;QACA;UACArD,2BADA;UAEAsD,mCAFA;UAGA/F,iCAHA;UAIAD;QAJA;QAMA;MACA,CARA,MAQA;QACA;MACA;IACA,CAnZA;;IAoZA;IACAzC;MACA;QACA0G,uBADA;QAEAC,sBAFA;QAGA7F;MAHA,GAKA8F,IALA,CAKA;QACA;UAAAhG;QAAA;QACA;QACA;UACAE,eADA;UAEAgG;QAFA;MAIA,CAZA,EAaA4B,KAbA,CAaA;QACA;UACA5H,YADA;UAEAgG;QAFA;MAIA,CAlBA;IAmBA,CAzaA;;IA0aA;IACA6B;MACA;MACA;MACA;IACA,CA/aA;;IAgbA;IACA;MACA;MACA;QAAA/H;MAAA,sCACA,yBADA,EAEA;QACAuE,6CADA;QAEAsD,uCAFA;QAGA/F,8BAHA;QAIAD;MAJA,CAFA;MASA;MACA;IACA,CA9bA;;IA+bA;MACA;;MACA;QACA;MACA,CAFA,MAEA;QACA;MACA;IACA;;EAtcA;AA/MA","names":["batchEditCustomer","updateCustomerStatus","updateCustomerCheckStatus","getAllCustomer","customerExport","delCustomer","getAllCustomerCommunication","addCustomerCommunication","delCustomerCommunication","updateCustomerCommunication","updateCustomerIntegral","rechargeMemberBalance","setCustomerType","name","components","DepartmentSel","RegionSelect","EditCustomer","SelectShop","staffListModal","data","type_options","type","label","balance_type","integral_type","integral_num","member_balance","followList","order_id","staff_show","checkedAll","customer_id","drawer_tit","drawer","contact","department","region","search_form","phone","page","pageSize","keyword","provinceCode","cityCode","districtCode","enableStatus","departmentId","shopId","time","content","salesManId","source","tag","UserType","value","customerLabel","customerStatus","formLabelWidth","checked","form","key","classify","brand","total","roleId","search_key","departmentPidPath","tableData","total_count","batchSettingVisible","batchSettingType","batchSetting","batchSettingWidth","options","ids","userCenterIds","saleman","selection","checkList","columns","typeFlag","shopFlag","salesmanFlag","auditStatusFlag","timeFlag","accountStatusFlag","followUpRecordsFlag","coreFlag","isserch","searchDate","customerId","followPage","followPageSize","followTotal","updateFollowValue","updateFollowList","source_list","customerType","computed","storeData","activated","created","methods","showSetIntegral","showSetBalance","integral","desc","money","purpose","departmentChange","status","start","end","confirmButtonText","cancelButtonText","then","id","message","subSuccess","editData","selShop","shopClear","selBranch","regionChange","customerChange","integral_false_visible","balance_false_visible","getUserList","pageChange","sizeChange","clickBatchSetting","clickSettingType","batchDelCustomer","item","closeSettingType","batchSettingCon","customerIds","handleSelectionChange","checkAllChange","change","openFollowUpRecords","pageTotal","staffClear","staffSel","staffId","catch","updateFollow"],"sourceRoot":"src/views/Customer/CustomerAdmin","sources":["CustomerList.vue"],"sourcesContent":["<template>\n <ContainerQuery>\n <div slot=\"tip\" class=\"page-tip-div\" style=\"margin-top: 0\">\n <i class=\"el-icon-info\"></i>\n 温馨提示:\n <span>1、已审核客户只有在禁用后才能编辑!</span>\n <span>2、后台手动新增的客户自动审核!</span>\n </div>\n <div v-if=\"systemType === 1\" slot=\"left\">\n <el-dropdown\n v-if=\"$accessCheck($Access.CustomerListAddCustomer)\"\n split-button\n type=\"primary\"\n @click=\"$router.push('/Customer/CustomerAdmin/AddCustomer')\"\n >\n 新增客户\n <el-dropdown-menu slot=\"dropdown\">\n <el-dropdown-item>\n <div\n v-if=\"$accessCheck($Access.CustomerListExport)\"\n class=\"dropdown-div\"\n @click=\"exportData\"\n >\n 导出\n </div>\n </el-dropdown-item>\n <el-dropdown-item>\n <div\n class=\"dropdown-div\"\n @click=\"$router.push('/Customer/CustomerAdmin/CustomerImport')\"\n >\n 导入\n </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </el-dropdown>\n <el-button v-else size=\"small\" type=\"primary\" @click=\"exportData\">\n 导出\n </el-button>\n <el-dialog\n :close-on-press-escape=\"false\"\n :close-on-click-modal=\"false\"\n title=\"批量设置业务员\"\n :visible.sync=\"batchSettingVisible\"\n >\n <el-form :model=\"batchSetting\" :inline=\"true\">\n <el-form-item label=\"部门:\" :label-width=\"batchSettingWidth\">\n <DepartmentSel\n v-model=\"departmentPidPath\"\n clearable\n size=\"small\"\n @change=\"departmentChange\"\n />\n </el-form-item>\n <el-form-item label=\"业务员:\" :label-width=\"batchSettingWidth\">\n <el-select v-model=\"saleman\" placeholder=\"请选择业务员\">\n <el-option\n v-for=\"item in options\"\n :key=\"item.id\"\n :label=\"item.staffName\"\n :value=\"item.id\"\n ></el-option>\n </el-select>\n </el-form-item>\n </el-form>\n <div slot=\"footer\" class=\"dialog-footer\">\n <el-button @click=\"batchSettingVisible = false\">取 消</el-button>\n <el-button type=\"primary\" @click=\"batchSettingCon\">确 定</el-button>\n </div>\n </el-dialog>\n <el-dialog\n :close-on-press-escape=\"false\"\n :close-on-click-modal=\"false\"\n title=\"批量客户类型\"\n :visible.sync=\"batchSettingType\"\n width=\"30%\"\n @close=\"closeSettingType\"\n >\n <el-form :model=\"batchSetting\" :inline=\"true\" label-width=\"100px\">\n <el-form-item label=\"客户类型:\">\n <el-select v-model=\"batchSetting.type\" placeholder=\"请选择业务员\">\n <el-option\n v-for=\"item in customerType\"\n :key=\"item.id\"\n :label=\"item.name\"\n :value=\"item.id\"\n ></el-option>\n </el-select>\n </el-form-item>\n </el-form>\n <div slot=\"footer\" class=\"dialog-footer\">\n <el-button @click=\"closeSettingType\">取 消</el-button>\n <el-button type=\"primary\" @click=\"setCustomerType\">确 定</el-button>\n </div>\n </el-dialog>\n </div>\n <div v-if=\"$accessCheck($Access.CustomerListSearch)\" slot=\"more\">\n <el-form :inline=\"true\" size=\"small\">\n <el-form-item>\n <el-input\n v-model=\"search_form.keyword\"\n placeholder=\"客户名称/联系人电话\"\n style=\"width: 220px\"\n clearable\n @keyup.enter.native=\"getUserList()\"\n @clear=\"getUserList()\"\n >\n <el-button\n slot=\"append\"\n icon=\"el-icon-search\"\n @click=\"getUserList()\"\n ></el-button>\n </el-input>\n </el-form-item>\n <!-- <el-form-item>-->\n <!-- <el-input-->\n <!-- v-model=\"search_form.phone\"-->\n <!-- placeholder=\"请输入客户手机号\"-->\n <!-- style=\"width: 220px\"-->\n <!-- clearable-->\n <!-- @keyup.enter.native=\"getUserList()\"-->\n <!-- @clear=\"getUserList()\"-->\n <!-- >-->\n <!-- <el-button-->\n <!-- slot=\"append\"-->\n <!-- icon=\"el-icon-search\"-->\n <!-- @click=\"getUserList()\"-->\n <!-- ></el-button>-->\n <!-- </el-input>-->\n <!-- </el-form-item>-->\n <el-form-item>\n <el-select\n v-model=\"search_form.salesManId\"\n clearable\n placeholder=\"选择业务员\"\n style=\"width: 150px\"\n @change=\"pageChange(1)\"\n >\n <el-option\n v-for=\"(item, index) in options\"\n :key=\"index\"\n :label=\"item.staffName\"\n :value=\"item.id\"\n ></el-option>\n </el-select>\n </el-form-item>\n <el-form-item v-if=\"false\">\n <el-select v-model=\"search_form.type\" placeholder=\"客户类型\">\n <el-option\n v-for=\"item in UserType\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n ></el-option>\n </el-select>\n </el-form-item>\n <el-form-item>\n <RegionSelect\n v-model=\"region\"\n size=\"small\"\n clearable\n check-strictly\n placeholder=\"所属区域\"\n style=\"width: 150px\"\n @change=\"regionChange\"\n />\n </el-form-item>\n <el-form-item v-if=\"systemType === 1\">\n <SelectShop\n v-model=\"search_form.shopId\"\n :clearable=\"true\"\n placeholder=\"所属商铺\"\n width=\"150\"\n @clear=\"shopClear\"\n @change=\"selShop\"\n />\n </el-form-item>\n <el-form-item>\n <el-select\n v-model=\"search_form.enableStatus\"\n style=\"width: 150px\"\n placeholder=\"客户状态\"\n @change=\"customerChange\"\n >\n <el-option\n v-for=\"item in customerStatus\"\n :key=\"item.value\"\n :label=\"item.label\"\n :value=\"item.value\"\n ></el-option>\n </el-select>\n </el-form-item>\n <!-- <el-form-item v-if=\"systemType === 1\">-->\n <!-- <SelMembership-->\n <!-- v-model=\"search_form.membershipId\"-->\n <!-- :clearable=\"true\"-->\n <!-- placeholder=\"选择会员卡\"-->\n <!-- width=\"150\"-->\n <!-- @clear=\"membershipClear\"-->\n <!-- @change=\"selMembershipId\"-->\n <!-- />-->\n <!-- </el-form-item>-->\n <!-- <el-form-item>-->\n <!-- <DepartmentSel-->\n <!-- v-model=\"department\"-->\n <!-- clearable-->\n <!-- placeholder=\"所属部门\"-->\n <!-- width=\"150\"-->\n <!-- @change=\"selBranch\"-->\n <!-- />-->\n <!-- </el-form-item>-->\n <!--<el-form-item>\n <el-select\n v-model=\"search_form.source\"\n clearable\n placeholder=\"注册来源\"\n style=\"width: 150px\"\n @change=\"pageChange(1)\"\n >\n <el-option\n v-for=\"(item, index) in source_list\"\n :key=\"index\"\n :label=\"item.label\"\n :value=\"item.value\"\n ></el-option>\n </el-select>\n </el-form-item>-->\n <!--<el-form-item>\n <el-input\n v-model=\"search_form.tag\"\n clearable\n placeholder=\"客户标签\"\n style=\"width: 155px\"\n @keyup.enter.native=\"pageChange(1)\"\n @clear=\"pageChange(1)\"\n >\n <el-button\n slot=\"append\"\n icon=\"el-icon-search\"\n @click=\"pageChange(1)\"\n ></el-button>\n </el-input>\n </el-form-item>-->\n </el-form>\n </div>\n <el-table\n ref=\"customerTable\"\n :data=\"tableData\"\n @selection-change=\"handleSelectionChange\"\n >\n <el-table-column\n align=\"center\"\n type=\"selection\"\n width=\"55\"\n ></el-table-column>\n <el-table-column\n prop=\"id\"\n label=\"ID\"\n fixed=\"left\"\n width=\"80\"\n ></el-table-column>\n <el-table-column prop=\"name\" label=\"客户\" fixed=\"left\" min-width=\"280\">\n <template slot-scope=\"scope\">\n <div class=\"clearfix\">\n <div class=\"float_left customer-img-view\">\n <img\n v-if=\"scope.row.avatar\"\n class=\"customer-img\"\n :src=\"scope.row.avatar\"\n />\n </div>\n <div class=\"float_left customer-name-view\">\n <p class=\"customer-name\">\n {{ scope.row.name }}\n </p>\n <p>{{ scope.row.code }}</p>\n </div>\n </div>\n </template>\n </el-table-column>\n <el-table-column label=\"联系信息\" min-width=\"180\" prop=\"contact\">\n <template slot-scope=\"scope\">\n <div>\n <p v-if=\"scope.row.contact[0]\">\n <span class=\"table-label\">联系人:</span>\n <span class=\"table-val\">\n {{ scope.row.contact[0].name || \"无\" }}\n </span>\n </p>\n <p>\n <span class=\"table-label\">账号/电话:</span>\n <span class=\"table-val\">{{ scope.row.mobile }}</span>\n </p>\n </div>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"typeFlag\"\n prop=\"customerType\"\n label=\"客户类型\"\n min-width=\"100\"\n ></el-table-column>\n <el-table-column\n v-if=\"systemType === 1\"\n prop=\"memberBalance\"\n label=\"余额\"\n min-width=\"180\"\n >\n <!-- <template slot-scope=\"scope\">-->\n <!-- <div-->\n <!-- v-if=\"-->\n <!-- scope.row.balance_false_visible &&-->\n <!-- $accessCheck($Access.CustomerListupdateBalance)-->\n <!-- \"-->\n <!-- >-->\n <!-- &lt;!&ndash; <el-select&ndash;&gt;-->\n <!-- &lt;!&ndash; v-model=\"balance_type\"&ndash;&gt;-->\n <!-- &lt;!&ndash; style=\"width: 60px\"&ndash;&gt;-->\n <!-- &lt;!&ndash; placeholder=\"请选择\"&ndash;&gt;-->\n <!-- &lt;!&ndash; size=\"mini\"&ndash;&gt;-->\n <!-- &lt;!&ndash; >&ndash;&gt;-->\n <!-- &lt;!&ndash; <el-option&ndash;&gt;-->\n <!-- &lt;!&ndash; v-for=\"item in type_options\"&ndash;&gt;-->\n <!-- &lt;!&ndash; :key=\"item.type\"&ndash;&gt;-->\n <!-- &lt;!&ndash; :label=\"item.label\"&ndash;&gt;-->\n <!-- &lt;!&ndash; :value=\"item.type\"&ndash;&gt;-->\n <!-- &lt;!&ndash; ></el-option>&ndash;&gt;-->\n <!-- &lt;!&ndash; </el-select>&ndash;&gt;-->\n <!-- <el-input-number-->\n <!-- v-model=\"member_balance\"-->\n <!-- style=\"width: calc(100% - 88px)\"-->\n <!-- :controls=\"false\"-->\n <!-- size=\"mini\"-->\n <!-- @keyup.enter.native=\"rechargeMemberBalance(scope.$index)\"-->\n <!-- ></el-input-number>-->\n <!-- <div-->\n <!-- class=\"virtualSalesNum-btn\"-->\n <!-- @click=\"rechargeMemberBalance(scope.$index)\"-->\n <!-- >-->\n <!-- <i class=\"el-icon-check\"></i>-->\n <!-- </div>-->\n <!-- </div>-->\n\n <!-- <div v-else @click=\"showSetBalance(scope.$index)\">-->\n <!-- {{ scope.row.memberBalance }}-->\n <!-- <el-button-->\n <!-- v-if=\"$accessCheck($Access.CustomerListupdateBalance)\"-->\n <!-- type=\"text\"-->\n <!-- icon=\"el-icon-edit\"-->\n <!-- ></el-button>-->\n <!-- </div>-->\n <!-- </template>-->\n </el-table-column>\n <el-table-column\n v-if=\"systemType === 1\"\n prop=\"integral\"\n label=\"积分\"\n min-width=\"180\"\n >\n <template slot-scope=\"scope\">\n <div\n v-if=\"\n scope.row.integral_false_visible &&\n $accessCheck($Access.CustomerListupdateIntegral)\n \"\n >\n <el-select\n v-model=\"integral_type\"\n style=\"width: 60px\"\n placeholder=\"请选择\"\n size=\"mini\"\n >\n <el-option\n v-for=\"item in type_options\"\n :key=\"item.type\"\n :label=\"item.label\"\n :value=\"item.type\"\n ></el-option>\n </el-select>\n <el-input-number\n v-model=\"integral_num\"\n style=\"width: calc(100% - 88px)\"\n :controls=\"false\"\n size=\"mini\"\n @keyup.enter.native=\"updateCustomerIntegral(scope.$index)\"\n ></el-input-number>\n <div\n class=\"virtualSalesNum-btn\"\n @click=\"updateCustomerIntegral(scope.$index)\"\n >\n <i class=\"el-icon-check\"></i>\n </div>\n </div>\n\n <div v-else @click=\"showSetIntegral(scope.$index)\">\n {{ scope.row.integral }}\n <el-button\n v-if=\"$accessCheck($Access.CustomerListupdateIntegral)\"\n type=\"text\"\n icon=\"el-icon-edit\"\n ></el-button>\n </div>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"shopFlag && systemType === 1\"\n prop=\"shopName\"\n label=\"商铺\"\n min-width=\"120\"\n :show-overflow-tooltip=\"true\"\n >\n <template slot-scope=\"scope\">\n {{ scope.row.shopName || \"平台\" }}\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"salesmanFlag\"\n prop=\"salesManName\"\n label=\"业务员\"\n min-width=\"140\"\n >\n <template slot-scope=\"scope\">\n <div>\n <p>\n <span class=\"table-label\">业务员:</span>\n <span class=\"table-val\">\n {{ scope.row.salesManName || \"--\" }}\n </span>\n </p>\n <p>\n <span class=\"table-label\">部门:</span>\n <span class=\"table-val\">\n {{ scope.row.departmentName || \"--\" }}\n </span>\n </p>\n </div>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"auditStatusFlag && systemType === 1\"\n prop=\"status\"\n label=\"审核状态\"\n min-width=\"100\"\n >\n <template slot-scope=\"scope\">\n <span v-if=\"scope.row.status === 2\" class=\"success-status\">\n 已审核\n </span>\n <span v-if=\"scope.row.status === 1\" class=\"warning-status\">\n 待审核\n </span>\n <span v-if=\"scope.row.status === 0\" class=\"info-status\">\n 待完善资料\n </span>\n <span v-if=\"scope.row.status === 3\" class=\"success-status\">\n 已驳回\n </span>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"timeFlag\"\n prop=\"createTime\"\n label=\"注册时间\"\n min-width=\"160\"\n >\n <template slot-scope=\"scope\">\n {{ $_common.formatDate(scope.row.createTime) }}\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"accountStatusFlag && systemType === 1\"\n prop=\"enableStatus\"\n label=\"账号状态\"\n min-width=\"100\"\n >\n <template slot-scope=\"scope\">\n <el-switch\n v-if=\"$accessCheck($Access.CustomerListUpdateCustomerStatus)\"\n v-model=\"scope.row.enableStatus\"\n class=\"switchStyle\"\n active-color=\"#36B365\"\n :active-value=\"5\"\n :inactive-value=\"4\"\n active-text=\"启用\"\n inactive-text=\"禁用\"\n @change=\"updateEnableStatus($event, scope.row)\"\n ></el-switch>\n <div v-else>\n <span v-if=\"scope.row.enableStatus === 5\" class=\"success-status\">\n 启用\n </span>\n <span v-else class=\"danger-status\">禁用</span>\n </div>\n </template>\n </el-table-column>\n <el-table-column\n v-if=\"systemType === 1\"\n label=\"操作\"\n header-\n fixed=\"right\"\n width=\"170\"\n >\n <template slot=\"header\" slot-scope=\"scope\">\n <span v-if=\"false\">{{ scope.$index }}</span>\n <span class=\"operation\">操作</span>\n <el-popover popper-class=\"custom-table-checkbox\" trigger=\"click\">\n <el-checkbox-group v-model=\"checkList\">\n <el-checkbox\n v-for=\"(item, index) in columns\"\n :key=\"index\"\n :label=\"item.label\"\n @change=\"change\"\n ></el-checkbox>\n </el-checkbox-group>\n <el-button\n slot=\"reference\"\n icon=\"el-icon-setting\"\n type=\"text\"\n ></el-button>\n </el-popover>\n </template>\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"$accessCheck($Access.CustomerListGetCustomerInfo)\"\n type=\"text\"\n @click=\"\n $router.push(\n `/Customer/CustomerAdmin/CustomerDetail/${scope.row.id}`\n )\n \"\n >\n 查看\n </el-button>\n <el-button\n v-if=\"$accessCheck($Access.CustomerListEditCustomer)\"\n type=\"text\"\n :disabled=\"scope.row.shopId !== storeData.id && systemType !== 1\"\n @click=\"editData(scope.row)\"\n >\n 编辑\n </el-button>\n <el-dropdown>\n <span class=\"el-dropdown-link\">\n 更多\n <i class=\"el-icon-arrow-down el-icon--right\"></i>\n </span>\n <el-dropdown-menu slot=\"dropdown\">\n <el-dropdown-item\n v-if=\"$accessCheck($Access.CustomerListvisitedLogs)\"\n >\n <div\n class=\"dropdown-div\"\n @click=\"openFollowUpRecords(scope.row.id)\"\n >\n 跟进记录\n </div>\n </el-dropdown-item>\n <el-dropdown-item\n v-if=\"$accessCheck($Access.CustomerListIntegralDetail)\"\n >\n <div\n class=\"dropdown-div\"\n @click=\"\n $router.push(\n `/Customer/CustomerAdmin/IntegralDetail/${scope.row.id}`\n )\n \"\n >\n 积分明细\n </div>\n </el-dropdown-item>\n <el-dropdown-item\n v-if=\"$accessCheck($Access.CustomerListSaldoDetail)\"\n >\n <div\n class=\"dropdown-div\"\n @click=\"\n $router.push(\n '/Customer/CustomerAdmin/SaldoDetail?id=' +\n scope.row.id +\n '&name=' +\n scope.row.name +\n '&money=' +\n scope.row.memberBalance\n )\n \"\n >\n 余额明细\n </div>\n </el-dropdown-item>\n <el-dropdown-item>\n <div\n class=\"dropdown-div\"\n @click=\"delCustomer(scope.row.userCenterId)\"\n >\n 删除\n </div>\n </el-dropdown-item>\n </el-dropdown-menu>\n </el-dropdown>\n </template>\n </el-table-column>\n <el-table-column v-else label=\"操作\" header- fixed=\"right\" width=\"100\">\n <template slot-scope=\"scope\">\n <el-button\n v-if=\"$accessCheck($Access.CustomerListGetCustomerInfo)\"\n type=\"text\"\n @click=\"\n $router.push(\n `/Customer/CustomerAdmin/CustomerDetail/${scope.row.id}`\n )\n \"\n >\n 查看\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n <FooterPage\n :page-size=\"pageSize\"\n :total-page.sync=\"total\"\n :current-page.sync=\"page\"\n @pageChange=\"pageChange\"\n @sizeChange=\"sizeChange\"\n >\n <div slot=\"btn-div\" class=\"foot-btn-div\">\n <span class=\"batch-checkbox\">\n <el-checkbox\n v-model=\"checkedAll\"\n @change=\"checkAllChange\"\n ></el-checkbox>\n </span>\n <el-button\n v-if=\"$accessCheck($Access.CustomerListExport)\"\n size=\"mini\"\n @click=\"clickBatchSetting\"\n >\n 批量设置业务员\n </el-button>\n <el-button size=\"mini\" @click=\"clickSettingType\">\n 批量设置客户类型\n </el-button>\n <el-button size=\"mini\" @click=\"batchDelCustomer\">\n 批量删除客户\n </el-button>\n </div>\n </FooterPage>\n <el-drawer\n class=\"edit-drawer\"\n size=\"50%\"\n :title=\"drawer_tit\"\n :visible.sync=\"drawer\"\n >\n <EditCustomer\n v-if=\"drawer\"\n :customer-id=\"customer_id\"\n @subSuccess=\"subSuccess\"\n @goShop=\"drawer = false\"\n />\n </el-drawer>\n <!-- 跟进记录弹出框-->\n <el-dialog\n title=\"跟进记录\"\n :visible.sync=\"followUpRecordsFlag\"\n width=\"40%\"\n :close-on-press-escape=\"false\"\n :close-on-click-modal=\"false\"\n >\n <div style=\"margin-bottom: 10px\">\n <el-input\n v-model=\"search_form.content\"\n type=\"textarea\"\n :rows=\"3\"\n placeholder=\"请填写跟进内容(最多500字)\"\n style=\"width: 250px\"\n size=\"mini\"\n ></el-input>\n <span style=\"margin: 0 20px 0 20px\">\n 跟进人\n <el-input\n v-model=\"search_form.staff\"\n clearable\n placeholder=\"请选择业务员\"\n style=\"width: 130px\"\n size=\"mini\"\n @clear=\"staffClear\"\n @blur=\"search_form.staff = ''\"\n >\n <i\n slot=\"suffix\"\n class=\"el-input__icon el-icon-search\"\n @click=\"saleFn(true)\"\n ></i>\n </el-input>\n </span>\n <span>\n 时间\n <el-date-picker\n v-model=\"search_form.time\"\n type=\"datetime\"\n placeholder=\"选择日期时间\"\n size=\"mini\"\n style=\"width: 130px; margin-bottom: 18px\"\n ></el-date-picker>\n </span>\n <span style=\"margin-left: 20px\">\n <el-button\n type=\"primary\"\n size=\"mini\"\n @click=\"addCustomerCommunication\"\n >\n 添加\n </el-button>\n </span>\n </div>\n <el-divider></el-divider>\n <el-table :data=\"followList\" style=\"width: 100%\">\n <el-table-column type=\"index\" label=\"序号\"></el-table-column>\n <el-table-column prop=\"content\" label=\"内容\"></el-table-column>\n <el-table-column prop=\"staffName\" label=\"跟进人\"></el-table-column>\n <el-table-column prop=\"time\" label=\"时间\">\n <template slot-scope=\"scope\">\n {{ $_common.formatDate(scope.row.time) }}\n </template>\n </el-table-column>\n <el-table-column label=\"操作\">\n <template slot-scope=\"scope\">\n <el-button type=\"text\" @click=\"updateFollow(scope.row)\">\n 修改\n </el-button>\n <el-button\n type=\"text\"\n @click=\"delCustomerCommunication(scope.row.id)\"\n >\n 删除\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n <div class=\"clearfix\">\n <FooterPage\n :page-size=\"followPageSize\"\n :total-page.sync=\"followTotal\"\n :current-page.sync=\"followPage\"\n layout=\"prev, pager, next\"\n @pageChange=\"handleCurrentChange\"\n ></FooterPage>\n </div>\n <el-dialog\n width=\"20%\"\n title=\"修改\"\n :visible.sync=\"coreFlag\"\n append-to-body\n center\n :close-on-press-escape=\"false\"\n :close-on-click-modal=\"false\"\n >\n <el-input\n v-model=\"updateFollowList\"\n type=\"textarea\"\n :rows=\"7\"\n ></el-input>\n <div class=\"clearfix\" style=\"margin-top: 10px\">\n <el-button size=\"mini\" class=\"float_right\" @click=\"coreFlag = false\">\n 取消\n </el-button>\n <el-button\n type=\"primary\"\n size=\"mini\"\n class=\"float_right\"\n style=\"margin-right: 10px\"\n @click=\"putUpdateFollow\"\n >\n 确定\n </el-button>\n </div>\n </el-dialog>\n </el-dialog>\n <staffListModal\n v-if=\"staff_show\"\n :is-show=\"staff_show\"\n :is-check=\"false\"\n :isserch=\"isserch\"\n @cancel=\"staff_show = false\"\n @confirm=\"staffSel\"\n />\n </ContainerQuery>\n</template>\n\n<script>\n import staffListModal from \"@/component/common/staffListModal\";\n import DepartmentSel from \"@/component/common/DepartmentSel\";\n import RegionSelect from \"@/component/common/RegionSelectJSON\";\n import EditCustomer from \"./AddCustomer\";\n import SelectShop from \"@/component/goods/SelectShop.vue\";\n // import SelMembership from \"@/component/goods/SelMembership.vue\";\n import { getAllStaff } from \"@/api/Department\";\n import {\n batchEditCustomer,\n updateCustomerStatus,\n updateCustomerCheckStatus,\n getAllCustomer,\n customerExport,\n // searchCustomer,\n delCustomer,\n getAllCustomerCommunication,\n addCustomerCommunication,\n delCustomerCommunication,\n updateCustomerCommunication,\n updateCustomerIntegral,\n rechargeMemberBalance,\n setCustomerType,\n } from \"@/api/Customer\";\n import { getCustomerSourceList } from \"@/api/System\";\n import { mapGetters } from \"vuex\";\n export default {\n name: \"CustomerList\",\n components: {\n DepartmentSel,\n RegionSelect,\n EditCustomer,\n SelectShop,\n staffListModal,\n // SelMembership,\n },\n data() {\n return {\n type_options: [\n {\n type: 5,\n label: \"加\",\n },\n {\n type: 4,\n label: \"减\",\n },\n ],\n balance_type: 5, // 积分\n integral_type: 5, // 余额\n integral_num: 0, // 积分\n member_balance: 0, //余额\n followList: [],\n order_id: \"\",\n staff_show: false,\n checkedAll: false,\n customer_id: 0,\n drawer_tit: \"\",\n drawer: false,\n contact: [],\n department: [],\n region: [],\n search_form: {\n phone: \"\",\n page: this.page,\n pageSize: this.pageSize,\n keyword: \"\",\n type: \"\",\n provinceCode: \"\",\n cityCode: \"\",\n districtCode: \"\",\n enableStatus: \"\",\n departmentId: \"\",\n shopId: \"\", // 商铺Id\n // membershipId: \"\", //会员卡id\n time: \"\",\n content: \"\",\n salesManId: \"\",\n source: \"\",\n tag: \"\",\n },\n UserType: [\n {\n value: \"1\",\n label: \"客户类型\",\n },\n ],\n customerLabel: [\n {\n value: \"选项1\",\n label: \"客户标签\",\n },\n ],\n customerStatus: [\n {\n value: \"5\",\n label: \"已启用\",\n },\n {\n value: \"4\",\n label: \"已停用\",\n },\n ],\n value: \"\",\n formLabelWidth: \"100px\",\n checked: false,\n form: {\n key: \"\",\n type: \"\",\n classify: [],\n brand: \"\",\n },\n total: 0,\n page: 1,\n pageSize: 10,\n roleId: \"\",\n search_key: \"\",\n departmentPidPath: [],\n tableData: [],\n total_count: 0,\n batchSettingVisible: false, // 批量设置业务员显示控制\n batchSettingType: false, // 批量设置客户类型显示控制\n batchSetting: {\n region: \"\",\n type: \"\",\n },\n batchSettingWidth: \"80px\", // 批量设置业务员中\"部门:\"的长度\n options: [], // 业务员列表数组\n ids: [], // 客户id数组\n userCenterIds: [], // 客户id数组\n departmentId: \"\", // 部门id\n saleman: \"\", // 业务员id\n selection: [], // 客户列表选中数组\n checkList: [\n \"客户类型\",\n \"商铺\",\n \"业务员\",\n \"审核状态\",\n \"注册时间\",\n \"帐号状态\",\n ],\n columns: [\n {\n label: \"客户类型\",\n },\n {\n label: \"商铺\",\n },\n {\n label: \"业务员\",\n },\n {\n label: \"审核状态\",\n },\n {\n label: \"注册时间\",\n },\n {\n label: \"帐号状态\",\n },\n ],\n typeFlag: true,\n shopFlag: true,\n salesmanFlag: true,\n auditStatusFlag: true,\n timeFlag: true,\n accountStatusFlag: true,\n followUpRecordsFlag: false,\n coreFlag: false,\n isserch: true,\n searchDate: {},\n customerId: \"\",\n followPage: 1,\n followPageSize: 10,\n followTotal: 0,\n updateFollowValue: {},\n updateFollowList: \"\",\n source_list: [\n {\n label: \"ios\",\n tag: \"ios\",\n value: 1,\n },\n {\n label: \"安卓APP\",\n tag: \"android\",\n value: 2,\n },\n {\n label: \"小程序\",\n tag: \"miniProgram\",\n value: 3,\n },\n {\n label: \"后台创建\",\n tag: \"manage\",\n value: 4,\n },\n {\n label: \"H5页面\",\n tag: \"H5\",\n value: 5,\n },\n {\n label: \"Pc页面\",\n tag: \"Pc\",\n value: 6,\n },\n ],\n customerType: [],\n };\n },\n computed: {\n ...mapGetters({\n storeData: \"MUser/storeData\",\n }),\n },\n async mounted() {\n if ([2, 3].includes(this.systemType)) {\n // this.search_form.shopId = this.storeData.id;\n }\n // 到期提示\n await this.enterExpireTime();\n await this.getUserList();\n },\n activated() {\n if (this.$_isInit()) return;\n this.getUserList();\n },\n created() {\n this.getAllStaff();\n this.getCustomerSourceList();\n },\n methods: {\n showSetIntegral(index) {\n this.tableData.forEach((item) => (item.integral_false_visible = false));\n this.integral_num = this.tableData[index].integral;\n this.tableData[index].integral_false_visible = true;\n },\n showSetBalance(index) {\n this.tableData.forEach((item) => (item.balance_false_visible = false));\n this.member_balance = this.tableData[index].memberBalance;\n this.tableData[index].balance_false_visible = true;\n },\n // 修改积分\n async updateCustomerIntegral(index) {\n if (this.integral_num <= 0) {\n this.$message.warning(\"请输入大于0的值\");\n return;\n }\n const data = await updateCustomerIntegral({\n customerId: this.tableData[index].id,\n integral: this.integral_num,\n type: this.integral_type,\n desc: \"系统充值\",\n });\n this.$message.success(\"修改成功\");\n this.tableData[index].integral_false_visible = false;\n this.getUserList();\n },\n // 修改余额\n async rechargeMemberBalance(index) {\n if (this.member_balance <= 0) {\n this.$message.warning(\"请输入大于0的值\");\n return;\n }\n const data = await rechargeMemberBalance({\n customerId: this.tableData[index].id,\n money: this.member_balance,\n type: this.balance_type,\n purpose: \"系统充值\",\n });\n this.$message.success(\"修改成功\");\n this.tableData[index].balance_false_visible = false;\n this.getUserList();\n },\n // 批量设置业务员确定\n departmentChange(val) {\n if (val.length) {\n this.departmentId = val;\n this.getAllStaff(val[val.length - 1]);\n }\n },\n // 获取列表\n async getAllStaff(departmentId) {\n const data = await getAllStaff({\n page: 1,\n pageSize: 50,\n departmentId: departmentId,\n });\n\n this.options = data.data;\n },\n // 列表双击事件\n // goDetail(row) {\n // if (!this.$accessCheck(this.$Access.CustomerListGetCustomerInfo)) {\n // return;\n // }\n // this.$router.push(`/Customer/CustomerAdmin/CustomerDetail/${row.id}`);\n // },\n // 导出时事件\n async exportData() {\n const params = {\n page: this.page,\n pageSize: this.pageSize,\n keyword: this.search_form.keyword,\n type: this.search_form.type,\n provinceCode: this.search_form.provinceCode,\n cityCode: this.search_form.cityCode,\n districtCode: this.search_form.districtCode,\n status: 2,\n enableStatus: this.search_form.enableStatus, // 禁用启用\n departmentId: this.search_form.departmentId,\n shopId: this.search_form.shopId,\n salesManId: \"\",\n start: \"\",\n end: \"\",\n };\n const target = await customerExport(params);\n },\n // 没有用到事件\n async updateAuditStatus(row) {\n this.$confirm(\"确定要审核此用户吗?\", \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n }).then(async () => {\n const data = await updateCustomerCheckStatus({\n id: row.id,\n status: 2,\n });\n\n this.getUserList();\n this.$message({\n type: \"success\",\n message: \"审核成功\",\n });\n });\n },\n // 查看组件子传父\n subSuccess() {\n this.drawer = false;\n this.pageChange(1);\n },\n // 查看事件\n editData(row) {\n this.customer_id = row.id;\n this.drawer_tit = row.name;\n this.drawer = true;\n },\n // 选择商铺\n selShop(val, row) {\n this.pageChange(1);\n },\n //选择会员卡\n // selMembershipId() {\n // this.pageChange(1);\n // },\n shopClear() {\n this.search_form.shopId = \"\";\n this.pageChange(1);\n },\n // membershipClear() {\n // this.search_form.membershipId = \"\";\n // this.pageChange(1);\n // },\n // 选择部门\n selBranch(val) {\n this.search_form.departmentId = val[val.length - 1];\n this.pageChange(1);\n },\n // 选择区域\n regionChange(val) {\n this.search_form.provinceCode = val[0];\n this.search_form.cityCode = val[1];\n this.search_form.districtCode = val[2];\n this.pageChange(1);\n },\n // 客户状态\n customerChange(val) {\n this.search_form.enableStatus = val;\n this.pageChange(1);\n },\n // 获取客户列表 getAllCustomer\n async getAllCustomer() {\n const data = await getAllCustomer({\n page: this.page,\n pageSize: this.pageSize,\n status: 2,\n shopId: this.search_form.shopId,\n keyword: this.search_form.keyword,\n enableStatus: this.search_form.enableStatus, // 禁用启用\n salesManId: this.search_form.salesManId,\n source: this.search_form.source,\n tag: this.search_form.tag,\n provinceCode: this.search_form.provinceCode,\n cityCode: this.search_form.cityCode,\n districtCode: this.search_form.districtCode,\n });\n\n this.tableData = data.data.map((item) => {\n return {\n ...item,\n integral_false_visible: false,\n balance_false_visible: false,\n };\n });\n this.contact = data.data.contact;\n this.total = data.pageTotal;\n },\n // 判断\n getUserList() {\n this.getAllCustomer();\n },\n // 删除接口\n // delCustomer(id) {\n // this.$confirm(\"你确定删除该用户\", {\n // confirmButtonText: \"确定\",\n // cancelButtonText: \"取消\",\n // type: \"warning\",\n // }).then(async () => {\n // const data = await delCustomer(id);\n //\n // this.getUserList();\n // this.$message({\n // type: \"success\",\n // message: \"删除成功!\",\n // });\n // });\n // },\n // 禁用启用\n async updateEnableStatus(val, row) {\n try {\n const data = await updateCustomerStatus({\n id: row.id,\n enableStatus: val,\n });\n this.$message({\n type: \"success\",\n message: \"操作成功!\",\n });\n } catch (e) {\n this.getUserList();\n }\n },\n // 切页\n pageChange(val) {\n this.page = val;\n this.getUserList();\n },\n // 每页数据大小改变\n sizeChange(val) {\n this.pageSize = val;\n this.pageChange(1);\n },\n // 点击-批量设置业务员\n clickBatchSetting() {\n if (this.selection.length > 0) {\n this.batchSettingVisible = true;\n } else {\n this.$message({\n type: \"warning\",\n message: \"请选择要操作的客户\",\n });\n }\n },\n //批量设置客户类型\n clickSettingType() {\n if (this.selection.length > 0) {\n this.batchSettingType = true;\n } else {\n this.$message({\n type: \"warning\",\n message: \"请选择要操作的客户\",\n });\n }\n },\n // 批量删除客户\n batchDelCustomer() {\n if (this.selection.length > 0) {\n this.$confirm(\"确定要删除这些客户吗?\", \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n }).then(async () => {\n this.userCenterIds = this.selection.map(\n (item) => item.userCenterId\n );\n const { data } = await delCustomer(this.userCenterIds);\n this.$message({\n type: \"success\",\n message: \"删除成功!\",\n });\n this.pageChange(1);\n });\n } else {\n this.$message({\n type: \"warning\",\n message: \"请选择要操作的客户\",\n });\n }\n },\n // 删除客户\n delCustomer(id) {\n this.$confirm(\"确定要删除该客户吗?\", \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n }).then(async () => {\n const { data } = await delCustomer([id]);\n this.$message({\n type: \"success\",\n message: \"删除成功!\",\n });\n this.pageChange(1);\n });\n },\n //批量设置客户类型关闭\n closeSettingType() {\n this.batchSetting.type = \"\";\n this.batchSettingType = false;\n },\n // 请求-批量设置业务员\n async batchEditCustomer() {\n this.ids = this.selection.map((item) => item.id);\n const params = {\n ids: this.ids,\n departmentId: this.departmentId[0],\n salesManId: this.saleman,\n };\n const data = await batchEditCustomer(params);\n this.getUserList();\n },\n // 确认-批量修改业务员\n batchSettingCon() {\n if (this.departmentId === \"\" || this.saleman === \"\") {\n this.$message.error(\"请填写完整信息\");\n } else {\n this.batchSettingVisible = false;\n this.batchEditCustomer();\n }\n },\n // 确认-批量修改客户类型\n async setCustomerType() {\n this.ids = this.selection.map((item) => item.id);\n const params = {\n customerIds: this.ids,\n type: this.batchSetting.type,\n };\n const { data } = await setCustomerType(params);\n this.$message.success(\"修改成功\");\n await this.closeSettingType();\n this.getUserList();\n },\n handleSelectionChange(val) {\n this.checkedAll = val.length === this.tableData.length;\n this.selection = val;\n },\n checkAllChange() {\n this.$refs.customerTable.toggleAllSelection();\n },\n change() {\n this.typeFlag = this.checkList.some((item) => item === \"客户类型\");\n this.shopFlag = this.checkList.some((item) => item === \"商铺\");\n this.salesmanFlag = this.checkList.some((item) => item === \"业务员\");\n this.auditStatusFlag = this.checkList.some(\n (item) => item === \"审核状态\"\n );\n this.timeFlag = this.checkList.some((item) => item === \"注册时间\");\n this.accountStatusFlag = this.checkList.some(\n (item) => item === \"帐号状态\"\n );\n },\n // 跟进记录第一次渲染列表\n openFollowUpRecords(id) {\n this.followPage = 1;\n this.followUpRecordsFlag = true;\n this.customerId = id;\n this.followUpRecords();\n },\n // 跟进记录列表\n async followUpRecords() {\n const { data, pageTotal } = await getAllCustomerCommunication({\n // staffId: \"\",\n customerId: this.customerId,\n // star: \"\",\n // end: \"\",\n page: this.followPage,\n pageSize: this.followPageSize,\n });\n this.followList = data;\n this.followTotal = pageTotal;\n },\n // 清除员工输入框\n staffClear() {\n this.searchDate.salesManId = \"\";\n this.search_form.staff = \"\";\n this.pageChange(1);\n },\n // 选择员工\n staffSel(val) {\n const row = val[0];\n this.searchDate.salesManId = row.id;\n this.search_form.staff = row.staffName;\n this.handleCurrentChange(1);\n },\n async saleFn(isserch, id) {\n this.staff_show = true;\n this.isserch = isserch;\n if (id) {\n this.order_id = id;\n }\n },\n // 跟进记录列表切页\n async handleCurrentChange(val) {\n this.followPage = val;\n await this.followUpRecords();\n },\n // 跟进记录列表添加\n async addCustomerCommunication() {\n if (!this.search_form.content.trim()) {\n this.$message.warning(\"跟进内容不能为空\");\n return;\n }\n const time = new Date(this.search_form.time).getTime() / 1000;\n if (this.searchDate.salesManId && time && this.search_form.content) {\n const data = await addCustomerCommunication({\n customerId: this.customerId,\n staffId: this.searchDate.salesManId,\n content: this.search_form.content,\n time: time,\n });\n await this.followUpRecords();\n } else {\n this.$message.warning(\"必须填写内容跟进人和时间\");\n }\n },\n // 跟进记录删除\n delCustomerCommunication(id) {\n this.$confirm(\"此操作将永久删除该文件, 是否继续?\", \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\",\n })\n .then(async () => {\n const { data } = await delCustomerCommunication(id);\n await this.followUpRecords();\n this.$message({\n type: \"success\",\n message: \"删除成功!\",\n });\n })\n .catch(() => {\n this.$message({\n type: \"info\",\n message: \"已取消删除\",\n });\n });\n },\n // 跟进记录修改获取\n updateFollow(value) {\n this.coreFlag = true;\n this.updateFollowValue = value;\n this.updateFollowList = value.content;\n },\n // 跟进记录修改确认\n async putUpdateFollow() {\n this.coreFlag = false;\n const { data } = await updateCustomerCommunication(\n this.updateFollowValue.id,\n {\n customerId: this.updateFollowValue.customerId,\n staffId: this.updateFollowValue.staffId,\n content: this.updateFollowList,\n time: this.updateFollowValue.time,\n }\n );\n this.$message.success(\"修改成功\");\n await this.followUpRecords();\n },\n async getCustomerSourceList() {\n const data = await getCustomerSourceList();\n if (data.data.length) {\n this.customerType = data.data;\n } else {\n this.customerType = [];\n }\n },\n },\n };\n</script>\n<style scoped lang=\"scss\">\n .customer-img-view {\n width: 50px;\n height: 50px;\n background-color: #f4f4f4;\n margin-right: 10px;\n border-radius: 4px;\n }\n .customer-img {\n width: 50px;\n height: 50px;\n border-radius: 4px;\n }\n .customer-name-view {\n width: calc(100% - 86px);\n }\n .customer-name {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n }\n .custom-table-checkbox {\n .el-checkbox {\n display: block !important;\n margin: 0 05px 0;\n }\n }\n .virtualSalesNum-btn {\n width: 26px;\n text-align: center;\n line-height: 28px;\n height: 28px;\n vertical-align: middle;\n font-size: 12px;\n background: #f5f5f5;\n border: 1px solid #cad0d7;\n display: inline-block;\n cursor: pointer;\n border-left: 0;\n }\n .el-dropdown-link {\n cursor: pointer;\n color: #409eff;\n }\n .el-icon-arrow-down {\n font-size: 12px;\n }\n</style>\n"]}]}