Skip to content
common.service.ts 7.32 KiB
Newer Older
wangqinghua's avatar
wangqinghua committed
import {Injectable} from "@angular/core";
wangqinghua's avatar
wangqinghua committed
import {AlertController, LoadingController, ToastController} from "ionic-angular";
wangqinghua's avatar
wangqinghua committed
import {AppGlobal} from "../service/http.service";
import {File} from "@ionic-native/file";
import {FileOpener} from "@ionic-native/file-opener";
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
@Injectable()

wangqinghua's avatar
wangqinghua committed
export class CommonService {
    constructor(public toastCtrl: ToastController, public alertCtrl: AlertController,
                public loadCtrl: LoadingController,
                private file: File, private fileOpener: FileOpener) {
    }
wangqinghua's avatar
wangqinghua committed


    /**
     * JSON格式数据转化为字符串 接口调用
     * @param data  json格式的数据
     * @returns {string}
     */
wangqinghua's avatar
wangqinghua committed
    toQuery(data) {
wangqinghua's avatar
wangqinghua committed
        let str = '';
        for (let key in data) {
            if (data.hasOwnProperty(key)) {
                const value = data[key];
                str += key + '=' + value + '&';
            }
        }
        str = str.substring(0, str.length - 1);
        return str;
    }

    /**
     * JSON格式对象转为form表单的格式,用来接口传递数据
     * @param json   需要转化的json
     * @returns {FormData}   formData数据
     */
wangqinghua's avatar
wangqinghua committed
    toFormData(json) {
wangqinghua's avatar
wangqinghua committed
        let formData = new FormData();
wangqinghua's avatar
wangqinghua committed
        for (let k in json) {
            formData.append(k, json[k])
wangqinghua's avatar
wangqinghua committed
        }
        return formData;
    }

wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    /**
     * 提示信息 位置:居中,延时2s
     * @param message  提示文字
     * @param callback  提示信息之后执行的方法
     */
    toast(message, callback?) {
        let toast = this.toastCtrl.create({
            message: message,
wangqinghua's avatar
wangqinghua committed
            duration: 2000,
wangqinghua's avatar
wangqinghua committed
            position: 'middle',
wangqinghua's avatar
wangqinghua committed
            dismissOnPageChange: true,
        });
        toast.present();
        if (callback) {
            callback();
        }
    }

wangqinghua's avatar
wangqinghua committed
    //短暂提示提示
wangqinghua's avatar
wangqinghua committed
    toastTime(message, duration) {
wangqinghua's avatar
wangqinghua committed
        let toast = this.toastCtrl.create({
            message: message,
            duration: duration,
wangqinghua's avatar
wangqinghua committed
            position: 'middle',
wangqinghua's avatar
wangqinghua committed
            dismissOnPageChange: true,
        });
        toast.present();
    }
wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    /**
     * alert弹窗
     * @param message  弹窗内的文字
     * @param callback  如果有回调方法 就有确定、取消两个按钮,没有回调方法 则只有确认一个按钮
     */
    alert(message, callback?) {
        if (callback) {
            let alert = this.alertCtrl.create({
                title: '提示',
                message: message,
                buttons: ['取消', {
                    text: "确定",
                    handler: data => {
                        callback();
                    }
                }]
            });
            alert.present();
        } else {
            let alert = this.alertCtrl.create({
wangqinghua's avatar
wangqinghua committed
                title: '',
                message: message,
                buttons: ["确定"]
            });
            alert.present();
        }
    }

wangqinghua's avatar
wangqinghua committed
    alert2(message, title, callback?) {
wangqinghua's avatar
wangqinghua committed
        if (callback) {
            let alert = this.alertCtrl.create({
                title: title,
                message: message,
                buttons: [
                    {
wangqinghua's avatar
wangqinghua committed
                        text: "确定",
                        handler: data => {
                            callback();
                        }
                    }]
wangqinghua's avatar
wangqinghua committed
            });
            alert.present();
        } else {
            let alert = this.alertCtrl.create({
                title: title,
wangqinghua's avatar
wangqinghua committed
                message: message,
                buttons: ["确定"]
            });
            alert.present();
        }
    }

    /**
     * 下载文件
     * @param url 文件URL
     */
wangqinghua's avatar
wangqinghua committed
    downloadFile(fileID, fileName) {
wangqinghua's avatar
wangqinghua committed
        const xhr = new XMLHttpRequest();
        const fileType = this.getFileMimeType(fileName);
        const url = encodeURI(AppGlobal.domain + '/wisdomgroup/modules/common/file/download/' + fileID);
wangqinghua's avatar
wangqinghua committed
        xhr.open('GET', url);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
wangqinghua's avatar
wangqinghua committed
        xhr.responseType = "blob";
wangqinghua's avatar
wangqinghua committed
        xhr.addEventListener("loadstart", (ev) => {
wangqinghua's avatar
wangqinghua committed
        })
wangqinghua's avatar
wangqinghua committed
        xhr.addEventListener("progress", (ev) => {
wangqinghua's avatar
wangqinghua committed
            let progress = Math.round(100.0 * ev.loaded / ev.total);
            // alert(progress);
        })
wangqinghua's avatar
wangqinghua committed
        xhr.addEventListener("load", (ev) => {
wangqinghua's avatar
wangqinghua committed
            const blob = xhr.response;
wangqinghua's avatar
wangqinghua committed
            if (blob) {
wangqinghua's avatar
wangqinghua committed
                let path = this.file.externalDataDirectory;
wangqinghua's avatar
wangqinghua committed
                this.file.writeFile(path, fileName, blob, {   //写入文件
                    replace: true
wangqinghua's avatar
wangqinghua committed
                }).then(
wangqinghua's avatar
wangqinghua committed
                    () => {
wangqinghua's avatar
wangqinghua committed
                        this.fileOpener.open(path + fileName, fileType).catch((err) => {
wangqinghua's avatar
wangqinghua committed
                            this.alert('打开文件失败!' + err);
wangqinghua's avatar
wangqinghua committed
                        })
wangqinghua's avatar
wangqinghua committed
                    }).catch((err) => {
                    this.toast("下载文件失败!")
wangqinghua's avatar
wangqinghua committed
                })
            }
        });

        xhr.addEventListener("loadend", (ev) => {
            // 结束下载事件
        });
        xhr.addEventListener("error", (ev) => {
            this.alert('下载文件失败!');
        });
        xhr.addEventListener("abort", (ev) => {
        });
        xhr.send();
    }

    //获取文件类型
    getFileMimeType(fileName: string): string {
        let fileType = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();
        let mimeType: string = '';

        switch (fileType) {
            case 'txt':
                mimeType = 'text/plain';
                break;
            case 'docx':
                mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
                break;
            case 'doc':
                mimeType = 'application/msword';
                break;
            case 'pptx':
                mimeType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
                break;
            case 'ppt':
                mimeType = 'application/vnd.ms-powerpoint';
                break;
            case 'xlsx':
                mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
                break;
            case 'xls':
                mimeType = 'application/vnd.ms-excel';
                break;
            case 'zip':
                mimeType = 'application/x-zip-compressed';
                break;
            case 'rar':
                mimeType = 'application/octet-stream';
                break;
            case 'pdf':
                mimeType = 'application/pdf';
                break;
            case 'jpg':
                mimeType = 'image/jpeg';
                break;
            case 'png':
                mimeType = 'image/png';
                break;
            default:
                mimeType = 'application/' + fileType;
                break;
        }
        return mimeType;
    }

wangqinghua's avatar
wangqinghua committed
    /**
     * 对象数组去重
     */
    uniArr(arr,key) {
        let temp = [], result = [];
        arr.map((item) => {
            if (!temp[item[key]]) {
                result.push(item);
                temp[item[key]] = true;
            }
        });
        return result;
    }

wangqinghua's avatar
wangqinghua committed

wangqinghua's avatar
wangqinghua committed
    /**
wangqinghua's avatar
wangqinghua committed
     * vConsole 移动端调试工具
wangqinghua's avatar
wangqinghua committed
     * 定义全局的log日志  开发模式 打印log  生产环境 关闭
wangqinghua's avatar
wangqinghua committed
     * @param message  信息
wangqinghua's avatar
wangqinghua committed
     */
wangqinghua's avatar
wangqinghua committed
    log(message) {
wangqinghua's avatar
wangqinghua committed
        // if(AppGlobal.domain === ""){    //开发环境时
wangqinghua's avatar
wangqinghua committed
        console.log(message);
wangqinghua's avatar
wangqinghua committed
        // }
wangqinghua's avatar
wangqinghua committed
    }

wangqinghua's avatar
wangqinghua committed
}