Commit f8f7c88e by chenxianqi

update kefu_client style

parent 7fc54f5f
Showing with 5562 additions and 25 deletions
.content[data-v-3c521905]{padding:50px 10px}.content .field-line[data-v-3c521905]{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;box-sizing:border-box;height:45px;border-bottom:1px solid #ddd;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#333}.content .field-line span[data-v-3c521905]:first-child{width:35px}.content .field-line input[data-v-3c521905]{-ms-flex-positive:1;flex-grow:1;padding-left:10px;height:100%;background:none;border:0;color:#333;font-size:14px;border-radius:0}.content .field-line.algin-left[data-v-3c521905]{-ms-flex-line-pack:left;align-content:left;-ms-flex-align:left;align-items:left}.content .field-line.arrow-right[data-v-3c521905]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAFDUlEQVR4Xu2dMU8UQRTH32wBvR/AxmhjJZVS3R4tsdCY2NoabY100IDGUo2x0s7EaGFDtzubkPAdaCz8AFjRkRuzATwCd3sz+24nb+b9aXkw8/7/3755M7MchvClWgGjOnskTwBAOQQAAAAoV0B5+qgAAEC5AsrTRwUAAMoVUJ4+KgAAUK6A8vRRAQCAcgWUp48KAACUK6A8fVQAACBbgaZpPhPRfefcbefccVEUvyeTyZvxeLwve+ZpzE5sBTg4OLhzenp6NE/GyWSys7GxsZ2GzHJnKRYAa60lolGXdICAD5ZIAKy1T4nom096gMBHpfkxIgGo6/qjMea5b2qAwFep63FSAfhpjHkUkhYgCFFrGisSAGvtCyJ6H5oSIAhVjGS+FFpV1VpRFIdEtBqaEiAIU0xkBWhTaJpm1zm3FZbOWTQg8FdNLABtCtba70T0xD+daSQg8FNNNABcCIhouyzLHT8pdEaJB4ALASpBN9hJAAAIhqtOyQAACIaBICkAuBCgJ0jkJHAR69gdLFLI//vJVYCL1DgQoBIIPwr25ZcDAXYHZyonWwFQCXwfk0y2gV1poBL0hyH5CrCMSqB5OcgGAO4WUSsEWQHAhUDj7iA7ALgQaKsEWQIACPybwmwBAAR+EGQNABcCDT1B9gBwIci9J1ABACCYvxyoAQAQzIZAFQCAIJP3Afz62/lRuDvI5DqYAwIHgpx2B+qWgMvQcCDIZXegGgD0BBm8EMJZBnCVDAD+88NZDlLuCdQvAdp7AgBwZQ3hVIIUG0MAMKOJ0AQBAJjTRWqBAAB0bCM0QAAAFuwjORCksDsAAB4HCRwIpDeGAMADAO6JYfuZh6PR6JPnUFHDAECA3IxKcHRycvJgc3Pzb8BwUUIBQKDMfSGQuhQAgEAA+i4HAKCH0FJ/pGcVEPmJZagAgZT1NL8d5VlZll8Dhxs8HAAESNzXfGPMn5WVlXvr6+vHAcNFCQUAnjL3Nf/8178sy/KD51BRwwCAh9wc86U2fxdpA4ABj4Klm9+mDgBwGeRRAxWGcMp+CpdAWAIGevJTMh9LwAwItDz5qABLNj+Fhm9W0UMTeK4K58lP1XwsAcrNBwDM/0uUWsOHJeCKAlrL/mUZ1PYAMP8MA5UAwPxpDVAHAMf8HNb8q32AKgBg/vU2UA0AMH/22bcKADjmp3zI43OHlz0AML8bg6wBgPmLa0C2AMD8xeZnew7AMT/HrV4XCtlVAI75uTd82d8FwHy/sp/lXQDMDzc/mx4A5vczPwsAYH5/85MHAObzzE8aAJjPNz9ZAGD+csxPEgCYvzzzkwMA5i/X/KQAgPnLNz8ZAGD+MOYnAQDMH8588QDA/GHNFw1A0zS7zrmtPhJovNXro5NYAKqqWiuK4pCIVkMTg/lhiol8H8Ba+5qI9sJSIYL5oYoJ/cugpml+OecehqQD80PUmsaKrAB1Xb81xrzyTQnm+yp1PU4qAI+NMT980oL5PirNjxEJQDtda60lolFXejCfZ77YXUA7sbqu2x7gizHmxqw0YT7ffNEAtJOrqupWURTvjDF3nXM3jTHHzrnfzrm98Xi8vxwJdP8WsUuAblviZQ8A4mktciQAINKWeJMCAPG0FjkSABBpS7xJAYB4WoscCQCItCXepABAPK1FjgQARNoSb1IAIJ7WIkcCACJtiTcpABBPa5EjAQCRtsSbFACIp7XIkQCASFviTQoAxNNa5Ej/AAxh3J+K76XOAAAAAElFTkSuQmCC) 100% no-repeat;background-size:18px;padding-right:25px}.content .field-line.file[data-v-3c521905]{position:relative;overflow:hidden;margin-top:20px;border-top:1px solid #ddd}.content .field-line.file .ed[data-v-3c521905]{color:#8bc34a}.content .field-line.file input[data-v-3c521905]{font-size:100px;opacity:0;position:absolute;top:0;right:0}.content .field-line.textarea[data-v-3c521905]{-ms-flex-align:start;align-items:start;-ms-flex-line-pack:start;align-content:start;border-bottom:0;padding-top:10px;height:100px}.content .field-line.textarea textarea[data-v-3c521905]{-ms-flex-positive:1;flex-grow:1;border:0;height:100%;resize:none;color:#333;font-size:14px;padding:3px 10px;background-color:rgba(0,0,0,.03);border-radius:3px}.content .tip[data-v-3c521905]{font-size:11px;color:#ff9800}.content.hide-header[data-v-3c521905]{padding-top:0}.content .sub-btn[data-v-3c521905]{display:block;width:100%;height:45px;color:#fff;margin-top:30px;line-height:45px;text-align:center;border-radius:3px;border:none;font-size:14px;background:linear-gradient(90deg,#26a2ff,#736cde);-ms-flex-negative:0;flex-shrink:0}.content .sub-btn[data-v-3c521905]:active{opacity:.8}.types-sheet[data-v-3c521905]{width:100vw;height:100vh;position:fixed;top:0;left:0;right:0;bottom:0;margin:auto;background-color:rgba(0,0,0,.5)}.types-sheet .picker-box[data-v-3c521905]{height:250px;width:100vw;position:absolute;bottom:0;left:0;right:0;margin:0 auto;background-color:#fff}.types-sheet .title[data-v-3c521905]{height:35px;border-bottom:1px solid #f3f3f3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 10px;box-sizing:border-box;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center}.types-sheet .title span[data-v-3c521905]{font-size:14px;color:#333}.types-sheet .title .sub-btn[data-v-3c521905]{display:block;width:55px;height:30px;color:#26a2ff;line-height:30px;text-align:right;font-size:14px;font-weight:900}.types-sheet .title .sub-btn[data-v-3c521905]:active{opacity:.8}.types-sheet .tips[data-v-3c521905]{font-size:12px;color:red;padding:10px 0}
\ No newline at end of file
.content[data-v-7cace18b]{padding:50px 10px}.content .field-line[data-v-7cace18b]{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;box-sizing:border-box;height:45px;border-bottom:1px solid #ddd;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#333}.content .field-line span[data-v-7cace18b]:first-child{width:35px}.content .field-line input[data-v-7cace18b]{-ms-flex-positive:1;flex-grow:1;padding-left:10px;height:100%;background:none;border:0;color:#333;font-size:14px;border-radius:0}.content .field-line.algin-left[data-v-7cace18b]{-ms-flex-line-pack:left;align-content:left;-ms-flex-align:left;align-items:left}.content .field-line.arrow-right[data-v-7cace18b]{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAFDUlEQVR4Xu2dMU8UQRTH32wBvR/AxmhjJZVS3R4tsdCY2NoabY100IDGUo2x0s7EaGFDtzubkPAdaCz8AFjRkRuzATwCd3sz+24nb+b9aXkw8/7/3755M7MchvClWgGjOnskTwBAOQQAAAAoV0B5+qgAAEC5AsrTRwUAAMoVUJ4+KgAAUK6A8vRRAQCAcgWUp48KAACUK6A8fVQAACBbgaZpPhPRfefcbefccVEUvyeTyZvxeLwve+ZpzE5sBTg4OLhzenp6NE/GyWSys7GxsZ2GzHJnKRYAa60lolGXdICAD5ZIAKy1T4nom096gMBHpfkxIgGo6/qjMea5b2qAwFep63FSAfhpjHkUkhYgCFFrGisSAGvtCyJ6H5oSIAhVjGS+FFpV1VpRFIdEtBqaEiAIU0xkBWhTaJpm1zm3FZbOWTQg8FdNLABtCtba70T0xD+daSQg8FNNNABcCIhouyzLHT8pdEaJB4ALASpBN9hJAAAIhqtOyQAACIaBICkAuBCgJ0jkJHAR69gdLFLI//vJVYCL1DgQoBIIPwr25ZcDAXYHZyonWwFQCXwfk0y2gV1poBL0hyH5CrCMSqB5OcgGAO4WUSsEWQHAhUDj7iA7ALgQaKsEWQIACPybwmwBAAR+EGQNABcCDT1B9gBwIci9J1ABACCYvxyoAQAQzIZAFQCAIJP3Afz62/lRuDvI5DqYAwIHgpx2B+qWgMvQcCDIZXegGgD0BBm8EMJZBnCVDAD+88NZDlLuCdQvAdp7AgBwZQ3hVIIUG0MAMKOJ0AQBAJjTRWqBAAB0bCM0QAAAFuwjORCksDsAAB4HCRwIpDeGAMADAO6JYfuZh6PR6JPnUFHDAECA3IxKcHRycvJgc3Pzb8BwUUIBQKDMfSGQuhQAgEAA+i4HAKCH0FJ/pGcVEPmJZagAgZT1NL8d5VlZll8Dhxs8HAAESNzXfGPMn5WVlXvr6+vHAcNFCQUAnjL3Nf/8178sy/KD51BRwwCAh9wc86U2fxdpA4ABj4Klm9+mDgBwGeRRAxWGcMp+CpdAWAIGevJTMh9LwAwItDz5qABLNj+Fhm9W0UMTeK4K58lP1XwsAcrNBwDM/0uUWsOHJeCKAlrL/mUZ1PYAMP8MA5UAwPxpDVAHAMf8HNb8q32AKgBg/vU2UA0AMH/22bcKADjmp3zI43OHlz0AML8bg6wBgPmLa0C2AMD8xeZnew7AMT/HrV4XCtlVAI75uTd82d8FwHy/sp/lXQDMDzc/mx4A5vczPwsAYH5/85MHAObzzE8aAJjPNz9ZAGD+csxPEgCYvzzzkwMA5i/X/KQAgPnLNz8ZAGD+MOYnAQDMH8588QDA/GHNFw1A0zS7zrmtPhJovNXro5NYAKqqWiuK4pCIVkMTg/lhiol8H8Ba+5qI9sJSIYL5oYoJ/cugpml+OecehqQD80PUmsaKrAB1Xb81xrzyTQnm+yp1PU4qAI+NMT980oL5PirNjxEJQDtda60lolFXejCfZ77YXUA7sbqu2x7gizHmxqw0YT7ffNEAtJOrqupWURTvjDF3nXM3jTHHzrnfzrm98Xi8vxwJdP8WsUuAblviZQ8A4mktciQAINKWeJMCAPG0FjkSABBpS7xJAYB4WoscCQCItCXepABAPK1FjgQARNoSb1IAIJ7WIkcCACJtiTcpABBPa5EjAQCRtsSbFACIp7XIkQCASFviTQoAxNNa5Ej/AAxh3J+K76XOAAAAAElFTkSuQmCC) 100% no-repeat;background-size:18px;padding-right:25px}.content .field-line.file[data-v-7cace18b]{position:relative;overflow:hidden;margin-top:20px;border-top:1px solid #ddd}.content .field-line.file .ed[data-v-7cace18b]{color:#8bc34a}.content .field-line.file input[data-v-7cace18b]{font-size:100px;opacity:0;position:absolute;top:0;right:0}.content .field-line.textarea[data-v-7cace18b]{-ms-flex-align:start;align-items:start;-ms-flex-line-pack:start;align-content:start;border-bottom:0;padding-top:10px;height:100px}.content .field-line.textarea textarea[data-v-7cace18b]{-ms-flex-positive:1;flex-grow:1;border:0;height:100%;resize:none;color:#333;font-size:14px;padding:3px 10px;background-color:rgba(0,0,0,.03);border-radius:3px}.content .tip[data-v-7cace18b]{font-size:11px;color:#ff9800}.content.hide-header[data-v-7cace18b]{padding-top:0}.content .sub-btn[data-v-7cace18b]{display:block;width:100%;height:45px;color:#fff;margin-top:30px;line-height:45px;text-align:center;border-radius:3px;border:none;font-size:14px;background:linear-gradient(90deg,#26a2ff,#736cde);-ms-flex-negative:0;flex-shrink:0}.content .sub-btn[data-v-7cace18b]:active{opacity:.8}.types-sheet[data-v-7cace18b]{width:100vw;height:100vh;position:fixed;top:0;left:0;right:0;bottom:0;margin:auto;background-color:rgba(0,0,0,.5)}.types-sheet .picker-box[data-v-7cace18b]{height:250px;width:100vw;position:absolute;bottom:0;left:0;right:0;margin:0 auto;background-color:#fff}.types-sheet .title[data-v-7cace18b]{height:35px;border-bottom:1px solid #f3f3f3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 10px;box-sizing:border-box;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center}.types-sheet .title span[data-v-7cace18b]{font-size:14px;color:#333}.types-sheet .title .sub-btn[data-v-7cace18b]{display:block;width:55px;height:30px;color:#26a2ff;line-height:30px;text-align:right;font-size:14px;font-weight:900}.types-sheet .title .sub-btn[data-v-7cace18b]:active{opacity:.8}.tips[data-v-7cace18b]{font-size:12px;color:red;padding:10px 0}
\ No newline at end of file
......@@ -43,4 +43,4 @@
top:0 !important;
min-height: inherit!important;
left:0 !important; right:0 !important; bottom:0 !important; margin: auto !important;
}</style><link href=css/chunk-2f081569.7395930a.css rel=prefetch><link href=css/chunk-5750b049.975722ef.css rel=prefetch><link href=css/chunk-5e6009ff.86cb9867.css rel=prefetch><link href=css/chunk-bd7efe5c.96f83ab8.css rel=prefetch><link href=js/chunk-2f081569.a91a1f28.js rel=prefetch><link href=js/chunk-5750b049.9b99e61d.js rel=prefetch><link href=js/chunk-5e6009ff.20ab0e77.js rel=prefetch><link href=js/chunk-bd7efe5c.5b3512bd.js rel=prefetch><link href=css/app.19de1655.css rel=preload as=style><link href=css/chunk-vendors.5cea36ab.css rel=preload as=style><link href=js/app.4146cb6a.js rel=preload as=script><link href=js/chunk-vendors.7ce94627.js rel=preload as=script><link href=css/chunk-vendors.5cea36ab.css rel=stylesheet><link href=css/app.19de1655.css rel=stylesheet></head><body><noscript><strong>We're sorry but m doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.7ce94627.js></script><script src=js/app.4146cb6a.js></script></body></html>
\ No newline at end of file
}</style><link href=css/chunk-1a4e3cd3.bc23f30c.css rel=prefetch><link href=css/chunk-5750b049.975722ef.css rel=prefetch><link href=css/chunk-5e6009ff.86cb9867.css rel=prefetch><link href=css/chunk-bd7efe5c.96f83ab8.css rel=prefetch><link href=js/chunk-1a4e3cd3.81b30056.js rel=prefetch><link href=js/chunk-5750b049.b7cee639.js rel=prefetch><link href=js/chunk-5e6009ff.cb477013.js rel=prefetch><link href=js/chunk-bd7efe5c.3bdd8028.js rel=prefetch><link href=css/app.19de1655.css rel=preload as=style><link href=css/chunk-vendors.5cea36ab.css rel=preload as=style><link href=js/app.8764abed.js rel=preload as=script><link href=js/chunk-vendors.7ce94627.js rel=preload as=script><link href=css/chunk-vendors.5cea36ab.css rel=stylesheet><link href=css/app.19de1655.css rel=stylesheet></head><body><noscript><strong>We're sorry but m doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.7ce94627.js></script><script src=js/app.8764abed.js></script></body></html>
\ No newline at end of file
(function(e){function t(t){for(var a,r,c=t[0],i=t[1],u=t[2],l=0,f=[];l<c.length;l++)r=c[l],Object.prototype.hasOwnProperty.call(o,r)&&o[r]&&f.push(o[r][0]),o[r]=0;for(a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a]);d&&d(t);while(f.length)f.shift()();return s.push.apply(s,u||[]),n()}function n(){for(var e,t=0;t<s.length;t++){for(var n=s[t],a=!0,r=1;r<n.length;r++){var c=n[r];0!==o[c]&&(a=!1)}a&&(s.splice(t--,1),e=i(i.s=n[0]))}return e}var a={},r={app:0},o={app:0},s=[];function c(e){return i.p+"js/"+({}[e]||e)+"."+{"chunk-2f081569":"a91a1f28","chunk-5750b049":"9b99e61d","chunk-5e6009ff":"20ab0e77","chunk-bd7efe5c":"5b3512bd"}[e]+".js"}function i(t){if(a[t])return a[t].exports;var n=a[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.e=function(e){var t=[],n={"chunk-2f081569":1,"chunk-5750b049":1,"chunk-5e6009ff":1,"chunk-bd7efe5c":1};r[e]?t.push(r[e]):0!==r[e]&&n[e]&&t.push(r[e]=new Promise((function(t,n){for(var a="css/"+({}[e]||e)+"."+{"chunk-2f081569":"7395930a","chunk-5750b049":"975722ef","chunk-5e6009ff":"86cb9867","chunk-bd7efe5c":"96f83ab8"}[e]+".css",o=i.p+a,s=document.getElementsByTagName("link"),c=0;c<s.length;c++){var u=s[c],l=u.getAttribute("data-href")||u.getAttribute("href");if("stylesheet"===u.rel&&(l===a||l===o))return t()}var f=document.getElementsByTagName("style");for(c=0;c<f.length;c++){u=f[c],l=u.getAttribute("data-href");if(l===a||l===o)return t()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=t,d.onerror=function(t){var a=t&&t.target&&t.target.src||o,s=new Error("Loading CSS chunk "+e+" failed.\n("+a+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=a,delete r[e],d.parentNode.removeChild(d),n(s)},d.href=o;var p=document.getElementsByTagName("head")[0];p.appendChild(d)})).then((function(){r[e]=0})));var a=o[e];if(0!==a)if(a)t.push(a[2]);else{var s=new Promise((function(t,n){a=o[e]=[t,n]}));t.push(a[2]=s);var u,l=document.createElement("script");l.charset="utf-8",l.timeout=120,i.nc&&l.setAttribute("nonce",i.nc),l.src=c(e);var f=new Error;u=function(t){l.onerror=l.onload=null,clearTimeout(d);var n=o[e];if(0!==n){if(n){var a=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;f.message="Loading chunk "+e+" failed.\n("+a+": "+r+")",f.name="ChunkLoadError",f.type=a,f.request=r,n[1](f)}o[e]=void 0}};var d=setTimeout((function(){u({type:"timeout",target:l})}),12e4);l.onerror=l.onload=u,document.head.appendChild(l)}return Promise.all(t)},i.m=e,i.c=a,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)i.d(n,a,function(t){return e[t]}.bind(null,a));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var u=window["webpackJsonp"]=window["webpackJsonp"]||[],l=u.push.bind(u);u.push=t,u=u.slice();for(var f=0;f<u.length;f++)t(u[f]);var d=l;s.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},4678:function(e,t,n){var a={"./af":"2bfb","./af.js":"2bfb","./ar":"8e73","./ar-dz":"a356","./ar-dz.js":"a356","./ar-kw":"423e","./ar-kw.js":"423e","./ar-ly":"1cfd","./ar-ly.js":"1cfd","./ar-ma":"0a84","./ar-ma.js":"0a84","./ar-sa":"8230","./ar-sa.js":"8230","./ar-tn":"6d83","./ar-tn.js":"6d83","./ar.js":"8e73","./az":"485c","./az.js":"485c","./be":"1fc1","./be.js":"1fc1","./bg":"84aa","./bg.js":"84aa","./bm":"a7fa","./bm.js":"a7fa","./bn":"9043","./bn.js":"9043","./bo":"d26a","./bo.js":"d26a","./br":"6887","./br.js":"6887","./bs":"2554","./bs.js":"2554","./ca":"d716","./ca.js":"d716","./cs":"3c0d","./cs.js":"3c0d","./cv":"03ec","./cv.js":"03ec","./cy":"9797","./cy.js":"9797","./da":"0f14","./da.js":"0f14","./de":"b469","./de-at":"b3eb","./de-at.js":"b3eb","./de-ch":"bb71","./de-ch.js":"bb71","./de.js":"b469","./dv":"598a","./dv.js":"598a","./el":"8d47","./el.js":"8d47","./en-SG":"cdab","./en-SG.js":"cdab","./en-au":"0e6b","./en-au.js":"0e6b","./en-ca":"3886","./en-ca.js":"3886","./en-gb":"39a6","./en-gb.js":"39a6","./en-ie":"e1d3","./en-ie.js":"e1d3","./en-il":"7333","./en-il.js":"7333","./en-nz":"6f50","./en-nz.js":"6f50","./eo":"65db","./eo.js":"65db","./es":"898b","./es-do":"0a3c","./es-do.js":"0a3c","./es-us":"55c9","./es-us.js":"55c9","./es.js":"898b","./et":"ec18","./et.js":"ec18","./eu":"0ff2","./eu.js":"0ff2","./fa":"8df4","./fa.js":"8df4","./fi":"81e9","./fi.js":"81e9","./fo":"0721","./fo.js":"0721","./fr":"9f26","./fr-ca":"d9f8","./fr-ca.js":"d9f8","./fr-ch":"0e49","./fr-ch.js":"0e49","./fr.js":"9f26","./fy":"7118","./fy.js":"7118","./ga":"5120","./ga.js":"5120","./gd":"f6b4","./gd.js":"f6b4","./gl":"8840","./gl.js":"8840","./gom-latn":"0caa","./gom-latn.js":"0caa","./gu":"e0c5","./gu.js":"e0c5","./he":"c7aa","./he.js":"c7aa","./hi":"dc4d","./hi.js":"dc4d","./hr":"4ba9","./hr.js":"4ba9","./hu":"5b14","./hu.js":"5b14","./hy-am":"d6b6","./hy-am.js":"d6b6","./id":"5038","./id.js":"5038","./is":"0558","./is.js":"0558","./it":"6e98","./it-ch":"6f12","./it-ch.js":"6f12","./it.js":"6e98","./ja":"079e","./ja.js":"079e","./jv":"b540","./jv.js":"b540","./ka":"201b","./ka.js":"201b","./kk":"6d79","./kk.js":"6d79","./km":"e81d","./km.js":"e81d","./kn":"3e92","./kn.js":"3e92","./ko":"22f8","./ko.js":"22f8","./ku":"2421","./ku.js":"2421","./ky":"9609","./ky.js":"9609","./lb":"440c","./lb.js":"440c","./lo":"b29d","./lo.js":"b29d","./lt":"26f9","./lt.js":"26f9","./lv":"b97c","./lv.js":"b97c","./me":"293c","./me.js":"293c","./mi":"688b","./mi.js":"688b","./mk":"6909","./mk.js":"6909","./ml":"02fb","./ml.js":"02fb","./mn":"958b","./mn.js":"958b","./mr":"39bd","./mr.js":"39bd","./ms":"ebe4","./ms-my":"6403","./ms-my.js":"6403","./ms.js":"ebe4","./mt":"1b45","./mt.js":"1b45","./my":"8689","./my.js":"8689","./nb":"6ce3","./nb.js":"6ce3","./ne":"3a39","./ne.js":"3a39","./nl":"facd","./nl-be":"db29","./nl-be.js":"db29","./nl.js":"facd","./nn":"b84c","./nn.js":"b84c","./pa-in":"f3ff","./pa-in.js":"f3ff","./pl":"8d57","./pl.js":"8d57","./pt":"f260","./pt-br":"d2d4","./pt-br.js":"d2d4","./pt.js":"f260","./ro":"972c","./ro.js":"972c","./ru":"957c","./ru.js":"957c","./sd":"6784","./sd.js":"6784","./se":"ffff","./se.js":"ffff","./si":"eda5","./si.js":"eda5","./sk":"7be6","./sk.js":"7be6","./sl":"8155","./sl.js":"8155","./sq":"c8f3","./sq.js":"c8f3","./sr":"cf1e","./sr-cyrl":"13e9","./sr-cyrl.js":"13e9","./sr.js":"cf1e","./ss":"52bd","./ss.js":"52bd","./sv":"5fbd","./sv.js":"5fbd","./sw":"74dc","./sw.js":"74dc","./ta":"3de5","./ta.js":"3de5","./te":"5cbb","./te.js":"5cbb","./tet":"576c","./tet.js":"576c","./tg":"3b1b","./tg.js":"3b1b","./th":"10e8","./th.js":"10e8","./tl-ph":"0f38","./tl-ph.js":"0f38","./tlh":"cf75","./tlh.js":"cf75","./tr":"0e81","./tr.js":"0e81","./tzl":"cf51","./tzl.js":"cf51","./tzm":"c109","./tzm-latn":"b53d","./tzm-latn.js":"b53d","./tzm.js":"c109","./ug-cn":"6117","./ug-cn.js":"6117","./uk":"ada2","./uk.js":"ada2","./ur":"5294","./ur.js":"5294","./uz":"2e8c","./uz-latn":"010e","./uz-latn.js":"010e","./uz.js":"2e8c","./vi":"2921","./vi.js":"2921","./x-pseudo":"fd7e","./x-pseudo.js":"fd7e","./yo":"7f33","./yo.js":"7f33","./zh-cn":"5c3a","./zh-cn.js":"5c3a","./zh-hk":"49ab","./zh-hk.js":"49ab","./zh-tw":"90ea","./zh-tw.js":"90ea"};function r(e){var t=o(e);return n(t)}function o(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=o,e.exports=r,r.id="4678"},"56d7":function(e,t,n){"use strict";n.r(t);n("cadf"),n("551c"),n("f751"),n("097d");var a=n("2b0e"),r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.isShowPageLoading?n("div",{staticClass:"mini-im-loading",class:{"pc-mini-im-loading":!e.isMobile}},[n("mt-spinner",{attrs:{type:"triple-bounce",color:"#26a2ff"}})],1):e._e(),n("router-view")],1)},o=[],s=(n("8e6e"),n("ac6a"),n("456d"),n("28a5"),n("a481"),n("bd86")),c=n("2f62");function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){Object(s["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var l={name:"app",data:function(){return{}},computed:u({},Object(c["b"])(["isShowPageLoading","userAccount","isArtificial","isMobile","artificialAccount","robotAccount","platform","userLocal","uid","uid"])),created:function(){var e=this;this.getLocal(),setTimeout((function(){e.handelUrl(),e.runApp()}),500),this.onCheckIsOutSession()},methods:{runApp:function(){var e=this,t=this.$mimcInstance.getLocalCacheUser();t&&null!=this.userAccount&&this.userAccount!=t.id&&0!=this.userAccount&&localStorage.clear(),this.$mimcInstance.init({type:0,address:this.userLocal,uid:this.uid||0,platform:this.platform,account_id:this.userAccount||0},(function(t){if(e.upLastActivity(),e.$store.dispatch("onGetCompanyInfo"),e.$store.dispatch("onGetConfigs"),e.$store.dispatch("onGetWorkorderTypes"),e.$store.dispatch("onGetWorkorders"),t){e.$store.commit("updateState",{userAccount:t.id,userInfo:t});var n=e.$mimcInstance.robot;localStorage.setItem("robot_"+n.id,JSON.stringify(n)),e.$store.commit("updateState",{robotAccount:n.id,robotInfo:n});var a=function t(){null!=e.$mimcInstance.user&&e.$mimcInstance.user.isLogin()?e.artificialAccount||(console.log("握手消息"),e.$mimcInstance.sendMessage("handshake",e.robotAccount,"")):setTimeout((function(){return t()}),1e3)};a()}else setTimeout((function(){return e.runApp()}),1e3)}))},handelUrl:function(){var e,t,n,a,r,o,s,c,i=this.queryToJson(location.href.substr(location.href.lastIndexOf("?")).replace("#/index",""));i&&i.c&&localStorage.clear();var u=this.queryToJson(localStorage.getItem("urlQuery"));u&&(i=Object.assign({},u,i)),i&&("0"==i.h&&(e=!1),"0"==i.m&&(t=!1,e=!1),i.u&&(n=parseInt(i.u)),i.p&&(c=parseInt(i.p)),i.uid&&(a=parseInt(i.uid)),"0"==i.r?(r=!0,o=parseInt(i.a)):s=parseInt(i.a));var l=localStorage.getItem("isArtificial"),f=localStorage.getItem("artificialAccount");"true"==l&&(r=!0,o=parseInt(f)),this.$store.commit("updateState",{isShowHeader:e,isMobile:t,userAccount:n,uid:a,isArtificial:r,artificialAccount:o,robotAccount:s,platform:c})},queryToJson:function(e){if(!e||""==e)return null;var t=e.substr(1,e.length).split("&");if(!t)return null;for(var n={},a=0;a<t.length;a++){var r=t[a].split("=");n[r[0]]=r[1]}return n},getLocal:function(){this.$store.dispatch("onGetLocal",this.$store.state.AmapAPPKey)},upLastActivity:function(){var e=this;this.onCheckIsOutSession();var t=this.$mimcInstance.getLocalCacheUser();t&&this.$store.dispatch("onUpdateLastActivity"),this.isArtificial&&localStorage.setItem("artificialTime",Date.now()),setTimeout((function(){return e.upLastActivity()}),6e4)},onCheckIsOutSession:function(){var e=localStorage.getItem("artificialTime");e&&(e=parseInt(e),Date.now()>e+6e5&&this.$store.commit("updateState",{isArtificial:!1,artificialAccount:null}))}}},f=l,d=(n("7faf"),n("2877")),p=Object(d["a"])(f,r,o,!1,null,null,null),m=p.exports,h=n("d1d4"),b=n.n(h),g=n("8c4f");a["default"].use(g["a"]);var j=new g["a"]({base:"",routes:[{path:"/",redirect:"/index"},{path:"/index",name:"index",component:function(){return n.e("chunk-5e6009ff").then(n.bind(null,"e0a0"))}},{path:"/workorder",name:"workorder",component:function(){return n.e("chunk-bd7efe5c").then(n.bind(null,"fb09"))}},{path:"/workorder/create",name:"workorder_create",component:function(){return n.e("chunk-2f081569").then(n.bind(null,"ede1"))}},{path:"/workorder/detail/:id",name:"workorder_detail",component:function(){return n.e("chunk-5750b049").then(n.bind(null,"4033"))}}]}),k=j,v=n("bc3a"),y=n.n(v),w={onGetMessages:function(e,t){var n=20;y.a.post("/public/messages",{timestamp:t.timestamp,page_size:n}).then((function(a){for(var r=[],o=a.data.data.list||[],s=0;s<o.length;s++)o[s].payload=window.Base64.decode(o[s].payload);(o.length<n||0==o.length)&&e.commit("updateState",{isLoadMorEnd:!0}),r=0==t.oldMsg.length&&o.length>0?a.data.data.list:o.length>0?o.concat(t.oldMsg):t.oldMsg,e.commit("updateState",{messages:r}),t.callback&&t.callback()})).catch((function(e){console.log(e)}))},onGetLocal:function(e,t){y.a.get("https://restapi.amap.com/v3/ip?key="+t).then((function(t){t.data.province&&e.commit("updateState",{userLocal:t.data.province+t.data.city})})).catch((function(e){console.error(e)}))},onCleanRead:function(){y.a.get("/public/clean_read/")},onUpdateLastActivity:function(){y.a.get("/public/activity/")},onToggleWindow:function(e,t){y.a.put("/public/window/",{window:t})},onGetCompanyInfo:function(e){y.a.get("/public/company").then((function(t){e.commit("updateState",{companyInfo:t.data.data})})).catch((function(e){console.error(e)}))},onGetConfigs:function(e){y.a.get("/public/configs").then((function(t){e.commit("updateState",{configs:t.data.data})}))},onGetWorkorderTypes:function(e){y.a.get("/public/workorder/types").then((function(t){e.commit("updateState",{workorderTypes:t.data.data})}))},onGetWorkorders:function(e){y.a.get("/public/workorders").then((function(t){e.commit("updateState",{workorders:t.data.data})}))}},_={updateState:function(e,t){var n=e;for(var a in t)void 0!=t[a]&&(n[a]=t[a]);e=n}},M=(n("4917"),{platform:function(e){return e.platform},isArtificial:function(e){return e.isArtificial},isShowHeader:function(e){return e.isShowHeader},isMobile:function(e){return e.isMobile},uid:function(e){return e.uid},userAccount:function(e){return e.userAccount},artificialAccount:function(e){return e.artificialAccount},robotInfo:function(e){return e.robotInfo},robotAccount:function(e){return e.robotAccount},isLoadMorEnd:function(e){return e.isLoadMorEnd},messages:function(e){return e.messages||[]},userLocal:function(e){return e.userLocal},isLoadMorLoading:function(e){return e.isLoadMorLoading},userInfo:function(e){return e.userInfo},companyInfo:function(e){return e.companyInfo},configs:function(e){return e.configs},isIOS:function(){return!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)},isSafari:function(){return navigator.userAgent.indexOf("Safari")>-1&&navigator.userAgent.indexOf("Chrome")<1},isJudgeBigScreen:function(){var e=!1,t=window.screen.height/window.screen.width,n=window.screen.height==window.screen.availHeight?1.8:1.65;return t>n&&(e=!0),e},isShowPageLoading:function(e){return e.isShowPageLoading},workorders:function(e){return e.workorders},workorderTypes:function(e){return e.workorderTypes}}),I={platform:5,isShowPageLoading:!1,isShowHeader:!0,isMobile:!0,isArtificial:!1,uid:0,userAccount:0,artificialAccount:null,robotInfo:null,robotAccount:null,messages:[],isLoadMorEnd:!1,userLocal:"",AmapAPPKey:"73ef1dc5c5ea086e7330b95aede42953",isLoadMorLoading:!1,userInfo:{},companyInfo:null,configs:{},workorders:[],workorderTypes:[]};a["default"].use(c["a"]);var S=new c["a"].Store({state:I,getters:M,mutations:_,actions:w}),A=(n("394c"),n("76a0")),L=n.n(A),T=(n("aa35"),n("7f7f"),n("cea2")),C=n("c1df"),O={install:function(e,t){e.prototype.$myMethod=function(){console.log(t)},e.prototype.$formatUnixDate=function(e,t){return C(parseInt(e+"000")).format(t)},e.prototype.$formatFromNowDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm";return C().format("YYYYMMDD")==C(parseInt(e+"000")).format("YYYYMMDD")?"今天 "+C(parseInt(e+"000")).format("HH:mm"):C(parseInt(e+"000")).format(t)},e.prototype.$formatDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm:ss";return C(parseInt(e+"000")).format(t)},e.prototype.$robotNickname=function(e){for(var t,n=this.$store.getters.robots,a=0;a<n.length;a++)n[a].id==e&&(t=n[a].nickname);return t},e.prototype.$uploadFile=function(e){var t=e.mode,n=e.secret,a=e.file,r=e.percent,o=e.success,s=e.fail,c=null,i=parseInt(1e4*Math.random()*(new Date).getTime())+a.name.substr(a.name.lastIndexOf("."));if(1==t){var u=new FormData;u.append("file",a),u.append("file_name",i),y.a.post("/public/upload",u).then((function(e){o&&o(e.data.data)})).catch((function(e){s&&s(e)}))}else if(2==t){var l={quality:.92,noCompressIfLarger:!0,maxWidth:1500};T["compressImage"](a,l).then((function(e){var t=T["upload"](e.dist,i,n,{},{mimeType:null});c=t.subscribe({next:function(e){r&&r(e)},error:function(){var e=new FormData;e.append("fileType","image"),e.append("fileName","file"),e.append("key",i),e.append("token",n),e.append("file",a),y.a.post("https://upload.qiniup.com",e).then((function(){o&&o(i)})).catch((function(e){s&&s(e)}))},complete:function(e){o&&o(e.key)}})}))}return c}}},D=O,Y=(n("6b54"),{install:function(e,t){console.log(t),e.MimcInstance=e.prototype.$mimcInstance={user:null,robot:null,platform:5,fetchMIMCTokenResult:null,_receiveP2PMsgCallback:null,_statusChangeCallback:null,_serverAckCallback:null,_disconnectCallback:null,init:function(e,t){this.platform=e.platform,this.fetchMIMCToken(e,t)},getLocalCacheUser:function(){var e=localStorage.getItem("user");return e?JSON.parse(e):null},fetchMIMCToken:function(e,t){var n=this;y.a.post("/public/register",e).then((function(e){n.fetchMIMCTokenResult=e.data.data.token,localStorage.setItem("user",JSON.stringify(e.data.data.user)),localStorage.setItem("Token",e.data.data.user.token),console.log("MIMC初始化成功"),n.getRobot((function(){t&&t(e.data.data.user)})),n.login()})).catch((function(e){t&&t(null),console.log(e)}))},getRobot:function(e){var t=this;y.a.get("/public/robot/"+this.platform).then((function(n){t.robot=n.data.data,e&&e()})).catch((function(e){console.log("mimc初始化失败,请刷新重试",e)}))},pushMessage:function(e){var t=this;y.a.post("/public/message/push",{msgType:"NORMAL_MSG",payload:e}).then((function(n){console.log(n.data),200!=n.data["code"]&&setTimeout((function(){return t.pushMessage(e)}),300)})).catch((function(){setTimeout((function(){return t.pushMessage(e)}),300)}))},login:function(e){var t=this;try{var n=this.fetchMIMCTokenResult;this.user=new MIMCUser(n.data.appId,n.data.appAccount,"666"),this.user.registerP2PMsgHandler((function(e){var n=JSON.parse(window.Base64.decode(e.getPayload()));t._receiveP2PMsgCallback&&t._receiveP2PMsgCallback(n)})),this.user.registerFetchToken((function(){return n})),this.user.registerStatusChange((function(e,n,a,r){t._statusChangeCallback&&t._statusChangeCallback(e,n,a,r)})),this.user.registerServerAckHandler((function(e,n,a,r){t._serverAckCallback&&t._serverAckCallback(e,n,a,r)})),this.user.registerDisconnHandler((function(){t._disconnectCallback&&t._disconnectCallback()})),this.user.login(),window.mimcInstance=this,e&&e(),console.log("MIMC登录成功")}catch(a){console.log("MIMC登录失败"),setTimeout((function(){t.login()}),1e3)}},logout:function(){this.user&&(this.user.logout(),this.user=null)},addEventListener:function(e,t){switch(e){case"receiveP2PMsg":this._receiveP2PMsgCallback=t;break;case"statusChange":this._statusChangeCallback=t;break;case"serverAck":this._serverAckCallback=t;break;case"disconnect":this._disconnectCallback=t;break}},sendMessage:function(e,t){var n=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(this.user){var r={from_account:parseInt(this.fetchMIMCTokenResult.data.appAccount),to_account:parseInt(t),biz_type:e,version:"0",timestamp:parseInt(((new Date).getTime()+" ").substr(0,10)),key:(new Date).getTime(),read:0,platform:this.platform,transfer_account:0,payload:a+""},o=window.Base64.encode(JSON.stringify(r));return"contacts"!=e&&"pong"!=e&&"welcome"!=e&&"handshake"!=e&&"search_knowledge"!=e&&this.pushMessage(window.Base64.encode(o)),setTimeout((function(){n.user.sendMessage(t.toString(),o)}),150),r}Object(A["Toast"])({message:"服务异常,请刷新重试!"})},createLocalMessage:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r={from_account:parseInt(this.fetchMIMCTokenResult.data.appAccount),to_account:parseInt(t),biz_type:e,version:"0",platform:this.platform,timestamp:parseInt(((new Date).getTime()+" ").substr(0,10)),key:(new Date).getTime(),read:0,transfer_account:parseInt(a),payload:n+""};return r}}}}),P=Y,$={months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY年MM月DD日",LLL:"YYYY年MM月DD日Ah点mm分",LLLL:"YYYY年MM月DD日ddddAh点mm分",l:"YYYY-M-D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t){var n=100*e+t;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"},week:{dow:1,doy:4}},z=n("c1df");z.locale("zh-cn",$),y.a.defaults.baseURL="/api",y.a.interceptors.request.use((function(e){if(-1!=e.url.indexOf("https://restapi.amap.com/v3/ip"))return e;var t=localStorage.getItem("Token")||"";return e.headers=Object.assign({},{Token:t},e.headers),e}),(function(e){return console.log(e),Promise.reject(e)}));var x={clickToCloseNonZoomable:!1,fullscreenEl:!1};a["default"].use(b.a,x),a["default"].use(D),a["default"].use(P),a["default"].use(L.a),a["default"].config.productionTip=!1,new a["default"]({router:k,store:S,render:function(e){return e(m)}}).$mount("#app")},"7faf":function(e,t,n){"use strict";var a=n("8fba"),r=n.n(a);r.a},"8fba":function(e,t,n){}});
//# sourceMappingURL=app.4146cb6a.js.map
\ No newline at end of file
(function(e){function t(t){for(var a,r,c=t[0],i=t[1],u=t[2],l=0,d=[];l<c.length;l++)r=c[l],Object.prototype.hasOwnProperty.call(o,r)&&o[r]&&d.push(o[r][0]),o[r]=0;for(a in i)Object.prototype.hasOwnProperty.call(i,a)&&(e[a]=i[a]);f&&f(t);while(d.length)d.shift()();return s.push.apply(s,u||[]),n()}function n(){for(var e,t=0;t<s.length;t++){for(var n=s[t],a=!0,r=1;r<n.length;r++){var c=n[r];0!==o[c]&&(a=!1)}a&&(s.splice(t--,1),e=i(i.s=n[0]))}return e}var a={},r={app:0},o={app:0},s=[];function c(e){return i.p+"js/"+({}[e]||e)+"."+{"chunk-1a4e3cd3":"81b30056","chunk-5750b049":"b7cee639","chunk-5e6009ff":"cb477013","chunk-bd7efe5c":"3bdd8028"}[e]+".js"}function i(t){if(a[t])return a[t].exports;var n=a[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,i),n.l=!0,n.exports}i.e=function(e){var t=[],n={"chunk-1a4e3cd3":1,"chunk-5750b049":1,"chunk-5e6009ff":1,"chunk-bd7efe5c":1};r[e]?t.push(r[e]):0!==r[e]&&n[e]&&t.push(r[e]=new Promise((function(t,n){for(var a="css/"+({}[e]||e)+"."+{"chunk-1a4e3cd3":"bc23f30c","chunk-5750b049":"975722ef","chunk-5e6009ff":"86cb9867","chunk-bd7efe5c":"96f83ab8"}[e]+".css",o=i.p+a,s=document.getElementsByTagName("link"),c=0;c<s.length;c++){var u=s[c],l=u.getAttribute("data-href")||u.getAttribute("href");if("stylesheet"===u.rel&&(l===a||l===o))return t()}var d=document.getElementsByTagName("style");for(c=0;c<d.length;c++){u=d[c],l=u.getAttribute("data-href");if(l===a||l===o)return t()}var f=document.createElement("link");f.rel="stylesheet",f.type="text/css",f.onload=t,f.onerror=function(t){var a=t&&t.target&&t.target.src||o,s=new Error("Loading CSS chunk "+e+" failed.\n("+a+")");s.code="CSS_CHUNK_LOAD_FAILED",s.request=a,delete r[e],f.parentNode.removeChild(f),n(s)},f.href=o;var p=document.getElementsByTagName("head")[0];p.appendChild(f)})).then((function(){r[e]=0})));var a=o[e];if(0!==a)if(a)t.push(a[2]);else{var s=new Promise((function(t,n){a=o[e]=[t,n]}));t.push(a[2]=s);var u,l=document.createElement("script");l.charset="utf-8",l.timeout=120,i.nc&&l.setAttribute("nonce",i.nc),l.src=c(e);var d=new Error;u=function(t){l.onerror=l.onload=null,clearTimeout(f);var n=o[e];if(0!==n){if(n){var a=t&&("load"===t.type?"missing":t.type),r=t&&t.target&&t.target.src;d.message="Loading chunk "+e+" failed.\n("+a+": "+r+")",d.name="ChunkLoadError",d.type=a,d.request=r,n[1](d)}o[e]=void 0}};var f=setTimeout((function(){u({type:"timeout",target:l})}),12e4);l.onerror=l.onload=u,document.head.appendChild(l)}return Promise.all(t)},i.m=e,i.c=a,i.d=function(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)i.d(n,a,function(t){return e[t]}.bind(null,a));return n},i.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i.oe=function(e){throw console.error(e),e};var u=window["webpackJsonp"]=window["webpackJsonp"]||[],l=u.push.bind(u);u.push=t,u=u.slice();for(var d=0;d<u.length;d++)t(u[d]);var f=l;s.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},4678:function(e,t,n){var a={"./af":"2bfb","./af.js":"2bfb","./ar":"8e73","./ar-dz":"a356","./ar-dz.js":"a356","./ar-kw":"423e","./ar-kw.js":"423e","./ar-ly":"1cfd","./ar-ly.js":"1cfd","./ar-ma":"0a84","./ar-ma.js":"0a84","./ar-sa":"8230","./ar-sa.js":"8230","./ar-tn":"6d83","./ar-tn.js":"6d83","./ar.js":"8e73","./az":"485c","./az.js":"485c","./be":"1fc1","./be.js":"1fc1","./bg":"84aa","./bg.js":"84aa","./bm":"a7fa","./bm.js":"a7fa","./bn":"9043","./bn.js":"9043","./bo":"d26a","./bo.js":"d26a","./br":"6887","./br.js":"6887","./bs":"2554","./bs.js":"2554","./ca":"d716","./ca.js":"d716","./cs":"3c0d","./cs.js":"3c0d","./cv":"03ec","./cv.js":"03ec","./cy":"9797","./cy.js":"9797","./da":"0f14","./da.js":"0f14","./de":"b469","./de-at":"b3eb","./de-at.js":"b3eb","./de-ch":"bb71","./de-ch.js":"bb71","./de.js":"b469","./dv":"598a","./dv.js":"598a","./el":"8d47","./el.js":"8d47","./en-SG":"cdab","./en-SG.js":"cdab","./en-au":"0e6b","./en-au.js":"0e6b","./en-ca":"3886","./en-ca.js":"3886","./en-gb":"39a6","./en-gb.js":"39a6","./en-ie":"e1d3","./en-ie.js":"e1d3","./en-il":"7333","./en-il.js":"7333","./en-nz":"6f50","./en-nz.js":"6f50","./eo":"65db","./eo.js":"65db","./es":"898b","./es-do":"0a3c","./es-do.js":"0a3c","./es-us":"55c9","./es-us.js":"55c9","./es.js":"898b","./et":"ec18","./et.js":"ec18","./eu":"0ff2","./eu.js":"0ff2","./fa":"8df4","./fa.js":"8df4","./fi":"81e9","./fi.js":"81e9","./fo":"0721","./fo.js":"0721","./fr":"9f26","./fr-ca":"d9f8","./fr-ca.js":"d9f8","./fr-ch":"0e49","./fr-ch.js":"0e49","./fr.js":"9f26","./fy":"7118","./fy.js":"7118","./ga":"5120","./ga.js":"5120","./gd":"f6b4","./gd.js":"f6b4","./gl":"8840","./gl.js":"8840","./gom-latn":"0caa","./gom-latn.js":"0caa","./gu":"e0c5","./gu.js":"e0c5","./he":"c7aa","./he.js":"c7aa","./hi":"dc4d","./hi.js":"dc4d","./hr":"4ba9","./hr.js":"4ba9","./hu":"5b14","./hu.js":"5b14","./hy-am":"d6b6","./hy-am.js":"d6b6","./id":"5038","./id.js":"5038","./is":"0558","./is.js":"0558","./it":"6e98","./it-ch":"6f12","./it-ch.js":"6f12","./it.js":"6e98","./ja":"079e","./ja.js":"079e","./jv":"b540","./jv.js":"b540","./ka":"201b","./ka.js":"201b","./kk":"6d79","./kk.js":"6d79","./km":"e81d","./km.js":"e81d","./kn":"3e92","./kn.js":"3e92","./ko":"22f8","./ko.js":"22f8","./ku":"2421","./ku.js":"2421","./ky":"9609","./ky.js":"9609","./lb":"440c","./lb.js":"440c","./lo":"b29d","./lo.js":"b29d","./lt":"26f9","./lt.js":"26f9","./lv":"b97c","./lv.js":"b97c","./me":"293c","./me.js":"293c","./mi":"688b","./mi.js":"688b","./mk":"6909","./mk.js":"6909","./ml":"02fb","./ml.js":"02fb","./mn":"958b","./mn.js":"958b","./mr":"39bd","./mr.js":"39bd","./ms":"ebe4","./ms-my":"6403","./ms-my.js":"6403","./ms.js":"ebe4","./mt":"1b45","./mt.js":"1b45","./my":"8689","./my.js":"8689","./nb":"6ce3","./nb.js":"6ce3","./ne":"3a39","./ne.js":"3a39","./nl":"facd","./nl-be":"db29","./nl-be.js":"db29","./nl.js":"facd","./nn":"b84c","./nn.js":"b84c","./pa-in":"f3ff","./pa-in.js":"f3ff","./pl":"8d57","./pl.js":"8d57","./pt":"f260","./pt-br":"d2d4","./pt-br.js":"d2d4","./pt.js":"f260","./ro":"972c","./ro.js":"972c","./ru":"957c","./ru.js":"957c","./sd":"6784","./sd.js":"6784","./se":"ffff","./se.js":"ffff","./si":"eda5","./si.js":"eda5","./sk":"7be6","./sk.js":"7be6","./sl":"8155","./sl.js":"8155","./sq":"c8f3","./sq.js":"c8f3","./sr":"cf1e","./sr-cyrl":"13e9","./sr-cyrl.js":"13e9","./sr.js":"cf1e","./ss":"52bd","./ss.js":"52bd","./sv":"5fbd","./sv.js":"5fbd","./sw":"74dc","./sw.js":"74dc","./ta":"3de5","./ta.js":"3de5","./te":"5cbb","./te.js":"5cbb","./tet":"576c","./tet.js":"576c","./tg":"3b1b","./tg.js":"3b1b","./th":"10e8","./th.js":"10e8","./tl-ph":"0f38","./tl-ph.js":"0f38","./tlh":"cf75","./tlh.js":"cf75","./tr":"0e81","./tr.js":"0e81","./tzl":"cf51","./tzl.js":"cf51","./tzm":"c109","./tzm-latn":"b53d","./tzm-latn.js":"b53d","./tzm.js":"c109","./ug-cn":"6117","./ug-cn.js":"6117","./uk":"ada2","./uk.js":"ada2","./ur":"5294","./ur.js":"5294","./uz":"2e8c","./uz-latn":"010e","./uz-latn.js":"010e","./uz.js":"2e8c","./vi":"2921","./vi.js":"2921","./x-pseudo":"fd7e","./x-pseudo.js":"fd7e","./yo":"7f33","./yo.js":"7f33","./zh-cn":"5c3a","./zh-cn.js":"5c3a","./zh-hk":"49ab","./zh-hk.js":"49ab","./zh-tw":"90ea","./zh-tw.js":"90ea"};function r(e){var t=o(e);return n(t)}function o(e){if(!n.o(a,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return a[e]}r.keys=function(){return Object.keys(a)},r.resolve=o,e.exports=r,r.id="4678"},"56d7":function(e,t,n){"use strict";n.r(t);n("cadf"),n("551c"),n("f751"),n("097d");var a=n("2b0e"),r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.isShowPageLoading?n("div",{staticClass:"mini-im-loading",class:{"pc-mini-im-loading":!e.isMobile}},[n("mt-spinner",{attrs:{type:"triple-bounce",color:"#26a2ff"}})],1):e._e(),n("router-view")],1)},o=[],s=(n("8e6e"),n("ac6a"),n("456d"),n("28a5"),n("a481"),n("bd86")),c=n("2f62");function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function u(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){Object(s["a"])(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var l={name:"app",data:function(){return{}},computed:u({},Object(c["b"])(["isShowPageLoading","userAccount","isArtificial","isMobile","artificialAccount","robotAccount","platform","userLocal","uid","uid"])),created:function(){var e=this;this.getLocal(),setTimeout((function(){e.handelUrl(),e.runApp()}),500),this.onCheckIsOutSession()},methods:{runApp:function(){var e=this,t=this.$mimcInstance.getLocalCacheUser();t&&null!=this.userAccount&&this.userAccount!=t.id&&0!=this.userAccount&&localStorage.clear(),this.$mimcInstance.init({type:0,address:this.userLocal,uid:this.uid||0,platform:this.platform,account_id:this.userAccount||0},(function(t){if(e.upLastActivity(),e.$store.dispatch("onGetCompanyInfo"),e.$store.dispatch("onGetConfigs"),e.$store.dispatch("onGetWorkorderTypes"),e.$store.dispatch("onGetWorkorders"),t){e.$store.commit("updateState",{userAccount:t.id,userInfo:t});var n=e.$mimcInstance.robot;localStorage.setItem("robot_"+n.id,JSON.stringify(n)),e.$store.commit("updateState",{robotAccount:n.id,robotInfo:n});var a=function t(){null!=e.$mimcInstance.user&&e.$mimcInstance.user.isLogin()?e.artificialAccount||(console.log("握手消息"),e.$mimcInstance.sendMessage("handshake",e.robotAccount,"")):setTimeout((function(){return t()}),1e3)};a()}else setTimeout((function(){return e.runApp()}),1e3)}))},handelUrl:function(){var e,t,n,a,r,o,s,c,i=this.queryToJson(location.href.substr(location.href.lastIndexOf("?")).replace("#/index",""));i&&i.c&&localStorage.clear();var u=this.queryToJson(localStorage.getItem("urlQuery"));u&&(i=Object.assign({},u,i)),i&&("0"==i.h&&(e=!1),"0"==i.m&&(t=!1,e=!1),i.u&&(n=parseInt(i.u)),i.p&&(c=parseInt(i.p)),i.uid&&(a=parseInt(i.uid)),"0"==i.r?(r=!0,o=parseInt(i.a)):s=parseInt(i.a));var l=localStorage.getItem("isArtificial"),d=localStorage.getItem("artificialAccount");"true"==l&&(r=!0,o=parseInt(d)),this.$store.commit("updateState",{isShowHeader:e,isMobile:t,userAccount:n,uid:a,isArtificial:r,artificialAccount:o,robotAccount:s,platform:c})},queryToJson:function(e){if(!e||""==e)return null;var t=e.substr(1,e.length).split("&");if(!t)return null;for(var n={},a=0;a<t.length;a++){var r=t[a].split("=");n[r[0]]=r[1]}return n},getLocal:function(){this.$store.dispatch("onGetLocal",this.$store.state.AmapAPPKey)},upLastActivity:function(){var e=this;this.onCheckIsOutSession();var t=this.$mimcInstance.getLocalCacheUser();t&&this.$store.dispatch("onUpdateLastActivity"),this.isArtificial&&localStorage.setItem("artificialTime",Date.now()),setTimeout((function(){return e.upLastActivity()}),6e4)},onCheckIsOutSession:function(){var e=localStorage.getItem("artificialTime");e&&(e=parseInt(e),Date.now()>e+6e5&&this.$store.commit("updateState",{isArtificial:!1,artificialAccount:null}))}}},d=l,f=(n("7faf"),n("2877")),p=Object(f["a"])(d,r,o,!1,null,null,null),m=p.exports,h=n("d1d4"),b=n.n(h),g=n("8c4f");a["default"].use(g["a"]);var j=new g["a"]({base:"",routes:[{path:"/",redirect:"/index"},{path:"/index",name:"index",component:function(){return n.e("chunk-5e6009ff").then(n.bind(null,"e0a0"))}},{path:"/workorder",name:"workorder",component:function(){return n.e("chunk-bd7efe5c").then(n.bind(null,"fb09"))}},{path:"/workorder/create",name:"workorder_create",component:function(){return n.e("chunk-1a4e3cd3").then(n.bind(null,"ede1"))}},{path:"/workorder/detail/:id",name:"workorder_detail",component:function(){return n.e("chunk-5750b049").then(n.bind(null,"4033"))}}]}),k=j,v=n("bc3a"),y=n.n(v),w={onGetMessages:function(e,t){var n=20;y.a.post("/public/messages",{timestamp:t.timestamp,page_size:n}).then((function(a){for(var r=[],o=a.data.data.list||[],s=0;s<o.length;s++)o[s].payload=window.Base64.decode(o[s].payload);(o.length<n||0==o.length)&&e.commit("updateState",{isLoadMorEnd:!0}),r=0==t.oldMsg.length&&o.length>0?a.data.data.list:o.length>0?o.concat(t.oldMsg):t.oldMsg,e.commit("updateState",{messages:r}),t.callback&&t.callback()})).catch((function(e){console.log(e)}))},onGetLocal:function(e,t){y.a.get("https://restapi.amap.com/v3/ip?key="+t).then((function(t){t.data.province&&e.commit("updateState",{userLocal:t.data.province+t.data.city})})).catch((function(e){console.error(e)}))},onCleanRead:function(){y.a.get("/public/clean_read/")},onUpdateLastActivity:function(){y.a.get("/public/activity/")},onToggleWindow:function(e,t){y.a.put("/public/window/",{window:t})},onGetCompanyInfo:function(e){y.a.get("/public/company").then((function(t){e.commit("updateState",{companyInfo:t.data.data})})).catch((function(e){console.error(e)}))},onGetConfigs:function(e){y.a.get("/public/configs").then((function(t){e.commit("updateState",{configs:t.data.data})}))},onGetWorkorderTypes:function(e){y.a.get("/public/workorder/types").then((function(t){e.commit("updateState",{workorderTypes:t.data.data})}))},onGetWorkorders:function(e){y.a.get("/public/workorders").then((function(t){e.commit("updateState",{workorders:t.data.data})}))}},_={updateState:function(e,t){var n=e;for(var a in t)void 0!=t[a]&&(n[a]=t[a]);e=n}},M=(n("4917"),{platform:function(e){return e.platform},isArtificial:function(e){return e.isArtificial},isShowHeader:function(e){return e.isShowHeader},isMobile:function(e){return e.isMobile},uid:function(e){return e.uid},userAccount:function(e){return e.userAccount},artificialAccount:function(e){return e.artificialAccount},robotInfo:function(e){return e.robotInfo},robotAccount:function(e){return e.robotAccount},isLoadMorEnd:function(e){return e.isLoadMorEnd},messages:function(e){return e.messages||[]},userLocal:function(e){return e.userLocal},isLoadMorLoading:function(e){return e.isLoadMorLoading},userInfo:function(e){return e.userInfo},companyInfo:function(e){return e.companyInfo},configs:function(e){return e.configs},isIOS:function(){return!!navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)},isSafari:function(){return navigator.userAgent.indexOf("Safari")>-1&&navigator.userAgent.indexOf("Chrome")<1},isJudgeBigScreen:function(){var e=!1,t=window.screen.height/window.screen.width,n=window.screen.height==window.screen.availHeight?1.8:1.65;return t>n&&(e=!0),e},isShowPageLoading:function(e){return e.isShowPageLoading},workorders:function(e){return e.workorders},workorderTypes:function(e){return e.workorderTypes}}),I={platform:5,isShowPageLoading:!1,isShowHeader:!0,isMobile:!0,isArtificial:!1,uid:0,userAccount:0,artificialAccount:null,robotInfo:null,robotAccount:null,messages:[],isLoadMorEnd:!1,userLocal:"",AmapAPPKey:"73ef1dc5c5ea086e7330b95aede42953",isLoadMorLoading:!1,userInfo:{},companyInfo:null,configs:{},workorders:[],workorderTypes:[]};a["default"].use(c["a"]);var S=new c["a"].Store({state:I,getters:M,mutations:_,actions:w}),A=(n("394c"),n("76a0")),L=n.n(A),T=(n("aa35"),n("7f7f"),n("cea2")),C=n("c1df"),O={install:function(e,t){e.prototype.$myMethod=function(){console.log(t)},e.prototype.$formatUnixDate=function(e,t){return C(parseInt(e+"000")).format(t)},e.prototype.$formatFromNowDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm";return C().format("YYYYMMDD")==C(parseInt(e+"000")).format("YYYYMMDD")?"今天 "+C(parseInt(e+"000")).format("HH:mm"):C(parseInt(e+"000")).format(t)},e.prototype.$formatDate=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"YYYY-MM-DD HH:mm:ss";return C(parseInt(e+"000")).format(t)},e.prototype.$robotNickname=function(e){for(var t,n=this.$store.getters.robots,a=0;a<n.length;a++)n[a].id==e&&(t=n[a].nickname);return t},e.prototype.$uploadFile=function(e){var t=e.mode,n=e.secret,a=e.file,r=e.percent,o=e.success,s=e.fail,c=null,i=parseInt(1e4*Math.random()*(new Date).getTime())+a.name.substr(a.name.lastIndexOf("."));if(1==t){var u=new FormData;u.append("file",a),u.append("file_name",i),y.a.post("/public/upload",u).then((function(e){o&&o(e.data.data)})).catch((function(e){s&&s(e)}))}else if(2==t){var l={quality:.92,noCompressIfLarger:!0,maxWidth:1500};T["compressImage"](a,l).then((function(e){var t=T["upload"](e.dist,i,n,{},{mimeType:null});c=t.subscribe({next:function(e){r&&r(e)},error:function(){var e=new FormData;e.append("fileType","image"),e.append("fileName","file"),e.append("key",i),e.append("token",n),e.append("file",a),y.a.post("https://upload.qiniup.com",e).then((function(){o&&o(i)})).catch((function(e){s&&s(e)}))},complete:function(e){o&&o(e.key)}})}))}return c}}},D=O,Y=(n("6b54"),{install:function(e,t){console.log(t),e.MimcInstance=e.prototype.$mimcInstance={user:null,robot:null,platform:5,fetchMIMCTokenResult:null,_receiveP2PMsgCallback:null,_statusChangeCallback:null,_serverAckCallback:null,_disconnectCallback:null,init:function(e,t){this.platform=e.platform,this.fetchMIMCToken(e,t)},getLocalCacheUser:function(){var e=localStorage.getItem("user");return e?JSON.parse(e):null},fetchMIMCToken:function(e,t){var n=this;y.a.post("/public/register",e).then((function(e){n.fetchMIMCTokenResult=e.data.data.token,localStorage.setItem("user",JSON.stringify(e.data.data.user)),localStorage.setItem("Token",e.data.data.user.token),console.log("MIMC初始化成功"),n.getRobot((function(){t&&t(e.data.data.user)})),n.login()})).catch((function(e){t&&t(null),console.log(e)}))},getRobot:function(e){var t=this;y.a.get("/public/robot/"+this.platform).then((function(n){t.robot=n.data.data,e&&e()})).catch((function(e){console.log("mimc初始化失败,请刷新重试",e)}))},pushMessage:function(e){var t=this;y.a.post("/public/message/push",{msgType:"NORMAL_MSG",payload:e}).then((function(n){console.log(n.data),200!=n.data["code"]&&setTimeout((function(){return t.pushMessage(e)}),300)})).catch((function(){setTimeout((function(){return t.pushMessage(e)}),300)}))},login:function(e){var t=this;try{var n=this.fetchMIMCTokenResult;this.user=new MIMCUser(n.data.appId,n.data.appAccount,"666"),this.user.registerP2PMsgHandler((function(e){var n=JSON.parse(window.Base64.decode(e.getPayload()));t._receiveP2PMsgCallback&&t._receiveP2PMsgCallback(n)})),this.user.registerFetchToken((function(){return n})),this.user.registerStatusChange((function(e,n,a,r){t._statusChangeCallback&&t._statusChangeCallback(e,n,a,r)})),this.user.registerServerAckHandler((function(e,n,a,r){t._serverAckCallback&&t._serverAckCallback(e,n,a,r)})),this.user.registerDisconnHandler((function(){t._disconnectCallback&&t._disconnectCallback()})),this.user.login(),window.mimcInstance=this,e&&e(),console.log("MIMC登录成功")}catch(a){console.log("MIMC登录失败"),setTimeout((function(){t.login()}),1e3)}},logout:function(){this.user&&(this.user.logout(),this.user=null)},addEventListener:function(e,t){switch(e){case"receiveP2PMsg":this._receiveP2PMsgCallback=t;break;case"statusChange":this._statusChangeCallback=t;break;case"serverAck":this._serverAckCallback=t;break;case"disconnect":this._disconnectCallback=t;break}},sendMessage:function(e,t){var n=this,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(this.user){var r={from_account:parseInt(this.fetchMIMCTokenResult.data.appAccount),to_account:parseInt(t),biz_type:e,version:"0",timestamp:parseInt(((new Date).getTime()+" ").substr(0,10)),key:(new Date).getTime(),read:0,platform:this.platform,transfer_account:0,payload:a+""},o=window.Base64.encode(JSON.stringify(r));return"contacts"!=e&&"pong"!=e&&"welcome"!=e&&"handshake"!=e&&"search_knowledge"!=e&&this.pushMessage(window.Base64.encode(o)),setTimeout((function(){n.user.sendMessage(t.toString(),o)}),150),r}Object(A["Toast"])({message:"服务异常,请刷新重试!"})},createLocalMessage:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"",a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0,r={from_account:parseInt(this.fetchMIMCTokenResult.data.appAccount),to_account:parseInt(t),biz_type:e,version:"0",platform:this.platform,timestamp:parseInt(((new Date).getTime()+" ").substr(0,10)),key:(new Date).getTime(),read:0,transfer_account:parseInt(a),payload:n+""};return r}}}}),P=Y,$={months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY年MM月DD日",LLL:"YYYY年MM月DD日Ah点mm分",LLLL:"YYYY年MM月DD日ddddAh点mm分",l:"YYYY-M-D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,t){return 12===e&&(e=0),"凌晨"===t||"早上"===t||"上午"===t?e:"下午"===t||"晚上"===t?e+12:e>=11?e:e+12},meridiem:function(e,t){var n=100*e+t;return n<600?"凌晨":n<900?"早上":n<1130?"上午":n<1230?"中午":n<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(e,t){switch(t){case"d":case"D":case"DDD":return e+"日";case"M":return e+"月";case"w":case"W":return e+"周";default:return e}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d秒",m:"1分钟",mm:"%d分钟",h:"1小时",hh:"%d小时",d:"1天",dd:"%d天",M:"1个月",MM:"%d个月",y:"1年",yy:"%d年"},week:{dow:1,doy:4}},z=n("c1df");z.locale("zh-cn",$),y.a.defaults.baseURL="/api",y.a.interceptors.request.use((function(e){if(-1!=e.url.indexOf("https://restapi.amap.com/v3/ip"))return e;var t=localStorage.getItem("Token")||"";return e.headers=Object.assign({},{Token:t},e.headers),e}),(function(e){return console.log(e),Promise.reject(e)}));var x={clickToCloseNonZoomable:!1,fullscreenEl:!1};a["default"].use(b.a,x),a["default"].use(D),a["default"].use(P),a["default"].use(L.a),a["default"].config.productionTip=!1,new a["default"]({router:k,store:S,render:function(e){return e(m)}}).$mount("#app")},"7faf":function(e,t,n){"use strict";var a=n("8fba"),r=n.n(a);r.a},"8fba":function(e,t,n){}});
//# sourceMappingURL=app.8764abed.js.map
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2f081569"],{"831d":function(e,t,s){"use strict";var i=s("a08b"),r=s.n(i);r.a},a08b:function(e,t,s){},ede1:function(e,t,s){"use strict";s.r(t);var i=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"container"},[e.isShowHeader?s("mt-header",{attrs:{fixed:"",title:"创建工单"}},[s("div",{attrs:{slot:"left"},slot:"left"},[s("mt-button",{attrs:{icon:"back"},on:{click:function(t){return e.$router.go(-1)}}})],1)]):e._e(),s("div",{staticClass:"content",class:{"hide-header":!e.isShowHeader}},[s("div",{staticClass:"field-line arrow-right",on:{click:function(t){e.isShowTypesPicker=!0}}},[s("span",[e._v("类型:")]),s("span",[e._v(e._s(e.selectTyped||"选择工单分类"))])]),s("div",{staticClass:"field-line algin-left"},[s("span",[e._v("标题:")]),s("input",{directives:[{name:"model",rawName:"v-model",value:e.request.title,expression:"request.title"}],attrs:{type:"text",placeholder:"请输入工单标题~"},domProps:{value:e.request.title},on:{input:function(t){t.target.composing||e.$set(e.request,"title",t.target.value)}}})]),s("div",{staticClass:"field-line algin-left"},[s("span",[e._v("手机:")]),s("input",{directives:[{name:"model",rawName:"v-model",value:e.request.phone,expression:"request.phone"}],attrs:{type:"number",placeholder:"请输入您的手机~"},domProps:{value:e.request.phone},on:{input:function(t){t.target.composing||e.$set(e.request,"phone",t.target.value)}}})]),s("div",{staticClass:"tip"},[e._v("必填,预留手机号方便客服联系到您~")]),s("div",{staticClass:"field-line algin-left"},[s("span",[e._v("邮箱:")]),s("input",{directives:[{name:"model",rawName:"v-model",value:e.request.email,expression:"request.email"}],attrs:{type:"email",placeholder:"请输入您的电子邮箱~"},domProps:{value:e.request.email},on:{input:function(t){t.target.composing||e.$set(e.request,"email",t.target.value)}}})]),s("div",{staticClass:"tip"},[e._v("非必填,预留邮箱后若工单回复后会通过邮箱通知您~")]),s("div",{staticClass:"field-line textarea"},[s("span",[e._v("内容:")]),s("textarea",{directives:[{name:"model",rawName:"v-model",value:e.request.content,expression:"request.content"}],attrs:{placeholder:"请输入您的工单内容~"},domProps:{value:e.request.content},on:{input:function(t){t.target.composing||e.$set(e.request,"content",t.target.value)}}})]),s("div",{staticClass:"field-line arrow-right file"},[s("span",[e._v("附件:")]),s("span",{class:{ed:""!=e.source}},[e._v(e._s(e.source?"已上传附件,重新上传可替换~":"上传附件"))]),s("input",{attrs:{type:"file"},on:{change:e.uploadFile}})]),s("div",{staticClass:"tips"},[e._v("温馨提示:由于工作时间原因,工单回复较慢,请您耐心等待~")]),s("span",{staticClass:"sub-btn",on:{click:function(t){return e.submit()}}},[e._v("提交")])]),e.isShowTypesPicker?s("div",{staticClass:"types-sheet"},[s("div",{staticClass:"picker-box"},[s("div",{staticClass:"title"},[s("span",[e._v("选择工单类型")]),s("span",{staticClass:"sub-btn",on:{click:function(t){e.isShowTypesPicker=!1}}},[e._v("确定")])]),s("mt-picker",{attrs:{slots:e.types},on:{change:e.onValuesChange}})],1)]):e._e()],1)},r=[],a=(s("8e6e"),s("ac6a"),s("456d"),s("a481"),s("bd86")),o=s("2f62"),n=s("76a0"),c=s("bc3a"),l=s.n(c);function u(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,i)}return s}function p(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?u(Object(s),!0).forEach((function(t){Object(a["a"])(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):u(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}var d={name:"workorder_create",components:{},data:function(){return{isSubmit:!1,request:{tid:0,title:"",content:"",phone:"",email:""},selectTyped:"",source:"",isShowTypesPicker:!1}},computed:p({},Object(o["b"])(["isShowHeader","workorders","userInfo","workorderTypes","configs","workorderTypes"]),{types:function(){for(var e=[],t=[{flex:1,values:[],className:"workorder-create-picker",textAlign:"center"}],s=0;s<this.workorderTypes.length;s++)e.push(this.workorderTypes[s].title);return t[0].values=e,t}}),mounted:function(){},methods:{onValuesChange:function(e,t){this.selectTyped=t[0];for(var s=0;s<this.workorderTypes.length;s++)if(t[0]==this.workorderTypes[s].title){this.request.tid=this.workorderTypes[s].id;break}console.log(e)},uploadFile:function(e){var t=e.target,s=t.files[0];this.isShowUploadLoading=!0;var i=this;this.$uploadFile({file:s,mode:this.configs.upload_mode,percent:function(){},success:function(e){var t;i.isShowUploadLoading=!1;var s=i.configs.upload_host+"/"+e,r=e.substr(e.lastIndexOf(".")+1);-1!="jpg,jpeg,png,JPG,JPEG,PNG".indexOf(r)?t="<br><img style='max-width:45%;margin-top:5px;' preview='1' src='"+s+"' />":(t="<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />",t+="<a target='_blank' style='color: #2e9dfc;' href='"+s+"'>下载附件</a>"),i.source=t,Object(n["Toast"])({message:"上传成功~"})},fail:function(e){i.isShowUploadLoading=!1,e.response&&e.response.data&&Object(n["Toast"])({message:e.response.data.message})}})},submit:function(){var e=this;0!=this.request.tid?""!=this.request.title.trim()?""!=this.request.content.trim()?this.isSubmit||(this.isSubmit=!0,this.request.content+=this.source,l.a.post("/public/workorder/create",this.request).then((function(t){e.isSubmit=!1,Object(n["Toast"])({message:"工单创建成功~"}),setTimeout((function(){return e.$router.replace("/workorder/detail/"+t.data.data)}),500)})).catch((function(t){e.isSubmit=!1,Object(n["Toast"])({message:t.response.data.message}),console.log(t)}))):Object(n["Toast"])({message:"工单内容不能为空!"}):Object(n["Toast"])({message:"工单标题不能为空!"}):Object(n["Toast"])({message:"请选择工单类型!"})}}},m=d,f=(s("831d"),s("2877")),h=Object(f["a"])(m,i,r,!1,null,"3c521905",null);t["default"]=h.exports}}]);
//# sourceMappingURL=chunk-2f081569.a91a1f28.js.map
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1a4e3cd3"],{"0577":function(e,t,s){"use strict";var i=s("3669"),r=s.n(i);r.a},3669:function(e,t,s){},ede1:function(e,t,s){"use strict";s.r(t);var i=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"container"},[e.isShowHeader?s("mt-header",{attrs:{fixed:"",title:"创建工单"}},[s("div",{attrs:{slot:"left"},slot:"left"},[s("mt-button",{attrs:{icon:"back"},on:{click:function(t){return e.$router.go(-1)}}})],1)]):e._e(),s("div",{staticClass:"content",class:{"hide-header":!e.isShowHeader}},[s("div",{staticClass:"field-line arrow-right",on:{click:function(t){e.isShowTypesPicker=!0}}},[s("span",[e._v("类型:")]),s("span",[e._v(e._s(e.selectTyped||"选择工单分类"))])]),s("div",{staticClass:"field-line algin-left"},[s("span",[e._v("标题:")]),s("input",{directives:[{name:"model",rawName:"v-model",value:e.request.title,expression:"request.title"}],attrs:{type:"text",placeholder:"请输入工单标题~"},domProps:{value:e.request.title},on:{input:function(t){t.target.composing||e.$set(e.request,"title",t.target.value)}}})]),s("div",{staticClass:"field-line algin-left"},[s("span",[e._v("手机:")]),s("input",{directives:[{name:"model",rawName:"v-model",value:e.request.phone,expression:"request.phone"}],attrs:{type:"number",placeholder:"请输入您的手机~"},domProps:{value:e.request.phone},on:{input:function(t){t.target.composing||e.$set(e.request,"phone",t.target.value)}}})]),s("div",{staticClass:"tip"},[e._v("必填,预留手机号方便客服联系到您~")]),s("div",{staticClass:"field-line algin-left"},[s("span",[e._v("邮箱:")]),s("input",{directives:[{name:"model",rawName:"v-model",value:e.request.email,expression:"request.email"}],attrs:{type:"email",placeholder:"请输入您的电子邮箱~"},domProps:{value:e.request.email},on:{input:function(t){t.target.composing||e.$set(e.request,"email",t.target.value)}}})]),s("div",{staticClass:"tip"},[e._v("非必填,预留邮箱后若工单回复后会通过邮箱通知您~")]),s("div",{staticClass:"field-line textarea"},[s("span",[e._v("内容:")]),s("textarea",{directives:[{name:"model",rawName:"v-model",value:e.request.content,expression:"request.content"}],attrs:{placeholder:"请输入您的工单内容~"},domProps:{value:e.request.content},on:{input:function(t){t.target.composing||e.$set(e.request,"content",t.target.value)}}})]),s("div",{staticClass:"field-line arrow-right file"},[s("span",[e._v("附件:")]),s("span",{class:{ed:""!=e.source}},[e._v(e._s(e.source?"已上传附件,重新上传可替换~":"上传附件"))]),s("input",{attrs:{type:"file"},on:{change:e.uploadFile}})]),s("div",{staticClass:"tips"},[e._v("温馨提示:由于工作时间原因,工单回复较慢,请您耐心等待~")]),s("span",{staticClass:"sub-btn",on:{click:function(t){return e.submit()}}},[e._v("提交")])]),e.isShowTypesPicker?s("div",{staticClass:"types-sheet"},[s("div",{staticClass:"picker-box"},[s("div",{staticClass:"title"},[s("span",[e._v("选择工单类型")]),s("span",{staticClass:"sub-btn",on:{click:function(t){e.isShowTypesPicker=!1}}},[e._v("确定")])]),s("mt-picker",{attrs:{slots:e.types},on:{change:e.onValuesChange}})],1)]):e._e()],1)},r=[],a=(s("8e6e"),s("ac6a"),s("456d"),s("a481"),s("bd86")),o=s("2f62"),n=s("76a0"),c=s("bc3a"),l=s.n(c);function u(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,i)}return s}function p(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?u(Object(s),!0).forEach((function(t){Object(a["a"])(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):u(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}var d={name:"workorder_create",components:{},data:function(){return{isSubmit:!1,request:{tid:0,title:"",content:"",phone:"",email:""},selectTyped:"",source:"",isShowTypesPicker:!1}},computed:p({},Object(o["b"])(["isShowHeader","workorders","userInfo","workorderTypes","configs","workorderTypes"]),{types:function(){for(var e=[],t=[{flex:1,values:[],className:"workorder-create-picker",textAlign:"center"}],s=0;s<this.workorderTypes.length;s++)e.push(this.workorderTypes[s].title);return t[0].values=e,t}}),mounted:function(){},methods:{onValuesChange:function(e,t){this.selectTyped=t[0];for(var s=0;s<this.workorderTypes.length;s++)if(t[0]==this.workorderTypes[s].title){this.request.tid=this.workorderTypes[s].id;break}console.log(e)},uploadFile:function(e){var t=e.target,s=t.files[0];this.isShowUploadLoading=!0;var i=this;this.$uploadFile({file:s,mode:this.configs.upload_mode,percent:function(){},success:function(e){var t;i.isShowUploadLoading=!1;var s=i.configs.upload_host+"/"+e,r=e.substr(e.lastIndexOf(".")+1);-1!="jpg,jpeg,png,JPG,JPEG,PNG".indexOf(r)?t="<br><img style='max-width:45%;margin-top:5px;' preview='1' src='"+s+"' />":(t="<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />",t+="<a target='_blank' style='color: #2e9dfc;' href='"+s+"'>下载附件</a>"),i.source=t,Object(n["Toast"])({message:"上传成功~"})},fail:function(e){i.isShowUploadLoading=!1,e.response&&e.response.data&&Object(n["Toast"])({message:e.response.data.message})}})},submit:function(){var e=this;0!=this.request.tid?""!=this.request.title.trim()?""!=this.request.content.trim()?this.isSubmit||(this.isSubmit=!0,this.request.content+=this.source,l.a.post("/public/workorder/create",this.request).then((function(t){e.isSubmit=!1,Object(n["Toast"])({message:"工单创建成功~"}),setTimeout((function(){return e.$router.replace("/workorder/detail/"+t.data.data)}),500)})).catch((function(t){e.isSubmit=!1,Object(n["Toast"])({message:t.response.data.message}),console.log(t)}))):Object(n["Toast"])({message:"工单内容不能为空!"}):Object(n["Toast"])({message:"工单标题不能为空!"}):Object(n["Toast"])({message:"请选择工单类型!"})}}},m=d,h=(s("0577"),s("2877")),f=Object(h["a"])(m,i,r,!1,null,"7cace18b",null);t["default"]=f.exports}}]);
//# sourceMappingURL=chunk-1a4e3cd3.81b30056.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/views/workorder_create.vue?bc0f","webpack:///./src/views/workorder_create.vue?9a43","webpack:///src/views/workorder_create.vue","webpack:///./src/views/workorder_create.vue?1481","webpack:///./src/views/workorder_create.vue"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","on","$event","$router","go","_e","class","isShowHeader","isShowTypesPicker","_v","_s","selectTyped","directives","name","rawName","value","request","expression","domProps","target","composing","$set","source","uploadFile","submit","types","onValuesChange","staticRenderFns","components","data","isSubmit","computed","values","i","workorderTypes","length","push","title","mounted","methods","tid","id","console","log","_","fileDom","e","file","files","isShowUploadLoading","$uploadFile","mode","configs","upload_mode","percent","success","html","self","fullPath","upload_host","src","fileType","substr","lastIndexOf","indexOf","message","fail","response","content","component"],"mappings":"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","file":"js/chunk-1a4e3cd3.81b30056.js","sourcesContent":["import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=style&index=0&id=7cace18b&lang=stylus&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=style&index=0&id=7cace18b&lang=stylus&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.isShowHeader)?_c('mt-header',{attrs:{\"fixed\":\"\",\"title\":\"创建工单\"}},[_c('div',{attrs:{\"slot\":\"left\"},slot:\"left\"},[_c('mt-button',{attrs:{\"icon\":\"back\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}})],1)]):_vm._e(),_c('div',{staticClass:\"content\",class:{'hide-header': !_vm.isShowHeader}},[_c('div',{staticClass:\"field-line arrow-right\",on:{\"click\":function($event){_vm.isShowTypesPicker = true}}},[_c('span',[_vm._v(\"类型:\")]),_c('span',[_vm._v(_vm._s(_vm.selectTyped || '选择工单分类'))])]),_c('div',{staticClass:\"field-line algin-left\"},[_c('span',[_vm._v(\"标题:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.title),expression:\"request.title\"}],attrs:{\"type\":\"text\",\"placeholder\":\"请输入工单标题~\"},domProps:{\"value\":(_vm.request.title)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"title\", $event.target.value)}}})]),_c('div',{staticClass:\"field-line algin-left\"},[_c('span',[_vm._v(\"手机:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.phone),expression:\"request.phone\"}],attrs:{\"type\":\"number\",\"placeholder\":\"请输入您的手机~\"},domProps:{\"value\":(_vm.request.phone)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"phone\", $event.target.value)}}})]),_c('div',{staticClass:\"tip\"},[_vm._v(\"必填,预留手机号方便客服联系到您~\")]),_c('div',{staticClass:\"field-line algin-left\"},[_c('span',[_vm._v(\"邮箱:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.email),expression:\"request.email\"}],attrs:{\"type\":\"email\",\"placeholder\":\"请输入您的电子邮箱~\"},domProps:{\"value\":(_vm.request.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"email\", $event.target.value)}}})]),_c('div',{staticClass:\"tip\"},[_vm._v(\"非必填,预留邮箱后若工单回复后会通过邮箱通知您~\")]),_c('div',{staticClass:\"field-line textarea\"},[_c('span',[_vm._v(\"内容:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.content),expression:\"request.content\"}],attrs:{\"placeholder\":\"请输入您的工单内容~\"},domProps:{\"value\":(_vm.request.content)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"content\", $event.target.value)}}})]),_c('div',{staticClass:\"field-line arrow-right file\"},[_c('span',[_vm._v(\"附件:\")]),_c('span',{class:{'ed': _vm.source != ''}},[_vm._v(_vm._s(_vm.source ? '已上传附件,重新上传可替换~' : '上传附件'))]),_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":_vm.uploadFile}})]),_c('div',{staticClass:\"tips\"},[_vm._v(\"温馨提示:由于工作时间原因,工单回复较慢,请您耐心等待~\")]),_c('span',{staticClass:\"sub-btn\",on:{\"click\":function($event){return _vm.submit()}}},[_vm._v(\"提交\")])]),(_vm.isShowTypesPicker)?_c('div',{staticClass:\"types-sheet\"},[_c('div',{staticClass:\"picker-box\"},[_c('div',{staticClass:\"title\"},[_c('span',[_vm._v(\"选择工单类型\")]),_c('span',{staticClass:\"sub-btn\",on:{\"click\":function($event){_vm.isShowTypesPicker = false}}},[_vm._v(\"确定\")])]),_c('mt-picker',{attrs:{\"slots\":_vm.types},on:{\"change\":_vm.onValuesChange}})],1)]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"container\">\n <mt-header v-if=\"isShowHeader\" fixed title=\"创建工单\">\n <div slot=\"left\">\n <mt-button @click=\"$router.go(-1)\" icon=\"back\"></mt-button>\n </div>\n </mt-header>\n <div class=\"content\" :class=\"{'hide-header': !isShowHeader}\">\n\n <div class=\"field-line arrow-right\" @click=\"isShowTypesPicker = true\">\n <span>类型:</span>\n <span>{{selectTyped || '选择工单分类'}}</span>\n </div>\n <div class=\"field-line algin-left\">\n <span>标题:</span>\n <input type=\"text\" v-model=\"request.title\" placeholder=\"请输入工单标题~\">\n </div>\n <div class=\"field-line algin-left\">\n <span>手机:</span>\n <input type=\"number\" v-model=\"request.phone\" placeholder=\"请输入您的手机~\">\n </div>\n <div class=\"tip\">必填,预留手机号方便客服联系到您~</div>\n <div class=\"field-line algin-left\">\n <span>邮箱:</span>\n <input type=\"email\" v-model=\"request.email\" placeholder=\"请输入您的电子邮箱~\">\n </div>\n <div class=\"tip\">非必填,预留邮箱后若工单回复后会通过邮箱通知您~</div>\n <div class=\"field-line textarea\">\n <span>内容:</span>\n <textarea v-model=\"request.content\" placeholder=\"请输入您的工单内容~\"></textarea>\n </div>\n <div class=\"field-line arrow-right file\">\n <span>附件:</span>\n <span :class=\"{'ed': source != ''}\">{{source ? '已上传附件,重新上传可替换~' : '上传附件'}}</span>\n <input type=\"file\" @change=\"uploadFile\" />\n </div>\n <div class=\"tips\">温馨提示:由于工作时间原因,工单回复较慢,请您耐心等待~</div>\n <span class=\"sub-btn\" @click=\"submit()\">提交</span>\n </div>\n\n <!-- types-sheet -->\n <div class=\"types-sheet\" v-if=\"isShowTypesPicker\">\n <!-- <div class=\"mask\" @click=\"isShowTypesPicker = false\"></div> -->\n <div class=\"picker-box\">\n <div class=\"title\">\n <span>选择工单类型</span>\n <span class=\"sub-btn\" @click=\"isShowTypesPicker = false\">确定</span>\n </div>\n <mt-picker :slots=\"types\" @change=\"onValuesChange\"></mt-picker>\n </div>\n </div>\n\n </div>\n</template>\n<script>\nimport { mapGetters } from \"vuex\";\nimport { Toast } from \"mint-ui\";\nimport axios from \"axios\";\nexport default {\n name: \"workorder_create\",\n components: {},\n data() {\n return {\n isSubmit: false,\n request: {\n \"tid\": 0,\n \"title\": \"\",\n \"content\": \"\",\n \"phone\": \"\",\n \"email\": \"\"\n },\n selectTyped: \"\",\n source: \"\",\n isShowTypesPicker: false\n };\n },\n computed: {\n ...mapGetters([\n \"isShowHeader\",\n \"workorders\",\n \"userInfo\",\n \"workorderTypes\",\n \"configs\",\n \"workorderTypes\"\n ]),\n types() {\n var values = [];\n var slot = [\n {\n flex: 1,\n values: [],\n className: \"workorder-create-picker\",\n textAlign: \"center\"\n }\n ];\n for (var i = 0; i < this.workorderTypes.length; i++) {\n values.push(this.workorderTypes[i].title);\n }\n slot[0].values = values;\n return slot;\n }\n },\n mounted() {\n \n },\n methods: {\n onValuesChange(_, values) {\n this.selectTyped = values[0]\n for(var i=0; i<this.workorderTypes.length; i++){\n if(values[0] == this.workorderTypes[i].title){\n this.request.tid = this.workorderTypes[i].id\n break\n }\n }\n console.log(_)\n },\n uploadFile(e) {\n var fileDom = e.target;\n var file = fileDom.files[0];\n this.isShowUploadLoading = true;\n const self = this;\n this.$uploadFile({\n file,\n mode: this.configs.upload_mode,\n // 七牛才会执行\n percent() {},\n success(src) {\n\n self.isShowUploadLoading = false;\n var html\n var fullPath = self.configs.upload_host + \"/\" + src;\n var fileType = src.substr(src.lastIndexOf(\".\") + 1);\n if (\"jpg,jpeg,png,JPG,JPEG,PNG\".indexOf(fileType) != -1) {\n html = \"<br><img style='max-width:45%;margin-top:5px;' preview='1' src='\" + fullPath + \"' />\"\n }else{\n html = \"<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />\"\n html += \"<a target='_blank' style='color: #2e9dfc;' href='\"+fullPath+\"'>下载附件</a>\"\n }\n self.source = html\n Toast({\n message: \"上传成功~\"\n });\n },\n fail(e) {\n self.isShowUploadLoading = false;\n if (e.response && e.response.data) {\n Toast({\n message: e.response.data.message\n });\n return;\n }\n }\n });\n },\n submit(){\n if(this.request.tid == 0){\n Toast({\n message: \"请选择工单类型!\"\n });\n return\n }\n if(this.request.title.trim() == \"\"){\n Toast({\n message: \"工单标题不能为空!\"\n });\n return\n }\n if(this.request.content.trim() == \"\"){\n Toast({\n message: \"工单内容不能为空!\"\n });\n return\n }\n if(this.isSubmit) return\n this.isSubmit = true\n this.request.content += this.source\n axios\n .post(\"/public/workorder/create\", this.request)\n .then(response => {\n this.isSubmit = false\n Toast({\n message: \"工单创建成功~\"\n });\n setTimeout(()=>this.$router.replace(\"/workorder/detail/\"+response.data.data), 500)\n })\n .catch(error => {\n this.isSubmit = false\n Toast({\n message: error.response.data.message\n });\n console.log(error);\n });\n }\n }\n};\n</script>\n<style lang=\"stylus\" scoped>\n.content {\n padding 50px 10px\n .field-line{\n display flex\n justify-content space-between\n box-sizing border-box\n height 45px\n border-bottom 1px solid #ddd\n align-content center\n align-items center\n font-size 14px\n color #333\n span:first-child{\n width 35px\n }\n input{\n flex-grow 1\n padding-left 10px\n height 100%\n background none \n border 0\n color #333\n font-size 14px\n border-radius 0\n }\n &.algin-left{\n align-content left \n align-items left\n }\n &.arrow-right{\n background url(./../assets/arrow.png) right center no-repeat\n background-size 18px\n padding-right 25px\n }\n &.file{\n position relative\n overflow hidden\n margin-top 20px\n border-top 1px solid #ddd\n .ed{\n color #8bc34a\n }\n input{\n font-size 100px\n opacity 0\n position absolute\n top 0\n right 0\n }\n }\n &.textarea{\n align-items start\n align-content start\n border-bottom 0\n padding-top 10px\n height 100px\n textarea{\n flex-grow 1\n border 0\n height 100%\n resize none\n color #333\n font-size 14px\n padding 3px 10px\n background-color rgba(0, 0, 0, 0.03);\n border-radius 3px\n }\n }\n }\n .tip{\n font-size 11px\n color #ff9800\n }\n &.hide-header {\n padding-top: 0;\n }\n .sub-btn {\n display: block;\n width: 100%;\n height: 45px;\n color: #fff;\n margin-top 30px\n line-height: 45px;\n text-align: center;\n border-radius: 3px;\n border: none;\n font-size: 14px;\n background: linear-gradient(to right, #26a2ff, #736cde);\n flex-shrink: 0;\n\n &:active {\n opacity: 0.8;\n }\n }\n}\n.types-sheet{\n width 100vw;\n height 100vh\n position fixed\n top 0\n left 0\n right 0\n bottom 0\n margin auto\n background-color rgba(0,0,0,.5)\n // .mask{\n // width 100vw;\n // height 100vh\n // background-color rgba(0,0,0,.5)\n // }\n .picker-box{\n height 250px\n width 100vw\n position absolute\n bottom 0\n left 0\n right 0\n margin 0 auto\n background-color #fff\n }\n .title{\n height 35px\n border-bottom 1px solid #f3f3f3\n display flex\n justify-content space-between\n padding 0 10px\n box-sizing border-box\n align-content center\n align-items center\n span{\n font-size 14px\n color #333\n }\n .sub-btn {\n display: block;\n width: 55px;\n height: 30px;\n color: #26a2ff\n line-height: 30px;\n text-align: right;\n font-size: 14px;\n font-weight 900\n &:active {\n opacity: 0.8;\n }\n }\n }\n}\n.tips{\n font-size 12px\n color red\n padding 10px 0\n}\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./workorder_create.vue?vue&type=template&id=7cace18b&scoped=true&\"\nimport script from \"./workorder_create.vue?vue&type=script&lang=js&\"\nexport * from \"./workorder_create.vue?vue&type=script&lang=js&\"\nimport style0 from \"./workorder_create.vue?vue&type=style&index=0&id=7cace18b&lang=stylus&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7cace18b\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/views/workorder_create.vue?0776","webpack:///./src/views/workorder_create.vue?b04f","webpack:///src/views/workorder_create.vue","webpack:///./src/views/workorder_create.vue?1481","webpack:///./src/views/workorder_create.vue?fd6d"],"names":["render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","on","$event","$router","go","_e","class","isShowHeader","isShowTypesPicker","_v","_s","selectTyped","directives","name","rawName","value","request","expression","domProps","target","composing","$set","source","uploadFile","submit","types","onValuesChange","staticRenderFns","components","data","isSubmit","computed","values","i","workorderTypes","length","push","title","mounted","methods","tid","id","console","log","_","fileDom","e","file","files","isShowUploadLoading","$uploadFile","mode","configs","upload_mode","percent","success","html","self","fullPath","upload_host","src","fileType","substr","lastIndexOf","indexOf","message","fail","response","content","component"],"mappings":"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","file":"js/chunk-2f081569.a91a1f28.js","sourcesContent":["import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=style&index=0&id=3c521905&lang=stylus&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=style&index=0&id=3c521905&lang=stylus&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.isShowHeader)?_c('mt-header',{attrs:{\"fixed\":\"\",\"title\":\"创建工单\"}},[_c('div',{attrs:{\"slot\":\"left\"},slot:\"left\"},[_c('mt-button',{attrs:{\"icon\":\"back\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}})],1)]):_vm._e(),_c('div',{staticClass:\"content\",class:{'hide-header': !_vm.isShowHeader}},[_c('div',{staticClass:\"field-line arrow-right\",on:{\"click\":function($event){_vm.isShowTypesPicker = true}}},[_c('span',[_vm._v(\"类型:\")]),_c('span',[_vm._v(_vm._s(_vm.selectTyped || '选择工单分类'))])]),_c('div',{staticClass:\"field-line algin-left\"},[_c('span',[_vm._v(\"标题:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.title),expression:\"request.title\"}],attrs:{\"type\":\"text\",\"placeholder\":\"请输入工单标题~\"},domProps:{\"value\":(_vm.request.title)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"title\", $event.target.value)}}})]),_c('div',{staticClass:\"field-line algin-left\"},[_c('span',[_vm._v(\"手机:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.phone),expression:\"request.phone\"}],attrs:{\"type\":\"number\",\"placeholder\":\"请输入您的手机~\"},domProps:{\"value\":(_vm.request.phone)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"phone\", $event.target.value)}}})]),_c('div',{staticClass:\"tip\"},[_vm._v(\"必填,预留手机号方便客服联系到您~\")]),_c('div',{staticClass:\"field-line algin-left\"},[_c('span',[_vm._v(\"邮箱:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.email),expression:\"request.email\"}],attrs:{\"type\":\"email\",\"placeholder\":\"请输入您的电子邮箱~\"},domProps:{\"value\":(_vm.request.email)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"email\", $event.target.value)}}})]),_c('div',{staticClass:\"tip\"},[_vm._v(\"非必填,预留邮箱后若工单回复后会通过邮箱通知您~\")]),_c('div',{staticClass:\"field-line textarea\"},[_c('span',[_vm._v(\"内容:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.content),expression:\"request.content\"}],attrs:{\"placeholder\":\"请输入您的工单内容~\"},domProps:{\"value\":(_vm.request.content)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"content\", $event.target.value)}}})]),_c('div',{staticClass:\"field-line arrow-right file\"},[_c('span',[_vm._v(\"附件:\")]),_c('span',{class:{'ed': _vm.source != ''}},[_vm._v(_vm._s(_vm.source ? '已上传附件,重新上传可替换~' : '上传附件'))]),_c('input',{attrs:{\"type\":\"file\"},on:{\"change\":_vm.uploadFile}})]),_c('div',{staticClass:\"tips\"},[_vm._v(\"温馨提示:由于工作时间原因,工单回复较慢,请您耐心等待~\")]),_c('span',{staticClass:\"sub-btn\",on:{\"click\":function($event){return _vm.submit()}}},[_vm._v(\"提交\")])]),(_vm.isShowTypesPicker)?_c('div',{staticClass:\"types-sheet\"},[_c('div',{staticClass:\"picker-box\"},[_c('div',{staticClass:\"title\"},[_c('span',[_vm._v(\"选择工单类型\")]),_c('span',{staticClass:\"sub-btn\",on:{\"click\":function($event){_vm.isShowTypesPicker = false}}},[_vm._v(\"确定\")])]),_c('mt-picker',{attrs:{\"slots\":_vm.types},on:{\"change\":_vm.onValuesChange}})],1)]):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"container\">\n <mt-header v-if=\"isShowHeader\" fixed title=\"创建工单\">\n <div slot=\"left\">\n <mt-button @click=\"$router.go(-1)\" icon=\"back\"></mt-button>\n </div>\n </mt-header>\n <div class=\"content\" :class=\"{'hide-header': !isShowHeader}\">\n\n <div class=\"field-line arrow-right\" @click=\"isShowTypesPicker = true\">\n <span>类型:</span>\n <span>{{selectTyped || '选择工单分类'}}</span>\n </div>\n <div class=\"field-line algin-left\">\n <span>标题:</span>\n <input type=\"text\" v-model=\"request.title\" placeholder=\"请输入工单标题~\">\n </div>\n <div class=\"field-line algin-left\">\n <span>手机:</span>\n <input type=\"number\" v-model=\"request.phone\" placeholder=\"请输入您的手机~\">\n </div>\n <div class=\"tip\">必填,预留手机号方便客服联系到您~</div>\n <div class=\"field-line algin-left\">\n <span>邮箱:</span>\n <input type=\"email\" v-model=\"request.email\" placeholder=\"请输入您的电子邮箱~\">\n </div>\n <div class=\"tip\">非必填,预留邮箱后若工单回复后会通过邮箱通知您~</div>\n <div class=\"field-line textarea\">\n <span>内容:</span>\n <textarea v-model=\"request.content\" placeholder=\"请输入您的工单内容~\"></textarea>\n </div>\n <div class=\"field-line arrow-right file\">\n <span>附件:</span>\n <span :class=\"{'ed': source != ''}\">{{source ? '已上传附件,重新上传可替换~' : '上传附件'}}</span>\n <input type=\"file\" @change=\"uploadFile\" />\n </div>\n <div class=\"tips\">温馨提示:由于工作时间原因,工单回复较慢,请您耐心等待~</div>\n <span class=\"sub-btn\" @click=\"submit()\">提交</span>\n </div>\n\n <!-- types-sheet -->\n <div class=\"types-sheet\" v-if=\"isShowTypesPicker\">\n <!-- <div class=\"mask\" @click=\"isShowTypesPicker = false\"></div> -->\n <div class=\"picker-box\">\n <div class=\"title\">\n <span>选择工单类型</span>\n <span class=\"sub-btn\" @click=\"isShowTypesPicker = false\">确定</span>\n </div>\n <mt-picker :slots=\"types\" @change=\"onValuesChange\"></mt-picker>\n </div>\n </div>\n\n </div>\n</template>\n<script>\nimport { mapGetters } from \"vuex\";\nimport { Toast } from \"mint-ui\";\nimport axios from \"axios\";\nexport default {\n name: \"workorder_create\",\n components: {},\n data() {\n return {\n isSubmit: false,\n request: {\n \"tid\": 0,\n \"title\": \"\",\n \"content\": \"\",\n \"phone\": \"\",\n \"email\": \"\"\n },\n selectTyped: \"\",\n source: \"\",\n isShowTypesPicker: false\n };\n },\n computed: {\n ...mapGetters([\n \"isShowHeader\",\n \"workorders\",\n \"userInfo\",\n \"workorderTypes\",\n \"configs\",\n \"workorderTypes\"\n ]),\n types() {\n var values = [];\n var slot = [\n {\n flex: 1,\n values: [],\n className: \"workorder-create-picker\",\n textAlign: \"center\"\n }\n ];\n for (var i = 0; i < this.workorderTypes.length; i++) {\n values.push(this.workorderTypes[i].title);\n }\n slot[0].values = values;\n return slot;\n }\n },\n mounted() {\n \n },\n methods: {\n onValuesChange(_, values) {\n this.selectTyped = values[0]\n for(var i=0; i<this.workorderTypes.length; i++){\n if(values[0] == this.workorderTypes[i].title){\n this.request.tid = this.workorderTypes[i].id\n break\n }\n }\n console.log(_)\n },\n uploadFile(e) {\n var fileDom = e.target;\n var file = fileDom.files[0];\n this.isShowUploadLoading = true;\n const self = this;\n this.$uploadFile({\n file,\n mode: this.configs.upload_mode,\n // 七牛才会执行\n percent() {},\n success(src) {\n\n self.isShowUploadLoading = false;\n var html\n var fullPath = self.configs.upload_host + \"/\" + src;\n var fileType = src.substr(src.lastIndexOf(\".\") + 1);\n if (\"jpg,jpeg,png,JPG,JPEG,PNG\".indexOf(fileType) != -1) {\n html = \"<br><img style='max-width:45%;margin-top:5px;' preview='1' src='\" + fullPath + \"' />\"\n }else{\n html = \"<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />\"\n html += \"<a target='_blank' style='color: #2e9dfc;' href='\"+fullPath+\"'>下载附件</a>\"\n }\n self.source = html\n Toast({\n message: \"上传成功~\"\n });\n },\n fail(e) {\n self.isShowUploadLoading = false;\n if (e.response && e.response.data) {\n Toast({\n message: e.response.data.message\n });\n return;\n }\n }\n });\n },\n submit(){\n if(this.request.tid == 0){\n Toast({\n message: \"请选择工单类型!\"\n });\n return\n }\n if(this.request.title.trim() == \"\"){\n Toast({\n message: \"工单标题不能为空!\"\n });\n return\n }\n if(this.request.content.trim() == \"\"){\n Toast({\n message: \"工单内容不能为空!\"\n });\n return\n }\n if(this.isSubmit) return\n this.isSubmit = true\n this.request.content += this.source\n axios\n .post(\"/public/workorder/create\", this.request)\n .then(response => {\n this.isSubmit = false\n Toast({\n message: \"工单创建成功~\"\n });\n setTimeout(()=>this.$router.replace(\"/workorder/detail/\"+response.data.data), 500)\n })\n .catch(error => {\n this.isSubmit = false\n Toast({\n message: error.response.data.message\n });\n console.log(error);\n });\n }\n }\n};\n</script>\n<style lang=\"stylus\" scoped>\n.content {\n padding 50px 10px\n .field-line{\n display flex\n justify-content space-between\n box-sizing border-box\n height 45px\n border-bottom 1px solid #ddd\n align-content center\n align-items center\n font-size 14px\n color #333\n span:first-child{\n width 35px\n }\n input{\n flex-grow 1\n padding-left 10px\n height 100%\n background none \n border 0\n color #333\n font-size 14px\n border-radius 0\n }\n &.algin-left{\n align-content left \n align-items left\n }\n &.arrow-right{\n background url(./../assets/arrow.png) right center no-repeat\n background-size 18px\n padding-right 25px\n }\n &.file{\n position relative\n overflow hidden\n margin-top 20px\n border-top 1px solid #ddd\n .ed{\n color #8bc34a\n }\n input{\n font-size 100px\n opacity 0\n position absolute\n top 0\n right 0\n }\n }\n &.textarea{\n align-items start\n align-content start\n border-bottom 0\n padding-top 10px\n height 100px\n textarea{\n flex-grow 1\n border 0\n height 100%\n resize none\n color #333\n font-size 14px\n padding 3px 10px\n background-color rgba(0, 0, 0, 0.03);\n border-radius 3px\n }\n }\n }\n .tip{\n font-size 11px\n color #ff9800\n }\n &.hide-header {\n padding-top: 0;\n }\n .sub-btn {\n display: block;\n width: 100%;\n height: 45px;\n color: #fff;\n margin-top 30px\n line-height: 45px;\n text-align: center;\n border-radius: 3px;\n border: none;\n font-size: 14px;\n background: linear-gradient(to right, #26a2ff, #736cde);\n flex-shrink: 0;\n\n &:active {\n opacity: 0.8;\n }\n }\n}\n.types-sheet{\n width 100vw;\n height 100vh\n position fixed\n top 0\n left 0\n right 0\n bottom 0\n margin auto\n background-color rgba(0,0,0,.5)\n // .mask{\n // width 100vw;\n // height 100vh\n // background-color rgba(0,0,0,.5)\n // }\n .picker-box{\n height 250px\n width 100vw\n position absolute\n bottom 0\n left 0\n right 0\n margin 0 auto\n background-color #fff\n }\n .title{\n height 35px\n border-bottom 1px solid #f3f3f3\n display flex\n justify-content space-between\n padding 0 10px\n box-sizing border-box\n align-content center\n align-items center\n span{\n font-size 14px\n color #333\n }\n .sub-btn {\n display: block;\n width: 55px;\n height: 30px;\n color: #26a2ff\n line-height: 30px;\n text-align: right;\n font-size: 14px;\n font-weight 900\n &:active {\n opacity: 0.8;\n }\n }\n }\n .tips{\n font-size 12px\n color red\n padding 10px 0\n }\n}\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_create.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./workorder_create.vue?vue&type=template&id=3c521905&scoped=true&\"\nimport script from \"./workorder_create.vue?vue&type=script&lang=js&\"\nexport * from \"./workorder_create.vue?vue&type=script&lang=js&\"\nimport style0 from \"./workorder_create.vue?vue&type=style&index=0&id=3c521905&lang=stylus&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3c521905\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/assets/fujian1.png","webpack:///./src/views/workorder_detail.vue?4100","webpack:///src/views/workorder_detail.vue","webpack:///./src/views/workorder_detail.vue?9869","webpack:///./src/views/workorder_detail.vue?294a","webpack:///./src/views/workorder_detail.vue?eb69","webpack:///./src/assets/loading.gif"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","on","$event","$router","go","workorder","status","close","_v","_e","class","isShowHeader","_s","title","domProps","content","phone","email","$formatDate","create_at","typeName","staticStyle","comments","length","_l","item","index","key","aid","userInfo","avatar","a_avatar","a_nickname","request","source","isShowUploadLoading","directives","name","rawName","value","expression","inputBlur","target","composing","$set","uploadFile","reply","staticRenderFns","components","data","isSubmit","fileType","computed","console","log","e","created","document","$store","commit","methods","getWorkOrder","getComments","trim","message","setTimeout","body","scrollTo","window","fileDom","file","files","$uploadFile","secret","self","configs","upload_secret","mode","upload_mode","percent","success","html","fullPath","upload_host","src","substr","lastIndexOf","indexOf","fail","response","wid","id","del","component"],"mappings":"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","file":"js/chunk-5750b049.9b99e61d.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/fujian1.083cd8b7.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.isShowHeader)?_c('mt-header',{attrs:{\"fixed\":\"\",\"title\":\"工单详细\"}},[_c('div',{attrs:{\"slot\":\"left\"},slot:\"left\"},[_c('mt-button',{attrs:{\"icon\":\"back\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}})],1),(_vm.workorder.status != 3)?_c('mt-button',{attrs:{\"slot\":\"right\"},on:{\"click\":function($event){return _vm.close()}},slot:\"right\"},[_c('span',[_vm._v(\"关闭工单\")])]):_vm._e()],1):_vm._e(),_c('div',{staticClass:\"content\",class:{'hide-header': !_vm.isShowHeader}},[_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"标题:\")]),_c('span',[_vm._v(_vm._s(_vm.workorder.title))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"内容:\")]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.workorder.content)}})]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"电话:\")]),_c('span',[_vm._v(_vm._s(_vm.workorder.phone || '未预留电话号码'))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"邮箱:\")]),_c('span',[_vm._v(_vm._s(_vm.workorder.email || '未预留邮箱'))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"时间:\")]),_c('span',[_vm._v(_vm._s(_vm.$formatDate(_vm.workorder.create_at)))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"类型:\")]),_c('span',[_vm._v(_vm._s(_vm.typeName || \"---\"))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"状态:\")]),_c('span',[(_vm.workorder.status == 1)?_c('i',{staticStyle:{\"color\":\"#8bc34a\"}},[_vm._v(\"已回复\")]):_vm._e(),(_vm.workorder.status == 3)?_c('i',{staticStyle:{\"color\":\"#ccc\"}},[_vm._v(\"已结束\")]):_vm._e(),(_vm.workorder.status == 0)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待处理\")]):_vm._e(),(_vm.workorder.status == 2)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待回复\")]):_vm._e()])])]),_c('div',{staticClass:\"comments\"},[(_vm.comments.length <= 0)?_c('div',{staticClass:\"no-data\"},[_vm._v(\"暂无回复内容,请您耐心等待~\")]):_vm._l((_vm.comments),function(item,index){return [_c('div',{key:index,staticClass:\"item\"},[_c('div',{staticClass:\"avatar\"},[(item.aid == 0)?_c('img',{attrs:{\"src\":_vm.userInfo.avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png',\"alt\":\"\"}}):_c('img',{attrs:{\"src\":item.a_avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png',\"alt\":\"\"}})]),_c('div',{staticClass:\"right\"},[(item.aid == 0)?_c('div',{staticClass:\"nickname\"},[_vm._v(\"我\")]):_c('div',{staticClass:\"nickname\"},[_vm._v(_vm._s(item.a_nickname))]),_c('div',{staticClass:\"detail\",domProps:{\"innerHTML\":_vm._s(item.content)}}),_c('div',{staticClass:\"date\"},[_vm._v(_vm._s(_vm.$formatDate(item.create_at)))])])])]}),(_vm.workorder.status == 3)?_c('div',{staticClass:\"workorder-close\"},[_vm._v(\"工单已结束~\")]):_vm._e()],2),(_vm.request.source != '' || _vm.isShowUploadLoading)?_c('div',{staticClass:\"file-view\"},[(_vm.isShowUploadLoading)?_c('span',[_c('img',{attrs:{\"src\":require(\"./../assets/loading.gif\"),\"alt\":\"\"}}),_c('i',[_vm._v(\"上传中~\")])]):_c('span',[_c('img',{attrs:{\"src\":require(\"./../assets/fujian1.png\"),\"alt\":\"\"}}),_c('i',[_vm._v(\"你已成功添加附件,重新上传可替换~\")])])]):_vm._e(),(_vm.workorder.status != 3)?_c('div',{staticClass:\"input-form\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.content),expression:\"request.content\"}],attrs:{\"placeholder\":\"请输入内容~\"},domProps:{\"value\":(_vm.request.content)},on:{\"blur\":function($event){return _vm.inputBlur()},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"content\", $event.target.value)}}}),_c('span',{staticClass:\"icon-btn\"},[_c('input',{attrs:{\"title\":\"添加附件\",\"type\":\"file\",\"onclick\":\"this.value = null\"},on:{\"change\":_vm.uploadFile}})]),_c('span',{staticClass:\"sub-btn\",on:{\"click\":function($event){return _vm.reply()}}},[_vm._v(\"提交\")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"container\">\n <mt-header v-if=\"isShowHeader\" fixed title=\"工单详细\">\n <div slot=\"left\">\n <mt-button @click=\"$router.go(-1)\" icon=\"back\"></mt-button>\n </div>\n <mt-button @click=\"close()\" v-if=\"workorder.status != 3\" slot=\"right\">\n <span>关闭工单</span>\n </mt-button>\n <!-- <mt-button @click=\"del()\" v-else slot=\"right\">\n <span>删除</span>\n </mt-button> -->\n </mt-header>\n <div class=\"content\" :class=\"{'hide-header': !isShowHeader}\">\n <div class=\"head\">\n <div class=\"con\">\n <span>标题:</span>\n <span>{{workorder.title}}</span>\n </div>\n <div class=\"con\">\n <span>内容:</span>\n <span v-html=\"workorder.content\"></span>\n </div>\n <div class=\"con\">\n <span>电话:</span>\n <span>{{workorder.phone || '未预留电话号码'}}</span>\n </div>\n <div class=\"con\">\n <span>邮箱:</span>\n <span>{{workorder.email || '未预留邮箱'}}</span>\n </div>\n <div class=\"con\">\n <span>时间:</span>\n <span>{{$formatDate(workorder.create_at)}}</span>\n </div>\n <div class=\"con\">\n <span>类型:</span>\n <span>{{typeName || \"---\"}}</span>\n </div>\n <div class=\"con\">\n <span>状态:</span>\n <span>\n <i v-if=\"workorder.status == 1\" style=\"color:#8bc34a;\">已回复</i>\n <i v-if=\"workorder.status == 3\" style=\"color:#ccc\">已结束</i>\n <i v-if=\"workorder.status == 0\" style=\"color:#FF9800\">待处理</i>\n <i v-if=\"workorder.status == 2\" style=\"color:#FF9800\">待回复</i>\n </span>\n </div>\n </div>\n <div class=\"comments\">\n <div class=\"no-data\" v-if=\"comments.length <= 0\">暂无回复内容,请您耐心等待~</div>\n <template v-else v-for=\"(item,index) in comments\">\n <div :key=\"index\" class=\"item\">\n <div class=\"avatar\">\n <img\n v-if=\"item.aid == 0\"\n :src=\"userInfo.avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png'\"\n alt\n />\n <img v-else :src=\"item.a_avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png'\" alt />\n </div>\n <div class=\"right\">\n <div class=\"nickname\" v-if=\"item.aid == 0\">我</div>\n <div class=\"nickname\" v-else>{{item.a_nickname}}</div>\n <div class=\"detail\" v-html=\"item.content\"></div>\n <div class=\"date\">{{$formatDate(item.create_at)}}</div>\n </div>\n </div>\n </template>\n <div class=\"workorder-close\" v-if=\"workorder.status == 3\">工单已结束~</div>\n </div>\n <div class=\"file-view\" v-if=\"request.source != '' || isShowUploadLoading\">\n <span v-if=\"isShowUploadLoading\">\n <img src=\"./../assets/loading.gif\" alt />\n <i>上传中~</i>\n </span>\n <span v-else>\n <img src=\"./../assets/fujian1.png\" alt />\n <i>你已成功添加附件,重新上传可替换~</i>\n </span>\n </div>\n <div class=\"input-form\" v-if=\"workorder.status != 3\">\n <textarea v-model=\"request.content\" @blur=\"inputBlur()\" placeholder=\"请输入内容~\"></textarea>\n <span class=\"icon-btn\">\n <input title=\"添加附件\" type=\"file\" @change=\"uploadFile\" onclick=\"this.value = null\" />\n </span>\n <span class=\"sub-btn\" @click=\"reply()\">提交</span>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters } from \"vuex\";\nimport { Toast, MessageBox } from \"mint-ui\";\nimport axios from \"axios\";\nexport default {\n name: \"workorder_detail\",\n components: {},\n data() {\n return {\n isShowUploadLoading: false,\n isSubmit: false,\n workorder: {},\n comments: [],\n fileType: \"\",\n request: {\n source: \"\",\n content: \"\"\n }\n };\n },\n computed: {\n ...mapGetters([\n \"isShowHeader\",\n \"workorders\",\n \"userInfo\",\n \"workorderTypes\",\n \"configs\"\n ]),\n typeName(){\n try{\n return this.workorderTypes.filter((i)=>i.id == this.workorder.tid)[0].title\n }catch(e){\n console.log(e)\n return \"\"\n }\n }\n },\n created() {\n document.title = \"工单详细\";\n const id = this.$route.params.id;\n this.$store.commit(\"updateState\", { isShowPageLoading: true });\n axios.all([this.getWorkOrder(id), this.getComments(id)]).then(\n axios.spread(() => {\n this.$store.commit(\"updateState\", { isShowPageLoading: false });\n })\n );\n },\n methods: {\n getWorkOrder(id) {\n return axios\n .get(\"/public/workorder/\" + id)\n .then(response => {\n this.workorder = response.data.data;\n setTimeout(()=>this.$previewRefresh(), 200)\n })\n .catch(error => {\n console.log(error);\n });\n },\n getComments(id) {\n return axios\n .get(\"/public/workorder/comments/\" + id)\n .then(response => {\n if (response.data.data == null) return;\n this.comments = response.data.data;\n setTimeout(()=>this.$previewRefresh(), 200)\n })\n .catch(error => {\n console.log(error);\n });\n },\n reply() {\n const content = this.request.content + this.request.source;\n if (content.trim() == \"\") {\n Toast({\n message: \"请输入内容~\"\n });\n return;\n }\n if (this.isSubmit) return;\n this.isSubmit = true;\n const wid = this.workorder.id;\n axios\n .post(\"/public/workorder/reply\", { wid, content })\n .then(response => {\n this.isSubmit = false\n console.log(response);\n this.getComments(wid);\n this.request = {\n source: \"\",\n content: \"\"\n };\n setTimeout(()=>{\n var sBoxHeight = document.querySelector(\".container\").clientHeight\n var sHeight = document.querySelector(\".content\").clientHeight\n document.querySelector(\".container\").scrollTop = sHeight - sBoxHeight + 20\n }, 500)\n })\n .catch(error => {\n this.isSubmit = false\n console.log(error);\n Toast({\n message: \"提交失败~\"\n });\n });\n },\n inputBlur() {\n setTimeout(() => {\n document.body.scrollTo = 0;\n window.scrollTo(0, 0);\n }, 100);\n },\n uploadFile(e) {\n var fileDom = e.target;\n var file = fileDom.files[0];\n this.isShowUploadLoading = true;\n const self = this;\n this.$uploadFile({\n file,\n secret: self.configs.upload_secret,\n mode: this.configs.upload_mode,\n // 七牛才会执行\n percent() {},\n success(src) {\n\n self.isShowUploadLoading = false;\n var html\n var fullPath = self.configs.upload_host + \"/\" + src;\n var fileType = src.substr(src.lastIndexOf(\".\") + 1);\n if (\"jpg,jpeg,png,JPG,JPEG,PNG\".indexOf(fileType) != -1) {\n html = \"<br><img style='max-width:45%;margin-top:5px;' preview='1' src='\" + fullPath + \"' />\"\n }else{\n html = \"<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />\"\n html += \"<a target='_blank' style='color: #2e9dfc;' href='\"+fullPath+\"'>下载附件</a>\"\n }\n self.request.source = html\n Toast({\n message: \"上传成功~\"\n });\n },\n fail(e) {\n self.isShowUploadLoading = false;\n if (e.response && e.response.data) {\n Toast({\n message: e.response.data.message\n });\n return;\n }\n }\n });\n },\n close() {\n var wid = this.workorder.id;\n MessageBox.confirm(\"您确定关闭该工单吗?\").then(() => {\n axios\n .put(\"/public/workorder/close/\" + wid)\n .then(response => {\n console.log(response);\n Toast({\n message: \"工单已关闭~\"\n });\n this.getWorkOrder(wid);\n })\n .catch(error => {\n Toast({\n message: \"工单关闭失败~\"\n });\n console.log(error);\n });\n });\n },\n del() {\n var wid = this.workorder.id;\n MessageBox.confirm(\"您确定删除该工单吗?\").then(() => {\n axios\n .delete(\"/public/workorder/\" + wid)\n .then(response => {\n console.log(response);\n Toast({\n message: \"工单已删除~\"\n });\n setTimeout(() => this.$router.go(-1));\n })\n .catch(error => {\n Toast({\n message: \"工单关闭失败~\"\n });\n console.log(error);\n });\n });\n }\n }\n};\n</script>\n<style lang=\"stylus\" scoped>\n.container {\n height: 100vh;\n overflow: hidden;\n overflow-y: auto;\n}\n\n.content {\n padding-top: 50px;\n padding-bottom: 90px;\n\n .no-data {\n color: #666;\n font-size: 14px;\n }\n\n .workorder-close {\n text-align: center;\n color: #666;\n font-size: 14px;\n padding: 10px;\n }\n\n &.hide-header {\n padding-top: 0;\n }\n\n .head {\n margin: 0 10px;\n padding: 10px 0;\n border-bottom: 1px solid rgba(158, 158, 158, 0.13);\n\n .con {\n font-size: 15px;\n color: #333;\n display: flex;\n margin-bottom: 8px;\n\n span {\n flex-flow: 1;\n }\n\n span:first-child {\n flex-flow: 0;\n flex-shrink: 0;\n width: 45px;\n }\n\n i {\n font-style: normal;\n }\n }\n }\n\n .comments {\n padding: 10px;\n\n .item {\n display: flex;\n\n .avatar {\n padding-top: 10px;\n\n img {\n width: 30px;\n height: 30px;\n border-radius: 100px;\n display: block;\n }\n\n border-bottom: 1px solid rgba(158, 158, 158, 0.13);\n }\n\n .right {\n padding: 10px 5px;\n flex-grow: 1;\n border-bottom: 1px solid rgba(158, 158, 158, 0.13);\n\n .nickname {\n font-size: 15px;\n color: #333;\n }\n\n .detail {\n font-size: 15px;\n color: #333;\n margin-top: 5px;\n }\n\n .date {\n color: #999;\n font-size: 14px;\n margin-top: 5px;\n }\n }\n\n &:last-child {\n .right, .avatar {\n border-bottom: 0;\n }\n }\n }\n }\n\n .file-view {\n position: fixed;\n bottom: 80px;\n left: 0;\n right: 0;\n padding: 5px 10px;\n margin: 0 auto;\n font-size: 13px;\n color: #8bc34a;\n\n span {\n display: flex;\n align-content: center;\n align-items: center;\n\n img {\n width: 20px;\n height: 20px;\n }\n\n i {\n font-style: normal;\n margin-left: 5px;\n }\n }\n }\n\n .input-form {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n width: 100%;\n height: 80px;\n background-color: #fff;\n border-top: 1px solid rgba(158, 158, 158, 0.13);\n display: flex;\n justify-content: space-between;\n padding: 0 10px;\n box-sizing: border-box;\n align-content: center;\n align-items: center;\n\n textarea {\n height: 45px;\n flex-grow: 1;\n border-radius: 0;\n border: 0;\n color: #333;\n font-size: 14px;\n resize: none;\n }\n\n .icon-btn {\n background: url('./../assets/upload.png') center center no-repeat;\n background-size: 30px;\n width: 55px;\n height: 55px;\n overflow: hidden;\n\n input {\n display: block;\n width: 100%;\n height: 100%;\n font-size: 100px;\n opacity: 0;\n }\n }\n\n .sub-btn {\n display: block;\n width: 55px;\n height: 30px;\n color: #fff;\n line-height: 30px;\n text-align: center;\n border-radius: 3px;\n border: none;\n font-size: 14px;\n background: linear-gradient(to right, #26a2ff, #736cde);\n flex-shrink: 0;\n\n &:active {\n opacity: 0.8;\n }\n }\n }\n}\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./workorder_detail.vue?vue&type=template&id=35e99ebc&scoped=true&\"\nimport script from \"./workorder_detail.vue?vue&type=script&lang=js&\"\nexport * from \"./workorder_detail.vue?vue&type=script&lang=js&\"\nimport style0 from \"./workorder_detail.vue?vue&type=style&index=0&id=35e99ebc&lang=stylus&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35e99ebc\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=style&index=0&id=35e99ebc&lang=stylus&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=style&index=0&id=35e99ebc&lang=stylus&scoped=true&\"","module.exports = \"data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7\""],"sourceRoot":""}
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-5750b049"],{"269c":function(t,e,o){t.exports=o.p+"img/fujian1.083cd8b7.png"},"281f":function(t,e,o){},4033:function(t,e,o){"use strict";o.r(e);var s=function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("div",{staticClass:"container"},[t.isShowHeader?s("mt-header",{attrs:{fixed:"",title:"工单详细"}},[s("div",{attrs:{slot:"left"},slot:"left"},[s("mt-button",{attrs:{icon:"back"},on:{click:function(e){return t.$router.go(-1)}}})],1),3!=t.workorder.status?s("mt-button",{attrs:{slot:"right"},on:{click:function(e){return t.close()}},slot:"right"},[s("span",[t._v("关闭工单")])]):t._e()],1):t._e(),s("div",{staticClass:"content",class:{"hide-header":!t.isShowHeader}},[s("div",{staticClass:"head"},[s("div",{staticClass:"con"},[s("span",[t._v("标题:")]),s("span",[t._v(t._s(t.workorder.title))])]),s("div",{staticClass:"con"},[s("span",[t._v("内容:")]),s("span",{domProps:{innerHTML:t._s(t.workorder.content)}})]),s("div",{staticClass:"con"},[s("span",[t._v("电话:")]),s("span",[t._v(t._s(t.workorder.phone||"未预留电话号码"))])]),s("div",{staticClass:"con"},[s("span",[t._v("邮箱:")]),s("span",[t._v(t._s(t.workorder.email||"未预留邮箱"))])]),s("div",{staticClass:"con"},[s("span",[t._v("时间:")]),s("span",[t._v(t._s(t.$formatDate(t.workorder.create_at)))])]),s("div",{staticClass:"con"},[s("span",[t._v("类型:")]),s("span",[t._v(t._s(t.typeName||"---"))])]),s("div",{staticClass:"con"},[s("span",[t._v("状态:")]),s("span",[1==t.workorder.status?s("i",{staticStyle:{color:"#8bc34a"}},[t._v("已回复")]):t._e(),3==t.workorder.status?s("i",{staticStyle:{color:"#ccc"}},[t._v("已结束")]):t._e(),0==t.workorder.status?s("i",{staticStyle:{color:"#FF9800"}},[t._v("待处理")]):t._e(),2==t.workorder.status?s("i",{staticStyle:{color:"#FF9800"}},[t._v("待回复")]):t._e()])])]),s("div",{staticClass:"comments"},[t.comments.length<=0?s("div",{staticClass:"no-data"},[t._v("暂无回复内容,请您耐心等待~")]):t._l(t.comments,(function(e,o){return[s("div",{key:o,staticClass:"item"},[s("div",{staticClass:"avatar"},[0==e.aid?s("img",{attrs:{src:t.userInfo.avatar||"http://qiniu.cmp520.com/avatar_degault_3.png",alt:""}}):s("img",{attrs:{src:e.a_avatar||"http://qiniu.cmp520.com/avatar_degault_3.png",alt:""}})]),s("div",{staticClass:"right"},[0==e.aid?s("div",{staticClass:"nickname"},[t._v("我")]):s("div",{staticClass:"nickname"},[t._v(t._s(e.a_nickname))]),s("div",{staticClass:"detail",domProps:{innerHTML:t._s(e.content)}}),s("div",{staticClass:"date"},[t._v(t._s(t.$formatDate(e.create_at)))])])])]})),3==t.workorder.status?s("div",{staticClass:"workorder-close"},[t._v("工单已结束~")]):t._e()],2),""!=t.request.source||t.isShowUploadLoading?s("div",{staticClass:"file-view"},[t.isShowUploadLoading?s("span",[s("img",{attrs:{src:o("cf1c"),alt:""}}),s("i",[t._v("上传中~")])]):s("span",[s("img",{attrs:{src:o("269c"),alt:""}}),s("i",[t._v("你已成功添加附件,重新上传可替换~")])])]):t._e(),3!=t.workorder.status?s("div",{staticClass:"input-form"},[s("textarea",{directives:[{name:"model",rawName:"v-model",value:t.request.content,expression:"request.content"}],attrs:{placeholder:"请输入内容~"},domProps:{value:t.request.content},on:{blur:function(e){return t.inputBlur()},input:function(e){e.target.composing||t.$set(t.request,"content",e.target.value)}}}),s("span",{staticClass:"icon-btn"},[s("input",{attrs:{title:"添加附件",type:"file",onclick:"this.value = null"},on:{change:t.uploadFile}})]),s("span",{staticClass:"sub-btn",on:{click:function(e){return t.reply()}}},[t._v("提交")])]):t._e()])],1)},r=[],n=(o("8e6e"),o("ac6a"),o("456d"),o("bd86")),a=o("2f62"),i=o("76a0"),c=o("bc3a"),l=o.n(c);function u(t,e){var o=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),o.push.apply(o,s)}return o}function d(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?u(Object(o),!0).forEach((function(e){Object(n["a"])(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):u(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}var p={name:"workorder_detail",components:{},data:function(){return{isShowUploadLoading:!1,isSubmit:!1,workorder:{},comments:[],fileType:"",request:{source:"",content:""}}},computed:d({},Object(a["b"])(["isShowHeader","workorders","userInfo","workorderTypes","configs"]),{typeName:function(){var t=this;try{return this.workorderTypes.filter((function(e){return e.id==t.workorder.tid}))[0].title}catch(e){return console.log(e),""}}}),created:function(){var t=this;document.title="工单详细";var e=this.$route.params.id;this.$store.commit("updateState",{isShowPageLoading:!0}),l.a.all([this.getWorkOrder(e),this.getComments(e)]).then(l.a.spread((function(){t.$store.commit("updateState",{isShowPageLoading:!1})})))},methods:{getWorkOrder:function(t){var e=this;return l.a.get("/public/workorder/"+t).then((function(t){e.workorder=t.data.data,setTimeout((function(){return e.$previewRefresh()}),200)})).catch((function(t){console.log(t)}))},getComments:function(t){var e=this;return l.a.get("/public/workorder/comments/"+t).then((function(t){null!=t.data.data&&(e.comments=t.data.data,setTimeout((function(){return e.$previewRefresh()}),200))})).catch((function(t){console.log(t)}))},reply:function(){var t=this,e=this.request.content+this.request.source;if(""!=e.trim()){if(!this.isSubmit){this.isSubmit=!0;var o=this.workorder.id;l.a.post("/public/workorder/reply",{wid:o,content:e}).then((function(e){t.isSubmit=!1,console.log(e),t.getComments(o),t.request={source:"",content:""},setTimeout((function(){var t=document.querySelector(".container").clientHeight,e=document.querySelector(".content").clientHeight;document.querySelector(".container").scrollTop=e-t+20}),500)})).catch((function(e){t.isSubmit=!1,console.log(e),Object(i["Toast"])({message:"提交失败~"})}))}}else Object(i["Toast"])({message:"请输入内容~"})},inputBlur:function(){setTimeout((function(){document.body.scrollTo=0,window.scrollTo(0,0)}),100)},uploadFile:function(t){var e=t.target,o=e.files[0];this.isShowUploadLoading=!0;var s=this;this.$uploadFile({file:o,secret:s.configs.upload_secret,mode:this.configs.upload_mode,percent:function(){},success:function(t){var e;s.isShowUploadLoading=!1;var o=s.configs.upload_host+"/"+t,r=t.substr(t.lastIndexOf(".")+1);-1!="jpg,jpeg,png,JPG,JPEG,PNG".indexOf(r)?e="<br><img style='max-width:45%;margin-top:5px;' preview='1' src='"+o+"' />":(e="<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />",e+="<a target='_blank' style='color: #2e9dfc;' href='"+o+"'>下载附件</a>"),s.request.source=e,Object(i["Toast"])({message:"上传成功~"})},fail:function(t){s.isShowUploadLoading=!1,t.response&&t.response.data&&Object(i["Toast"])({message:t.response.data.message})}})},close:function(){var t=this,e=this.workorder.id;i["MessageBox"].confirm("您确定关闭该工单吗?").then((function(){l.a.put("/public/workorder/close/"+e).then((function(o){console.log(o),Object(i["Toast"])({message:"工单已关闭~"}),t.getWorkOrder(e)})).catch((function(t){Object(i["Toast"])({message:"工单关闭失败~"}),console.log(t)}))}))},del:function(){var t=this,e=this.workorder.id;i["MessageBox"].confirm("您确定删除该工单吗?").then((function(){l.a.delete("/public/workorder/"+e).then((function(e){console.log(e),Object(i["Toast"])({message:"工单已删除~"}),setTimeout((function(){return t.$router.go(-1)}))})).catch((function(t){Object(i["Toast"])({message:"工单关闭失败~"}),console.log(t)}))}))}}},A=p,g=(o("cb38"),o("2877")),m=Object(g["a"])(A,s,r,!1,null,"35e99ebc",null);e["default"]=m.exports},cb38:function(t,e,o){"use strict";var s=o("281f"),r=o.n(s);r.a},cf1c:function(t,e){t.exports="data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7"}}]);
//# sourceMappingURL=chunk-5750b049.9b99e61d.js.map
\ No newline at end of file
//# sourceMappingURL=chunk-5750b049.b7cee639.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/assets/fujian1.png","webpack:///./src/views/workorder_detail.vue?4100","webpack:///src/views/workorder_detail.vue","webpack:///./src/views/workorder_detail.vue?9869","webpack:///./src/views/workorder_detail.vue","webpack:///./src/views/workorder_detail.vue?eb69","webpack:///./src/assets/loading.gif"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","on","$event","$router","go","workorder","status","close","_v","_e","class","isShowHeader","_s","title","domProps","content","phone","email","$formatDate","create_at","typeName","staticStyle","comments","length","_l","item","index","key","aid","userInfo","avatar","a_avatar","a_nickname","request","source","isShowUploadLoading","directives","name","rawName","value","expression","inputBlur","target","composing","$set","uploadFile","reply","staticRenderFns","components","data","isSubmit","fileType","computed","console","log","e","created","document","$store","commit","methods","getWorkOrder","getComments","trim","message","setTimeout","body","scrollTo","window","fileDom","file","files","$uploadFile","secret","self","configs","upload_secret","mode","upload_mode","percent","success","html","fullPath","upload_host","src","substr","lastIndexOf","indexOf","fail","response","wid","id","del","component"],"mappings":"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","file":"js/chunk-5750b049.b7cee639.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/fujian1.083cd8b7.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.isShowHeader)?_c('mt-header',{attrs:{\"fixed\":\"\",\"title\":\"工单详细\"}},[_c('div',{attrs:{\"slot\":\"left\"},slot:\"left\"},[_c('mt-button',{attrs:{\"icon\":\"back\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}})],1),(_vm.workorder.status != 3)?_c('mt-button',{attrs:{\"slot\":\"right\"},on:{\"click\":function($event){return _vm.close()}},slot:\"right\"},[_c('span',[_vm._v(\"关闭工单\")])]):_vm._e()],1):_vm._e(),_c('div',{staticClass:\"content\",class:{'hide-header': !_vm.isShowHeader}},[_c('div',{staticClass:\"head\"},[_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"标题:\")]),_c('span',[_vm._v(_vm._s(_vm.workorder.title))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"内容:\")]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.workorder.content)}})]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"电话:\")]),_c('span',[_vm._v(_vm._s(_vm.workorder.phone || '未预留电话号码'))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"邮箱:\")]),_c('span',[_vm._v(_vm._s(_vm.workorder.email || '未预留邮箱'))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"时间:\")]),_c('span',[_vm._v(_vm._s(_vm.$formatDate(_vm.workorder.create_at)))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"类型:\")]),_c('span',[_vm._v(_vm._s(_vm.typeName || \"---\"))])]),_c('div',{staticClass:\"con\"},[_c('span',[_vm._v(\"状态:\")]),_c('span',[(_vm.workorder.status == 1)?_c('i',{staticStyle:{\"color\":\"#8bc34a\"}},[_vm._v(\"已回复\")]):_vm._e(),(_vm.workorder.status == 3)?_c('i',{staticStyle:{\"color\":\"#ccc\"}},[_vm._v(\"已结束\")]):_vm._e(),(_vm.workorder.status == 0)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待处理\")]):_vm._e(),(_vm.workorder.status == 2)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待回复\")]):_vm._e()])])]),_c('div',{staticClass:\"comments\"},[(_vm.comments.length <= 0)?_c('div',{staticClass:\"no-data\"},[_vm._v(\"暂无回复内容,请您耐心等待~\")]):_vm._l((_vm.comments),function(item,index){return [_c('div',{key:index,staticClass:\"item\"},[_c('div',{staticClass:\"avatar\"},[(item.aid == 0)?_c('img',{attrs:{\"src\":_vm.userInfo.avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png',\"alt\":\"\"}}):_c('img',{attrs:{\"src\":item.a_avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png',\"alt\":\"\"}})]),_c('div',{staticClass:\"right\"},[(item.aid == 0)?_c('div',{staticClass:\"nickname\"},[_vm._v(\"我\")]):_c('div',{staticClass:\"nickname\"},[_vm._v(_vm._s(item.a_nickname))]),_c('div',{staticClass:\"detail\",domProps:{\"innerHTML\":_vm._s(item.content)}}),_c('div',{staticClass:\"date\"},[_vm._v(_vm._s(_vm.$formatDate(item.create_at)))])])])]}),(_vm.workorder.status == 3)?_c('div',{staticClass:\"workorder-close\"},[_vm._v(\"工单已结束~\")]):_vm._e()],2),(_vm.request.source != '' || _vm.isShowUploadLoading)?_c('div',{staticClass:\"file-view\"},[(_vm.isShowUploadLoading)?_c('span',[_c('img',{attrs:{\"src\":require(\"./../assets/loading.gif\"),\"alt\":\"\"}}),_c('i',[_vm._v(\"上传中~\")])]):_c('span',[_c('img',{attrs:{\"src\":require(\"./../assets/fujian1.png\"),\"alt\":\"\"}}),_c('i',[_vm._v(\"你已成功添加附件,重新上传可替换~\")])])]):_vm._e(),(_vm.workorder.status != 3)?_c('div',{staticClass:\"input-form\"},[_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.request.content),expression:\"request.content\"}],attrs:{\"placeholder\":\"请输入内容~\"},domProps:{\"value\":(_vm.request.content)},on:{\"blur\":function($event){return _vm.inputBlur()},\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.request, \"content\", $event.target.value)}}}),_c('span',{staticClass:\"icon-btn\"},[_c('input',{attrs:{\"title\":\"添加附件\",\"type\":\"file\",\"onclick\":\"this.value = null\"},on:{\"change\":_vm.uploadFile}})]),_c('span',{staticClass:\"sub-btn\",on:{\"click\":function($event){return _vm.reply()}}},[_vm._v(\"提交\")])]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"container\">\n <mt-header v-if=\"isShowHeader\" fixed title=\"工单详细\">\n <div slot=\"left\">\n <mt-button @click=\"$router.go(-1)\" icon=\"back\"></mt-button>\n </div>\n <mt-button @click=\"close()\" v-if=\"workorder.status != 3\" slot=\"right\">\n <span>关闭工单</span>\n </mt-button>\n <!-- <mt-button @click=\"del()\" v-else slot=\"right\">\n <span>删除</span>\n </mt-button> -->\n </mt-header>\n <div class=\"content\" :class=\"{'hide-header': !isShowHeader}\">\n <div class=\"head\">\n <div class=\"con\">\n <span>标题:</span>\n <span>{{workorder.title}}</span>\n </div>\n <div class=\"con\">\n <span>内容:</span>\n <span v-html=\"workorder.content\"></span>\n </div>\n <div class=\"con\">\n <span>电话:</span>\n <span>{{workorder.phone || '未预留电话号码'}}</span>\n </div>\n <div class=\"con\">\n <span>邮箱:</span>\n <span>{{workorder.email || '未预留邮箱'}}</span>\n </div>\n <div class=\"con\">\n <span>时间:</span>\n <span>{{$formatDate(workorder.create_at)}}</span>\n </div>\n <div class=\"con\">\n <span>类型:</span>\n <span>{{typeName || \"---\"}}</span>\n </div>\n <div class=\"con\">\n <span>状态:</span>\n <span>\n <i v-if=\"workorder.status == 1\" style=\"color:#8bc34a;\">已回复</i>\n <i v-if=\"workorder.status == 3\" style=\"color:#ccc\">已结束</i>\n <i v-if=\"workorder.status == 0\" style=\"color:#FF9800\">待处理</i>\n <i v-if=\"workorder.status == 2\" style=\"color:#FF9800\">待回复</i>\n </span>\n </div>\n </div>\n <div class=\"comments\">\n <div class=\"no-data\" v-if=\"comments.length <= 0\">暂无回复内容,请您耐心等待~</div>\n <template v-else v-for=\"(item,index) in comments\">\n <div :key=\"index\" class=\"item\">\n <div class=\"avatar\">\n <img\n v-if=\"item.aid == 0\"\n :src=\"userInfo.avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png'\"\n alt\n />\n <img v-else :src=\"item.a_avatar || 'http://qiniu.cmp520.com/avatar_degault_3.png'\" alt />\n </div>\n <div class=\"right\">\n <div class=\"nickname\" v-if=\"item.aid == 0\">我</div>\n <div class=\"nickname\" v-else>{{item.a_nickname}}</div>\n <div class=\"detail\" v-html=\"item.content\"></div>\n <div class=\"date\">{{$formatDate(item.create_at)}}</div>\n </div>\n </div>\n </template>\n <div class=\"workorder-close\" v-if=\"workorder.status == 3\">工单已结束~</div>\n </div>\n <div class=\"file-view\" v-if=\"request.source != '' || isShowUploadLoading\">\n <span v-if=\"isShowUploadLoading\">\n <img src=\"./../assets/loading.gif\" alt />\n <i>上传中~</i>\n </span>\n <span v-else>\n <img src=\"./../assets/fujian1.png\" alt />\n <i>你已成功添加附件,重新上传可替换~</i>\n </span>\n </div>\n <div class=\"input-form\" v-if=\"workorder.status != 3\">\n <textarea v-model=\"request.content\" @blur=\"inputBlur()\" placeholder=\"请输入内容~\"></textarea>\n <span class=\"icon-btn\">\n <input title=\"添加附件\" type=\"file\" @change=\"uploadFile\" onclick=\"this.value = null\" />\n </span>\n <span class=\"sub-btn\" @click=\"reply()\">提交</span>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters } from \"vuex\";\nimport { Toast, MessageBox } from \"mint-ui\";\nimport axios from \"axios\";\nexport default {\n name: \"workorder_detail\",\n components: {},\n data() {\n return {\n isShowUploadLoading: false,\n isSubmit: false,\n workorder: {},\n comments: [],\n fileType: \"\",\n request: {\n source: \"\",\n content: \"\"\n }\n };\n },\n computed: {\n ...mapGetters([\n \"isShowHeader\",\n \"workorders\",\n \"userInfo\",\n \"workorderTypes\",\n \"configs\"\n ]),\n typeName(){\n try{\n return this.workorderTypes.filter((i)=>i.id == this.workorder.tid)[0].title\n }catch(e){\n console.log(e)\n return \"\"\n }\n }\n },\n created() {\n document.title = \"工单详细\";\n const id = this.$route.params.id;\n this.$store.commit(\"updateState\", { isShowPageLoading: true });\n axios.all([this.getWorkOrder(id), this.getComments(id)]).then(\n axios.spread(() => {\n this.$store.commit(\"updateState\", { isShowPageLoading: false });\n })\n );\n },\n methods: {\n getWorkOrder(id) {\n return axios\n .get(\"/public/workorder/\" + id)\n .then(response => {\n this.workorder = response.data.data;\n setTimeout(()=>this.$previewRefresh(), 200)\n })\n .catch(error => {\n console.log(error);\n });\n },\n getComments(id) {\n return axios\n .get(\"/public/workorder/comments/\" + id)\n .then(response => {\n if (response.data.data == null) return;\n this.comments = response.data.data;\n setTimeout(()=>this.$previewRefresh(), 200)\n })\n .catch(error => {\n console.log(error);\n });\n },\n reply() {\n const content = this.request.content + this.request.source;\n if (content.trim() == \"\") {\n Toast({\n message: \"请输入内容~\"\n });\n return;\n }\n if (this.isSubmit) return;\n this.isSubmit = true;\n const wid = this.workorder.id;\n axios\n .post(\"/public/workorder/reply\", { wid, content })\n .then(response => {\n this.isSubmit = false\n console.log(response);\n this.getComments(wid);\n this.request = {\n source: \"\",\n content: \"\"\n };\n setTimeout(()=>{\n var sBoxHeight = document.querySelector(\".container\").clientHeight\n var sHeight = document.querySelector(\".content\").clientHeight\n document.querySelector(\".container\").scrollTop = sHeight - sBoxHeight + 20\n }, 500)\n })\n .catch(error => {\n this.isSubmit = false\n console.log(error);\n Toast({\n message: \"提交失败~\"\n });\n });\n },\n inputBlur() {\n setTimeout(() => {\n document.body.scrollTo = 0;\n window.scrollTo(0, 0);\n }, 100);\n },\n uploadFile(e) {\n var fileDom = e.target;\n var file = fileDom.files[0];\n this.isShowUploadLoading = true;\n const self = this;\n this.$uploadFile({\n file,\n secret: self.configs.upload_secret,\n mode: this.configs.upload_mode,\n // 七牛才会执行\n percent() {},\n success(src) {\n\n self.isShowUploadLoading = false;\n var html\n var fullPath = self.configs.upload_host + \"/\" + src;\n var fileType = src.substr(src.lastIndexOf(\".\") + 1);\n if (\"jpg,jpeg,png,JPG,JPEG,PNG\".indexOf(fileType) != -1) {\n html = \"<br><img style='max-width:45%;margin-top:5px;' preview='1' src='\" + fullPath + \"' />\"\n }else{\n html = \"<br><img style='width:20px;height:20px;top:3px; right:3px;position: relative;' preview='1' src='http://qiniu.cmp520.com/fj.png' />\"\n html += \"<a target='_blank' style='color: #2e9dfc;' href='\"+fullPath+\"'>下载附件</a>\"\n }\n self.request.source = html\n Toast({\n message: \"上传成功~\"\n });\n },\n fail(e) {\n self.isShowUploadLoading = false;\n if (e.response && e.response.data) {\n Toast({\n message: e.response.data.message\n });\n return;\n }\n }\n });\n },\n close() {\n var wid = this.workorder.id;\n MessageBox.confirm(\"您确定关闭该工单吗?\").then(() => {\n axios\n .put(\"/public/workorder/close/\" + wid)\n .then(response => {\n console.log(response);\n Toast({\n message: \"工单已关闭~\"\n });\n this.getWorkOrder(wid);\n })\n .catch(error => {\n Toast({\n message: \"工单关闭失败~\"\n });\n console.log(error);\n });\n });\n },\n del() {\n var wid = this.workorder.id;\n MessageBox.confirm(\"您确定删除该工单吗?\").then(() => {\n axios\n .delete(\"/public/workorder/\" + wid)\n .then(response => {\n console.log(response);\n Toast({\n message: \"工单已删除~\"\n });\n setTimeout(() => this.$router.go(-1));\n })\n .catch(error => {\n Toast({\n message: \"工单关闭失败~\"\n });\n console.log(error);\n });\n });\n }\n }\n};\n</script>\n<style lang=\"stylus\" scoped>\n.container {\n height: 100vh;\n overflow: hidden;\n overflow-y: auto;\n}\n\n.content {\n padding-top: 50px;\n padding-bottom: 90px;\n\n .no-data {\n color: #666;\n font-size: 14px;\n }\n\n .workorder-close {\n text-align: center;\n color: #666;\n font-size: 14px;\n padding: 10px;\n }\n\n &.hide-header {\n padding-top: 0;\n }\n\n .head {\n margin: 0 10px;\n padding: 10px 0;\n border-bottom: 1px solid rgba(158, 158, 158, 0.13);\n\n .con {\n font-size: 15px;\n color: #333;\n display: flex;\n margin-bottom: 8px;\n\n span {\n flex-flow: 1;\n }\n\n span:first-child {\n flex-flow: 0;\n flex-shrink: 0;\n width: 45px;\n }\n\n i {\n font-style: normal;\n }\n }\n }\n\n .comments {\n padding: 10px;\n\n .item {\n display: flex;\n\n .avatar {\n padding-top: 10px;\n\n img {\n width: 30px;\n height: 30px;\n border-radius: 100px;\n display: block;\n }\n\n border-bottom: 1px solid rgba(158, 158, 158, 0.13);\n }\n\n .right {\n padding: 10px 5px;\n flex-grow: 1;\n border-bottom: 1px solid rgba(158, 158, 158, 0.13);\n\n .nickname {\n font-size: 15px;\n color: #333;\n }\n\n .detail {\n font-size: 15px;\n color: #333;\n margin-top: 5px;\n }\n\n .date {\n color: #999;\n font-size: 14px;\n margin-top: 5px;\n }\n }\n\n &:last-child {\n .right, .avatar {\n border-bottom: 0;\n }\n }\n }\n }\n\n .file-view {\n position: fixed;\n bottom: 80px;\n left: 0;\n right: 0;\n padding: 5px 10px;\n margin: 0 auto;\n font-size: 13px;\n color: #8bc34a;\n\n span {\n display: flex;\n align-content: center;\n align-items: center;\n\n img {\n width: 20px;\n height: 20px;\n }\n\n i {\n font-style: normal;\n margin-left: 5px;\n }\n }\n }\n\n .input-form {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0 auto;\n width: 100%;\n height: 80px;\n background-color: #fff;\n border-top: 1px solid rgba(158, 158, 158, 0.13);\n display: flex;\n justify-content: space-between;\n padding: 0 10px;\n box-sizing: border-box;\n align-content: center;\n align-items: center;\n\n textarea {\n height: 45px;\n flex-grow: 1;\n border-radius: 0;\n border: 0;\n color: #333;\n font-size: 14px;\n resize: none;\n }\n\n .icon-btn {\n background: url('./../assets/upload.png') center center no-repeat;\n background-size: 30px;\n width: 55px;\n height: 55px;\n overflow: hidden;\n\n input {\n display: block;\n width: 100%;\n height: 100%;\n font-size: 100px;\n opacity: 0;\n }\n }\n\n .sub-btn {\n display: block;\n width: 55px;\n height: 30px;\n color: #fff;\n line-height: 30px;\n text-align: center;\n border-radius: 3px;\n border: none;\n font-size: 14px;\n background: linear-gradient(to right, #26a2ff, #736cde);\n flex-shrink: 0;\n\n &:active {\n opacity: 0.8;\n }\n }\n }\n}\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./workorder_detail.vue?vue&type=template&id=35e99ebc&scoped=true&\"\nimport script from \"./workorder_detail.vue?vue&type=script&lang=js&\"\nexport * from \"./workorder_detail.vue?vue&type=script&lang=js&\"\nimport style0 from \"./workorder_detail.vue?vue&type=style&index=0&id=35e99ebc&lang=stylus&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35e99ebc\",\n null\n \n)\n\nexport default component.exports","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=style&index=0&id=35e99ebc&lang=stylus&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder_detail.vue?vue&type=style&index=0&id=35e99ebc&lang=stylus&scoped=true&\"","module.exports = \"data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7\""],"sourceRoot":""}
\ No newline at end of file
......@@ -5,4 +5,4 @@
* Released under the MIT License.
*/
function a(t,i){for(;i+1<t.length;i++)t[i]=t[i+1];t.pop()}var h=function(){function t(t,i){var e=[],s=!0,o=!1,n=void 0;try{for(var r,a=t[Symbol.iterator]();!(s=(r=a.next()).done);s=!0)if(e.push(r.value),i&&e.length===i)break}catch(h){o=!0,n=h}finally{try{!s&&a["return"]&&a["return"]()}finally{if(o)throw n}}return e}return function(i,e){if(Array.isArray(i))return i;if(Symbol.iterator in Object(i))return t(i,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),l=function(t){if(Array.isArray(t)){for(var i=0,e=Array(t.length);i<t.length;i++)e[i]=t[i];return e}return Array.from(t)};function c(t){t.prototype.on=function(t,i){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this;this._events[t]||(this._events[t]=[]),this._events[t].push([i,e])},t.prototype.once=function(t,i){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this;function s(){this.off(t,s),i.apply(e,arguments)}s.fn=i,this.on(t,s)},t.prototype.off=function(t,i){var e=this._events[t];if(e){var s=e.length;while(s--)(e[s][0]===i||e[s][0]&&e[s][0].fn===i)&&a(e,s)}},t.prototype.trigger=function(t){var i=this._events[t];if(i)for(var e=i.length,s=[].concat(l(i)),o=0;o<e;o++){var n=s[o],r=h(n,2),a=r[0],c=r[1];a&&a.apply(c,[].slice.call(arguments,1))}}}var p="undefined"!==typeof window,u=p&&navigator.userAgent.toLowerCase(),d=u&&/wechatdevtools/.test(u),m=u&&u.indexOf("android")>0;function f(){return window.performance&&window.performance.now?window.performance.now()+window.performance.timing.navigationStart:+new Date}function g(t){for(var i=arguments.length,e=Array(i>1?i-1:0),s=1;s<i;s++)e[s-1]=arguments[s];for(var o=0;o<e.length;o++){var n=e[o];for(var r in n)t[r]=n[r]}return t}function v(t){return void 0===t||null===t}function y(t,i){return Math.sqrt(t*t+i*i)}var w=p&&document.createElement("div").style,b=function(){if(!p)return!1;var t={standard:"transform",webkit:"webkitTransform",Moz:"MozTransform",O:"OTransform",ms:"msTransform"};for(var i in t)if(void 0!==w[t[i]])return i;return!1}();function A(t){return!1!==b&&("standard"===b?"transitionEnd"===t?"transitionend":t:b+t.charAt(0).toUpperCase()+t.substr(1))}function S(t,i,e,s){t.addEventListener(i,e,{passive:!1,capture:!!s})}function _(t,i,e,s){t.removeEventListener(i,e,{passive:!1,capture:!!s})}function T(t){var i=0,e=0;while(t)i-=t.offsetLeft,e-=t.offsetTop,t=t.offsetParent;return{left:i,top:e}}function x(t){var i=t.getBoundingClientRect();return{left:-(i.left+window.pageXOffset),top:-(i.top+window.pageYOffset)}}var M=b&&"standard"!==b?"-"+b.toLowerCase()+"-":"",I=A("transform"),k=A("transition"),P=p&&A("perspective")in w,Y=p&&("ontouchstart"in window||d),E=!1!==I,C=p&&k in w,X={transform:I,transition:k,transitionTimingFunction:A("transitionTimingFunction"),transitionDuration:A("transitionDuration"),transitionDelay:A("transitionDelay"),transformOrigin:A("transformOrigin"),transitionEnd:A("transitionEnd")},D=1,L=2,O={touchstart:D,touchmove:D,touchend:D,mousedown:L,mousemove:L,mouseup:L};function B(t){if(t instanceof window.SVGElement){var i=t.getBoundingClientRect();return{top:i.top,left:i.left,width:i.width,height:i.height}}return{top:t.offsetTop,left:t.offsetLeft,width:t.offsetWidth,height:t.offsetHeight}}function H(t,i){for(var e in i)if(i[e].test(t[e]))return!0;return!1}function W(t,i){var e=document.createEvent("Event");e.initEvent(i,!0,!0),e.pageX=t.pageX,e.pageY=t.pageY,t.target.dispatchEvent(e)}function z(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"click",e=void 0;"mouseup"===t.type||"mousecancel"===t.type?e=t:"touchend"!==t.type&&"touchcancel"!==t.type||(e=t.changedTouches[0]);var s={};e&&(s.screenX=e.screenX||0,s.screenY=e.screenY||0,s.clientX=e.clientX||0,s.clientY=e.clientY||0);var o=void 0,n=!0,r=!0;if("undefined"!==typeof MouseEvent)try{o=new MouseEvent(i,g({bubbles:n,cancelable:r},s))}catch(t){a()}else a();function a(){o=document.createEvent("Event"),o.initEvent(i,n,r),g(o,s)}o.forwardedTouchEvent=!0,o._constructed=!0,t.target.dispatchEvent(o)}function N(t){z(t,"dblclick")}function F(t,i){i.firstChild?R(t,i.firstChild):i.appendChild(t)}function R(t,i){i.parentNode.insertBefore(t,i)}function U(t,i){t.removeChild(i)}var V={startX:0,startY:0,scrollX:!1,scrollY:!0,freeScroll:!1,directionLockThreshold:5,eventPassthrough:"",click:!1,tap:!1,bounce:!0,bounceTime:800,momentum:!0,momentumLimitTime:300,momentumLimitDistance:15,swipeTime:2500,swipeBounceTime:500,deceleration:.0015,flickLimitTime:200,flickLimitDistance:100,resizePolling:60,probeType:0,preventDefault:!0,preventDefaultException:{tagName:/^(INPUT|TEXTAREA|BUTTON|SELECT|AUDIO)$/},HWCompositing:!0,useTransition:!0,useTransform:!0,bindToWrapper:!1,disableMouse:Y,disableTouch:!Y,observeDOM:!0,autoBlur:!0,wheel:!1,snap:!1,scrollbar:!1,pullDownRefresh:!1,pullUpLoad:!1,mouseWheel:!1,stopPropagation:!1,zoom:!1,infinity:!1,dblclick:!1};function j(t){t.prototype._init=function(t){this._handleOptions(t),this._events={},this.x=0,this.y=0,this.directionX=0,this.directionY=0,this.setScale(1),this._addDOMEvents(),this._initExtFeatures(),this._watchTransition(),this.options.observeDOM&&this._initDOMObserver(),this.options.autoBlur&&this._handleAutoBlur(),this.refresh(),this.options.snap||this.scrollTo(this.options.startX,this.options.startY),this.enable()},t.prototype.setScale=function(t){this.lastScale=v(this.scale)?t:this.scale,this.scale=t},t.prototype._handleOptions=function(t){this.options=g({},V,t),this.translateZ=this.options.HWCompositing&&P?" translateZ(0)":"",this.options.useTransition=this.options.useTransition&&C,this.options.useTransform=this.options.useTransform&&E,this.options.preventDefault=!this.options.eventPassthrough&&this.options.preventDefault,this.options.scrollX="horizontal"!==this.options.eventPassthrough&&this.options.scrollX,this.options.scrollY="vertical"!==this.options.eventPassthrough&&this.options.scrollY,this.options.freeScroll=this.options.freeScroll&&!this.options.eventPassthrough,this.options.directionLockThreshold=this.options.eventPassthrough?0:this.options.directionLockThreshold,!0===this.options.tap&&(this.options.tap="tap")},t.prototype._addDOMEvents=function(){var t=S;this._handleDOMEvents(t)},t.prototype._removeDOMEvents=function(){var t=_;this._handleDOMEvents(t)},t.prototype._handleDOMEvents=function(t){var i=this.options.bindToWrapper?this.wrapper:window;t(window,"orientationchange",this),t(window,"resize",this),this.options.click&&t(this.wrapper,"click",this,!0),this.options.disableMouse||(t(this.wrapper,"mousedown",this),t(i,"mousemove",this),t(i,"mousecancel",this),t(i,"mouseup",this)),Y&&!this.options.disableTouch&&(t(this.wrapper,"touchstart",this),t(i,"touchmove",this),t(i,"touchcancel",this),t(i,"touchend",this)),t(this.scroller,X.transitionEnd,this)},t.prototype._initExtFeatures=function(){this.options.snap&&this._initSnap(),this.options.scrollbar&&this._initScrollbar(),this.options.pullUpLoad&&this._initPullUp(),this.options.pullDownRefresh&&this._initPullDown(),this.options.wheel&&this._initWheel(),this.options.mouseWheel&&this._initMouseWheel(),this.options.zoom&&this._initZoom(),this.options.infinity&&this._initInfinite()},t.prototype._watchTransition=function(){if("function"===typeof Object.defineProperty){var t=this,i=!1,e=this.options.useTransition?"isInTransition":"isAnimating";Object.defineProperty(this,e,{get:function(){return i},set:function(e){i=e;for(var s=t.scroller.children.length?t.scroller.children:[t.scroller],o=i&&!t.pulling?"none":"auto",n=0;n<s.length;n++)s[n].style.pointerEvents=o}})}},t.prototype._handleAutoBlur=function(){this.on("scrollStart",(function(){var t=document.activeElement;!t||"INPUT"!==t.tagName&&"TEXTAREA"!==t.tagName||t.blur()}))},t.prototype._initDOMObserver=function(){var t=this;if("undefined"!==typeof MutationObserver){var i=void 0,e=new MutationObserver((function(e){if(!t._shouldNotRefresh()){for(var s=!1,o=!1,n=0;n<e.length;n++){var r=e[n];if("attributes"!==r.type){s=!0;break}if(r.target!==t.scroller){o=!0;break}}s?t.refresh():o&&(clearTimeout(i),i=setTimeout((function(){t._shouldNotRefresh()||t.refresh()}),60))}})),s={attributes:!0,childList:!0,subtree:!0};e.observe(this.scroller,s),this.on("destroy",(function(){e.disconnect()}))}else this._checkDOMUpdate()},t.prototype._shouldNotRefresh=function(){var t=this.x>this.minScrollX||this.x<this.maxScrollX||this.y>this.minScrollY||this.y<this.maxScrollY;return this.isInTransition||this.stopFromTransition||t},t.prototype._checkDOMUpdate=function(){var t=B(this.scroller),i=t.width,e=t.height;function s(){if(!this.destroyed){t=B(this.scroller);var s=t.width,n=t.height;i===s&&e===n||this.refresh(),i=s,e=n,o.call(this)}}function o(){var t=this;setTimeout((function(){s.call(t)}),1e3)}o.call(this)},t.prototype.handleEvent=function(t){switch(t.type){case"touchstart":case"mousedown":this._start(t),this.options.zoom&&t.touches&&t.touches.length>1&&this._zoomStart(t);break;case"touchmove":case"mousemove":this.options.zoom&&t.touches&&t.touches.length>1?this._zoom(t):this._move(t);break;case"touchend":case"mouseup":case"touchcancel":case"mousecancel":this.scaled?this._zoomEnd(t):this._end(t);break;case"orientationchange":case"resize":this._resize();break;case"transitionend":case"webkitTransitionEnd":case"oTransitionEnd":case"MSTransitionEnd":this._transitionEnd(t);break;case"click":this.enabled&&!t._constructed&&(H(t.target,this.options.preventDefaultException)||(t.preventDefault(),t.stopPropagation()));break;case"wheel":case"DOMMouseScroll":case"mousewheel":this._onMouseWheel(t);break}},t.prototype.refresh=function(){var t="static"===window.getComputedStyle(this.wrapper,null).position,i=B(this.wrapper);this.wrapperWidth=i.width,this.wrapperHeight=i.height;var e=B(this.scroller);this.scrollerWidth=Math.round(e.width*this.scale),this.scrollerHeight=Math.round(e.height*this.scale),this.relativeX=e.left,this.relativeY=e.top,t&&(this.relativeX-=i.left,this.relativeY-=i.top),this.minScrollX=0,this.minScrollY=0;var s=this.options.wheel;s?(this.items=this.scroller.children,this._checkWheelAllDisabled(),this.options.itemHeight=this.itemHeight=this.items.length?this.scrollerHeight/this.items.length:0,void 0===this.selectedIndex&&(this.selectedIndex=s.selectedIndex||0),this.options.startY=-this.selectedIndex*this.itemHeight,this.maxScrollX=0,this.maxScrollY=-this.itemHeight*(this.items.length-1)):(this.maxScrollX=this.wrapperWidth-this.scrollerWidth,this.options.infinity||(this.maxScrollY=this.wrapperHeight-this.scrollerHeight),this.maxScrollX<0?(this.maxScrollX-=this.relativeX,this.minScrollX=-this.relativeX):this.scale>1&&(this.maxScrollX=this.maxScrollX/2-this.relativeX,this.minScrollX=this.maxScrollX),this.maxScrollY<0?(this.maxScrollY-=this.relativeY,this.minScrollY=-this.relativeY):this.scale>1&&(this.maxScrollY=this.maxScrollY/2-this.relativeY,this.minScrollY=this.maxScrollY)),this.hasHorizontalScroll=this.options.scrollX&&this.maxScrollX<this.minScrollX,this.hasVerticalScroll=this.options.scrollY&&this.maxScrollY<this.minScrollY,this.hasHorizontalScroll||(this.maxScrollX=this.minScrollX,this.scrollerWidth=this.wrapperWidth),this.hasVerticalScroll||(this.maxScrollY=this.minScrollY,this.scrollerHeight=this.wrapperHeight),this.endTime=0,this.directionX=0,this.directionY=0,this.wrapperOffset=T(this.wrapper),this.trigger("refresh"),!this.scaled&&this.resetPosition()},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1}}var K={swipe:{style:"cubic-bezier(0.23, 1, 0.32, 1)",fn:function(t){return 1+--t*t*t*t*t}},swipeBounce:{style:"cubic-bezier(0.25, 0.46, 0.45, 0.94)",fn:function(t){return t*(2-t)}},bounce:{style:"cubic-bezier(0.165, 0.84, 0.44, 1)",fn:function(t){return 1- --t*t*t*t}}};function Q(t,i,e,s,o,n,r,a){var h=t-i,l=Math.abs(h)/e,c=r.deceleration,p=r.itemHeight,u=r.swipeBounceTime,d=r.wheel,m=r.swipeTime,f=m,g=d?4:15,v=t+l/c*(h<0?-1:1);return d&&p&&(v=a._findNearestValidWheel(v).y),v<s?(v=n?Math.max(s-n/4,s-n/g*l):s,f=u):v>o&&(v=n?Math.min(o+n/4,o+n/g*l):o,f=u),{destination:Math.round(v),duration:f}}var $=100/60;function G(){}var q=function(){return p?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||function(t){return window.setTimeout(t,(t.interval||$)/2)}:G}(),J=function(){return p?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||window.oCancelAnimationFrame||function(t){window.clearTimeout(t)}:G}(),Z=1,tt=-1,it=1,et=-1,st=1,ot=3;function nt(t){console.error("[BScroll warn]: "+t)}function rt(t,i){if(!t)throw new Error("[BScroll] "+i)}function at(t){t.prototype._start=function(t){var i=O[t.type];if((i===D||0===t.button)&&!(!this.enabled||this.destroyed||this.initiated&&this.initiated!==i)){this.initiated=i,this.options.preventDefault&&!H(t.target,this.options.preventDefaultException)&&t.preventDefault(),this.options.stopPropagation&&t.stopPropagation(),this.moved=!1,this.distX=0,this.distY=0,this.directionX=0,this.directionY=0,this.movingDirectionX=0,this.movingDirectionY=0,this.directionLocked=0,this._transitionTime(),this.startTime=f(),this.options.wheel&&(this.target=t.target),this.stop();var e=t.touches?t.touches[0]:t;this.startX=this.x,this.startY=this.y,this.absStartX=this.x,this.absStartY=this.y,this.pointX=e.pageX,this.pointY=e.pageY,this.trigger("beforeScrollStart")}},t.prototype._move=function(t){if(this.enabled&&!this.destroyed&&O[t.type]===this.initiated){this.options.preventDefault&&t.preventDefault(),this.options.stopPropagation&&t.stopPropagation();var i=t.touches?t.touches[0]:t,e=i.pageX-this.pointX,s=i.pageY-this.pointY;this.pointX=i.pageX,this.pointY=i.pageY,this.distX+=e,this.distY+=s;var o=Math.abs(this.distX),n=Math.abs(this.distY),r=f();if(!(r-this.endTime>this.options.momentumLimitTime&&!this.moved&&n<this.options.momentumLimitDistance&&o<this.options.momentumLimitDistance)){if(this.directionLocked||this.options.freeScroll||(o>n+this.options.directionLockThreshold?this.directionLocked="h":n>=o+this.options.directionLockThreshold?this.directionLocked="v":this.directionLocked="n"),"h"===this.directionLocked){if("vertical"===this.options.eventPassthrough)t.preventDefault();else if("horizontal"===this.options.eventPassthrough)return void(this.initiated=!1);s=0}else if("v"===this.directionLocked){if("horizontal"===this.options.eventPassthrough)t.preventDefault();else if("vertical"===this.options.eventPassthrough)return void(this.initiated=!1);e=0}e=this.hasHorizontalScroll?e:0,s=this.hasVerticalScroll?s:0,this.movingDirectionX=e>0?et:e<0?it:0,this.movingDirectionY=s>0?tt:s<0?Z:0;var a=this.x+e,h=this.y+s,l=!1,c=!1,p=!1,u=!1,d=this.options.bounce;!1!==d&&(l=void 0===d.top||d.top,c=void 0===d.bottom||d.bottom,p=void 0===d.left||d.left,u=void 0===d.right||d.right),(a>this.minScrollX||a<this.maxScrollX)&&(a=a>this.minScrollX&&p||a<this.maxScrollX&&u?this.x+e/3:a>this.minScrollX?this.minScrollX:this.maxScrollX),(h>this.minScrollY||h<this.maxScrollY)&&(h=h>this.minScrollY&&l||h<this.maxScrollY&&c?this.y+s/3:h>this.minScrollY?this.minScrollY:this.maxScrollY),this.moved||(this.moved=!0,this.trigger("scrollStart")),this._translate(a,h),r-this.startTime>this.options.momentumLimitTime&&(this.startTime=r,this.startX=this.x,this.startY=this.y,this.options.probeType===st&&this.trigger("scroll",{x:this.x,y:this.y})),this.options.probeType>st&&this.trigger("scroll",{x:this.x,y:this.y});var m=document.documentElement.scrollLeft||window.pageXOffset||document.body.scrollLeft,g=document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop,v=this.pointX-m,y=this.pointY-g;(v>document.documentElement.clientWidth-this.options.momentumLimitDistance||v<this.options.momentumLimitDistance||y<this.options.momentumLimitDistance||y>document.documentElement.clientHeight-this.options.momentumLimitDistance)&&this._end(t)}}},t.prototype._end=function(t){if(this.enabled&&!this.destroyed&&O[t.type]===this.initiated){this.initiated=!1,this.options.preventDefault&&!H(t.target,this.options.preventDefaultException)&&t.preventDefault(),this.options.stopPropagation&&t.stopPropagation(),this.trigger("touchEnd",{x:this.x,y:this.y}),this.isInTransition=!1;var i=Math.round(this.x),e=Math.round(this.y),s=i-this.absStartX,o=e-this.absStartY;if(this.directionX=s>0?et:s<0?it:0,this.directionY=o>0?tt:o<0?Z:0,!this.options.pullDownRefresh||!this._checkPullDown())if(this._checkClick(t))this.trigger("scrollCancel");else if(!this.resetPosition(this.options.bounceTime,K.bounce)){this._translate(i,e),this.endTime=f();var n=this.endTime-this.startTime,r=Math.abs(i-this.startX),a=Math.abs(e-this.startY);if(this._events.flick&&n<this.options.flickLimitTime&&r<this.options.flickLimitDistance&&a<this.options.flickLimitDistance)this.trigger("flick");else{var h=0;if(this.options.momentum&&n<this.options.momentumLimitTime&&(a>this.options.momentumLimitDistance||r>this.options.momentumLimitDistance)){var l=!1,c=!1,p=!1,u=!1,d=this.options.bounce;!1!==d&&(l=void 0===d.top||d.top,c=void 0===d.bottom||d.bottom,p=void 0===d.left||d.left,u=void 0===d.right||d.right);var m=this.directionX===et&&p||this.directionX===it&&u?this.wrapperWidth:0,g=this.directionY===tt&&l||this.directionY===Z&&c?this.wrapperHeight:0,v=this.hasHorizontalScroll?Q(this.x,this.startX,n,this.maxScrollX,this.minScrollX,m,this.options,this):{destination:i,duration:0},y=this.hasVerticalScroll?Q(this.y,this.startY,n,this.maxScrollY,this.minScrollY,g,this.options,this):{destination:e,duration:0};i=v.destination,e=y.destination,h=Math.max(v.duration,y.duration),this.isInTransition=!0}else this.options.wheel&&(e=this._findNearestValidWheel(e).y,h=this.options.wheel.adjustTime||400);var w=K.swipe;if(this.options.snap){var b=this._nearestSnap(i,e);this.currentPage=b,h=this.options.snapSpeed||Math.max(Math.max(Math.min(Math.abs(i-b.x),1e3),Math.min(Math.abs(e-b.y),1e3)),300),i=b.x,e=b.y,this.directionX=0,this.directionY=0,w=this.options.snap.easing||K.bounce}if(i!==this.x||e!==this.y)return(i>this.minScrollX||i<this.maxScrollX||e>this.minScrollY||e<this.maxScrollY)&&(w=K.swipeBounce),void this.scrollTo(i,e,h,w);this.options.wheel&&(this.selectedIndex=this._findNearestValidWheel(this.y).index),this.trigger("scrollEnd",{x:this.x,y:this.y})}}}},t.prototype._checkClick=function(t){var i=this.stopFromTransition&&!this.pulling;if(this.stopFromTransition=!1,!this.moved){if(this.options.wheel){if(this.target&&this.target.className===this.options.wheel.wheelWrapperClass){var e=this._findNearestValidWheel(this.y).index,s=Math.round((this.pointY+x(this.wrapper).top-this.wrapperHeight/2)/this.itemHeight);this.target=this.items[e+s]}var o=T(this.target).top,n=T(this.target).left;return o-=this.wrapperOffset.top,o-=Math.round(this.target.offsetHeight/2-this.wrapper.offsetHeight/2)||0,n-=this.wrapperOffset.left,n-=Math.round(this.target.offsetWidth/2-this.wrapper.offsetWidth/2)||0,o=this._findNearestValidWheel(o).y,this.scrollTo(n,o,this.options.wheel.adjustTime||400,K.swipe),!0}if(!i){var r=this.options.dblclick,a=!1;if(r&&this.lastClickTime){var h=r.delay,l=void 0===h?300:h;f()-this.lastClickTime<l&&(a=!0,N(t))}return this.options.tap&&W(t,this.options.tap),this.options.click&&!H(t.target,this.options.preventDefaultException)&&z(t),this.lastClickTime=a?null:f(),!0}return!1}return!1},t.prototype._resize=function(){var t=this;this.enabled&&(m&&(this.wrapper.scrollTop=0),clearTimeout(this.resizeTimeout),this.resizeTimeout=setTimeout((function(){t.refresh()}),this.options.resizePolling))},t.prototype._startProbe=function(){J(this.probeTimer),this.probeTimer=q(i);var t=this;function i(){var e=t.getComputedPosition();t.trigger("scroll",e),t.isInTransition?t.probeTimer=q(i):t.trigger("scrollEnd",e)}},t.prototype._transitionTime=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(this.scrollerStyle[X.transitionDuration]=t+"ms",this.options.wheel)for(var i=0;i<this.items.length;i++)this.items[i].style[X.transitionDuration]=t+"ms";if(this.indicators)for(var e=0;e<this.indicators.length;e++)this.indicators[e].transitionTime(t)},t.prototype._transitionTimingFunction=function(t){if(this.scrollerStyle[X.transitionTimingFunction]=t,this.options.wheel)for(var i=0;i<this.items.length;i++)this.items[i].style[X.transitionTimingFunction]=t;if(this.indicators)for(var e=0;e<this.indicators.length;e++)this.indicators[e].transitionTimingFunction(t)},t.prototype._transitionEnd=function(t){if(t.target===this.scroller&&this.isInTransition){this._transitionTime();var i=!this.pulling||this.movingDirectionY===Z;i&&!this.resetPosition(this.options.bounceTime,K.bounce)&&(this.isInTransition=!1,this.options.probeType!==ot&&this.trigger("scrollEnd",{x:this.x,y:this.y}))}},t.prototype._translate=function(t,i,e){if(rt(!v(t)&&!v(i),"Translate x or y is null or undefined."),v(e)&&(e=this.scale),this.options.useTransform?this.scrollerStyle[X.transform]="translate("+t+"px,"+i+"px) scale("+e+")"+this.translateZ:(t=Math.round(t),i=Math.round(i),this.scrollerStyle.left=t+"px",this.scrollerStyle.top=i+"px"),this.options.wheel)for(var s=this.options.wheel.rotate,o=void 0===s?25:s,n=0;n<this.items.length;n++){var r=o*(i/this.itemHeight+n);this.items[n].style[X.transform]="rotateX("+r+"deg)"}if(this.x=t,this.y=i,this.setScale(e),this.indicators)for(var a=0;a<this.indicators.length;a++)this.indicators[a].updatePosition()},t.prototype._animate=function(t,i,e,s){var o=this,n=this.x,r=this.y,a=this.lastScale,h=this.scale,l=f(),c=l+e;function p(){var u=f();if(u>=c)return o.isAnimating=!1,o._translate(t,i,h),o.trigger("scroll",{x:o.x,y:o.y}),void(o.pulling||o.resetPosition(o.options.bounceTime)||o.trigger("scrollEnd",{x:o.x,y:o.y}));u=(u-l)/e;var d=s(u),m=(t-n)*d+n,g=(i-r)*d+r,v=(h-a)*d+a;o._translate(m,g,v),o.isAnimating&&(o.animateTimer=q(p)),o.options.probeType===ot&&o.trigger("scroll",{x:o.x,y:o.y})}this.isAnimating=!0,J(this.animateTimer),p()},t.prototype.scrollBy=function(t,i){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:K.bounce;t=this.x+t,i=this.y+i,this.scrollTo(t,i,e,s)},t.prototype.scrollTo=function(t,i){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:K.bounce,o=arguments[4];if(this.options.wheel&&(i=this._findNearestValidWheel(i).y),t!==this.x||i!==this.y)if(this.isInTransition=this.options.useTransition&&e>0&&(this.x!==t||this.y!==i),!e||this.options.useTransition){if(this._transitionTimingFunction(s.style),this._transitionTime(e),this._translate(t,i),e&&this.options.probeType===ot&&this._startProbe(),!e&&!o){if(this.options.zoom)return;this.trigger("scroll",{x:t,y:i}),this._reflow=document.body.offsetHeight,this.resetPosition(this.options.bounceTime,K.bounce)||this.trigger("scrollEnd",{x:t,y:i})}this.options.wheel&&(this.selectedIndex=this._findNearestValidWheel(i).index)}else this._animate(t,i,e,s.fn)},t.prototype.scrollToElement=function(t,i,e,s,o){if(t&&(t=t.nodeType?t:this.scroller.querySelector(t),!this.options.wheel||t.classList.contains(this.options.wheel.wheelItemClass))){var n=T(t);n.left-=this.wrapperOffset.left,n.top-=this.wrapperOffset.top,!0===e&&(e=Math.round(t.offsetWidth/2-this.wrapper.offsetWidth/2)),!0===s&&(s=Math.round(t.offsetHeight/2-this.wrapper.offsetHeight/2)),n.left-=e||0,n.top-=s||0,n.left=n.left>this.minScrollX?this.minScrollX:n.left<this.maxScrollX?this.maxScrollX:n.left,n.top=n.top>this.minScrollY?this.minScrollY:n.top<this.maxScrollY?this.maxScrollY:n.top,this.options.wheel&&(n.top=this._findNearestValidWheel(n.top).y),this.scrollTo(n.left,n.top,i,o)}},t.prototype.resetPosition=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:K.bounce,e=this.x,s=Math.round(e);!this.hasHorizontalScroll||s>this.minScrollX?e=this.minScrollX:s<this.maxScrollX&&(e=this.maxScrollX);var o=this.y,n=Math.round(o);return!this.hasVerticalScroll||n>this.minScrollY?o=this.minScrollY:n<this.maxScrollY&&(o=this.maxScrollY),(e!==this.x||o!==this.y)&&(this.scrollTo(e,o,t,i),!0)},t.prototype.getComputedPosition=function(){var t=window.getComputedStyle(this.scroller,null),i=void 0,e=void 0;return this.options.useTransform?(t=t[X.transform].split(")")[0].split(", "),i=+(t[12]||t[4]),e=+(t[13]||t[5])):(i=+t.left.replace(/[^-\d.]/g,""),e=+t.top.replace(/[^-\d.]/g,"")),{x:i,y:e}},t.prototype.stop=function(){if(this.options.useTransition&&this.isInTransition){this.isInTransition=!1,J(this.probeTimer);var t=this.getComputedPosition();this._translate(t.x,t.y),this.options.wheel?this.target=this.items[this._findNearestValidWheel(t.y).index]:this.trigger("scrollEnd",{x:this.x,y:this.y}),this.stopFromTransition=!0}else!this.options.useTransition&&this.isAnimating&&(this.isAnimating=!1,J(this.animateTimer),this.trigger("scrollEnd",{x:this.x,y:this.y}),this.stopFromTransition=!0)},t.prototype.destroy=function(){this.destroyed=!0,this.trigger("destroy"),this.options.useTransition?J(this.probeTimer):J(this.animateTimer),this._removeDOMEvents(),this._events={}}}function ht(t){t.prototype._initSnap=function(){var t=this;this.currentPage={};var i=this.options.snap;if(i.loop){var e=this.scroller.children;e.length>1?(F(e[e.length-1].cloneNode(!0),this.scroller),this.scroller.appendChild(e[1].cloneNode(!0))):i.loop=!1}var s=i.el;"string"===typeof s&&(s=this.scroller.querySelectorAll(s)),this.on("refresh",(function(){if(t.pages=[],t.wrapperWidth&&t.wrapperHeight&&t.scrollerWidth&&t.scrollerHeight){var e=i.stepX||t.wrapperWidth,o=i.stepY||t.wrapperHeight,n=0,r=void 0,a=void 0,h=void 0,l=0,c=void 0,p=0,u=void 0,d=void 0;if(s)for(c=s.length,u=-1;l<c;l++)d=B(s[l]),(0===l||d.left<=B(s[l-1]).left)&&(p=0,u++),t.pages[p]||(t.pages[p]=[]),n=Math.max(-d.left,t.maxScrollX),r=Math.max(-d.top,t.maxScrollY),a=n-Math.round(d.width/2),h=r-Math.round(d.height/2),t.pages[p][u]={x:n,y:r,width:d.width,height:d.height,cx:a,cy:h},n>t.maxScrollX&&p++;else{a=Math.round(e/2),h=Math.round(o/2);while(n>-t.scrollerWidth){t.pages[l]=[],c=0,r=0;while(r>-t.scrollerHeight)t.pages[l][c]={x:Math.max(n,t.maxScrollX),y:Math.max(r,t.maxScrollY),width:e,height:o,cx:n-a,cy:r-h},r-=o,c++;n-=e,l++}}t._checkSnapLoop();var m=i._loopX?1:0,f=i._loopY?1:0;t._goToPage(t.currentPage.pageX||m,t.currentPage.pageY||f,0,void 0,!0);var g=i.threshold;g%1===0?(t.snapThresholdX=g,t.snapThresholdY=g):(t.snapThresholdX=Math.round(t.pages[t.currentPage.pageX][t.currentPage.pageY].width*g),t.snapThresholdY=Math.round(t.pages[t.currentPage.pageX][t.currentPage.pageY].height*g))}})),this.on("scrollEnd",(function(){i.loop&&(i._loopX?(0===t.currentPage.pageX&&t._goToPage(t.pages.length-2,t.currentPage.pageY,0,void 0,!0),t.currentPage.pageX===t.pages.length-1&&t._goToPage(1,t.currentPage.pageY,0,void 0,!0)):(0===t.currentPage.pageY&&t._goToPage(t.currentPage.pageX,t.pages[0].length-2,0,void 0,!0),t.currentPage.pageY===t.pages[0].length-1&&t._goToPage(t.currentPage.pageX,1,0,void 0,!0)))})),!1!==i.listenFlick&&this.on("flick",(function(){var e=i.speed||Math.max(Math.max(Math.min(Math.abs(t.x-t.startX),1e3),Math.min(Math.abs(t.y-t.startY),1e3)),300);t._goToPage(t.currentPage.pageX+t.directionX,t.currentPage.pageY+t.directionY,e)})),this.on("destroy",(function(){if(i.loop){var e=t.scroller.children;e.length>2&&(U(t.scroller,e[e.length-1]),U(t.scroller,e[0]))}}))},t.prototype._checkSnapLoop=function(){var t=this.options.snap;t.loop&&this.pages&&this.pages.length&&(this.pages.length>1&&(t._loopX=!0),this.pages[0]&&this.pages[0].length>1&&(t._loopY=!0),t._loopX&&t._loopY&&nt("Loop does not support two direction at the same time."))},t.prototype._nearestSnap=function(t,i){if(!this.pages.length)return{x:0,y:0,pageX:0,pageY:0};var e=0;if(Math.abs(t-this.absStartX)<=this.snapThresholdX&&Math.abs(i-this.absStartY)<=this.snapThresholdY)return this.currentPage;t>this.minScrollX?t=this.minScrollX:t<this.maxScrollX&&(t=this.maxScrollX),i>this.minScrollY?i=this.minScrollY:i<this.maxScrollY&&(i=this.maxScrollY);for(var s=this.pages.length;e<s;e++)if(t>=this.pages[e][0].cx){t=this.pages[e][0].x;break}s=this.pages[e].length;for(var o=0;o<s;o++)if(i>=this.pages[0][o].cy){i=this.pages[0][o].y;break}return e===this.currentPage.pageX&&(e+=this.directionX,e<0?e=0:e>=this.pages.length&&(e=this.pages.length-1),t=this.pages[e][0].x),o===this.currentPage.pageY&&(o+=this.directionY,o<0?o=0:o>=this.pages[0].length&&(o=this.pages[0].length-1),i=this.pages[0][o].y),{x:t,y:i,pageX:e,pageY:o}},t.prototype._goToPage=function(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,e=arguments[2],s=arguments[3],o=arguments[4],n=this.options.snap;if(n&&this.pages&&this.pages.length&&(s=s||n.easing||K.bounce,t>=this.pages.length?t=this.pages.length-1:t<0&&(t=0),this.pages[t])){i>=this.pages[t].length?i=this.pages[t].length-1:i<0&&(i=0);var r=this.pages[t][i].x,a=this.pages[t][i].y;e=void 0===e?n.speed||Math.max(Math.max(Math.min(Math.abs(r-this.x),1e3),Math.min(Math.abs(a-this.y),1e3)),300):e,this.currentPage={x:r,y:a,pageX:t,pageY:i},this.scrollTo(r,a,e,s,o)}},t.prototype.goToPage=function(t,i,e,s){var o=this.options.snap;if(o&&this.pages&&this.pages.length){if(o.loop){var n=void 0;o._loopX?(n=this.pages.length-2,t>=n?t=n-1:t<0&&(t=0),t+=1):(n=this.pages[0].length-2,i>=n?i=n-1:i<0&&(i=0),i+=1)}this._goToPage(t,i,e,s)}},t.prototype.next=function(t,i){var e=this.options.snap;if(e){var s=this.currentPage.pageX,o=this.currentPage.pageY;s++,s>=this.pages.length&&this.hasVerticalScroll&&(s=0,o++),this._goToPage(s,o,t,i)}},t.prototype.prev=function(t,i){var e=this.options.snap;if(e){var s=this.currentPage.pageX,o=this.currentPage.pageY;s--,s<0&&this.hasVerticalScroll&&(s=0,o--),this._goToPage(s,o,t,i)}},t.prototype.getCurrentPage=function(){var t=this.options.snap;if(!t)return null;if(t.loop){var i=void 0;return i=t._loopX?g({},this.currentPage,{pageX:this.currentPage.pageX-1}):g({},this.currentPage,{pageY:this.currentPage.pageY-1}),i}return this.currentPage}}function lt(t){t.prototype.wheelTo=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;if(this.options.wheel){var i=-t*this.itemHeight;this.scrollTo(0,i)}},t.prototype.getSelectedIndex=function(){return this.options.wheel&&this.selectedIndex},t.prototype._initWheel=function(){var t=this.options.wheel;t.wheelWrapperClass||(t.wheelWrapperClass="wheel-scroll"),t.wheelItemClass||(t.wheelItemClass="wheel-item"),t.wheelDisabledItemClass||(t.wheelDisabledItemClass="wheel-disabled-item"),void 0===t.selectedIndex&&(t.selectedIndex=0)},t.prototype._findNearestValidWheel=function(t){t=t>0?0:t<this.maxScrollY?this.maxScrollY:t;var i=this.options.wheel,e=Math.abs(Math.round(-t/this.itemHeight)),s=e,o=this.items;while(e>=0){if(-1===o[e].className.indexOf(i.wheelDisabledItemClass))break;e--}if(e<0){e=s;while(e<=o.length-1){if(-1===o[e].className.indexOf(i.wheelDisabledItemClass))break;e++}}return e===o.length&&(e=s),{index:this.wheelItemsAllDisabled?-1:e,y:-e*this.itemHeight}},t.prototype._checkWheelAllDisabled=function(){var t=this.options.wheel,i=this.items;this.wheelItemsAllDisabled=!0;for(var e=0;e<i.length;e++)if(-1===i[e].className.indexOf(t.wheelDisabledItemClass)){this.wheelItemsAllDisabled=!1;break}}}var ct=8;function pt(t){t.prototype._initScrollbar=function(){var t=this,i=this.options.scrollbar,e=i.fade,s=void 0===e||e,o=i.interactive,n=void 0!==o&&o;this.indicators=[];var r=void 0;this.options.scrollX&&(r={el:ut("horizontal"),direction:"horizontal",fade:s,interactive:n},this._insertScrollBar(r.el),this.indicators.push(new dt(this,r))),this.options.scrollY&&(r={el:ut("vertical"),direction:"vertical",fade:s,interactive:n},this._insertScrollBar(r.el),this.indicators.push(new dt(this,r))),this.on("refresh",(function(){for(var i=0;i<t.indicators.length;i++)t.indicators[i].refresh()})),s&&(this.on("scrollEnd",(function(){for(var i=0;i<t.indicators.length;i++)t.indicators[i].fade()})),this.on("scrollCancel",(function(){for(var i=0;i<t.indicators.length;i++)t.indicators[i].fade()})),this.on("scrollStart",(function(){for(var i=0;i<t.indicators.length;i++)t.indicators[i].fade(!0)})),this.on("beforeScrollStart",(function(){for(var i=0;i<t.indicators.length;i++)t.indicators[i].fade(!0,!0)}))),this.on("destroy",(function(){t._removeScrollBars()}))},t.prototype._insertScrollBar=function(t){this.wrapper.appendChild(t)},t.prototype._removeScrollBars=function(){for(var t=0;t<this.indicators.length;t++)this.indicators[t].destroy()}}function ut(t){var i=document.createElement("div"),e=document.createElement("div");return i.style.cssText="position:absolute;z-index:9999;pointerEvents:none",e.style.cssText="box-sizing:border-box;position:absolute;background:rgba(0,0,0,0.5);border:1px solid rgba(255,255,255,0.9);border-radius:3px;",e.className="bscroll-indicator","horizontal"===t?(i.style.cssText+=";height:7px;left:2px;right:2px;bottom:0",e.style.height="100%",i.className="bscroll-horizontal-scrollbar"):(i.style.cssText+=";width:7px;bottom:2px;top:2px;right:1px",e.style.width="100%",i.className="bscroll-vertical-scrollbar"),i.style.cssText+=";overflow:hidden",i.appendChild(e),i}function dt(t,i){this.wrapper=i.el,this.wrapperStyle=this.wrapper.style,this.indicator=this.wrapper.children[0],this.indicatorStyle=this.indicator.style,this.scroller=t,this.direction=i.direction,i.fade?(this.visible=0,this.wrapperStyle.opacity="0"):this.visible=1,this.sizeRatioX=1,this.sizeRatioY=1,this.maxPosX=0,this.maxPosY=0,this.x=0,this.y=0,i.interactive&&this._addDOMEvents()}function mt(t){t.prototype._initPullDown=function(){this.options.probeType=ot},t.prototype._checkPullDown=function(){var t=this.options.pullDownRefresh,i=t.threshold,e=void 0===i?90:i,s=t.stop,o=void 0===s?40:s;return!(this.directionY!==tt||this.y<e)&&(this.pulling||(this.pulling=!0,this.trigger("pullingDown")),this.scrollTo(this.x,o,this.options.bounceTime,K.bounce),this.pulling)},t.prototype.finishPullDown=function(){this.pulling=!1,this.resetPosition(this.options.bounceTime,K.bounce)},t.prototype.openPullDown=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.options.pullDownRefresh=t,this._initPullDown()},t.prototype.closePullDown=function(){this.options.pullDownRefresh=!1},t.prototype.autoPullDownRefresh=function(){var t=this.options.pullDownRefresh,i=t.threshold,e=void 0===i?90:i,s=t.stop,o=void 0===s?40:s;this.pulling||(this.pulling=!0,this.scrollTo(this.x,e),this.trigger("pullingDown"),this.scrollTo(this.x,o,this.options.bounceTime,K.bounce))}}function ft(t){t.prototype._initPullUp=function(){this.options.probeType=ot,this.pullupWatching=!1,this._watchPullUp()},t.prototype._watchPullUp=function(){this.pullupWatching||(this.pullupWatching=!0,this.on("scroll",this._checkToEnd))},t.prototype._checkToEnd=function(t){var i=this,e=this.options.pullUpLoad.threshold,s=void 0===e?0:e;this.movingDirectionY===Z&&t.y<=this.maxScrollY+s&&(this.once("scrollEnd",(function(){i.pullupWatching=!1})),this.trigger("pullingUp"),this.off("scroll",this._checkToEnd))},t.prototype.finishPullUp=function(){var t=this;this.pullupWatching?this.once("scrollEnd",(function(){t._watchPullUp()})):this._watchPullUp()},t.prototype.openPullUp=function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.options.pullUpLoad=t,this._initPullUp()},t.prototype.closePullUp=function(){this.options.pullUpLoad=!1,this.pullupWatching&&(this.pullupWatching=!1,this.off("scroll",this._checkToEnd))}}function gt(t){t.prototype._initMouseWheel=function(){var t=this;this._handleMouseWheelEvent(S),this.on("destroy",(function(){clearTimeout(t.mouseWheelTimer),clearTimeout(t.mouseWheelEndTimer),t._handleMouseWheelEvent(_)})),this.firstWheelOpreation=!0},t.prototype._handleMouseWheelEvent=function(t){t(this.wrapper,"wheel",this),t(this.wrapper,"mousewheel",this),t(this.wrapper,"DOMMouseScroll",this)},t.prototype._onMouseWheel=function(t){var i=this;if(this.enabled){t.preventDefault(),this.options.stopPropagation&&t.stopPropagation(),this.firstWheelOpreation&&this.trigger("scrollStart"),this.firstWheelOpreation=!1;var e=this.options.mouseWheel,s=e.speed,o=void 0===s?20:s,n=e.invert,r=void 0!==n&&n,a=e.easeTime,h=void 0===a?300:a;clearTimeout(this.mouseWheelTimer),this.mouseWheelTimer=setTimeout((function(){i.options.snap||h||i.trigger("scrollEnd",{x:i.x,y:i.y}),i.firstWheelOpreation=!0}),400);var l=void 0,c=void 0;switch(!0){case"deltaX"in t:1===t.deltaMode?(l=-t.deltaX*o,c=-t.deltaY*o):(l=-t.deltaX,c=-t.deltaY);break;case"wheelDeltaX"in t:l=t.wheelDeltaX/120*o,c=t.wheelDeltaY/120*o;break;case"wheelDelta"in t:l=c=t.wheelDelta/120*o;break;case"detail"in t:l=c=-t.detail/3*o;break;default:return}var p=r?-1:1;l*=p,c*=p,this.hasVerticalScroll||(l=c,c=0);var u=void 0,d=void 0;if(this.options.snap)return u=this.currentPage.pageX,d=this.currentPage.pageY,l>0?u--:l<0&&u++,c>0?d--:c<0&&d++,void this._goToPage(u,d);u=this.x+Math.round(this.hasHorizontalScroll?l:0),d=this.y+Math.round(this.hasVerticalScroll?c:0),this.movingDirectionX=this.directionX=l>0?-1:l<0?1:0,this.movingDirectionY=this.directionY=c>0?-1:c<0?1:0,u>this.minScrollX?u=this.minScrollX:u<this.maxScrollX&&(u=this.maxScrollX),d>this.minScrollY?d=this.minScrollY:d<this.maxScrollY&&(d=this.maxScrollY);var m=this.y===d;this.scrollTo(u,d,h,K.swipe),this.trigger("scroll",{x:this.x,y:this.y}),clearTimeout(this.mouseWheelEndTimer),m&&(this.mouseWheelEndTimer=setTimeout((function(){i.trigger("scrollEnd",{x:i.x,y:i.y})}),h))}}}function vt(t){t.prototype._initZoom=function(){var t=this.options.zoom,i=t.start,e=void 0===i?1:i,s=t.min,o=void 0===s?1:s,n=t.max,r=void 0===n?4:n;this.scale=Math.min(Math.max(e,o),r),this.setScale(this.scale),this.scrollerStyle[X.transformOrigin]="0 0"},t.prototype._zoomTo=function(t,i,e,s){this.scaled=!0;var o=t/(s||this.scale);this.setScale(t),this.refresh();var n=Math.round(this.startX-(i-this.relativeX)*(o-1)),r=Math.round(this.startY-(e-this.relativeY)*(o-1));n>this.minScrollX?n=this.minScrollX:n<this.maxScrollX&&(n=this.maxScrollX),r>this.minScrollY?r=this.minScrollY:r<this.maxScrollY&&(r=this.maxScrollY),this.x===n&&this.y===r||this.scrollTo(n,r,this.options.bounceTime),this.scaled=!1},t.prototype.zoomTo=function(t,i,e){var s=x(this.wrapper),o=s.left,n=s.top,r=i+o-this.x,a=e+n-this.y;this._zoomTo(t,r,a)},t.prototype._zoomStart=function(t){var i=t.touches[0],e=t.touches[1],s=Math.abs(i.pageX-e.pageX),o=Math.abs(i.pageY-e.pageY);this.startDistance=y(s,o),this.startScale=this.scale;var n=x(this.wrapper),r=n.left,a=n.top;this.originX=Math.abs(i.pageX+e.pageX)/2+r-this.x,this.originY=Math.abs(i.pageY+e.pageY)/2+a-this.y,this.trigger("zoomStart")},t.prototype._zoom=function(t){if(this.enabled&&!this.destroyed&&O[t.type]===this.initiated){this.options.preventDefault&&t.preventDefault(),this.options.stopPropagation&&t.stopPropagation();var i=t.touches[0],e=t.touches[1],s=Math.abs(i.pageX-e.pageX),o=Math.abs(i.pageY-e.pageY),n=y(s,o),r=n/this.startDistance*this.startScale;this.scaled=!0;var a=this.options.zoom,h=a.min,l=void 0===h?1:h,c=a.max,p=void 0===c?4:c;r<l?r=.5*l*Math.pow(2,r/l):r>p&&(r=2*p*Math.pow(.5,p/r));var u=r/this.startScale,d=this.startX-(this.originX-this.relativeX)*(u-1),m=this.startY-(this.originY-this.relativeY)*(u-1);this.setScale(r),this.scrollTo(d,m,0)}},t.prototype._zoomEnd=function(t){if(this.enabled&&!this.destroyed&&O[t.type]===this.initiated){this.options.preventDefault&&t.preventDefault(),this.options.stopPropagation&&t.stopPropagation(),this.isInTransition=!1,this.isAnimating=!1,this.initiated=0;var i=this.options.zoom,e=i.min,s=void 0===e?1:e,o=i.max,n=void 0===o?4:o,r=this.scale>n?n:this.scale<s?s:this.scale;this._zoomTo(r,this.originX,this.originY,this.startScale),this.trigger("zoomEnd")}}}dt.prototype.handleEvent=function(t){switch(t.type){case"touchstart":case"mousedown":this._start(t);break;case"touchmove":case"mousemove":this._move(t);break;case"touchend":case"mouseup":case"touchcancel":case"mousecancel":this._end(t);break}},dt.prototype.refresh=function(){this._shouldShow()&&(this.transitionTime(),this._calculate(),this.updatePosition())},dt.prototype.fade=function(t,i){var e=this;if(!i||this.visible){var s=t?250:500;t=t?"1":"0",this.wrapperStyle[X.transitionDuration]=s+"ms",clearTimeout(this.fadeTimeout),this.fadeTimeout=setTimeout((function(){e.wrapperStyle.opacity=t,e.visible=+t}),0)}},dt.prototype.updatePosition=function(){if("vertical"===this.direction){var t=Math.round(this.sizeRatioY*this.scroller.y);if(t<0){this.transitionTime(500);var i=Math.max(this.indicatorHeight+3*t,ct);this.indicatorStyle.height=i+"px",t=0}else if(t>this.maxPosY){this.transitionTime(500);var e=Math.max(this.indicatorHeight-3*(t-this.maxPosY),ct);this.indicatorStyle.height=e+"px",t=this.maxPosY+this.indicatorHeight-e}else this.indicatorStyle.height=this.indicatorHeight+"px";this.y=t,this.scroller.options.useTransform?this.indicatorStyle[X.transform]="translateY("+t+"px)"+this.scroller.translateZ:this.indicatorStyle.top=t+"px"}else{var s=Math.round(this.sizeRatioX*this.scroller.x);if(s<0){this.transitionTime(500);var o=Math.max(this.indicatorWidth+3*s,ct);this.indicatorStyle.width=o+"px",s=0}else if(s>this.maxPosX){this.transitionTime(500);var n=Math.max(this.indicatorWidth-3*(s-this.maxPosX),ct);this.indicatorStyle.width=n+"px",s=this.maxPosX+this.indicatorWidth-n}else this.indicatorStyle.width=this.indicatorWidth+"px";this.x=s,this.scroller.options.useTransform?this.indicatorStyle[X.transform]="translateX("+s+"px)"+this.scroller.translateZ:this.indicatorStyle.left=s+"px"}},dt.prototype.transitionTime=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.indicatorStyle[X.transitionDuration]=t+"ms"},dt.prototype.transitionTimingFunction=function(t){this.indicatorStyle[X.transitionTimingFunction]=t},dt.prototype.destroy=function(){this._removeDOMEvents(),this.wrapper.parentNode.removeChild(this.wrapper)},dt.prototype._start=function(t){var i=t.touches?t.touches[0]:t;t.preventDefault(),t.stopPropagation(),this.transitionTime(),this.initiated=!0,this.moved=!1,this.lastPointX=i.pageX,this.lastPointY=i.pageY,this.startTime=f(),this._handleMoveEvents(S),this.scroller.trigger("beforeScrollStart")},dt.prototype._move=function(t){var i=t.touches?t.touches[0]:t;t.preventDefault(),t.stopPropagation(),this.moved||this.scroller.trigger("scrollStart"),this.moved=!0;var e=i.pageX-this.lastPointX;this.lastPointX=i.pageX;var s=i.pageY-this.lastPointY;this.lastPointY=i.pageY;var o=this.x+e,n=this.y+s;this._pos(o,n)},dt.prototype._end=function(t){if(this.initiated){this.initiated=!1,t.preventDefault(),t.stopPropagation(),this._handleMoveEvents(_);var i=this.scroller.options.snap;if(i){var e=i.speed,s=i.easing,o=void 0===s?K.bounce:s,n=this.scroller._nearestSnap(this.scroller.x,this.scroller.y),r=e||Math.max(Math.max(Math.min(Math.abs(this.scroller.x-n.x),1e3),Math.min(Math.abs(this.scroller.y-n.y),1e3)),300);this.scroller.x===n.x&&this.scroller.y===n.y||(this.scroller.directionX=0,this.scroller.directionY=0,this.scroller.currentPage=n,this.scroller.scrollTo(n.x,n.y,r,o))}this.moved&&this.scroller.trigger("scrollEnd",{x:this.scroller.x,y:this.scroller.y})}},dt.prototype._pos=function(t,i){t<0?t=0:t>this.maxPosX&&(t=this.maxPosX),i<0?i=0:i>this.maxPosY&&(i=this.maxPosY),t=Math.round(t/this.sizeRatioX),i=Math.round(i/this.sizeRatioY),this.scroller.scrollTo(t,i),this.scroller.trigger("scroll",{x:this.scroller.x,y:this.scroller.y})},dt.prototype._shouldShow=function(){return"vertical"===this.direction&&this.scroller.hasVerticalScroll||"horizontal"===this.direction&&this.scroller.hasHorizontalScroll?(this.wrapper.style.display="",!0):(this.wrapper.style.display="none",!1)},dt.prototype._calculate=function(){if("vertical"===this.direction){var t=this.wrapper.clientHeight;this.indicatorHeight=Math.max(Math.round(t*t/(this.scroller.scrollerHeight||t||1)),ct),this.indicatorStyle.height=this.indicatorHeight+"px",this.maxPosY=t-this.indicatorHeight,this.sizeRatioY=this.maxPosY/this.scroller.maxScrollY}else{var i=this.wrapper.clientWidth;this.indicatorWidth=Math.max(Math.round(i*i/(this.scroller.scrollerWidth||i||1)),ct),this.indicatorStyle.width=this.indicatorWidth+"px",this.maxPosX=i-this.indicatorWidth,this.sizeRatioX=this.maxPosX/this.scroller.maxScrollX}},dt.prototype._addDOMEvents=function(){var t=S;this._handleDOMEvents(t)},dt.prototype._removeDOMEvents=function(){var t=_;this._handleDOMEvents(t),this._handleMoveEvents(t)},dt.prototype._handleMoveEvents=function(t){this.scroller.options.disableTouch||t(window,"touchmove",this),this.scroller.options.disableMouse||t(window,"mousemove",this)},dt.prototype._handleDOMEvents=function(t){this.scroller.options.disableTouch||(t(this.indicator,"touchstart",this),t(window,"touchend",this)),this.scroller.options.disableMouse||(t(this.indicator,"mousedown",this),t(window,"mouseup",this))};var yt=30,wt=10,bt=200,At=2e3;function St(t){t.prototype._initInfinite=function(){this.options.probeType=3,this.maxScrollY=-At,this.infiniteScroller=new Tt(this,this.options.infinity)}}function _t(t){if(t&&t.classList)return t.classList.contains("tombstone")}function Tt(t,i){var e=this;this.options=i,rt("function"===typeof this.options.createTombstone,"Infinite scroll need createTombstone Function to create tombstone"),rt("function"===typeof this.options.fetch,"Infinite scroll need fetch Function to fetch new data."),rt("function"===typeof this.options.render,"Infinite scroll need render Function to render each item."),this.firstAttachedItem=0,this.lastAttachedItem=0,this.anchorScrollTop=0,this.anchorItem={index:0,offset:0},this.tombstoneHeight=0,this.tombstoneWidth=0,this.tombstones=[],this.tombstonesAnimationHandlers=[],this.items=[],this.loadedItems=0,this.requestInProgress=!1,this.hasMore=!0,this.scroller=t,this.wrapperEl=this.scroller.wrapper,this.scrollerEl=this.scroller.scroller,this.scroller.on("resize",(function(){e.onResize()})),this.scroller.on("destroy",(function(){e.destroy()})),this._onResizeHandler=setTimeout((function(){e.onResize(),e.scroller.on("scroll",(function(){e.onScroll()}))}))}function xt(t,i){this.wrapper="string"===typeof t?document.querySelector(t):t,this.wrapper||nt("Can not resolve the wrapper DOM."),this.scroller=this.wrapper.children[0],this.scroller||nt("The wrapper need at least one child element to be scroller."),this.scrollerStyle=this.scroller.style,this._init(i)}Tt.prototype.destroy=function(){var t=this;clearTimeout(this._onResizeHandler),this.tombstonesAnimationHandlers.forEach((function(t){clearTimeout(t)})),this.tombstonesAnimationHandlers=null,this.items.forEach((function(i){i.node&&(t.scrollerEl.removeChild(i.node),i.node=null)})),this.scroller.infiniteScroller=null,this.scroller=null,this.wrapperEl=null,this.scrollerEl=null,this.items=null,this.tombstones=null},Tt.prototype.onScroll=function(){var t=-this.scroller.y,i=t-this.anchorScrollTop;this.anchorItem=0===t?{index:0,offset:0}:this._calculateAnchoredItem(this.anchorItem,i),this.anchorScrollTop=t;var e=this._calculateAnchoredItem(this.anchorItem,this.scroller.wrapperHeight),s=this.anchorItem.index,o=e.index;i<0?(s-=yt,o+=wt):(s-=wt,o+=yt),this.fill(s,o),this.maybeRequestContent()},Tt.prototype.onResize=function(){var t=this.options.createTombstone();t.style.position="absolute",this.scrollerEl.appendChild(t),t.style.display="",this.tombstoneHeight=t.offsetHeight,this.tombstoneWidth=t.offsetWidth,this.scrollerEl.removeChild(t);for(var i=0;i<this.items.length;i++)this.items[i].height=this.items[i].width=0;this.onScroll()},Tt.prototype.fill=function(t,i){this.firstAttachedItem=Math.max(0,t),this.hasMore||(i=Math.min(i,this.items.length)),this.lastAttachedItem=i,this.attachContent()},Tt.prototype.maybeRequestContent=function(){var t=this;if(!this.requestInProgress&&this.hasMore){var i=this.lastAttachedItem-this.loadedItems;i<=0||(this.requestInProgress=!0,this.options.fetch(i).then((function(i){if(t.requestInProgress=!1,i)t.addContent(i);else{t.hasMore=!1;var e=t._removeTombstones(),s=0;t.anchorItem.index<=t.items.length?(s=t._fixScrollPosition(),t._setupAnimations({},s),t.scroller.resetPosition(t.scroller.options.bounceTime)):(t.anchorItem.index-=e,s=t._fixScrollPosition(),t._setupAnimations({},s),t.scroller.stop(),t.scroller.resetPosition(),t.onScroll())}})))}},Tt.prototype.addContent=function(t){for(var i=0;i<t.length;i++)this.items.length<=this.loadedItems&&this._addItem(),this.items[this.loadedItems++].data=t[i];this.attachContent(),this.maybeRequestContent()},Tt.prototype.attachContent=function(){var t=this._collectUnusedNodes(),i=this._createDOMNodes(t);this._cleanupUnusedNodes(t),this._cacheNodeSize();var e=this._fixScrollPosition();this._setupAnimations(i,e)},Tt.prototype.resetMore=function(){this.hasMore=!0},Tt.prototype._removeTombstones=function(){for(var t=void 0,i=0,e=this.items.length,s=0;s<e;s++){var o=this.items[s].node,n=this.items[s].data;o&&!_t(o)||n||(void 0===t&&(t=s),o&&this.scrollerEl.removeChild(o))}return i=e-t,this.items.splice(t),this.lastAttachedItem=Math.min(this.lastAttachedItem,this.items.length),i},Tt.prototype._collectUnusedNodes=function(){for(var t=[],i=0;i<this.items.length;i++)if(i!==this.firstAttachedItem){var e=this.items[i].node;e&&(_t(e)?(this.tombstones.push(e),this.tombstones[this.tombstones.length-1].style.display="none"):t.push(e)),this.items[i].node=null}else i=this.lastAttachedItem-1;return t},Tt.prototype._createDOMNodes=function(t){for(var i={},e=this.firstAttachedItem;e<this.lastAttachedItem;e++){while(this.items.length<=e)this._addItem();var s=this.items[e].node,o=this.items[e].data;if(s){if(!_t(s)||!o)continue;s.style.zIndex=1,i[e]=[s,this.items[e].top-this.anchorScrollTop],this.items[e].node=null}var n=o?this.options.render(o,t.pop()):this._getTombStone();n.style.position="absolute",this.items[e].top=-1,this.scrollerEl.appendChild(n),this.items[e].node=n}return i},Tt.prototype._cleanupUnusedNodes=function(t){while(t.length)this.scrollerEl.removeChild(t.pop())},Tt.prototype._cacheNodeSize=function(){for(var t=this.firstAttachedItem;t<this.lastAttachedItem;t++){var i=this.items[t];if(i.data&&!i.height){var e=_t(i.node);i.height=e?this.tombstoneHeight:i.node.offsetHeight,i.width=e?this.tombstoneWidth:i.node.offsetWidth}}},Tt.prototype._fixScrollPosition=function(){this.anchorScrollTop=0;for(var t=0;t<this.anchorItem.index;t++)this.anchorScrollTop+=this.items[t].height||this.tombstoneHeight;this.anchorScrollTop+=this.anchorItem.offset;var i=this.anchorScrollTop-this.anchorItem.offset,e=this.anchorItem.index;while(e>this.firstAttachedItem)i-=this.items[e-1].height||this.tombstoneHeight,e--;return i},Tt.prototype._setupAnimations=function(t,i){var e=this;for(var s in t){var o=t[s];this.items[s].node.style[X.transform]="translateY("+(this.anchorScrollTop+o[1])+"px) scale("+this.tombstoneWidth/this.items[s].width+", "+this.tombstoneHeight/this.items[s].height+")",this.items[s].node.offsetTop,o[0].offsetTop,this.items[s].node.style[X.transition]=M+"transform "+bt+"ms"}for(var n=this.firstAttachedItem;n<this.lastAttachedItem;n++){var r=t[n];if(r){var a=r[0];a.style[X.transition]=M+"transform "+bt+"ms, opacity "+bt+"ms",a.style[X.transform]="translateY("+i+"px) scale("+this.items[n].width/this.tombstoneWidth+", "+this.items[n].height/this.tombstoneHeight+")",a.style.opacity=0}i!==this.items[n].top&&(r||(this.items[n].node.style[X.transition]=""),this.items[n].node.style[X.transform]="translateY("+i+"px)"),this.items[n].top=i,i+=this.items[n].height||this.tombstoneHeight}this.scroller.maxScrollY=-(i-this.scroller.wrapperHeight+(this.hasMore?At:0));var h=setTimeout((function(){for(var i in t){var s=t[i];s[0].style.display="none",e.tombstones.push(s[0])}}),bt);this.tombstonesAnimationHandlers.push(h)},Tt.prototype._getTombStone=function(){var t=this.tombstones.pop();return t?(t.style.display="",t.style.opacity=1,t.style[X.transform]="",t.style[X.transition]="",t):this.options.createTombstone()},Tt.prototype._addItem=function(){this.items.push({data:null,node:null,height:0,width:0,top:0})},Tt.prototype._calculateAnchoredItem=function(t,i){if(0===i)return t;var e=t.index,s=0;if(i+=t.offset,i<0){while(i<0&&e>0&&this.items[e-1].height)i+=this.items[e-1].height,e--;s=Math.max(-e,Math.ceil(Math.min(i,0)/this.tombstoneHeight))}else{while(i>0&&e<this.items.length&&this.items[e].height&&this.items[e].height<i)i-=this.items[e].height,e++;(e>=this.items.length||!this.items[e].height)&&(s=Math.floor(Math.max(i,0)/this.tombstoneHeight))}return e+=s,i-=s*this.tombstoneHeight,{index:e,offset:i}},j(xt),at(xt),c(xt),ht(xt),lt(xt),pt(xt),mt(xt),ft(xt),gt(xt),vt(xt),St(xt),xt.Version="1.15.2";var Mt=xt,It=e("bc3a"),kt=e.n(It),Pt=e("2f62");function Yt(t,i){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);i&&(s=s.filter((function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable}))),e.push.apply(e,s)}return e}function Et(t){for(var i=1;i<arguments.length;i++){var e=null!=arguments[i]?arguments[i]:{};i%2?Yt(Object(e),!0).forEach((function(i){Object(n["a"])(t,i,e[i])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):Yt(Object(e)).forEach((function(i){Object.defineProperty(t,i,Object.getOwnPropertyDescriptor(e,i))}))}return t}var Ct=e("bb7f"),Xt={name:"app",data:function(){return{isShowTopLoading:!1,isFirstGetMessage:!0,chatValue:"",emojis:Ct.emojiData,showEmoji:!1,isUserSendLongTimeSystemMessage:!1,isAdminSendLongTimeSystemMessage:!1,isInputPongIng:!1,isSendPong:!1,qiniuObservable:null,inputPongIngString:"对方正在输入...",scroll:null,handshakeKeywordList:[],searchHandshakeTimer:null}},created:function(){this.init()},computed:Et({account:function(){return this.isArtificial?this.artificialAccount:this.robotAccount},viewMessage:function(){for(var t=this.messages,i=0;i<t.length;i++)0==i&&(t[i].isShowDate=!0),i<t.length-1&&(t[i+1].isShowDate=!1,t[i+1].timestamp-120>t[i].timestamp&&(t[i+1].isShowDate=!0));return t},messages:function(){var t=this;return this.$store.getters.messages.map((function(i){return t.handlerMessage(i)}))}},Object(Pt["b"])(["platform","isArtificial","isShowHeader","isMobile","uid","userAccount","artificialAccount","robotInfo","robotAccount","isLoadMorEnd","userLocal","isLoadMorLoading","userInfo","isSafari","isIOS","configs","isJudgeBigScreen"])),mounted:function(){var t=this;document.title="在线客服",setTimeout((function(){t.scroll=new Mt(t.$refs.miniImBody,{click:!0,tab:!0,scrollY:!0,scrollbar:!0,bounceTime:400,preventDefaultException:{className:/(^|\s)text(\s|$)/},mouseWheel:!0}),t.scroll.on("touchEnd",(function(i){i.y>30&&t.loadMorData()})),t.addSendButtonTouchEventListener(),t.createLinkQuery(),t.scrollIntoBottom()}),500),document.addEventListener("paste",this.inputPaste,!1)},beforeDestroy:function(){this.$store.dispatch("onToggleWindow",0)},methods:{init:function(){var t=this;this.$store.commit("updateState",{isShowPageLoading:!0}),null!=this.$mimcInstance.user&&this.$mimcInstance.user.isLogin()?(this.$store.commit("updateState",{isShowPageLoading:!1}),this.handelEvent(),this.$store.dispatch("onCleanRead"),this.$store.dispatch("onToggleWindow",1),this.getMessageRecord(),this.scrollIntoBottom(),this.onServciceLastMessageTimeNotCallBack()):setTimeout((function(){return t.init()}),1e3)},userLogin:function(){var t=this;this.$mimcInstance.init({type:0,address:this.userLocal,uid:this.uid||0,platform:this.platform,account_id:this.userAccount||0},(function(i){i||setTimeout((function(){return t.userLogin()}),1e3)})),console.log("重新登录中...")},onLongTraining:function(){var t=this;this.isShowTopLoading&&(console.log("长轮训获取新消息.."),this.$store.dispatch("onGetMessages",{timestamp:0,oldMsg:[],callback:function(){return t.scrollIntoBottom()}}),setTimeout((function(){return t.onLongTraining()}),2e3))},handelEvent:function(){var t=this;this.$mimcInstance.addEventListener("receiveP2PMsg",this.receiveP2PMsg),this.$mimcInstance.addEventListener("disconnect",(function(){console.log("链接断开!"),t.$mimcInstance.user.logout(),t.isShowTopLoading=!0,t.userLogin(),t.onLongTraining()})),this.$mimcInstance.addEventListener("statusChange",(function(i,e,s,o){i?t.isShowTopLoading=!1:(t.userLogin(),t.onLongTraining()),console.log("状态发生变化",i,e,s,o)})),this.$mimcInstance.addEventListener("serverAck",(function(i,e,s,o){console.log("发送消息服务器ack",i,e,s,o),localStorage.setItem("userLastCallBackMessageTime",Date.now()),t.isUserSendLongTimeSystemMessage=!1})),this.onCheckIsloogTimeNotCallBack(),setTimeout((function(){return t.isShowTopLoading=!1}),1e3)},enterShift:function(t){this.isMobile||"Enter"!=t.code&&(this.chatValue=this.chatValue+"\n")},addSendButtonTouchEventListener:function(){var t=this;this.isIOS?document.addEventListener("touchstart",(function(i){"mini-input-send"==i.target.getAttribute("class")&&t.sendTextMessage(),"sendKnowledgeMessage"==i.target.getAttribute("class")&&(console.log("监听发送按钮触摸事件",i.target.getAttribute("data")),t.sendKnowledgeMessage(i.target.getAttribute("data")))}),!1):this.$refs.sendButton.addEventListener("click",this.sendTextMessage,!1)},isShowInfo:function(t){return-1==["end","transfer","cancel","timeout","system"].indexOf(t)},clickPhoto:function(t){if(-1==t.indexOf("http")){var i=new Image;i.src=t;var e=window.open("","_blank");e.document.write(i.outerHTML),e.document.title="图片",e.document.close()}else window.open(t)},loadMorData:function(){var t=this;this.isLoadMorLoading||this.isLoadMorEnd||(this.$store.commit("updateState",{isLoadMorLoading:!0}),setTimeout((function(){t.getMessageRecord(),t.$store.commit("updateState",{isLoadMorLoading:!1})}),1e3))},localAdmin:function(t){var i=localStorage.getItem("admin_"+t);return i?JSON.parse(i):null},localRobot:function(t){var i=localStorage.getItem("robot_"+t);return i?JSON.parse(i):null},clickEmoji:function(t){this.showEmoji=!1,this.chatValue=this.chatValue+t,this.scrollIntoBottom()},sendPhotoMessageEvent:function(t){var i=t.target,e=i.files[0];this.sendPhotoMessage(e)},sendPhotoMessage:function(t){var i=new FileReader;i.readAsDataURL(t);var e,s=this,o=parseInt(1e4*Math.random()*(new Date).getTime())+t.name.substr(t.name.lastIndexOf("."));i.onload=function(){var i=function(){e.percent=0,s.qiniuObservable=null,s.removeMessage(s.userInfo.id,e.key),Object(r["Toast"])({message:"上传失败,请重新上传!"});var t=this.$mimcInstance.createLocalMessage("system",s.account,"您刚刚上传的图片失败了,请重新上传!");s.messages.push(s.handlerMessage(t)),s.scrollIntoBottom()},n=function(t){s.qiniuObservable=null,e.percent=100;var i=s.configs.upload_host+"/"+t;s.$mimcInstance.sendMessage("photo",s.account,i)};e=s.$mimcInstance.createLocalMessage("photo",s.account,s.result),e["percent"]=0,e.isShowCancel=!0,setTimeout((function(){s.updateMessageHideCancel(e)}),1e4),s.messages.push(s.handlerMessage(e));var a=Object.assign({},e);a.payload=s.configs.upload_host+"/"+o,s.$previewRefresh(),s.scrollIntoBottom(),s.qiniuObservable=s.$uploadFile({file:t,secret:s.configs.upload_secret,mode:s.configs.upload_mode,percent:function(t){e.percent=Math.ceil(t.total.percent),t.total.size<1&&(s.qiniuObservable.unsubscribe(),s.cancelMessage(e.key),Object(r["Toast"])({message:"上传失败,该图片已损坏!"}))},success:function(t){n(t)},fail:function(){i()}})}},scrollIntoBottom:function(){var t=this;setTimeout((function(){var i=t.$refs.miniImBody.querySelectorAll("li");t.scroll&&t.scroll.scrollToElement(i[i.length-1])}),50)},chatInputFocus:function(){this.scrollIntoBottom(),this.showEmoji=!1},chatInputBlur:function(){window.chatInputInterval=null,window.scroll(0,0)},receiveP2PMsg:function(t){if(0!=this.configs.open_workorder||"workorder"!=t.biz_type){if("transfer"==t.biz_type){this.$store.commit("updateState",{isArtificial:!0,artificialAccount:t.transfer_account});var i=JSON.parse(t.payload);localStorage.setItem("admin_"+i.id,JSON.stringify(i)),localStorage.setItem("adminLastCallBackMessageTime_"+i.id,Date.now()),this.isAdminSendLongTimeSystemMessage=!1}if(!this.isArtificial||"text"!=t.biz_type&&"photo"!=t.biz_type&&"cancel"!=t.biz_type||(localStorage.setItem("adminLastCallBackMessageTime_"+this.account,Date.now()),this.isAdminSendLongTimeSystemMessage=!1),"cancel"==t.biz_type&&this.removeMessage(t.from_account,t.payload),"end"!=t.biz_type&&"timeout"!=t.biz_type||this.$store.commit("updateState",{isArtificial:!1,artificialAccount:null}),"pong"!=t.biz_type){if("search_knowledge"==t.biz_type)return this.handshakeKeywordList=[],void(""!=t.payload&&(this.handshakeKeywordList=JSON.parse(t.payload)));this.messagesPushMemory(t),this.scrollIntoBottom(),this.$previewRefresh(),window.parent.postMessage({newMessage:1},"*")}else this.inputPongIng()}},inputPongIng:function(){var t=this;this.isInputPongIng||(this.isInputPongIng=!0,setTimeout((function(){t.inputPongIngString="对方正在输入."}),500),setTimeout((function(){t.inputPongIngString="对方正在输入.."}),1500),setTimeout((function(){t.inputPongIngString="对方正在输入...",t.isInputPongIng=!1}),3e3))},enterSendMessage:function(){this.isMobile||(this.sendTextMessage(),this.$refs.textarea.focus())},updateMessageHideCancel:function(t){for(var i=this.$store.getters.messages,e=0;e<i.length;e++)if(t.key==i[e].key){i[e].isShowCancel=!1;break}this.$store.commit("updateState",{messages:i})},sendTextMessage:function(){var t=this;if(0!=this.userInfo.online){var i=this.chatValue.trim();if(""!=i){var e=this.$mimcInstance.sendMessage("text",this.account,i);e.isShowCancel=!0,setTimeout((function(){t.updateMessageHideCancel(e)}),1e4),this.messagesPushMemory(e),this.chatValue="",this.handshakeKeywordList=[]}}else Object(r["Toast"])({message:"您貌似掉线了"})},cancelMessage:function(t){var i=this.$mimcInstance.sendMessage("cancel",this.account,t);kt.a.post("/public/message/cancel",{to_account:this.account,from_account:this.userInfo.id,key:t}),this.messagesPushMemory(i),this.removeMessage(this.userInfo.id,t),this.qiniuObservable&&this.qiniuObservable.unsubscribe()},sendKnowledgeMessage:function(t){this.handshakeKeywordList=[];var i=this.$mimcInstance.sendMessage("text",this.account,t);this.messagesPushMemory(i),this.chatValue=""},headRightBtn:function(){var t=this;if(!window.isClickHeadRightBtn){window.isClickHeadRightBtn=!0;var i=this.$mimcInstance;if(this.isArtificial)return r["MessageBox"].confirm("您确定关闭此次会话吗?","温馨提示! ").then((function(){var e=i.sendMessage("end",t.account,"");t.messagesPushMemory(e),t.$store.commit("updateState",{isArtificial:!1,artificialAccount:null})})),void setTimeout((function(){return window.isClickHeadRightBtn=!1}),3e3);var e=i.sendMessage("text",this.account,"人工");this.messagesPushMemory(e),setTimeout((function(){return window.isClickHeadRightBtn=!1}),3e3)}},messagesPushMemory:function(t){if("pong"!=t.biz_type&&"handshake"!=t.biz_type&&"into"!=t.biz_type){var i=JSON.parse(JSON.stringify(this.messages));i.push(this.handlerMessage(t)),this.$store.commit("updateState",{messages:i}),this.scrollIntoBottom()}},handlerMessage:function(t){var i="http://qiniu.cmp520.com/avatar_degault_3.png",e=this.localAdmin(t.from_account),s=this.localRobot(t.from_account);return e&&t.from_account==e.id?(t.nickname=e.nickname,t.avatar=""==e.avatar?i:e.avatar):s&&t.from_account==s.id?(t.nickname=s.nickname,t.avatar=""==s.avatar?i:s.avatar):t.from_account==this.userInfo.id&&(t.nickname=this.userInfo.nickname,-1!=this.userInfo.nickname.indexOf(this.userInfo.id)&&(t.nickname="我"),t.avatar=""==this.userInfo.avatar?i:this.userInfo.avatar),t},getMessageRecord:function(){var t=this,i=0==this.messages.length?parseInt(((new Date).getTime()+" ").substr(0,10)):this.messages[0].timestamp,e=this.messages;this.$store.dispatch("onGetMessages",{timestamp:i,oldMsg:e,callback:function(){return t.scrollIntoBottom()}})},keyUpEvent:function(){var t=this;this.isArtificial&&(this.isSendPong||(this.isSendPong=!0,setTimeout((function(){return t.isSendPong=!1}),100),this.$mimcInstance.sendMessage("pong",this.account,this.chatValue)))},removeMessage:function(t,i){for(var e=[],s=0;s<this.messages.length;s++)this.messages[s].key==i&&this.messages[s].from_account==t||e.push(this.messages[s]);this.$store.commit("updateState",{messages:e})},createLinkQuery:function(){var t=this.isArtificial?0:1,i=0==t?this.artificialAccount:this.robotAccount,e=this.isMobile?1:0,s=this.isShowHeader?1:0,o=this.platform?this.platform:1,n=this.userAccount?"&u="+this.userAccount:"",r=this.uid?"&uid="+this.uid:"",a="?h="+s+"&m="+e+"&p="+o+"&r="+t+"&a="+i+n+r;history.replaceState(null,null,location.origin+"/#"+this.$route.path+a),null!=this.userAccount&&"null"!=this.userAccount&&""!=this.userAccount&&localStorage.setItem("urlQuery",a)},clickCloseWindow:function(){window.parent.postMessage({clickCloseWindow:!0},"*")},onCheckIsloogTimeNotCallBack:function(){var t=this,i=localStorage.getItem("userLastCallBackMessageTime")||Date.now();if(this.isArtificial&&!this.isUserSendLongTimeSystemMessage&&Date.now()-i>=3e5){var e=this.$mimcInstance.createLocalMessage("system",this.account,"您已超过5分钟未回复消息,系统3分钟后将结束对话");this.messages.push(this.handlerMessage(e)),this.isUserSendLongTimeSystemMessage=!0,this.scrollIntoBottom()}setTimeout((function(){return t.onCheckIsloogTimeNotCallBack()}),1e4)},onServciceLastMessageTimeNotCallBack:function(){var t=this;if(this.robotInfo){var i=this.robotInfo.loog_time_wait_text,e=localStorage.getItem("adminLastCallBackMessageTime_"+this.account)||Date.now();if(this.isArtificial&&!this.isAdminSendLongTimeSystemMessage&&""!=i.trim()&&Date.now()-e>=12e4){var s=this.$mimcInstance.createLocalMessage("text",this.account,i);s.from_account=this.robotAccount,this.messages.push(this.handlerMessage(s)),this.isAdminSendLongTimeSystemMessage=!0,this.scrollIntoBottom()}setTimeout((function(){return t.onServciceLastMessageTimeNotCallBack()}),1e4)}},onSearchHandshake:function(){var t=this;this.chatValue&&!this.isArtificial?(this.searchHandshakeTimer&&clearTimeout(this.searchHandshakeTimer),this.searchHandshakeTimer=setTimeout((function(){t.$mimcInstance.sendMessage("search_knowledge",t.robotAccount,t.chatValue),t.searchHandshakeTimer=null}),500)):this.handshakeKeywordList=[]},inputPaste:function(t){if(!this.isMobile){var i=this,e=t.clipboardData,s=window.navigator.userAgent;if(t.clipboardData&&t.clipboardData.items&&!(e.items&&2===e.items.length&&"string"===e.items[0].kind&&"file"===e.items[1].kind&&e.types&&2===e.types.length&&"text/plain"===e.types[0]&&"Files"===e.types[1]&&s.match(/Macintosh/i)&&Number(s.match(/Chrome\/(\d{2})/i)[1])<49))for(var o=0;o<e.items.length;o++){var n=e.items[o];if("file"==n.kind){var r=n.getAsFile();if(0===r.size)return;i.sendPhotoMessage(r)}}}}},watch:{messages:function(){var t=this;setTimeout((function(){t.scroll&&t.scroll.refresh(),t.$previewRefresh()}),50)},isArtificial:function(t){this.createLinkQuery(),localStorage.setItem("isArtificial",t),localStorage.setItem("artificialTime",Date.now()),t||localStorage.removeItem("artificialTime")},artificialAccount:function(){localStorage.setItem("artificialAccount",this.artificialAccount)},userInfo:function(){this.createLinkQuery()},chatValue:function(){this.onSearchHandshake()}}},Dt=Xt,Lt=(e("cde7"),e("2877")),Ot=Object(Lt["a"])(Dt,s,o,!1,null,null,null);i["default"]=Ot.exports},fdef:function(t,i){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"}}]);
//# sourceMappingURL=chunk-5e6009ff.20ab0e77.js.map
\ No newline at end of file
//# sourceMappingURL=chunk-5e6009ff.cb477013.js.map
\ No newline at end of file
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-bd7efe5c"],{3563:function(t,e,A){"use strict";var r=A("b9df"),o=A.n(r);o.a},"7d02":function(t,e){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAEMklEQVR4Xu2dbXbaMBBFFVZWnyysYWEcJRtzetzQpglftuaJ8jSXv8jD6M3Vk4SFeSq8UivwlLr3dL4AQHIIAAAAkiuQvPs4AAAkVyB593EAAEiuQPLu4wAAkFyB5N3HAQDAR4Fa67tDttM02Qwsm0SXwgOAHn8A0GtacIAOouIAfUTFATroigN0EPWKA7x2+ri1YX98bwgAa6Xb2O7CIvB1mqZpYyhJ81prLaUAgETNFUEAYIVIG5tI1gC11mUULKPhf7wezgHuIcI8z/vn5+eX6GcBQEDBS1NAIOTqSwHgUyocYDU2pw1xgIB4OMBRPNYAAYoaL3WZAtR79JMtVynlEaeA7v22AECV5J9B4rINLGW5HTBJIKi1/iylnKz2Vdp2XQOokrwFQKOLqi4750oyAA6Hw8tut1sg+PJSaTsCAKpCKuPIAMAB/imLy3kApoBj0VQ2dWMKUI5cVSwcYFESAOI8MQUwBbALiI8j3wg4gG/tJJkDgERG3yAA4Fs7SeYAIJHRNwgA+NZOkjkASGT0DQIAvrWTZA4AEhl9gwCAb+0kmQOAREbfIADgWztJ5gAgkdE3CAD41k6SOQBIZPQNkhKAS532LePvzJtOCaUE4NJJWAD4VEB12uohTwXjAJ+FTukAAAAAZ8/BMQXkmgLO/eLGmYF9y8/FUk4BzlVW5w4AakXN4gGAWcHU6QKAWlGzeABgVjB1ugCgVtQsHgCYFUydLgCoFTWLBwBmBVOnCwBqRc3iAYBZwdTppgTg2OnlCSM3b1fvdrv3a+2W988VZbnm0nvqIh7jvXEvYKWy3A5OfjuYE0GDALA84XKapv3Kgf+3GQAMAkDruTUAGAQAHOCL9+U7FdwKALuAQRygdQrYumYYuX3K7wFGLujWvgHAVsUGaw8AgxV0a3esAWhdBG4VaeT21gCwCIyjaQ0ADgAATV8Fx2UbJ4K1AzAFxEEEgLiG1hGsAWANEGfPGoBRp4DjfwZvqu48z28tf/duDcCoDtDy93WtgwEANo2z+zQGgG86X/r38Fbq71PG9k8BAAA4e9L4GlKtg8F6CmjtdPvYvM+VOAAO0PT8onS/Cxh1F3Afn/n4FOspAADiqABAXEPrCABgXb548tYAjLoLiJd1fQQAWK/VkC2tAWARGGfSGgCmgOQA4AAAwJnAIAPWUwAOEKw+3wTGBXSPYO0ALALj+F15XpJker35FK41Xch2IGSNJqo21g7AGiCOgTUATAHJAcABAECyUInL6BvBegrAAeLgWe8CAKAfAKr1VddtYCnlNS4BEUopJ4dQXQCgep0UAIBOwrqEBQCXSnXKEwA6CWsUVrLF7r0INNLTK9VHdAAvBQfItuWnZt+7LXGAAbRM2wUASFv6j44DAAAkVyB593EAAEiuQPLu4wAAkFyB5N3HAQAguQLJu48DJAfgF+1bWNtJgJDcAAAAAElFTkSuQmCC"},b9df:function(t,e,A){},fb09:function(t,e,A){"use strict";A.r(e);var r=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"container"},[t.isShowHeader?r("mt-header",{attrs:{fixed:"",title:"我的工单"}},[r("div",{attrs:{slot:"left"},slot:"left"},[r("mt-button",{attrs:{icon:"back"},on:{click:function(e){return t.$router.go(-1)}}})],1),r("mt-button",{attrs:{slot:"right"},on:{click:function(e){return t.$router.push("/workorder/create")}},slot:"right"},[r("span",[t._v("创建工单")])])],1):t._e(),r("div",{staticClass:"list",class:{"hide-header":!t.isShowHeader}},[t.workorders.length<=0?r("div",{staticClass:"no-data"},[r("img",{attrs:{src:A("7d02"),alt:""}}),r("div",[t._v("没有相关记录~")])]):r("ul",[t._l(t.workorders,(function(e,A){return[r("li",{key:A,on:{click:function(A){return t.$router.push("/workorder/detail/"+e.id)}}},[r("div",{staticClass:"title"},[t._v(t._s(e.title))]),r("div",[r("span",{staticClass:"type"},[t._v(t._s(t.getTypeName(e.tid)))]),r("span",{staticClass:"date"},[t._v(t._s(t.$formatDate(e.create_at)))])]),1==e.status?r("i",{staticStyle:{color:"#8bc34a"}},[t._v("已回复")]):t._e(),3==e.status?r("i",{staticStyle:{color:"#ccc"}},[t._v("已结束")]):t._e(),0==e.status?r("i",{staticStyle:{color:"#FF9800"}},[t._v("待处理")]):t._e(),2==e.status?r("i",{staticStyle:{color:"#FF9800"}},[t._v("待回复")]):t._e()])]}))],2)]),t.isShowHeader?t._e():r("div",{staticClass:"floting",on:{click:function(e){return t.$router.push("/workorder/create")}}})],1)},o=[],n=(A("8e6e"),A("ac6a"),A("456d"),A("bd86")),s=A("2f62");function i(t,e){var A=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),A.push.apply(A,r)}return A}function c(t){for(var e=1;e<arguments.length;e++){var A=null!=arguments[e]?arguments[e]:{};e%2?i(Object(A),!0).forEach((function(e){Object(n["a"])(t,e,A[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(A)):i(Object(A)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(A,e))}))}return t}var a={name:"workorder",components:{},data:function(){return{}},created:function(){document.title="我的工单"},computed:c({},Object(s["b"])(["isShowHeader","workorders","workorderTypes"])),mounted:function(){this.$store.dispatch("onGetWorkorderTypes"),this.$store.dispatch("onGetWorkorders")},methods:{getTypeName:function(t){try{return this.workorderTypes.filter((function(e){return e.id==t}))[0].title}catch(e){return console.log(e),""}}}},u=a,d=(A("3563"),A("2877")),l=Object(d["a"])(u,r,o,!1,null,"6ca82fb2",null);e["default"]=l.exports}}]);
//# sourceMappingURL=chunk-bd7efe5c.5b3512bd.js.map
\ No newline at end of file
//# sourceMappingURL=chunk-bd7efe5c.3bdd8028.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/views/workorder.vue?edfc","webpack:///./src/assets/workorder.png","webpack:///./src/views/workorder.vue?3e24","webpack:///src/views/workorder.vue","webpack:///./src/views/workorder.vue?206b","webpack:///./src/views/workorder.vue"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","on","$event","$router","go","push","_v","_e","class","isShowHeader","workorders","length","_l","item","index","key","id","_s","title","getTypeName","tid","$formatDate","create_at","status","staticStyle","staticRenderFns","name","components","data","created","document","computed","mounted","$store","dispatch","methods","console","log","e","component"],"mappings":"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","file":"js/chunk-bd7efe5c.3bdd8028.js","sourcesContent":["import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=style&index=0&id=6ca82fb2&lang=stylus&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=style&index=0&id=6ca82fb2&lang=stylus&scoped=true&\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAEMklEQVR4Xu2dbXbaMBBFFVZWnyysYWEcJRtzetzQpglftuaJ8jSXv8jD6M3Vk4SFeSq8UivwlLr3dL4AQHIIAAAAkiuQvPs4AAAkVyB593EAAEiuQPLu4wAAkFyB5N3HAQDAR4Fa67tDttM02Qwsm0SXwgOAHn8A0GtacIAOouIAfUTFATroigN0EPWKA7x2+ri1YX98bwgAa6Xb2O7CIvB1mqZpYyhJ81prLaUAgETNFUEAYIVIG5tI1gC11mUULKPhf7wezgHuIcI8z/vn5+eX6GcBQEDBS1NAIOTqSwHgUyocYDU2pw1xgIB4OMBRPNYAAYoaL3WZAtR79JMtVynlEaeA7v22AECV5J9B4rINLGW5HTBJIKi1/iylnKz2Vdp2XQOokrwFQKOLqi4750oyAA6Hw8tut1sg+PJSaTsCAKpCKuPIAMAB/imLy3kApoBj0VQ2dWMKUI5cVSwcYFESAOI8MQUwBbALiI8j3wg4gG/tJJkDgERG3yAA4Fs7SeYAIJHRNwgA+NZOkjkASGT0DQIAvrWTZA4AEhl9gwCAb+0kmQOAREbfIADgWztJ5gAgkdE3CAD41k6SOQBIZPQNkhKAS532LePvzJtOCaUE4NJJWAD4VEB12uohTwXjAJ+FTukAAAAAZ8/BMQXkmgLO/eLGmYF9y8/FUk4BzlVW5w4AakXN4gGAWcHU6QKAWlGzeABgVjB1ugCgVtQsHgCYFUydLgCoFTWLBwBmBVOnCwBqRc3iAYBZwdTppgTg2OnlCSM3b1fvdrv3a+2W988VZbnm0nvqIh7jvXEvYKWy3A5OfjuYE0GDALA84XKapv3Kgf+3GQAMAkDruTUAGAQAHOCL9+U7FdwKALuAQRygdQrYumYYuX3K7wFGLujWvgHAVsUGaw8AgxV0a3esAWhdBG4VaeT21gCwCIyjaQ0ADgAATV8Fx2UbJ4K1AzAFxEEEgLiG1hGsAWANEGfPGoBRp4DjfwZvqu48z28tf/duDcCoDtDy93WtgwEANo2z+zQGgG86X/r38Fbq71PG9k8BAAA4e9L4GlKtg8F6CmjtdPvYvM+VOAAO0PT8onS/Cxh1F3Afn/n4FOspAADiqABAXEPrCABgXb548tYAjLoLiJd1fQQAWK/VkC2tAWARGGfSGgCmgOQA4AAAwJnAIAPWUwAOEKw+3wTGBXSPYO0ALALj+F15XpJker35FK41Xch2IGSNJqo21g7AGiCOgTUATAHJAcABAECyUInL6BvBegrAAeLgWe8CAKAfAKr1VddtYCnlNS4BEUopJ4dQXQCgep0UAIBOwrqEBQCXSnXKEwA6CWsUVrLF7r0INNLTK9VHdAAvBQfItuWnZt+7LXGAAbRM2wUASFv6j44DAAAkVyB593EAAEiuQPLu4wAAkFyB5N3HAQAguQLJu48DJAfgF+1bWNtJgJDcAAAAAElFTkSuQmCC\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.isShowHeader)?_c('mt-header',{attrs:{\"fixed\":\"\",\"title\":\"我的工单\"}},[_c('div',{attrs:{\"slot\":\"left\"},slot:\"left\"},[_c('mt-button',{attrs:{\"icon\":\"back\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}})],1),_c('mt-button',{attrs:{\"slot\":\"right\"},on:{\"click\":function($event){return _vm.$router.push('/workorder/create')}},slot:\"right\"},[_c('span',[_vm._v(\"创建工单\")])])],1):_vm._e(),_c('div',{staticClass:\"list\",class:{'hide-header': !_vm.isShowHeader}},[(_vm.workorders.length <= 0)?_c('div',{staticClass:\"no-data\"},[_c('img',{attrs:{\"src\":require(\"../assets/workorder.png\"),\"alt\":\"\"}}),_c('div',[_vm._v(\"没有相关记录~\")])]):_c('ul',[_vm._l((_vm.workorders),function(item,index){return [_c('li',{key:index,on:{\"click\":function($event){return _vm.$router.push('/workorder/detail/'+item.id)}}},[_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(item.title))]),_c('div',[_c('span',{staticClass:\"type\"},[_vm._v(_vm._s(_vm.getTypeName(item.tid)))]),_c('span',{staticClass:\"date\"},[_vm._v(_vm._s(_vm.$formatDate(item.create_at)))])]),(item.status == 1)?_c('i',{staticStyle:{\"color\":\"#8bc34a\"}},[_vm._v(\"已回复\")]):_vm._e(),(item.status == 3)?_c('i',{staticStyle:{\"color\":\"#ccc\"}},[_vm._v(\"已结束\")]):_vm._e(),(item.status == 0)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待处理\")]):_vm._e(),(item.status == 2)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待回复\")]):_vm._e()])]})],2)]),(!_vm.isShowHeader)?_c('div',{staticClass:\"floting\",on:{\"click\":function($event){return _vm.$router.push('/workorder/create')}}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"container\">\n \n <mt-header v-if=\"isShowHeader\" fixed title=\"我的工单\">\n <div slot=\"left\">\n <mt-button @click=\"$router.go(-1)\" icon=\"back\"></mt-button>\n </div>\n <mt-button @click=\"$router.push('/workorder/create')\" slot=\"right\">\n <span>创建工单</span>\n </mt-button>\n </mt-header>\n <div class=\"list\" :class=\"{'hide-header': !isShowHeader}\">\n <div class=\"no-data\" v-if=\"workorders.length <= 0\">\n <img src=\"../assets/workorder.png\" alt=\"\">\n <div>没有相关记录~</div>\n </div>\n <ul v-else>\n <template v-for=\"(item,index) in workorders\">\n <li :key=\"index\" @click=\"$router.push('/workorder/detail/'+item.id)\">\n <div class=\"title\">{{item.title}}</div>\n <div>\n <span class=\"type\">{{getTypeName(item.tid)}}</span>\n <span class=\"date\">{{$formatDate(item.create_at)}}</span>\n </div>\n <i v-if=\"item.status == 1\" style=\"color:#8bc34a;\">已回复</i>\n <i v-if=\"item.status == 3\" style=\"color:#ccc\">已结束</i>\n <i v-if=\"item.status == 0\" style=\"color:#FF9800\">待处理</i>\n <i v-if=\"item.status == 2\" style=\"color:#FF9800\">待回复</i>\n </li>\n </template>\n </ul> \n </div>\n <div v-if=\"!isShowHeader\" class=\"floting\" @click=\"$router.push('/workorder/create')\"></div>\n </div>\n</template>\n<script>\nimport { mapGetters } from 'vuex'\nexport default {\n name: \"workorder\",\n components: {},\n data() {\n return {};\n },\n created() {\n document.title = \"我的工单\"\n },\n computed: {\n ...mapGetters([\n 'isShowHeader',\n 'workorders',\n 'workorderTypes',\n ])\n },\n mounted() {\n // 获取工单类型\n this.$store.dispatch(\"onGetWorkorderTypes\");\n // 获取工单列表\n this.$store.dispatch(\"onGetWorkorders\");\n },\n methods: {\n getTypeName(tid){\n try{\n return this.workorderTypes.filter((i)=>i.id == tid)[0].title\n }catch(e){\n console.log(e)\n return \"\"\n }\n }\n }\n};\n</script>\n<style lang=\"stylus\" scoped>\n.no-data{\n text-align center\n padding-top 50px\n img{\n width 50px\n height 50px\n }\n div{\n color #666\n font-size 14px\n }\n}\n.list{\n padding-top 50px\n &.hide-header{\n padding-top 0\n }\n li{\n padding 10px 20px\n background url('../assets/workorder.png') 10px center no-repeat \n background-size 25px\n padding-left 40px\n padding-right 70px\n border-bottom 1px solid #ddd\n position relative\n height 40px\n .title{\n font-size 15px\n color #333\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n .type{\n font-size 13px\n color #666\n }\n .date{\n margin-left 10px\n font-size 13px\n color #999\n }\n i{\n font-style normal\n font-size 13px\n position absolute\n right 10px\n top 0\n height: 20px;\n bottom 0\n margin auto 0\n }\n }\n}\n.floting{\n width 30px;\n height 30px;\n border-radius 100%;\n background #26a2ff url(\"../assets/send.png\") center center no-repeat\n background-size 15px\n position fixed\n bottom 30px\n right 10px\n}\n\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./workorder.vue?vue&type=template&id=6ca82fb2&scoped=true&\"\nimport script from \"./workorder.vue?vue&type=script&lang=js&\"\nexport * from \"./workorder.vue?vue&type=script&lang=js&\"\nimport style0 from \"./workorder.vue?vue&type=style&index=0&id=6ca82fb2&lang=stylus&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ca82fb2\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
\ No newline at end of file
{"version":3,"sources":["webpack:///./src/views/workorder.vue?edfc","webpack:///./src/assets/workorder.png","webpack:///./src/views/workorder.vue?3e24","webpack:///src/views/workorder.vue","webpack:///./src/views/workorder.vue?206b","webpack:///./src/views/workorder.vue?1a2d"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","on","$event","$router","go","push","_v","_e","class","isShowHeader","workorders","length","_l","item","index","key","id","_s","title","getTypeName","tid","$formatDate","create_at","status","staticStyle","staticRenderFns","name","components","data","created","document","computed","mounted","$store","dispatch","methods","console","log","e","component"],"mappings":"gHAAA,yBAAwiB,EAAG,G,qBCA3iBA,EAAOC,QAAU,8/C,gECAjB,IAAIC,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,aAAa,CAAEN,EAAgB,aAAEI,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQ,GAAG,MAAQ,SAAS,CAACH,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,QAAQC,KAAK,QAAQ,CAACJ,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,QAAQE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIW,QAAQC,IAAI,QAAQ,GAAGR,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,SAASE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIW,QAAQE,KAAK,uBAAuBL,KAAK,SAAS,CAACJ,EAAG,OAAO,CAACJ,EAAIc,GAAG,aAAa,GAAGd,EAAIe,KAAKX,EAAG,MAAM,CAACE,YAAY,OAAOU,MAAM,CAAC,eAAgBhB,EAAIiB,eAAe,CAAEjB,EAAIkB,WAAWC,QAAU,EAAGf,EAAG,MAAM,CAACE,YAAY,WAAW,CAACF,EAAG,MAAM,CAACG,MAAM,CAAC,IAAM,EAAQ,QAA2B,IAAM,MAAMH,EAAG,MAAM,CAACJ,EAAIc,GAAG,eAAeV,EAAG,KAAK,CAACJ,EAAIoB,GAAIpB,EAAc,YAAE,SAASqB,EAAKC,GAAO,MAAO,CAAClB,EAAG,KAAK,CAACmB,IAAID,EAAMb,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIW,QAAQE,KAAK,qBAAqBQ,EAAKG,OAAO,CAACpB,EAAG,MAAM,CAACE,YAAY,SAAS,CAACN,EAAIc,GAAGd,EAAIyB,GAAGJ,EAAKK,UAAUtB,EAAG,MAAM,CAACA,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACN,EAAIc,GAAGd,EAAIyB,GAAGzB,EAAI2B,YAAYN,EAAKO,SAASxB,EAAG,OAAO,CAACE,YAAY,QAAQ,CAACN,EAAIc,GAAGd,EAAIyB,GAAGzB,EAAI6B,YAAYR,EAAKS,iBAAiC,GAAfT,EAAKU,OAAa3B,EAAG,IAAI,CAAC4B,YAAY,CAAC,MAAQ,YAAY,CAAChC,EAAIc,GAAG,SAASd,EAAIe,KAAqB,GAAfM,EAAKU,OAAa3B,EAAG,IAAI,CAAC4B,YAAY,CAAC,MAAQ,SAAS,CAAChC,EAAIc,GAAG,SAASd,EAAIe,KAAqB,GAAfM,EAAKU,OAAa3B,EAAG,IAAI,CAAC4B,YAAY,CAAC,MAAQ,YAAY,CAAChC,EAAIc,GAAG,SAASd,EAAIe,KAAqB,GAAfM,EAAKU,OAAa3B,EAAG,IAAI,CAAC4B,YAAY,CAAC,MAAQ,YAAY,CAAChC,EAAIc,GAAG,SAASd,EAAIe,YAAW,KAAOf,EAAIiB,aAA4HjB,EAAIe,KAAlHX,EAAG,MAAM,CAACE,YAAY,UAAUG,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOV,EAAIW,QAAQE,KAAK,0BAAmC,IAC/mDoB,EAAkB,G,ooBCoCtB,OACEC,KAAM,YACNC,WAAY,GACZC,KAHF,WAII,MAAO,IAETC,QANF,WAOIC,SAASZ,MAAQ,QAEnBa,SAAU,EAAZ,GACA,gBACA,eACA,aACA,oBAGEC,QAhBF,WAkBIvC,KAAKwC,OAAOC,SAAS,uBAErBzC,KAAKwC,OAAOC,SAAS,oBAEvBC,QAAS,CACPhB,YADJ,SACA,GACM,IACN,0EACA,SAEQ,OADAiB,QAAQC,IAAIC,GACL,OCjEuW,I,wBCQlXC,EAAY,eACd,EACAhD,EACAkC,GACA,EACA,KACA,WACA,MAIa,aAAAc,E","file":"js/chunk-bd7efe5c.5b3512bd.js","sourcesContent":["import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=style&index=0&id=6ca82fb2&lang=stylus&scoped=true&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../node_modules/css-loader/index.js??ref--11-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../node_modules/stylus-loader/index.js??ref--11-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=style&index=0&id=6ca82fb2&lang=stylus&scoped=true&\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAEMklEQVR4Xu2dbXbaMBBFFVZWnyysYWEcJRtzetzQpglftuaJ8jSXv8jD6M3Vk4SFeSq8UivwlLr3dL4AQHIIAAAAkiuQvPs4AAAkVyB593EAAEiuQPLu4wAAkFyB5N3HAQDAR4Fa67tDttM02Qwsm0SXwgOAHn8A0GtacIAOouIAfUTFATroigN0EPWKA7x2+ri1YX98bwgAa6Xb2O7CIvB1mqZpYyhJ81prLaUAgETNFUEAYIVIG5tI1gC11mUULKPhf7wezgHuIcI8z/vn5+eX6GcBQEDBS1NAIOTqSwHgUyocYDU2pw1xgIB4OMBRPNYAAYoaL3WZAtR79JMtVynlEaeA7v22AECV5J9B4rINLGW5HTBJIKi1/iylnKz2Vdp2XQOokrwFQKOLqi4750oyAA6Hw8tut1sg+PJSaTsCAKpCKuPIAMAB/imLy3kApoBj0VQ2dWMKUI5cVSwcYFESAOI8MQUwBbALiI8j3wg4gG/tJJkDgERG3yAA4Fs7SeYAIJHRNwgA+NZOkjkASGT0DQIAvrWTZA4AEhl9gwCAb+0kmQOAREbfIADgWztJ5gAgkdE3CAD41k6SOQBIZPQNkhKAS532LePvzJtOCaUE4NJJWAD4VEB12uohTwXjAJ+FTukAAAAAZ8/BMQXkmgLO/eLGmYF9y8/FUk4BzlVW5w4AakXN4gGAWcHU6QKAWlGzeABgVjB1ugCgVtQsHgCYFUydLgCoFTWLBwBmBVOnCwBqRc3iAYBZwdTppgTg2OnlCSM3b1fvdrv3a+2W988VZbnm0nvqIh7jvXEvYKWy3A5OfjuYE0GDALA84XKapv3Kgf+3GQAMAkDruTUAGAQAHOCL9+U7FdwKALuAQRygdQrYumYYuX3K7wFGLujWvgHAVsUGaw8AgxV0a3esAWhdBG4VaeT21gCwCIyjaQ0ADgAATV8Fx2UbJ4K1AzAFxEEEgLiG1hGsAWANEGfPGoBRp4DjfwZvqu48z28tf/duDcCoDtDy93WtgwEANo2z+zQGgG86X/r38Fbq71PG9k8BAAA4e9L4GlKtg8F6CmjtdPvYvM+VOAAO0PT8onS/Cxh1F3Afn/n4FOspAADiqABAXEPrCABgXb548tYAjLoLiJd1fQQAWK/VkC2tAWARGGfSGgCmgOQA4AAAwJnAIAPWUwAOEKw+3wTGBXSPYO0ALALj+F15XpJker35FK41Xch2IGSNJqo21g7AGiCOgTUATAHJAcABAECyUInL6BvBegrAAeLgWe8CAKAfAKr1VddtYCnlNS4BEUopJ4dQXQCgep0UAIBOwrqEBQCXSnXKEwA6CWsUVrLF7r0INNLTK9VHdAAvBQfItuWnZt+7LXGAAbRM2wUASFv6j44DAAAkVyB593EAAEiuQPLu4wAAkFyB5N3HAQAguQLJu48DJAfgF+1bWNtJgJDcAAAAAElFTkSuQmCC\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.isShowHeader)?_c('mt-header',{attrs:{\"fixed\":\"\",\"title\":\"我的工单\"}},[_c('div',{attrs:{\"slot\":\"left\"},slot:\"left\"},[_c('mt-button',{attrs:{\"icon\":\"back\"},on:{\"click\":function($event){return _vm.$router.go(-1)}}})],1),_c('mt-button',{attrs:{\"slot\":\"right\"},on:{\"click\":function($event){return _vm.$router.push('/workorder/create')}},slot:\"right\"},[_c('span',[_vm._v(\"创建工单\")])])],1):_vm._e(),_c('div',{staticClass:\"list\",class:{'hide-header': !_vm.isShowHeader}},[(_vm.workorders.length <= 0)?_c('div',{staticClass:\"no-data\"},[_c('img',{attrs:{\"src\":require(\"../assets/workorder.png\"),\"alt\":\"\"}}),_c('div',[_vm._v(\"没有相关记录~\")])]):_c('ul',[_vm._l((_vm.workorders),function(item,index){return [_c('li',{key:index,on:{\"click\":function($event){return _vm.$router.push('/workorder/detail/'+item.id)}}},[_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(item.title))]),_c('div',[_c('span',{staticClass:\"type\"},[_vm._v(_vm._s(_vm.getTypeName(item.tid)))]),_c('span',{staticClass:\"date\"},[_vm._v(_vm._s(_vm.$formatDate(item.create_at)))])]),(item.status == 1)?_c('i',{staticStyle:{\"color\":\"#8bc34a\"}},[_vm._v(\"已回复\")]):_vm._e(),(item.status == 3)?_c('i',{staticStyle:{\"color\":\"#ccc\"}},[_vm._v(\"已结束\")]):_vm._e(),(item.status == 0)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待处理\")]):_vm._e(),(item.status == 2)?_c('i',{staticStyle:{\"color\":\"#FF9800\"}},[_vm._v(\"待回复\")]):_vm._e()])]})],2)]),(!_vm.isShowHeader)?_c('div',{staticClass:\"floting\",on:{\"click\":function($event){return _vm.$router.push('/workorder/create')}}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"container\">\n \n <mt-header v-if=\"isShowHeader\" fixed title=\"我的工单\">\n <div slot=\"left\">\n <mt-button @click=\"$router.go(-1)\" icon=\"back\"></mt-button>\n </div>\n <mt-button @click=\"$router.push('/workorder/create')\" slot=\"right\">\n <span>创建工单</span>\n </mt-button>\n </mt-header>\n <div class=\"list\" :class=\"{'hide-header': !isShowHeader}\">\n <div class=\"no-data\" v-if=\"workorders.length <= 0\">\n <img src=\"../assets/workorder.png\" alt=\"\">\n <div>没有相关记录~</div>\n </div>\n <ul v-else>\n <template v-for=\"(item,index) in workorders\">\n <li :key=\"index\" @click=\"$router.push('/workorder/detail/'+item.id)\">\n <div class=\"title\">{{item.title}}</div>\n <div>\n <span class=\"type\">{{getTypeName(item.tid)}}</span>\n <span class=\"date\">{{$formatDate(item.create_at)}}</span>\n </div>\n <i v-if=\"item.status == 1\" style=\"color:#8bc34a;\">已回复</i>\n <i v-if=\"item.status == 3\" style=\"color:#ccc\">已结束</i>\n <i v-if=\"item.status == 0\" style=\"color:#FF9800\">待处理</i>\n <i v-if=\"item.status == 2\" style=\"color:#FF9800\">待回复</i>\n </li>\n </template>\n </ul> \n </div>\n <div v-if=\"!isShowHeader\" class=\"floting\" @click=\"$router.push('/workorder/create')\"></div>\n </div>\n</template>\n<script>\nimport { mapGetters } from 'vuex'\nexport default {\n name: \"workorder\",\n components: {},\n data() {\n return {};\n },\n created() {\n document.title = \"我的工单\"\n },\n computed: {\n ...mapGetters([\n 'isShowHeader',\n 'workorders',\n 'workorderTypes',\n ])\n },\n mounted() {\n // 获取工单类型\n this.$store.dispatch(\"onGetWorkorderTypes\");\n // 获取工单列表\n this.$store.dispatch(\"onGetWorkorders\");\n },\n methods: {\n getTypeName(tid){\n try{\n return this.workorderTypes.filter((i)=>i.id == tid)[0].title\n }catch(e){\n console.log(e)\n return \"\"\n }\n }\n }\n};\n</script>\n<style lang=\"stylus\" scoped>\n.no-data{\n text-align center\n padding-top 50px\n img{\n width 50px\n height 50px\n }\n div{\n color #666\n font-size 14px\n }\n}\n.list{\n padding-top 50px\n &.hide-header{\n padding-top 0\n }\n li{\n padding 10px 20px\n background url('../assets/workorder.png') 10px center no-repeat \n background-size 25px\n padding-left 40px\n padding-right 70px\n border-bottom 1px solid #ddd\n position relative\n height 40px\n .title{\n font-size 15px\n color #333\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n }\n .type{\n font-size 13px\n color #666\n }\n .date{\n margin-left 10px\n font-size 13px\n color #999\n }\n i{\n font-style normal\n font-size 13px\n position absolute\n right 10px\n top 0\n height: 20px;\n bottom 0\n margin auto 0\n }\n }\n}\n.floting{\n width 30px;\n height 30px;\n border-radius 100%;\n background #26a2ff url(\"../assets/send.png\") center center no-repeat\n background-size 15px\n position fixed\n bottom 30px\n right 10px\n}\n\n</style>\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./workorder.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./workorder.vue?vue&type=template&id=6ca82fb2&scoped=true&\"\nimport script from \"./workorder.vue?vue&type=script&lang=js&\"\nexport * from \"./workorder.vue?vue&type=script&lang=js&\"\nimport style0 from \"./workorder.vue?vue&type=style&index=0&id=6ca82fb2&lang=stylus&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"6ca82fb2\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
\ No newline at end of file
......@@ -342,11 +342,11 @@ export default {
}
}
}
.tips{
}
.tips{
font-size 12px
color red
padding 10px 0
}
}
</style>
......@@ -2,6 +2,6 @@ module.exports = {
publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
outputDir: '../../public/client/',
devServer: {
proxy: 'http://im.cmp520.com',
proxy: 'http://kf.aissz.com:666',
}
}
\ No newline at end of file
{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"flutter_mimc","dependencies":[]},{"name":"image_picker","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"shared_preferences","dependencies":[]}]}
\ No newline at end of file
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.packages
.pub-cache/
.pub/
build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
# example
example/build
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 68587a0916366e9512a78df22c44163d041dd5f3
channel: stable
project_type: package
## [1.0.1+4] - TODO: Add release date.
* TODO: Fix upload image no avatar
## [1.0.1+3] - TODO: Add release date.
* TODO: Fix upload image problem
## [1.0.1+2] - TODO: Add release date.
* TODO: change instance function
* TODO: add example Adroid permission
## [1.0.1+1] - TODO: Add release date.
* TODO: format all file
* TODO: Update README.md
## [1.0.1] - TODO: Add release date.
* TODO: update varsion code
* TODO: update init is not complete and show tips
## [0.0.2] - TODO: Add release date.
* TODO: format all file
* TODO: Support 1.12.13 + hotfix.5
## [0.0.1] - TODO: Add release date.
* TODO: Describe initial release.
\ No newline at end of file
Copyright 2019 keith
Licensed to the Apache Software Foundation (ASF) under one or more contributor
license agreements. See the NOTICE file distributed with this work for
additional information regarding copyright ownership. The ASF licenses this
file to you under the Apache License, Version 2.0 (the "License"); you may not
use this file except in compliance with the License. You may obtain a copy of
the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations under
the License.
\ No newline at end of file
客服系统开发者QQ交流群: 623661658
# 欢迎使用本客服系统 - kefu_flutter
![客服系统](http://qiniu.cmp520.com/flutter_kefu.jpg)
## 本项目关联GIT项目资源连接
- **[服务端][1]**
- **[客服端-APP工作台][7]** 客服端APP工作台flutter源码
- **[客服端-网页工作台][2]**
- **[客户端H5][3]**
- **[客户端Flutter][4]**
- **[Flutter-mimc][6]**
**本系统** 是基于小米消息云实现的一款简单实用的面向多终端的客服系统,本系统简单易用,易扩展,易整合现有的业务系统,无缝对接自有业务。
## 项目的依赖其他库
如果您也是用了以下库,存在版本冲突,可以尝试修改
``` dart
flutter_mimc: ^1.0.1
dio: ^3.0.8
image_picker: ^0.6.2+3
shared_preferences: ^0.5.6
provider: ^4.0.1
flutter_advanced_networkimage: ^0.6.2
```
## Android 你应该添加的权限
```xml
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
## IOS 你应该添加的权限
```xml
<key>NSCameraUsageDescription</key>
<key>NSPhotoLibraryUsageDescription</key>
```
## EXAMPLE AND INSTALL
- **[下载Android体验][5]**
dependencies:
kefu_flutter: $lastVersion
import 'package:kefu_flutter/kefu_flutter.dart';
``` dart
KeFuStore _keFu;
@override
void initState() {
// 获得实例并监听数据动态 (1)
// 单列 获取对象
/// 配置信息
/// mImcTokenData 不为空,即优先使用 mImcTokenData
/// [apiHost] 客服后台API地址
/// [mImcAppID] mimc AppID
/// [mImcAppKey] mimc AppKey
/// [mImcAppSecret] mimc AppSecret
/// [mImcTokenData] mimc TokenData 服务端生成
/// [userId] 业务平台ID(扩展使用)
/// [autoLogin] 是否自动登录
/// [delayTime] 延迟登录,默认1500毫秒,以免未实例化完成就调用登录
_keFu = KeFuStore.getInstance(
debug: true,
autoLogin: true,
host: "http://kf.aissz.com:666/v1",
appID: "",
appKey: "",
appSecret: ""
);
/// 获得实例并监听数据动态 (2)
_keFu.addListener(() async{
await Future.delayed(Duration(milliseconds: 200));
debugPrint("_keFu对象变动");
_keFu = KeFuStore.instance;
if(mounted) setState(() {});
});
/// 或者设置不自动登录,自己手动登录
/// _keFu.loginIm()
super.initState();
}
/// 获得客服页面视图
_keFu.view();
/// 然后记得销毁
@override
void dispose() {
_keFu?.dispose();
super.dispose();
}
```
[1]: https://github.com/chenxianqi/kefu_server
[2]: https://github.com/chenxianqi/kefu_admin
[3]: https://github.com/chenxianqi/kefu_client
[4]: https://github.com/chenxianqi/kefu_flutter
[5]: http://kf.aissz.com:666/static/app/app-release.apk
[6]: https://github.com/chenxianqi/flutter_mimc
[7]: https://github.com/chenxianqi/kefu_workbench
\ No newline at end of file
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Web related
lib/generated_plugin_registrant.dart
# Exceptions to above rules.
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 27321ebbad34b0a3fafe99fac037102196d655ff
channel: stable
project_type: app
# kefu_flutter_example
A new Flutter application.
## Getting Started
This project is a starting point for a Flutter application.
A few resources to get you started if this is your first Flutter project:
- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>android</name>
<comment>Project android created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>app</name>
<comment>Project app created by Buildship.</comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.buildship.core.gradleprojectbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.buildship.core.gradleprojectnature</nature>
</natures>
</projectDescription>
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 28
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.keith.www.kefu_flutter_example"
minSdkVersion 21
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.keith.www.kefu_flutter_example">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.keith.www.kefu_flutter_example">
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name="io.flutter.app.FlutterApplication"
android:label="在线客服"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
package com.keith.www.kefu_flutter_example;
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;
public class MainActivity extends FlutterActivity {
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
</resources>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.keith.www.kefu_flutter_example">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
No preview for this file type
storePassword=chenxianqi
keyPassword=chenxianqi
keyAlias=key
storeFile=/Users/chenxianqi/product/kefu_flutter/example/android/key.jks
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*
# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def parse_KV_file(file, separator='=')
file_abs_path = File.expand_path(file)
if !File.exists? file_abs_path
return [];
end
generated_key_values = {}
skip_line_start_symbols = ["#", "/"]
File.foreach(file_abs_path) do |line|
next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
plugin = line.split(pattern=separator)
if plugin.length == 2
podname = plugin[0].strip()
path = plugin[1].strip()
podpath = File.expand_path("#{path}", file_abs_path)
generated_key_values[podname] = podpath
else
puts "Invalid plugin specification: #{line}"
end
end
generated_key_values
end
target 'Runner' do
# Flutter Pod
copied_flutter_dir = File.join(__dir__, 'Flutter')
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
unless File.exist?(generated_xcode_build_settings_path)
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
unless File.exist?(copied_framework_path)
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
end
unless File.exist?(copied_podspec_path)
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
end
end
# Keep pod path relative so it can be checked into Podfile.lock.
pod 'Flutter', :path => 'Flutter'
# Plugin Pods
# Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
# referring to absolute paths on developers' machines.
system('rm -rf .symlinks')
system('mkdir -p .symlinks/plugins')
plugin_pods = parse_KV_file('../.flutter-plugins')
plugin_pods.each do |name, path|
symlink = File.join('.symlinks', 'plugins', name)
File.symlink(path, symlink)
pod name, :path => File.join(symlink, 'ios')
end
end
# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
install! 'cocoapods', :disable_input_output_paths => true
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['ENABLE_BITCODE'] = 'NO'
end
end
end
PODS:
- Flutter (1.0.0)
- flutter_mimc (0.0.1):
- Flutter
- image_picker (0.0.1):
- Flutter
- path_provider (0.0.1):
- Flutter
- shared_preferences (0.0.1):
- Flutter
- shared_preferences_macos (0.0.1):
- Flutter
- shared_preferences_web (0.0.1):
- Flutter
DEPENDENCIES:
- Flutter (from `Flutter`)
- flutter_mimc (from `.symlinks/plugins/flutter_mimc/ios`)
- image_picker (from `.symlinks/plugins/image_picker/ios`)
- path_provider (from `.symlinks/plugins/path_provider/ios`)
- shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
- shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
- shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`)
EXTERNAL SOURCES:
Flutter:
:path: Flutter
flutter_mimc:
:path: ".symlinks/plugins/flutter_mimc/ios"
image_picker:
:path: ".symlinks/plugins/image_picker/ios"
path_provider:
:path: ".symlinks/plugins/path_provider/ios"
shared_preferences:
:path: ".symlinks/plugins/shared_preferences/ios"
shared_preferences_macos:
:path: ".symlinks/plugins/shared_preferences_macos/ios"
shared_preferences_web:
:path: ".symlinks/plugins/shared_preferences_web/ios"
SPEC CHECKSUMS:
Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
flutter_mimc: 55bda5d123df8355bcd86d12f2fb64bd71d2b40b
image_picker: e3eacd46b94694dde7cf2705955cece853aa1a8f
path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01
shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087
shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9
PODFILE CHECKSUM: 3dbe063e9c90a5d7c9e4e76e70a821b9e2c1d271
COCOAPODS: 1.8.4
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
D62DAAC1D477A9ABBAAC99D5 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AD869ED4B7FD2C07384D7149 /* libPods-Runner.a */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = "<group>"; };
4DA502109C8A9726F5F0C6A2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
AD869ED4B7FD2C07384D7149 /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; };
B243B70FDCD2B634496D1D26 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
CF89C53F003109E1480DB868 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
D62DAAC1D477A9ABBAAC99D5 /* libPods-Runner.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
7F44CF5E8B8940EB1A2CA2B4 /* Pods */ = {
isa = PBXGroup;
children = (
CF89C53F003109E1480DB868 /* Pods-Runner.debug.xcconfig */,
B243B70FDCD2B634496D1D26 /* Pods-Runner.release.xcconfig */,
4DA502109C8A9726F5F0C6A2 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B80C3931E831B6300D905FE /* App.framework */,
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEBA1CF902C7004384FC /* Flutter.framework */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
7F44CF5E8B8940EB1A2CA2B4 /* Pods */,
E4FE855354253D3385548469 /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
97C146F21CF9000F007C117D /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
E4FE855354253D3385548469 /* Frameworks */ = {
isa = PBXGroup;
children = (
AD869ED4B7FD2C07384D7149 /* libPods-Runner.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
2CB4BA4AAC676DC0F6E6EA14 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
4ED46647D44F1DDF1A06E4CB /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1020;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = DSJPBFK8ZR;
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
2CB4BA4AAC676DC0F6E6EA14 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
};
4ED46647D44F1DDF1A06E4CB /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
97C146F31CF9000F007C117D /* main.m in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = DSJPBFK8ZR;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.keith.www.kefuFlutterExample;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = DSJPBFK8ZR;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.keith.www.kefuFlutterExample;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = DSJPBFK8ZR;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.keith.www.kefuFlutterExample;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildSystemType</key>
<string>Original</string>
<key>PreviewsEnabled</key>
<false/>
</dict>
</plist>
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
@end
#import "AppDelegate.h"
#import "GeneratedPluginRegistrant.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[GeneratedPluginRegistrant registerWithRegistry:self];
// Override point for customization after application launch.
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>kefu_flutter_example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char* argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: camel_case_types
// ignore_for_file: prefer_single_quotes
// This file is automatically generated. DO NOT EDIT, all your changes would be lost.
class JSONField {
final String name;
const JSONField(this.name);
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:kefu_flutter/kefu_flutter.dart';
void main(){
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(statusBarColor: Color.fromRGBO(0, 0, 0, 0.0)));
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
return runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: '在线客服',
theme: ThemeData(
primarySwatch: Colors.blue,
brightness: Brightness.light,
primaryColor: Colors.blue,
),
home: MyHomePage(title: 'Flutter 在线客服 DEMO'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
KeFuStore _keFu;
void _action() {
Navigator.push(context, CupertinoPageRoute(builder: (ctx){
return _keFu.view();
}));
}
@override
void initState() {
// 获得实例并监听数据动态 (1)
// 单列 获取对象
/// 配置信息
/// mImcTokenData 不为空,即优先使用 mImcTokenData
/// [apiHost] 客服后台API地址
/// [mImcAppID] mimc AppID
/// [mImcAppKey] mimc AppKey
/// [mImcAppSecret] mimc AppSecret
/// [mImcTokenData] mimc TokenData 服务端生成
/// [userId] 业务平台ID(扩展使用)
/// [autoLogin] 是否自动登录
/// [delayTime] 延迟登录,默认1500毫秒,以免未实例化完成就调用登录
_keFu = KeFuStore.getInstance(
debug: true,
autoLogin: true,
host: "http://kf.aissz.com:666/api",
appID: "2882303761518282099",
appKey: "5521828290099",
appSecret: "516JCA60FdP9bHQUdpXK+Q=="
);
// 获得实例并监听数据动态 (2)
_keFu.addListener(() async{
await Future.delayed(Duration(milliseconds: 200));
debugPrint("_keFu对象变动");
_keFu = KeFuStore.instance;
if(mounted) setState(() {});
});
super.initState();
}
@override
void dispose() {
_keFu?.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
RichText(
text: TextSpan(
style: TextStyle(
color: Colors.black
),
children: [
TextSpan(text: "用户id: ${_keFu.imUser?.id ?? 0} "),
TextSpan(text: "${_keFu.messageReadCount}", style: TextStyle(
color: Colors.deepOrange,
fontSize: 30.0,
fontWeight: FontWeight.w600
)),
TextSpan(text: "条未读消息"),
]
),
),
Text(
'欢迎使用在线客服',
),
RaisedButton(
color: themeData.primaryColor,
child: Text("联系客服", style: TextStyle(color: Colors.white),), onPressed: () => _action()
)
],
),
),
);
}
}
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.2"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.11"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
dio:
dependency: transitive
description:
name: dio
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.9"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_advanced_networkimage:
dependency: transitive
description:
name: flutter_advanced_networkimage
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
flutter_mimc:
dependency: transitive
description:
name: flutter_mimc
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.6"
flutter_svg:
dependency: transitive
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.17.3+1"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http:
dependency: transitive
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.0+4"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.4"
image_picker:
dependency: transitive
description:
name: image_picker
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
kefu_flutter:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "1.0.1+4"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.6"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.8"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.4"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.5"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0+1"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
provider:
dependency: transitive
description:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.4"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
shared_preferences:
dependency: transitive
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.6+3"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+6"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2+4"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.5"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.11"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.5.0"
sdks:
dart: ">2.4.0 <3.0.0"
flutter: ">=1.12.13+hotfix.4 <2.0.0"
name: kefu_flutter_example
description: A new Flutter application.
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
kefu_flutter:
path: ../
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:kefu_flutter_example/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());
// Verify that our counter starts at 0.
expect(find.text('0'), findsOneWidget);
expect(find.text('1'), findsNothing);
// Tap the '+' icon and trigger a frame.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// Verify that our counter has incremented.
expect(find.text('0'), findsNothing);
expect(find.text('1'), findsOneWidget);
});
}
// ignore_for_file: non_constant_identifier_names
// ignore_for_file: camel_case_types
// ignore_for_file: prefer_single_quotes
// This file is automatically generated. DO NOT EDIT, all your changes would be lost.
class JSONField {
final String name;
const JSONField(this.name);
}
import 'dart:async';
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:flutter_mimc/flutter_mimc.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
import 'models/im_configs.dart';
import 'models/im_message.dart';
import 'models/im_token_info.dart';
import 'models/im_user.dart';
import 'models/knowledge_model.dart';
import 'models/robot.dart';
import 'models/service_user.dart';
import 'utils/im_utils.dart';
import 'widgets/cached_network_image.dart';
import 'widgets/emoji_panel.dart';
import 'widgets/knowledge_message.dart';
import 'widgets/photo_message.dart';
import 'widgets/system_message.dart';
import 'widgets/text_message.dart';
import 'workorder/index.dart';
/// 创建消息辅助对象
/// [sendMessage] 发送对象
/// [imMessage] 本地显示对象
class MessageHandle {
MessageHandle({this.sendMessage, this.localMessage});
MIMCMessage sendMessage;
ImMessage localMessage;
MessageHandle clone() {
return MessageHandle(
sendMessage: MIMCMessage.fromJson(sendMessage.toJson()),
localMessage: ImMessage.fromJson(localMessage.toJson()),
);
}
}
/// KeFuStore
class KeFuStore with ChangeNotifier {
/// KeFuStore实例
static KeFuStore instance;
/// http
Dio http;
/// 客服信息
ServiceUser serviceUser;
/// IM 用户对象
ImUser imUser;
/// IM 签名对象
ImTokenInfo imTokenInfo;
/// 缓存对象
SharedPreferences prefs;
/// 机器人对象
Robot robot;
/// 配置信息
ImConfigs imConfigs;
/// IM 插件对象
FlutterMIMC flutterMImc;
/// 是否是人工
bool isService = false;
/// 聊天记录
List<ImMessage> messagesRecord = [];
/// 最后一条消息
ImMessage get lastMessage {
if (messagesRecord.length > 0)
return messagesRecord[messagesRecord.length - 1];
return null;
}
/// 显示对方输入中...
bool isPong = false;
/// 没有更多记录了
bool isScrollEnd = false;
/// 为消息总数
int messageReadCount = 0;
/// 是否在kefuView窗口 1 or 0 1在客服窗口 0 不在客服窗口
int window = 0;
/// 被踢出最长时间
int tomeOutTime = 60 * 1000 * 8;
/// 检索回来的知识库信息列表
List<KnowledgeModel> handshakeKeywordList = [];
// 滚动条控制器
ScrollController scrollController = ScrollController();
/// 小米消息云配置
static String mImcAppID;
static String mImcAppKey;
static String mImcAppSecret;
static String mImcTokenData;
static bool mImcDebug;
/// 是否自动登录
static bool isAutoLogin;
/// 延迟登录(毫秒)
static int delayLoginTime;
/// 业务平台ID
static int platformUserId;
/// API 接口
static String apiHost;
/// IM 注册初始化IM账号
static const String API_REGISTER = "/public/register";
/// IM 上报最后活动时间 /uid
static const String API_ACTIVITY = "/public/activity";
/// IM 获取机器人 /platform
static const String API_GET_ROBOT = "/public/robot/1";
/// IM 获取未读消息 /uid
static const String API_GET_READ = "/public/read";
/// 获取历史消息记录
static const String API_GET_MESSAGE = "/public/messages";
/// IM 清除未读消息 /uid
static const String API_CLEAN_READ = "/public/clean_read";
/// IM 清除未读消息 /uid
static const String API_WINDOW_CHANGE = "/public/window";
/// IM 获取配置信息
static const String API_UPLOAD_SECRET = "/public/configs";
/// IM 内置文件上传
static const String API_UPLOAD_FILE = "/public/upload";
/// IM 七牛文件上传
static const String API_QINIU_UPLOAD_FILE = "https://upload.qiniup.com";
/// 消息接收方账号 机器人 或 客服
int get toAccount =>
isService && serviceUser != null ? serviceUser.id : robot.id;
// 单列 获取对象
/// 配置信息
/// mImcTokenData 不为空,即优先使用 mImcTokenData
/// [apiHost] 客服后台API地址
/// [mImcAppID] mimc AppID
/// [mImcAppKey] mimc AppKey
/// [mImcAppSecret] mimc AppSecret
/// [mImcTokenData] mimc TokenData
/// [userId] 业务平台ID(扩展使用)
/// [autoLogin] 是否自动登录
/// [delayTime] 延迟登录,默认1500毫秒,以免未实例化完成就调用登录
static KeFuStore getInstance(
{String host,
String appID,
String appKey,
String appSecret,
String mimcToken,
int userId = 0,
bool autoLogin = true,
int delayTime = 1500,
bool debug = false}) {
assert(host != null);
apiHost = host;
mImcAppID = appID;
mImcAppKey = appKey;
mImcAppSecret = appSecret;
mImcTokenData = mimcToken;
mImcDebug = debug;
platformUserId = userId;
isAutoLogin = autoLogin;
delayLoginTime = delayTime < 1000 ? 1000 : delayTime;
if (instance == null) {
instance = KeFuStore();
}
return instance;
}
/// 构造器
KeFuStore() {
_dioInstance();
debugPrint("KeFuController实例化了");
_init();
}
/// 初始化
Future<void> _init() async {
await _prefsInstance();
await _registerImAccount();
await _getRobot();
await _flutterMImcInstance();
await _getImConfigs();
await _upImLastActivity();
_addMimcEvent();
getReadCount();
_checkIsOutSession();
_onCheckIsloogTimeNotCallBack();
_onServciceLastMessageTimeNotCallBack();
getMessageRecord();
_currentIsService();
if (isAutoLogin) loginIm();
}
/// 判断当前是否是客服状态
void _currentIsService() async {
var serviceUserStringJson =
prefs.getString("currentServiceUser_${imUser?.id}");
if (serviceUserStringJson != null) {
serviceUser = ServiceUser.fromJson(json.decode(serviceUserStringJson));
isService = true;
await Future.delayed(Duration(milliseconds: delayLoginTime));
if (!await flutterMImc?.isOnline()) {
debugPrint("登录中...");
flutterMImc?.login();
}
notifyListeners();
}
}
// 获取客服View页面
Widget view() => _KeFu();
/// 实例化 dio
Future<void> _dioInstance() async {
if (http != null) return;
BaseOptions options = new BaseOptions(
baseUrl: apiHost,
connectTimeout: 60000,
receiveTimeout: 60000,
headers: {},
);
http = Dio(options);
http.interceptors
.add(InterceptorsWrapper(onRequest: (RequestOptions options) async {
if (imUser != null && imUser.token.isNotEmpty) {
options.headers['Token'] = imUser.token;
}
return options;
}, onResponse: (Response response) async {
return response; // continue
}, onError: (DioError e) {
return e;
}));
}
/// 实例化 FlutterMImc
Future<void> _flutterMImcInstance() async {
if (mImcTokenData != null) {
flutterMImc = FlutterMIMC.stringTokenInit(mImcTokenData);
} else {
flutterMImc = FlutterMIMC.init(
debug: mImcDebug,
appId: mImcAppID,
appKey: mImcAppKey,
appSecret: mImcAppSecret,
appAccount: imUser.id.toString());
}
}
/// 注册IM账号
Future<void> _registerImAccount() async {
try {
int imAccount = prefs.getInt("ImAccount") ?? 0;
Response response = await http.post(API_REGISTER, data: {
"type": 0,
"uid": platformUserId ?? 0,
"platform": Platform.isIOS ? 2 : 6,
"account_id": imAccount ?? 0
});
if (response.data["code"] == 200) {
imTokenInfo =
ImTokenInfo.fromJson(response.data["data"]["token"]["data"]);
imUser = ImUser.fromJson(response.data["data"]["user"]);
prefs.setInt("ImAccount", imUser.id);
} else {
// 1秒重
debugPrint(response.data["error"]);
await Future.delayed(Duration(milliseconds: 1000));
_registerImAccount();
}
} catch (e) {
debugPrint(e);
}
}
/// 获取机器人信息
Future<void> _getRobot() async {
try {
Response response = await http.get(API_GET_ROBOT);
print(response.data);
if (response.data["code"] == 200) {
robot = Robot.fromJson(response.data["data"]);
prefs.setString(
"robot_" + robot.id.toString(), json.encode(response.data["data"]));
} else {
// 1秒重试
debugPrint(response.data["error"]);
await Future.delayed(Duration(milliseconds: 1000));
_getRobot();
}
} catch (e) {
debugPrint(e);
}
}
/// 上报窗口位置信息
/// [status] 1 or 0 1在客服窗口 0 不在客服窗口
Future<void> setWindow(int status) async {
window = status;
notifyListeners();
try {
await http.put(API_WINDOW_CHANGE, data: {"window": status});
} catch (e) {
debugPrint(e);
}
}
/// 实例化 SharedPreferences
Future<void> _prefsInstance() async {
prefs = await SharedPreferences.getInstance();
}
/// 设置检索知识库信息列表
void setHandshakeKeywordList(List<KnowledgeModel> data) {
handshakeKeywordList = data;
notifyListeners();
}
/// 获取服务器消息列表
Future<void> getMessageRecord({int timestamp, int pageSize = 20}) async {
try {
Response response = await http
.post(API_GET_MESSAGE,
data: {
"timestamp": timestamp ?? DateTime.now().millisecondsSinceEpoch,
"page_size": pageSize,
"account": imUser.id
},
options: Options(headers: {"token": imUser.token}))
.catchError((onError) {
debugPrint(onError);
});
if (response.data["code"] == 200) {
List<ImMessage> _msgs = (response.data['data']['list'] as List)
.map((i) => _handlerMessage(ImMessage.fromJson(i)))
.toList();
for(var i=0; i<_msgs.length; i++){
_msgs[i].payload = utf8.decode(base64Decode(_msgs[i].payload));
}
if (_msgs.length < pageSize) {
isScrollEnd = true;
}
if (messagesRecord.length == 0) {
messagesRecord = _msgs;
} else {
messagesRecord.insertAll(0, _msgs);
}
notifyListeners();
}
} catch (e) {
debugPrint(e);
}
}
/// 获取IM 未读消息
Future<int> getReadCount() async {
int _count = 0;
Response response = await http.get(API_GET_READ);
if (response.data["code"] == 200) {
_count = response.data["data"];
messageReadCount = _count;
notifyListeners();
}
return _count;
}
/// 清除IM未读消息
Future<void> cleanRead() async {
messageReadCount = 0;
await http.get(API_CLEAN_READ);
notifyListeners();
}
/// 上报IM最后活动时间
Future<void> _upImLastActivity() async {
Timer.periodic(Duration(milliseconds: 20000), (_) {
if (imUser != null) http.get(API_ACTIVITY);
});
}
/// 获取配置信息
Future<void> _getImConfigs() async {
Response response = await http.get(API_UPLOAD_SECRET);
if (response.data["code"] == 200) {
imConfigs = ImConfigs.fromJson(response.data["data"]);
} else {
await Future.delayed(Duration(milliseconds: 1000));
_getImConfigs();
}
}
/// 创建消息
/// [toAccount] 接收方账号
/// [msgType] 消息类型
/// [content] 消息内容
MessageHandle createMessage(
{int toAccount, String msgType, dynamic content}) {
MIMCMessage message = MIMCMessage();
String millisecondsSinceEpoch =
DateTime.now().millisecondsSinceEpoch.toString();
int timestamp = int.parse(
millisecondsSinceEpoch.substring(0, millisecondsSinceEpoch.length - 3));
message.timestamp = timestamp;
message.bizType = msgType;
message.toAccount = toAccount.toString();
Map<String, dynamic> payloadMap = {
"from_account": imUser.id,
"to_account": toAccount,
"biz_type": msgType,
"version": "0",
"key": DateTime.now().millisecondsSinceEpoch,
"platform": Platform.isAndroid ? 6 : 2,
"timestamp": timestamp,
"read": 0,
"transfer_account": 0,
"payload": "$content"
};
message.payload = base64Encode(utf8.encode(json.encode(payloadMap)));
return MessageHandle(
sendMessage: message,
localMessage: ImMessage.fromJson(payloadMap)..isShowCancel = true);
}
/// 发送消息
void sendMessage(MessageHandle msgHandle) async {
// 发送失败提示
if (!await flutterMImc.isOnline()) {
MessageHandle tipsMsg = createMessage(
toAccount: toAccount, msgType: "system", content: "您的网络异常,发送失败了~");
messagesRecord.add(tipsMsg.localMessage);
return;
}
flutterMImc.sendMessage(msgHandle.sendMessage);
// 重新设定客服是否超时没回复
prefs.setInt("adminLastCallBackMessageTime_$toAccount",
DateTime.now().millisecondsSinceEpoch);
isServciceLastMessageTimeNotCallBackCompute = true;
isCheckIsloogTimeNotCallBackCompute = false;
/// 消息入库(远程)
MessageHandle cloneMsgHandle = msgHandle.clone();
String type = cloneMsgHandle.localMessage.bizType;
if (type == "contacts" ||
type == "pong" ||
type == "welcome" ||
type == "handshake") return;
cloneMsgHandle.sendMessage.toAccount = robot.id.toString();
cloneMsgHandle.sendMessage.payload = ImMessage(
bizType: "into",
payload: cloneMsgHandle.localMessage.toBase64(),
).toBase64();
flutterMImc.sendMessage(cloneMsgHandle.sendMessage);
ImMessage newMsg = _handlerMessage(cloneMsgHandle.localMessage);
if (type != "photo") messagesRecord.add(newMsg);
notifyListeners();
await Future.delayed(Duration(milliseconds: 10000));
newMsg.isShowCancel = false;
notifyListeners();
}
// 更新某个消息
void updateMessage(ImMessage msg) {
int index = messagesRecord.indexWhere((i) => i.key == msg.key);
messagesRecord[index] = msg;
notifyListeners();
}
/// 删除消息
void deleteMessage(ImMessage msg) {
if (msg == null) return;
int index = messagesRecord.indexWhere(
(i) => i.key == msg.key && i.fromAccount == msg.fromAccount);
messagesRecord.removeAt(index);
notifyListeners();
}
// 处理头像昵称
ImMessage _handlerMessage(ImMessage msg) {
const String defaultAvatar = 'http://qiniu.cmp520.com/avatar_degault_3.png';
msg.avatar = defaultAvatar;
// 消息是我发的
if (msg.fromAccount == imUser.id) {
/// 这里如果是接入业务平台可替换成用户头像和昵称
/// if (uid == myUid) msg.avatar = MyAvatar
/// if (uid == myUid) msg.nickname = MyNickname
msg.nickname = "我";
} else {
if (serviceUser != null && serviceUser.id == msg.fromAccount) {
msg.nickname = serviceUser.nickname ?? "客服";
msg.avatar = serviceUser.avatar != null && serviceUser.avatar.isNotEmpty
? serviceUser.avatar
: defaultAvatar;
} else {
String _localServiceUserStr =
prefs.getString("service_user_" + msg.fromAccount.toString());
if (_localServiceUserStr != null) {
ServiceUser _localServiceUser =
ServiceUser.fromJson(json.decode(_localServiceUserStr));
msg.nickname = _localServiceUser.nickname ?? "客服";
msg.avatar = _localServiceUser.avatar != null &&
_localServiceUser.avatar.isNotEmpty
? _localServiceUser.avatar
: defaultAvatar;
} else if (robot != null && robot.id == msg.fromAccount) {
msg.nickname = robot.nickname ?? "客服";
msg.avatar = robot.avatar != null && robot.avatar.isNotEmpty
? robot.avatar
: defaultAvatar;
} else {
String _localRobotStr =
prefs.getString("robot_" + msg.fromAccount.toString());
if (_localRobotStr != null) {
Robot _localRobot = Robot.fromJson(json.decode(_localRobotStr));
msg.nickname = _localRobot.nickname ?? "机器人";
msg.avatar =
_localRobot.avatar != null && _localRobot.avatar.isNotEmpty
? _localRobot.avatar
: defaultAvatar;
} else {
msg.nickname = "未知";
msg.avatar = defaultAvatar;
}
}
}
}
return msg;
}
/// mimc事件监听
StreamSubscription _subStatus;
StreamSubscription _subHandleMessage;
void _addMimcEvent() {
try {
/// 状态发生改变
_subStatus = flutterMImc
.addEventListenerStatusChanged()
.listen((bool isLogin) async {
debugPrint("状态发生改变===$isLogin");
// 发送握手消息
if (isLogin && !isService) {
MessageHandle messageHandle = createMessage(
toAccount: toAccount, msgType: "handshake", content: "我要对机器人问好");
sendMessage(messageHandle);
}
});
/// 消息监听
_subHandleMessage = flutterMImc
.addEventListenerHandleMessage()
.listen((MIMCMessage msg) async {
ImMessage message = ImMessage.fromJson(
json.decode(utf8.decode(base64Decode(msg.payload))));
debugPrint("收到消息======${message.toJson()}");
// 保存最后服务时间
if (isService) {
prefs.setInt("serviceLastTime${imUser.id}",
DateTime.now().millisecondsSinceEpoch);
}
// 计算客服用户最后回复时间
if (isService &&
(message.bizType == "text" ||
message.bizType == "transfer" ||
message.bizType == "photo" ||
message.bizType == 'cancel')) {
isCheckIsloogTimeNotCallBackCompute = true;
prefs.setInt("userLastCallBackMessageTime_${imUser.id}",
DateTime.now().millisecondsSinceEpoch);
isServciceLastMessageTimeNotCallBackCompute = false;
}
switch (message.bizType) {
case "transfer":
serviceUser = ServiceUser.fromJson(json.decode(message.payload));
prefs.setString("service_user_${serviceUser.id}", message.payload);
prefs.setString(
"currentServiceUser_${imUser?.id}", message.payload);
isService = true;
break;
case "end":
case "timeout":
serviceUser = null;
isService = false;
prefs.remove("currentServiceUser_${imUser?.id}");
notifyListeners();
break;
case "pong":
if (isPong) return;
isPong = true;
notifyListeners();
await Future.delayed(Duration(milliseconds: 1500));
isPong = false;
notifyListeners();
break;
case "cancel":
message.key = int.parse(message.payload);
deleteMessage(message);
break;
case "search_knowledge":
handshakeKeywordList = [];
if (message.payload != "") {
handshakeKeywordList = ((json.decode(message.payload) as List)
.map((i) => KnowledgeModel.fromJson(i))
.toList());
}
notifyListeners();
break;
}
if (window == 0 && message.bizType != 'pong') {
messageReadCount = messageReadCount + 1;
}
// 不处理的消息
if (message.bizType == 'search_knowledge' || message.bizType == "pong")
return;
ImMessage newMsg = _handlerMessage(message);
messagesRecord.add(newMsg);
notifyListeners();
});
} catch (e) {
debugPrint(e);
}
}
/// 登录Im
Future<void> loginIm() async {
await Future.delayed(Duration(milliseconds: delayLoginTime));
if (!await flutterMImc?.isOnline()) {
debugPrint("登录中...");
flutterMImc?.login();
return;
}
await Future.delayed(Duration(milliseconds: 2000));
loginIm();
}
/// 上传发送图片
void sendPhoto(File file) async {
debugPrint("${imConfigs.toJson()}");
MessageHandle msgHandle;
try {
if (file == null) return;
msgHandle = createMessage(
toAccount: toAccount, msgType: "photo", content: file.path);
messagesRecord.add(_handlerMessage(msgHandle.localMessage));
notifyListeners();
String filePath = file.path;
String fileName = "${DateTime.now().microsecondsSinceEpoch}_" +
(filePath.lastIndexOf('/') > -1
? filePath.substring(filePath.lastIndexOf('/') + 1)
: filePath);
FormData formData = new FormData.fromMap({
"fileType": "image",
"fileName": "file",
"file_name": fileName,
"key": fileName,
"token": imConfigs.uploadSecret ?? "",
"file": MultipartFile.fromFileSync(file.path, filename: fileName)
});
void uploadSuccess(url) async {
String img = imConfigs.uploadHost + "/" + url;
msgHandle.localMessage.isShowCancel = true;
msgHandle.localMessage.payload = img;
notifyListeners();
ImMessage sendMsg = ImMessage.fromJson(json
.decode(utf8.decode(base64Decode(msgHandle.sendMessage.payload))));
sendMsg.payload = img;
msgHandle.sendMessage.payload =
base64Encode(utf8.encode(json.encode(sendMsg.toJson())));
sendMessage(msgHandle.clone()..localMessage.payload = img);
await Future.delayed(Duration(milliseconds: 10000));
msgHandle.localMessage.isShowCancel = false;
notifyListeners();
}
String uploadUrl;
/// 系统自带
if (imConfigs.uploadMode == 1) {
uploadUrl = API_UPLOAD_FILE;
}
/// 七牛上传
else if (imConfigs.uploadMode == 2) {
uploadUrl = API_QINIU_UPLOAD_FILE;
/// 其他
} else {}
Response response = await http.post(uploadUrl, data: formData,
onSendProgress: (int sent, int total) {
msgHandle.localMessage.uploadProgress = (sent / total * 100).ceil();
notifyListeners();
});
debugPrint("${response.data}");
if (response.statusCode == 200) {
switch (imConfigs.uploadMode) {
case 1:
uploadSuccess(response.data["data"]);
break;
case 2:
uploadSuccess(response.data["key"]);
break;
}
} else {
deleteMessage(msgHandle.localMessage);
MessageHandle systemMsgHandle = createMessage(
toAccount: toAccount, msgType: "system", content: "图片上传失败!");
messagesRecord.add(_handlerMessage(systemMsgHandle.localMessage));
}
} catch (e) {
deleteMessage(msgHandle.localMessage);
MessageHandle systemMsgHandle = createMessage(
toAccount: toAccount, msgType: "system", content: "图片上传失败~");
messagesRecord.add(_handlerMessage(systemMsgHandle.localMessage));
debugPrint("图片上传失败! =======$e");
}
}
// 消息内容变,ping, pong
bool isSendPong = false;
void inputOnChanged(String value) async {
if (!isService || isSendPong) return;
isSendPong = true;
MessageHandle _msgHandle =
createMessage(toAccount: toAccount, msgType: "pong", content: value);
sendMessage(_msgHandle);
await Future.delayed(Duration(milliseconds: 200));
isSendPong = false;
notifyListeners();
}
// 判断是否被踢出对话
void _checkIsOutSession() async {
int serviceLastTime = prefs.getInt("serviceLastTime${imUser.id}");
if (serviceLastTime != null) {
if (DateTime.now().millisecondsSinceEpoch >
serviceLastTime + tomeOutTime) {
isService = false;
serviceUser = null;
prefs.remove("currentServiceUser_${imUser?.id}");
notifyListeners();
}
}
await Future.delayed(Duration(milliseconds: 60000));
_checkIsOutSession();
}
// 计算用户是否长时间未回复弹出给出提示
bool isCheckIsloogTimeNotCallBackCompute = false;
void _onCheckIsloogTimeNotCallBack() async {
if (isCheckIsloogTimeNotCallBackCompute) {
int nowTimer = DateTime.now().millisecondsSinceEpoch;
int lastCallBackMessageTime =
prefs.getInt("userLastCallBackMessageTime_${imUser.id}") ?? nowTimer;
if (isService &&
(nowTimer - lastCallBackMessageTime) >= (1000 * 60) * 5) {
MessageHandle msgHandle = createMessage(
toAccount: toAccount,
msgType: "system",
content: "您已超过5分钟未回复消息,系统3分钟后将结束对话");
ImMessage _msg = _handlerMessage(msgHandle.localMessage);
messagesRecord.add(_msg);
isCheckIsloogTimeNotCallBackCompute = false;
notifyListeners();
debugPrint("您已超过5分钟未回复消息,系统3分钟后将结束对话");
toScrollEnd();
}
}
await Future.delayed(Duration(milliseconds: 5000));
_onCheckIsloogTimeNotCallBack();
}
// 计算客服最后回复时间(超过2分钟没回复给出提示)
bool isServciceLastMessageTimeNotCallBackCompute = false;
void _onServciceLastMessageTimeNotCallBack() async {
if (isServciceLastMessageTimeNotCallBackCompute) {
String loogTimeWaitText = robot.loogTimeWaitText;
int nowTimer = DateTime.now().millisecondsSinceEpoch;
int lastCallBackMessageTime =
prefs.getInt("adminLastCallBackMessageTime_$toAccount") ?? nowTimer;
if (isService &&
loogTimeWaitText.isNotEmpty &&
(nowTimer - lastCallBackMessageTime) >= (1000 * 60) * 2) {
MessageHandle msgHandle = createMessage(
toAccount: toAccount, msgType: "text", content: loogTimeWaitText);
msgHandle.localMessage.fromAccount = robot.id;
msgHandle.localMessage.isShowCancel = false;
ImMessage _msg = _handlerMessage(msgHandle.localMessage);
messagesRecord.add(_msg);
isServciceLastMessageTimeNotCallBackCompute = false;
notifyListeners();
toScrollEnd();
}
}
await Future.delayed(Duration(milliseconds: 5000));
_onServciceLastMessageTimeNotCallBack();
}
/// 滚动条至底部
void toScrollEnd() async {
if (window == 0) return;
await Future.delayed(Duration(milliseconds: 100));
scrollController?.jumpTo(0);
}
@override
void dispose() {
_subStatus?.cancel();
_subHandleMessage?.cancel();
scrollController?.dispose();
super.dispose();
}
}
/// MiNiIm screen
class _KeFu extends StatefulWidget {
@override
_KeFuState createState() => _KeFuState();
}
/// im screen state
class _KeFuState extends State<_KeFu> {
/// 客服store
KeFuStore _keFuStore = KeFuStore.instance;
/// 是否显示表情面板
bool _isShowEmoJiPanel = false;
/// 输入键盘相关
FocusNode _focusNode = FocusNode();
TextEditingController _editingController = TextEditingController();
/// 加载更多...
bool _isMorLoading = false;
// 检索知识库消息
Timer _searchHandshakeTimer;
void _onSearchHandshake(String value) async {
if (_keFuStore.isService || !await _keFuStore.flutterMImc.isOnline())
return;
String content = value.trim();
if (content == "" || content.isEmpty) {
_keFuStore.setHandshakeKeywordList([]);
}
if (_searchHandshakeTimer != null) _searchHandshakeTimer.cancel();
_searchHandshakeTimer = Timer.periodic(Duration(milliseconds: 500), (_) {
MessageHandle msgHandle = _keFuStore.createMessage(
toAccount: _keFuStore.toAccount,
msgType: "search_knowledge",
content: content);
_keFuStore.sendMessage(msgHandle);
_keFuStore.setHandshakeKeywordList([]);
_searchHandshakeTimer?.cancel();
_searchHandshakeTimer = null;
});
}
/// 初始化生命周期
@override
void initState() {
super.initState();
if (mounted) {
_focusNode.addListener(() {
if (_focusNode.hasFocus) {
_onHideEmoJiPanel();
_keFuStore.toScrollEnd();
}
});
/// 监听滚动条
_keFuStore.scrollController
.addListener(() => _onScrollViewControllerAddListener());
// 监听消息
_addEventMessage();
// 进入客服窗口
_keFuStore.setWindow(1);
// 清除未读消息
_keFuStore.cleanRead();
}
}
/// 监听接收消息
void _addEventMessage() {
_keFuStore.flutterMImc
?.addEventListenerHandleMessage()
?.listen((MIMCMessage msg) {
// 滚动条置底
_keFuStore.toScrollEnd();
});
}
// 监听滚动条
void _onScrollViewControllerAddListener() async {
try {
ScrollPosition position = _keFuStore.scrollController?.position;
// 判断是否到底部
if (position.pixels + 15.0 > position.maxScrollExtent &&
!_keFuStore.isScrollEnd &&
!_isMorLoading) {
_isMorLoading = true;
setState(() {});
await Future.delayed(Duration(milliseconds: 1000));
_keFuStore.getMessageRecord(
timestamp: _keFuStore.messagesRecord[0].timestamp);
_isMorLoading = false;
setState(() {});
}
} catch (e) {
debugPrint(e);
}
}
// _goToWprkOrder
void _goToWprkOrder(BuildContext context){
Navigator.push(context, MaterialPageRoute(builder: (context)=> WorkOrder()));
}
/// 点击发送按钮(发送消息)
void _onSubmit() async {
String content = _editingController.value.text.trim();
if (content.isEmpty) return;
MessageHandle messageHandle = _keFuStore.createMessage(
toAccount: _keFuStore.toAccount, msgType: "text", content: content);
_keFuStore.sendMessage(messageHandle);
_editingController.clear();
_keFuStore.toScrollEnd();
await Future.delayed(Duration(milliseconds: 500));
_keFuStore.setHandshakeKeywordList([]);
}
/// onShowEmoJiPanel
void _onShowEmoJiPanel() async {
FocusScope.of(context).requestFocus(FocusNode());
await Future.delayed(Duration(milliseconds: 100));
setState(() {
_isShowEmoJiPanel = true;
});
}
/// onHideEmoJiPanel
void _onHideEmoJiPanel() {
setState(() {
_isShowEmoJiPanel = false;
});
}
/// EmoJiPanel
Widget _emoJiPanel() {
return EmoJiPanel(
isShow: _isShowEmoJiPanel,
onSelected: (String emoji) {
_editingController.text = _editingController.value.text + emoji;
},
);
}
/// 接入人工 or 结束会话
bool _isOnHeadRightButton = false;
_onHeadRightButton() async {
if (_isOnHeadRightButton) return;
_isOnHeadRightButton = true;
if (_keFuStore.isService) {
ImUtils.alert(context, content: "您是否确认关闭本次会话?", onConfirm: () {
MessageHandle msgHandle = _keFuStore.createMessage(
toAccount: _keFuStore.toAccount, msgType: "end", content: "");
_keFuStore.sendMessage(msgHandle);
_keFuStore.isService = false;
_keFuStore.prefs.remove("currentServiceUser_${_keFuStore?.imUser?.id}");
setState(() {});
});
await Future.delayed(Duration(milliseconds: 1000));
_isOnHeadRightButton = false;
return;
}
_editingController.text = "人工";
_onSubmit();
setState(() {});
await Future.delayed(Duration(milliseconds: 1000));
_isOnHeadRightButton = false;
}
/// 选择图片文件
void _getImage(ImageSource source) async {
File _file = await ImagePicker.pickImage(source: source, maxWidth: 2000);
if (_file == null) return;
_keFuStore.sendPhoto(_file);
}
// 操作消息
void _onMessageOperation(ImMessage message) {
bool isLocalImage = message.payload != null &&
!message.payload.contains(RegExp(r'^(http://|https://)'));
bool isPhoto = message.bizType == "photo";
Widget _delete() {
return CupertinoDialogAction(
child: const Text('删除'),
onPressed: () {
_keFuStore.deleteMessage(message);
Navigator.pop(context);
},
);
}
Widget _cancel() {
return CupertinoDialogAction(
child: const Text('撤回'),
onPressed: () {
_onCancelMessage(message);
Navigator.pop(context);
},
);
}
Widget _close() {
return CupertinoDialogAction(
child: const Text('取消'),
isDestructiveAction: true,
onPressed: () {
Navigator.pop(context);
},
);
}
Widget _copy() {
return CupertinoDialogAction(
child: Text(isPhoto ? "复制图片链接" : '复制'),
onPressed: () {
Clipboard.setData(ClipboardData(text: message.payload));
Navigator.pop(context);
ImUtils.alert(context, content: "消息已复制到粘贴板");
},
);
}
List<Widget> actions = [];
if (message.isShowCancel) actions.add(_cancel());
actions.add(_delete());
if (message.bizType == "text") actions.add(_copy());
if (isPhoto && !isLocalImage) {
actions.add(_copy());
}
actions.add(_close());
showCupertinoDialog(
context: context,
builder: (_) {
return CupertinoAlertDialog(
title: Text(
'消息操作',
style: TextStyle(
color: Colors.black.withAlpha(150), fontSize: 14.0),
),
content: isPhoto
? SizedBox(
width: 100.0,
height: 100.0,
child: CachedImage(
width: 100.0,
height: 100.0,
bgColor: Colors.transparent,
fit: BoxFit.contain,
src: "${message.payload}..."),
)
: Text(
message.payload,
maxLines: 8,
overflow: TextOverflow.ellipsis,
style: TextStyle(height: 1.5, color: Colors.black87),
),
actions: actions);
});
}
// 撤回一条消息
void _onCancelMessage(ImMessage msg) {
if (!msg.isShowCancel) {
debugPrint("已超过撤回时间!");
return;
}
MessageHandle msgHandle = _keFuStore.createMessage(
toAccount: _keFuStore.toAccount, msgType: "cancel", content: msg.key);
_keFuStore.sendMessage(msgHandle);
_keFuStore.deleteMessage(msg);
}
/// footer bar
Widget _bottomBar() {
ThemeData themeData = Theme.of(context);
return Container(
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
decoration: BoxDecoration(
color: Colors.white,
border: Border(
top: BorderSide(color: Colors.grey.withAlpha(60), width: .5),
bottom: BorderSide(
color: Colors.grey.withAlpha(_isShowEmoJiPanel ? 60 : 0),
width: .5),
)),
constraints: BoxConstraints(
minHeight: 80.0,
),
child: Column(
children: <Widget>[
SizedBox(
child: Row(
children: <Widget>[
GestureDetector(
child: Padding(
padding: EdgeInsets.all(3.0),
child: Icon(
Icons.insert_emoticon,
color: Colors.black26,
size: 28,
),
),
onTap: _isShowEmoJiPanel
? _onHideEmoJiPanel
: _onShowEmoJiPanel),
GestureDetector(
child: Container(
padding: EdgeInsets.all(3.0),
child: Icon(
Icons.image,
color: Colors.black26,
size: 28,
),
),
onTap: () => _getImage(ImageSource.gallery),
),
GestureDetector(
child: Container(
padding: EdgeInsets.all(3.0),
child: Icon(
Icons.camera_alt,
color: Colors.black26,
size: 28,
),
),
onTap: () => _getImage(ImageSource.camera),
),
Offstage(
offstage: _keFuStore.imConfigs.openWorkorder == 0,
child: GestureDetector(
child: Container(
padding: EdgeInsets.all(3.0),
child: Row(children: <Widget>[
Icon(
Icons.library_books,
color: Colors.black26,
size: 25,
),
Text("工单", style: TextStyle(fontSize: 14.0, color: Colors.grey,))
],),
),
onTap: () => _goToWprkOrder(context)
),
),
],
),
),
Row(
crossAxisAlignment: CrossAxisAlignment.end,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child: Container(
constraints: BoxConstraints(minHeight: 50.0),
padding: EdgeInsets.symmetric(horizontal: 5.0),
child: TextField(
cursorColor: themeData.primaryColor,
decoration: InputDecoration(
hintText: "请用一句话描述您的问题~",
border: InputBorder.none,
hintStyle: TextStyle(
color: Colors.grey.withAlpha(150),
),
counterStyle:
TextStyle(color: Colors.grey.withAlpha(200)),
contentPadding: EdgeInsets.symmetric(vertical: 3.0),
counterText: ""),
style: TextStyle(color: Colors.black.withAlpha(170)),
focusNode: _focusNode,
controller: _editingController,
minLines: 1,
maxLines: 5,
maxLength: 200,
onSubmitted: (_) {
_onSubmit();
FocusScope.of(context).requestFocus(_focusNode);
},
textInputAction: Platform.isIOS
? TextInputAction.send
: TextInputAction.newline,
onChanged: (String value) {
_onSearchHandshake(value);
_keFuStore.inputOnChanged(value);
},
))),
Offstage(
offstage: Platform.isIOS && !_isShowEmoJiPanel,
child: Center(
child: SizedBox(
width: 60.0,
child: FlatButton(
color: Theme.of(context).primaryColor,
onPressed: () {
_onSubmit();
FocusScope.of(context).requestFocus(_focusNode);
},
child: Text(
"发送",
style: TextStyle(color: Colors.white),
),
),
),
),
)
],
)
],
),
);
}
@override
void dispose() {
// 离开客服窗口
_keFuStore.setWindow(0);
_focusNode?.dispose();
_editingController?.dispose();
super.dispose();
}
/// AppBar
Widget _appBar(BuildContext context) {
final keFuState = Provider.of<KeFuStore>(context);
return AppBar(
centerTitle: true,
title: Text(keFuState.isPong ? "对方正在输入..." : '在线客服'),
actions: <Widget>[
Offstage(
offstage: !keFuState.isService,
child: FlatButton(
child: Text(
"结束会话",
style: TextStyle(color: Colors.white),
),
onPressed: _onHeadRightButton,
),
),
Offstage(
offstage: keFuState.isService,
child: IconButton(
icon: Image.network("http://qiniu.cmp520.com/kefu_icon_2000.png",
width: 25.0, height: 25.0),
onPressed: _onHeadRightButton,
))
],
);
}
/// knowledge Widget
Widget _knowledgeWidget(BuildContext context) {
final keFuState = Provider.of<KeFuStore>(context);
return Offstage(
offstage: keFuState.handshakeKeywordList.length == 0,
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 15.0),
child: Text("以下是您关心的问题?"),
),
Divider(
height: 1.0,
),
Column(
children: List.generate(keFuState.handshakeKeywordList.length,
(int index) {
KnowledgeModel item = keFuState.handshakeKeywordList[index];
return SizedBox(
height: 33.0,
child: CupertinoButton(
padding: EdgeInsets.symmetric(horizontal: 15.0),
onPressed: () {
_editingController.text = item.title;
_onSubmit();
},
child: Row(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 3.0),
child: Text(
" • ",
style: TextStyle(fontWeight: FontWeight.w600),
),
),
Expanded(
child: Text(
"${item.title}",
style: TextStyle(fontSize: 14.0),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
)
],
),
),
);
}),
)
],
),
),
);
}
@override
Widget build(_) {
return ChangeNotifierProvider<KeFuStore>.value(
value: _keFuStore,
child: Builder(
builder: (BuildContext context) {
final keFuState = Provider.of<KeFuStore>(context);
return Scaffold(
appBar: _appBar(context),
body: Column(
children: <Widget>[
Expanded(
child: GestureDetector(
onPanDown: (_) {
_onHideEmoJiPanel();
FocusScope.of(context).requestFocus(FocusNode());
},
child: CustomScrollView(
controller: _keFuStore.scrollController,
reverse: true,
slivers: <Widget>[
SliverPadding(
padding: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 20.0),
sliver: SliverList(
delegate: SliverChildBuilderDelegate((ctx, i) {
int index =
keFuState.messagesRecord.length - i - 1;
ImMessage _msg = keFuState.messagesRecord[index];
/// 判断是否需要显示时间
if (i == keFuState.messagesRecord.length - 1 ||
(_msg.timestamp - 120) >
keFuState.messagesRecord[index - 1]
.timestamp) {
_msg.isShowDate = true;
}
switch (_msg.bizType) {
case "text":
case "welcome":
return TextMessage(
message: _msg,
isSelf:
_msg.fromAccount == keFuState.imUser.id,
onCancel: () => _onCancelMessage(_msg),
onOperation: () =>
_onMessageOperation(_msg),
);
case "photo":
return PhotoMessage(
message: _msg,
isSelf:
_msg.fromAccount == keFuState.imUser.id,
onCancel: () => _onCancelMessage(_msg),
onOperation: () =>
_onMessageOperation(_msg),
);
case "end":
case "transfer":
case "cancel":
case "timeout":
case "system":
return SystemMessage(
message: _msg,
isSelf:
_msg.fromAccount == keFuState.imUser.id,
);
case "knowledge":
return KnowledgeMessage(
message: _msg,
onSend: (msg) {
_editingController.text =
msg.title == "以上都不是?我要找人工"
? "人工"
: msg.title;
_onSubmit();
},
);
default:
return SizedBox();
}
}, childCount: keFuState.messagesRecord.length)),
),
SliverToBoxAdapter(
child: Offstage(
offstage: !_isMorLoading,
child: Padding(
padding: EdgeInsets.symmetric(vertical: 10.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Platform.isAndroid
? SizedBox(
width: 10.0,
height: 10.0,
child: CircularProgressIndicator(
strokeWidth: 2.0,
))
: CupertinoActivityIndicator(),
Text(
" 加载更多",
style: TextStyle(color: Colors.black38),
)
],
),
),
),
),
],
),
),
),
Container(
color: Colors.white,
child: SafeArea(
top: false,
child: Column(
children: <Widget>[
_knowledgeWidget(context),
_bottomBar(),
_emoJiPanel(),
],
),
),
)
],
),
);
},
));
}
}
class ImConfigs {
int uploadMode;
String uploadSecret;
String uploadHost;
int openWorkorder;
ImConfigs(
{this.uploadMode,
this.uploadSecret,
this.uploadHost,
this.openWorkorder});
ImConfigs.fromJson(Map<String, dynamic> json) {
uploadMode = json['upload_mode'];
uploadSecret = json['upload_secret'];
uploadHost = json['upload_host'];
openWorkorder = json['open_workorder'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['upload_mode'] = this.uploadMode;
data['upload_secret'] = this.uploadSecret;
data['upload_host'] = this.uploadHost;
data['open_workorder'] = this.openWorkorder;
return data;
}
}
\ No newline at end of file
import 'dart:convert';
class ImMessage {
String bizType;
String version;
dynamic payload;
int fromAccount;
int toAccount;
int timestamp;
int read;
int key;
int transferAccount;
bool isShowCancel = false;
int uploadProgress;
String avatar;
String nickname;
bool isShowDate = false;
ImMessage(
{this.bizType,
this.key,
this.isShowDate = false,
this.uploadProgress,
this.version,
this.avatar,
this.nickname,
this.isShowCancel = false,
this.payload,
this.fromAccount,
this.toAccount,
this.timestamp,
this.read,
this.transferAccount});
ImMessage.fromJson(Map<String, dynamic> json) {
this.bizType = json['biz_type'];
this.version = json['version'];
this.isShowCancel = json['is_show_cancel'] ?? false;
this.payload = json['payload'];
this.key = json['key'];
this.fromAccount = json['from_account'];
this.toAccount = json['to_account'];
this.timestamp = json['timestamp'];
this.avatar = json['avatar'];
this.read = json['read'];
this.uploadProgress = json['upload_progress'] ?? 0;
this.nickname = json['nickname'];
this.transferAccount = json['transfer_account'];
}
String toBase64() {
return base64Encode(utf8.encode(json.encode(toJson())));
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['biz_type'] = this.bizType;
data['version'] = this.version;
data['key'] = this.key;
data['upload_progress'] = this.uploadProgress;
data['is_show_cancel'] = this.isShowCancel;
data['payload'] = this.payload;
data['from_account'] = this.fromAccount;
data['to_account'] = this.toAccount;
data['timestamp'] = this.timestamp;
data['avatar'] = this.avatar;
data['read'] = this.read;
data['nickname'] = this.nickname;
data['transfer_account'] = this.transferAccount;
return data;
}
}
class ImTokenInfo {
String appId;
String appPackage;
String appAccount;
String miUserId;
String miUserSecurityKey;
String token;
String feDomainName;
String relayDomainName;
int miChid;
int regionBucket;
ImTokenInfo(
{this.appId,
this.appPackage,
this.appAccount,
this.miUserId,
this.miUserSecurityKey,
this.token,
this.feDomainName,
this.relayDomainName,
this.miChid,
this.regionBucket});
ImTokenInfo.fromJson(Map<String, dynamic> json) {
this.appId = json['appId'];
this.appPackage = json['appPackage'];
this.appAccount = json['appAccount'];
this.miUserId = json['miUserId'];
this.miUserSecurityKey = json['miUserSecurityKey'];
this.token = json['token'];
this.feDomainName = json['feDomainName'];
this.relayDomainName = json['relayDomainName'];
this.miChid = json['miChid'];
this.regionBucket = json['regionBucket'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['appId'] = this.appId;
data['appPackage'] = this.appPackage;
data['appAccount'] = this.appAccount;
data['miUserId'] = this.miUserId;
data['miUserSecurityKey'] = this.miUserSecurityKey;
data['token'] = this.token;
data['feDomainName'] = this.feDomainName;
data['relayDomainName'] = this.relayDomainName;
data['miChid'] = this.miChid;
data['regionBucket'] = this.regionBucket;
return data;
}
}
class ImUser {
String avatar;
String address;
String nickname;
String token;
String phone;
String remarks;
int id;
int uid;
int platform;
int online;
int updateAt;
int lastActivity;
int createAt;
ImUser(
{this.avatar,
this.address,
this.nickname,
this.token,
this.phone,
this.remarks,
this.id,
this.uid,
this.platform,
this.online,
this.updateAt,
this.lastActivity,
this.createAt});
ImUser.fromJson(Map<String, dynamic> json) {
this.avatar = json['avatar'];
this.address = json['address'];
this.nickname = json['nickname'];
this.token = json['token'];
this.phone = json['phone'];
this.remarks = json['remarks'];
this.id = json['id'];
this.uid = json['uid'];
this.platform = json['platform'];
this.online = json['online'];
this.updateAt = json['update_at'];
this.lastActivity = json['last_activity'];
this.createAt = json['create_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['avatar'] = this.avatar;
data['address'] = this.address;
data['nickname'] = this.nickname;
data['token'] = this.token;
data['phone'] = this.phone;
data['remarks'] = this.remarks;
data['id'] = this.id;
data['uid'] = this.uid;
data['platform'] = this.platform;
data['online'] = this.online;
data['update_at'] = this.updateAt;
data['last_activity'] = this.lastActivity;
data['create_at'] = this.createAt;
return data;
}
}
class KnowledgeModel {
String title;
String subTitle;
String content;
int id;
int uid;
int platform;
int updateAt;
int createAt;
KnowledgeModel(
{this.title,
this.subTitle,
this.content,
this.id,
this.uid,
this.platform,
this.updateAt,
this.createAt});
KnowledgeModel.fromJson(Map<String, dynamic> json) {
this.title = json['title'];
this.subTitle = json['sub_title'];
this.content = json['content'];
this.id = json['id'];
this.uid = json['uid'];
this.platform = json['platform'];
this.updateAt = json['update_at'];
this.createAt = json['create_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['title'] = this.title;
data['sub_title'] = this.subTitle;
data['content'] = this.content;
data['id'] = this.id;
data['uid'] = this.uid;
data['platform'] = this.platform;
data['update_at'] = this.updateAt;
data['create_at'] = this.createAt;
return data;
}
}
class Robot {
int id;
String nickname;
String avatar;
String welcome;
String understand;
String artificial;
String keyword;
String timeoutText;
String noServices;
String loogTimeWaitText;
int isRun;
int system;
int platform;
int updateAt;
int createAt;
Robot(
{this.id,
this.nickname,
this.avatar,
this.welcome,
this.understand,
this.artificial,
this.keyword,
this.timeoutText,
this.noServices,
this.loogTimeWaitText,
this.isRun,
this.system,
this.platform,
this.updateAt,
this.createAt});
Robot.fromJson(Map<String, dynamic> json) {
id = json['id'];
nickname = json['nickname'];
avatar = json['avatar'];
welcome = json['welcome'];
understand = json['understand'];
artificial = json['artificial'];
keyword = json['keyword'];
timeoutText = json['timeout_text'];
noServices = json['no_services'];
loogTimeWaitText = json['loog_time_wait_text'];
isRun = json['switch'];
system = json['system'];
platform = json['platform'];
updateAt = json['update_at'];
createAt = json['create_at'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['nickname'] = this.nickname;
data['avatar'] = this.avatar;
data['welcome'] = this.welcome;
data['understand'] = this.understand;
data['artificial'] = this.artificial;
data['keyword'] = this.keyword;
data['timeout_text'] = this.timeoutText;
data['no_services'] = this.noServices;
data['loog_time_wait_text'] = this.loogTimeWaitText;
data['switch'] = this.isRun;
data['system'] = this.system;
data['platform'] = this.platform;
data['update_at'] = this.updateAt;
data['create_at'] = this.createAt;
return data;
}
}
class ServiceUser {
String nickname;
String avatar;
int id;
ServiceUser({this.nickname, this.avatar, this.id});
ServiceUser.fromJson(Map<String, dynamic> json) {
this.nickname = json['nickname'];
this.avatar = json['avatar'];
this.id = json['id'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['nickname'] = this.nickname;
data['avatar'] = this.avatar;
data['id'] = this.id;
return data;
}
}
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ImUtils {
/// 日期格式化
static String formatDate(int millisecondsSinceEpoch) {
if (millisecondsSinceEpoch.toString().length <= 10) {
millisecondsSinceEpoch =
int.parse(millisecondsSinceEpoch.toString() + '000');
}
if (millisecondsSinceEpoch == null) return "";
int dateTimeStamp = millisecondsSinceEpoch;
int minute = 1000 * 60;
int hour = minute * 60;
int day = hour * 24;
int now = DateTime.now().millisecondsSinceEpoch;
int diffValue = now - dateTimeStamp;
var dayC = diffValue / day ~/ 1;
String result;
DateTime date = DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch);
if (dayC >= 1) {
result =
"${date.year}-${date.month < 10 ? "0" + date.month.toString() : date.month}-${date.day < 10 ? "0" + date.day.toString() : date.day} ${date.hour}:${date.minute < 10 ? "0" + date.minute.toString() : date.minute}";
} else {
String firstString = "";
if (date.hour > 1 && date.hour <= 6) {
firstString = "凌晨 ";
} else if (date.hour > 6 && date.hour <= 11) {
firstString = "早上 ";
} else if (date.hour > 11 && date.hour <= 12) {
firstString = "中午 ";
} else if (date.hour > 12 && date.hour <= 18) {
firstString = "下午 ";
} else if (date.hour > 18 && date.hour <= 23) {
firstString = "晚上 ";
}
result = firstString +
"${date.hour}:${date.minute < 10 ? "0" + date.minute.toString() : date.minute}";
}
return result;
}
/// 普通询问弹窗
/// * [title] 标题
/// * [content] 内容
/// * [cancelText] 撤销文字 默认 = 取消
/// * [confirmText] 确定文字 默认 = 确定
static void alert(
context, {
String title = "温馨提示!",
dynamic content,
String cancelText = '取消',
String confirmText = '确定',
bool isConfirmPop = true,
VoidCallback onCancel,
VoidCallback onConfirm,
}) {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
ThemeData themeData = Theme.of(context);
return CupertinoAlertDialog(
title: title.isEmpty
? null
: Padding(
padding: EdgeInsets.only(bottom: 10.0),
child: Text(title,
style:
themeData.textTheme.title.copyWith(fontSize: 16.0)),
),
content: content is Widget ? content : Text('$content'),
actions: <Widget>[
CupertinoDialogAction(
child: Text(cancelText),
isDestructiveAction: true,
onPressed: () {
Navigator.pop(context);
if (onCancel != null) onCancel();
},
),
CupertinoDialogAction(
child: Text(
confirmText,
style: TextStyle(color: themeData.primaryColor),
),
isDefaultAction: true,
onPressed: () {
if (isConfirmPop) Navigator.pop(context);
if (onConfirm != null) onConfirm();
},
),
],
);
});
}
}
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_advanced_networkimage/provider.dart';
import 'package:flutter_advanced_networkimage/transition.dart';
class CachedImage extends StatelessWidget {
CachedImage(
{@required this.src,
this.width = 100.0,
this.height = 100.0,
this.fit = BoxFit.contain,
this.bgColor,
this.radius});
final String src;
final double width;
final double height;
final BoxFit fit;
final Color bgColor;
final BorderRadius radius;
// 是否是本地资源
bool get isLocal =>
src != null && !src.contains(RegExp(r'^(http://|https://)'));
@override
Widget build(BuildContext context) {
if (src == null || src.isEmpty)
return Container(
width: width,
height: height,
color: bgColor == null ? Color.fromRGBO(0, 0, 0, 0.1) : bgColor,
);
try {
return ClipRRect(
borderRadius:
radius != null ? radius : BorderRadius.all(Radius.circular(3.0)),
child: Container(
width: width,
height: height,
color: bgColor == null ? Color.fromRGBO(0, 0, 0, 0.05) : bgColor,
child: src == null
? SizedBox()
: SizedBox(
width: width,
height: height,
child: isLocal
? Image.file(
File(src),
width: width,
height: height,
fit: fit,
)
: TransitionToImage(
image: AdvancedNetworkImage(
src,
useDiskCache: true,
cacheRule:
CacheRule(maxAge: const Duration(days: 30)),
),
loadingWidgetBuilder: (_, double progress, __) =>
Center(
child: Platform.isAndroid
? SizedBox(
width: 15.0,
height: 15.0,
child: CircularProgressIndicator(
strokeWidth: 2.0,
))
: CupertinoActivityIndicator()),
fit: fit,
placeholder: Icon(
Icons.photo,
color: Colors.grey.withAlpha(100),
),
width: width,
height: height,
enableRefresh: true,
))),
);
} catch (_) {
return Container(
color: Colors.grey.withAlpha(10),
child: Center(
child: Text(
"图片已损坏\r\n或已删除",
style: TextStyle(fontSize: 14.0, color: Colors.grey),
textAlign: TextAlign.center,
),
),
);
}
}
}
import 'package:flutter/material.dart';
import '../utils/im_utils.dart';
class DateWidget extends StatelessWidget {
DateWidget({this.date});
final int date;
@override
Widget build(BuildContext context) {
return Container(
height: 23.0,
margin: EdgeInsets.symmetric(vertical: 10.0),
constraints: BoxConstraints(
minWidth: 200.0,
),
alignment: Alignment.center,
child: Text(
"${ImUtils.formatDate(date)}",
style: TextStyle(color: Colors.black38),
),
);
}
}
import 'dart:io';
import 'package:flutter/material.dart';
import 'emojis.dart';
typedef EmoJiPanelCallback(String emoji);
class EmoJiPanel extends StatelessWidget {
EmoJiPanel({this.isShow = false, this.onSelected});
final bool isShow;
final EmoJiPanelCallback onSelected;
@override
Widget build(BuildContext context) {
return Offstage(
offstage: !isShow,
child: Container(
width: double.infinity,
height: 250.0,
color: Colors.white,
child: GridView.builder(
itemCount: emojis.length,
padding: EdgeInsets.all(6.0),
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 11),
itemBuilder: (ctx, index) {
return InkWell(
onTap: () => onSelected(emojis[index]),
child: Text(
"${emojis[index]}",
style: TextStyle(fontSize: Platform.isAndroid ? 25 : 30),
),
);
}),
),
);
}
}
const List<String> emojis = [
"😀",
"😁",
"😂",
"🤣",
"😃",
"😄",
"😅",
"😆",
"😉",
"😊",
"😋",
"😎",
"😍",
"😘",
"😗",
"😙",
"😚",
"🙂",
"🤗",
"🤩",
"🤔",
"🤨",
"😐",
"😑",
"😶",
"🙄",
"😏",
"😣",
"😥",
"😮",
"🤐",
"😯",
"😪",
"😫",
"😴",
"😌",
"😛",
"😜",
"😝",
"🤤",
"😒",
"😓",
"😔",
"😕",
"🙃",
"🤑",
"😲",
"🙁",
"😖",
"😞",
"😟",
"😤",
"😢",
"😭",
"😦",
"😧",
"😨",
"😩",
"🤯",
"😬",
"😰",
"😱",
"😳",
"🤪",
"😵",
"😡",
"😠",
"🤬",
"😷",
"🤒",
"🤕",
"🤢",
"🤮",
"🤧",
"😇",
"🤠",
"🤡",
"🤥",
"🤫",
"🤭",
"🧐",
"🤓",
"😈",
"👿",
"👹",
"👺",
"💀",
"👻",
"👽",
"🤖",
"💩",
"😺",
"😸",
"😹",
"😻",
"😼",
"😽",
"🙀",
"😿",
"😾",
"🤲",
"👐",
"🙌",
"👏",
"🤝",
"👍",
"👎",
"👊",
"✊",
"🤛",
"🤜",
"🤞",
"✌️",
"🤟",
"🤘",
"👌",
"👈",
"👉",
"👆",
"👇",
"☝️",
"✋",
"🤚",
"🖐",
"🖖",
"👋",
"🤙",
"💪",
"🖕",
"✍️",
"🙏"
];
import 'package:flutter/material.dart';
import 'cached_network_image.dart';
class ImAvatar extends StatelessWidget {
ImAvatar({this.avatar});
final String avatar;
@override
Widget build(BuildContext context) {
return Container(
width: 33.0,
height: 33.0,
decoration: BoxDecoration(
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
offset: Offset(0.0, 3.0),
color: Colors.black26.withAlpha(5),
blurRadius: 4.0,
),
BoxShadow(
offset: Offset(0.0, 3.0),
color: Colors.black26.withAlpha(5),
blurRadius: 4.0,
),
],
),
child: CachedImage(
width: 30.0,
radius: BorderRadius.all(Radius.circular(30.0)),
height: 30.0,
bgColor: Colors.transparent,
src: avatar,
fit: BoxFit.fill));
}
}
import 'dart:convert';
import 'package:flutter/material.dart';
import '../models/im_message.dart';
import '../models/knowledge_model.dart';
import 'date_widget.dart';
import 'im_avatar.dart';
typedef SendKnowledgeMessage(KnowledgeModel message);
class KnowledgeMessage extends StatelessWidget {
KnowledgeMessage({this.message, this.onSend});
final ImMessage message;
final SendKnowledgeMessage onSend;
bool get isSelf {
return true;
}
List<KnowledgeModel> get knowledgeModelList =>
((json.decode(message.payload) as List)
.map((i) => KnowledgeModel.fromJson(i))
.toList())
..add(KnowledgeModel(title: "以上都不是?我要找人工"));
@override
Widget build(BuildContext context) {
Widget msgWidget() {
return Container(
margin: EdgeInsets.only(bottom: 15.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
ImAvatar(
avatar: message.avatar,
),
Padding(
padding: EdgeInsets.only(left: 7.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.only(top: 3.0),
width: 290.0,
padding:
EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
offset: Offset(0.0, 3.0),
color: Colors.black26.withAlpha(5),
blurRadius: 4.0,
),
BoxShadow(
offset: Offset(0.0, 3.0),
color: Colors.black26.withAlpha(5),
blurRadius: 4.0,
),
],
borderRadius: BorderRadius.all(Radius.circular(5))),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("以下是您关心的相关问题?",
style: TextStyle(
color: Colors.black87.withAlpha(180),
fontSize: 16.0)),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children:
knowledgeModelList.map((KnowledgeModel item) {
return GestureDetector(
onTap: () => onSend(item),
child: DefaultTextStyle(
style: TextStyle(
color: Colors.blue, fontSize: 15.0),
child: Padding(
padding:
EdgeInsets.symmetric(vertical: 2.0),
child: Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 3.0),
child: Text(
" • ",
style: TextStyle(
fontWeight: FontWeight.w600),
),
),
Expanded(
child: Text("${item.title}"),
)
],
),
)),
);
}).toList(),
),
],
),
)
],
),
),
],
),
);
}
return Column(
children: <Widget>[
Offstage(
offstage: !message.isShowDate,
child: DateWidget(
date: message.timestamp,
),
),
msgWidget()
],
);
}
}
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_advanced_networkimage/zoomable.dart';
import '../models/im_message.dart';
import 'cached_network_image.dart';
import 'date_widget.dart';
import 'im_avatar.dart';
class PhotoMessage extends StatelessWidget {
PhotoMessage({this.message, this.onCancel, this.onOperation, this.isSelf});
final ImMessage message;
final VoidCallback onCancel;
final VoidCallback onOperation;
final bool isSelf;
@override
Widget build(BuildContext context) {
Widget _avatar(bool show) {
return Offstage(
offstage: !show,
child: ImAvatar(
avatar: message.avatar,
));
}
Widget _loading() {
return SizedBox(
width: 10.0,
height: 10.0,
child: Platform.isAndroid
? CircularProgressIndicator(
strokeWidth: 2.0,
)
: CupertinoActivityIndicator(
radius: 8.0,
),
);
}
Widget _state() {
return Offstage(
offstage: !isSelf,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Offstage(
offstage: !message.isShowCancel,
child: GestureDetector(
onTap: onCancel,
child: Text(" 撤回 ", style: TextStyle(color: Colors.blue)),
),
),
Offstage(
offstage:
message.uploadProgress == 0 || message.uploadProgress == 100,
child: Row(
children: <Widget>[
_loading(),
Text(
" ${message.uploadProgress}% ",
style: TextStyle(color: Colors.black26),
),
],
),
)
],
),
);
}
Widget msgWidget() {
return Container(
margin: EdgeInsets.only(bottom: 15.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment:
isSelf ? MainAxisAlignment.end : MainAxisAlignment.start,
children: <Widget>[
_avatar(!isSelf),
Padding(
padding: EdgeInsets.only(
left: isSelf ? 0 : 7.0, right: isSelf ? 7.0 : 0),
child: Column(
crossAxisAlignment:
isSelf ? CrossAxisAlignment.end : CrossAxisAlignment.start,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
_state(),
Hero(
tag: message.payload,
child: GestureDetector(
onLongPress: onOperation,
onTap: () {
showDialog(
context: context,
builder: (context) {
return Center(
child: ZoomableWidget(
onTap: () => Navigator.pop(context),
maxScale: 2.0,
minScale: 0.5,
child: CachedImage(
width: MediaQuery.of(context)
.size
.width /
1,
height: MediaQuery.of(context)
.size
.height /
1,
src: message.payload,
bgColor: Colors.transparent,
fit: BoxFit.fitWidth),
));
});
},
child: Container(
margin: EdgeInsets.only(top: 3.0),
constraints: BoxConstraints(
maxWidth: 200.0,
),
child: ClipRRect(
borderRadius:
BorderRadius.all(Radius.circular(5.0)),
child: CachedImage(
width: 150.0,
height: 180.0,
bgColor: Colors.white,
src: message.payload,
fit: BoxFit.fitWidth)),
))),
],
)
],
),
),
_avatar(isSelf),
],
),
);
}
return Column(
children: <Widget>[
Offstage(
offstage: !message.isShowDate,
child: DateWidget(
date: message.timestamp,
),
),
msgWidget()
],
);
}
}
import 'package:flutter/material.dart';
import '../models/im_message.dart';
class SystemMessage extends StatelessWidget {
SystemMessage({this.message, this.isSelf});
final ImMessage message;
final bool isSelf;
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(bottom: 15.0),
child: Container(
height: 23.0,
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 10.0),
constraints: BoxConstraints(
minWidth: 200.0,
),
alignment: Alignment.center,
child: DefaultTextStyle(
style: TextStyle(color: Colors.black38),
child: Builder(builder: (_) {
switch (message.bizType) {
case "cancel":
return Text(isSelf ? "您撤回了一条消息" : "对方撤回了一条消息");
case "end":
return Text("本次会话结束,感谢您的耐心与支持!");
case "transfer":
return Text('已为您接入${message.transferAccount}号客服');
case "timeout":
return Text('由于您长时间未回复,系统结束了本次会话');
case "system":
return Text('${message.payload}');
default:
return SizedBox();
}
})),
),
);
}
}
import 'package:flutter/material.dart';
import '../models/im_message.dart';
import 'date_widget.dart';
import 'im_avatar.dart';
class TextMessage extends StatelessWidget {
TextMessage({this.message, this.onCancel, this.onOperation, this.isSelf});
final ImMessage message;
final VoidCallback onCancel;
final VoidCallback onOperation;
final bool isSelf;
@override
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
Widget _avatar(bool show) {
return Offstage(
offstage: !show,
child: ImAvatar(
avatar: message.avatar,
));
}
Widget _cancel() {
return Offstage(
offstage: !message.isShowCancel,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
GestureDetector(
onTap: onCancel,
child:
Text(" 撤回 ", style: TextStyle(color: themeData.primaryColor)),
),
],
),
);
}
Widget msgWidget() {
return Container(
margin: EdgeInsets.only(bottom: 15.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment:
isSelf ? MainAxisAlignment.end : MainAxisAlignment.start,
children: <Widget>[
_avatar(!isSelf),
Padding(
padding: EdgeInsets.only(
left: isSelf ? 0 : 7.0, right: isSelf ? 7.0 : 0),
child: Column(
crossAxisAlignment:
isSelf ? CrossAxisAlignment.end : CrossAxisAlignment.start,
children: <Widget>[
Row(
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
_cancel(),
GestureDetector(
onLongPress: onOperation,
child: Container(
margin: EdgeInsets.only(top: 3.0),
constraints: BoxConstraints(maxWidth: 290.0),
padding: EdgeInsets.symmetric(
horizontal: 10.0, vertical: 5.0),
decoration: BoxDecoration(
color: isSelf
? themeData.primaryColor
: Colors.white,
boxShadow: [
BoxShadow(
offset: Offset(0.0, 3.0),
color: Colors.black26.withAlpha(5),
blurRadius: 4.0,
),
BoxShadow(
offset: Offset(0.0, 3.0),
color: Colors.black26.withAlpha(5),
blurRadius: 4.0,
),
],
borderRadius:
BorderRadius.all(Radius.circular(3.0))),
child: Text("${message.payload}",
style: TextStyle(
fontSize: 15.0,
color: isSelf
? Colors.white
: Colors.black87.withAlpha(180))),
),
)
],
),
],
),
),
_avatar(isSelf),
],
),
);
}
return Column(
children: <Widget>[
Offstage(
offstage: !message.isShowDate,
child: DateWidget(
date: message.timestamp,
),
),
msgWidget()
],
);
}
}
import 'package:flutter/material.dart';
class WorkOrder extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Text("我的工单"),
actions: <Widget>[
FlatButton(
child: Text(
"创建工单",
style: TextStyle(color: Colors.white),
),
onPressed: (){},
)
],
),
body: CustomScrollView(
),
);
}
}
\ No newline at end of file
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
args:
dependency: transitive
description:
name: args
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.2"
async:
dependency: transitive
description:
name: async
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.14.11"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.3"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.3"
dio:
dependency: "direct main"
description:
name: dio
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.9"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_advanced_networkimage:
dependency: "direct main"
description:
name: flutter_advanced_networkimage
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
flutter_mimc:
dependency: "direct main"
description:
name: flutter_mimc
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.6"
flutter_svg:
dependency: transitive
description:
name: flutter_svg
url: "https://pub.dartlang.org"
source: hosted
version: "0.17.3+1"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http:
dependency: transitive
description:
name: http
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.0+4"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.4"
image_picker:
dependency: "direct main"
description:
name: image_picker
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.6"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.8"
nested:
dependency: transitive
description:
name: nested
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4"
path:
dependency: transitive
description:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.4"
path_drawing:
dependency: transitive
description:
name: path_drawing
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.1"
path_parsing:
dependency: transitive
description:
name: path_parsing
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "1.6.5"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.4"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.1"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0+1"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.dartlang.org"
source: hosted
version: "2.4.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "2.2.1"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.2"
provider:
dependency: "direct main"
description:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.4"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.5"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.6+3"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+6"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2+4"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.5.5"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.dartlang.org"
source: hosted
version: "1.9.3"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.5"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.11"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.6"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.8"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.dartlang.org"
source: hosted
version: "3.5.0"
sdks:
dart: ">2.4.0 <3.0.0"
flutter: ">=1.12.13+hotfix.4 <2.0.0"
name: kefu_flutter
version: 1.0.1+4
description: This is a customer service system based on Xiaomi Message Cloud. The flutter version may be the best open source customer service solution for flutter.
homepage: https://github.com/chenxianqi/kefu_flutter
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.3
flutter_mimc: ^1.0.1
dio: ^3.0.8
image_picker: ^0.6.2+3
shared_preferences: ^0.5.6
provider: ^4.0.1
flutter_advanced_networkimage: ^0.6.2
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# To add assets to your package, add an assets section, like this:
# assets:
# - images/a_dot_ham.jpeg
#
# For details regarding assets in packages, see
# https://flutter.dev/assets-and-images/#from-packages
#
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# To add custom fonts to your package, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts in packages, see
# https://flutter.dev/custom-fonts/#from-packages
module:
androidX: true
import 'package:flutter_test/flutter_test.dart';
import 'package:kefu_flutter/kefu_flutter.dart';
void main() {
test('adds one to input values', () {
KeFuStore().view();
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment