selectHandl.js 12 KB
var SEARCHFLOWUSERCOUNTURL = CONF_BACK_SERVERURL + "/mvc/flow/searchFlowUserCount.do";
var SAVEFLOWUSERCOUNTURL = CONF_BACK_SERVERURL + "/mvc/flow/saveFlowUserCount.do";
var LISTSTARTURL = CONF_BACK_SERVERURL + global.modelctls.project.list.start;
var ITEMTYPELISTURL = CONF_BACK_SERVERURL + "/mvc/flow/itemType/list.do";
var ITEMSALLURL = CONF_BACK_SERVERURL + global.modelctls.kvtree.all;
var KVTREEKEY = "高频类事项键值树"; // 默认高频类键值树名称
var SHOWNUMBER = 12;        // 高频类最多显示个数

var defaultUsedClass = [];  // 默认高频类事项
var flowUserCount = [];     // 用户自定义高频类事项
var userId = null;          // 当前登录用户标识
var projectId = null;       // 项目标识。续办时传入
var createMethod = null;    // 流程的创建方式(接件还是续办)
var version = null; // 版本1.0
var orign = null; // 来源页面

$(function () {
    projectId = getQueryString("projectId");
    createMethod = getQueryString("createmethod");
    version = getQueryString("FLOWVERSION");
    orign = getQueryString("orign");
    createMethod && (createMethod = decodeURI(createMethod));
    let cookieuser = $.cookie("cookieuser");
    let parse = JSON.parse(cookieuser);
    userId = parse.user.id;
});


var vm = new Vue({
    el: "#app",
    data: function () {
        return {
            radio: '',
            filterType: "所有",
            searchText: "",
            itemObject: "",
            activeNames: [],
            itemTypeArray: [],
            oldItemObject: {}
        }
    },
    methods: {
        openCreate: function (flowObj) {
            ajaxPromise({
                url: ITEMTYPELISTURL,
                data: {flowId: flowObj.id}
            }).then((result) => {
                if (Array.isArray(result) && result.length > 0) {
                    layer.open({
                        type: 1,
                        btn: ['确定', '取消'],
                        title: '请选择事项类型',
                        content: $("#itemTypeDiv"),
                        success: function () {
                            vm.itemTypeArray = result;
                            vm.radio = result[0].id;
                        },
                        yes: function () {
                            vm.openHandleJumpUrl(flowObj.id, vm.radio);
                        },
                        btn2: function (index) {
                            layer.close(index);
                        }
                    });

                } else {
                    vm.openHandleJumpUrl(flowObj.id);
                }
            }).catch((error) => {
                layer.msg("获取事项类型出错!", {icon: 2});
            });
        },
        /**
         * //TODO:wei
         * 打开详情页
         * @param flowId        流程标识
         * @param itemTypeId    事项标识
         */
        openHandleJumpUrl: function (flowId, itemTypeId) {
            localStorage.flowId = flowId;
            var unique = uuid();
            let url = CONF_FRONT_SERVERURL + 'view/projecttask/detailproject.jsp?';
            url += 'stats=create';
            url += '&flowid=' + flowId;
            url += '&create=' + (projectId ? 1 : 0);
            url += '&projectid=' + (projectId || "");
            url += '&flowItemTypeId=' + (itemTypeId || "");
            url += '&uniquePath=' + unique;
            url += '&FLOWVERSION=' + version;
            window.open(handleJumpUrl(url));
            vm.addFlowUserCount(flowId);
            parent.layer.close(parent.typeIndex)
        },

        /**
         * 事项操作+1
         */
        addFlowUserCount: function (flowId) {
            if (flowId === null || flowId === undefined) {
                return false;
            }

            ajaxPromise({
                data: JSON.stringify({"flowId": flowId, "userId": userId}),
                contentType: "application/json",
                url: SAVEFLOWUSERCOUNTURL
            }).catch((error) => {
                console.error(error);
            });
        },
        /**
         * 流程名称搜索
         */
        search: function () {
            let newItemObject = {};
            let oldItemObject = JSON.parse(JSON.stringify(vm.oldItemObject));
            for (let key in oldItemObject) {
                // 流程分类过滤
                if (vm.filterType !== "所有" && key !== vm.filterType) {
                    continue;
                }
                let array = [];
                if (vm.searchText) {
                    // 流程名称过滤
                    array = oldItemObject[key].filter(function (item) {
                        let text = highilghtField(vm.searchText, item.name);
                        return text !== item.name && (item.name = text);
                    });
                } else {
                    array = oldItemObject[key];
                }
                if (array.length > 0) {
                    newItemObject[key] = array;
                }
            }
            vm.itemObject = newItemObject;
        },
        setData: function (data) {
            var dataflows = data[0],
                datatypes = data[1],
                itemObject = {};

            // 获取所有符合显示的事项
            dataflows.forEach(function (item) {
                var createmethod = item.createmethod;
                var flowtypeName = datatypes[item.flowtype];
                if (flowtypeName && flowtypeName !== "会议类") {   // 过滤会议类和其他类
                    if (createmethod === null || createmethod == createMethod || createmethod == "全部") {    // 入口匹配。接件、续办
                        if (itemObject[flowtypeName]) {
                            itemObject[flowtypeName].push(item);
                        } else {
                            itemObject[flowtypeName] = new Array(item);
                        }
                    }
                }
            });

            // 显示事项分类
            var newItemObject = {};
            // let usedClass = vm.getUsedClass(data);
            // if (Array.isArray(usedClass) && usedClass.length > 0) {
            //     newItemObject["高频类"] = usedClass;
            // }
            for (let typeid in datatypes) {
                var typename = datatypes[typeid];
                if (typename && itemObject[typename]) {
                    newItemObject[typename] = itemObject[typename];
                }
            }

            return newItemObject;
            //vm.itemObject = newItemObject;
            //vm.activeNames = Object.keys(newItemObject);
        },
        /**
         * 获取高频类事项
         */
        // getUsedClass: function (data) {
        //     let itemidObj = {},
        //         dataflows = data[0],
        //         datatypes = data[1],
        //         usedClass = new Array();

        //     let nameObject = {};
        //     defaultUsedClass.forEach(function (item) {
        //         nameObject[item.name] = item.sortid;
        //     });

        //     let itemArray = [];
        //     dataflows.forEach( function (item) {
        //         var flowtypeName = datatypes[item.flowtype];
        //         if (flowtypeName && flowtypeName !== "会议类") {
        //             itemidObj[item.id] = item;
        //             if (nameObject[item.name]) {
        //                 itemArray.push({ flowId: item.id, count: nameObject[item.name] })
        //             }
        //         }
        //     });

        //     // 根据用户点击数显示高频类
        //     let addNameArr= [];
        //     let concat = flowUserCount.concat(itemArray);
        //     concat.sort(function (var1, var2) {
        //         return var2.count - var1.count;
        //     })

        //     concat.forEach( function (item) {
        //         if (addNameArr.length >= SHOWNUMBER) {
        //             return true;
        //         }
        //         if (itemidObj[item.flowId] && addNameArr.indexOf(item.flowId) === -1) {
        //             addNameArr.push(item.flowId);
        //             usedClass.push(itemidObj[item.flowId]);
        //         }
        //     });

        //     return usedClass;
        // }
    },
    created: function () {
        ajaxPromise({
            data: JSON.stringify({"userId": userId}),
            contentType: "application/json",
            url: SEARCHFLOWUSERCOUNTURL
        }).then(function (result) {
            if (result.status === "ok") {
                flowUserCount = result.data.rows;
                return ajaxPromise({url: LISTSTARTURL});
            } else {
                console.error(result.message);
            }
        }).catch(function (error) {
            console.error(error);
        }).then(function (result) {
            localStorage.orign = orign;
            var result = result;
            // 规划审查流程筛选
            if (orign === 'ghsc') {
                let keys = [];
                keys = Object.keys(result[1]);
              for (let item=0;item<keys.length;item++){
                  if (result[1][keys[item]] === "规划审查") {
                      result[0] = result[0].filter(it => {
                          return it.flowtype === keys[item];
                      });
                  }
              }
            } else if (orign === 'ajcc') {
                let keys = [];
                keys = Object.keys(result[1]);
                for (let item=0;item<keys.length;item++){
                    if (result[1][keys[item]] === "案件查处") {
                        result[0] = result[0].filter(it => {
                            console.log(keys[item])
                            return it.flowtype === keys[item];
                        });
                    }
                }
            }else if (orign==='phgl'){
                let keys = [];
                keys = Object.keys(result[1]);
                for (let item=0;item<keys.length;item++){
                    if (result[1][keys[item]] === "批后监管") {
                        result[0] = result[0].filter(it => {
                            console.log(keys[item])
                            return it.flowtype === keys[item];
                        });
                    }
                }
            }
            var itemObject = vm.setData(result);
            vm.itemObject = itemObject;
            vm.oldItemObject = itemObject;
            vm.activeNames = Object.keys(itemObject);
        }).catch(function (error) {
            console.error(error);
        })
    }
});

/**
 * 高亮字段
 * @param highilght     亮显值
 * @param text
 */
function highilghtField(highilght, text) {
    if (highilght && text) {
        var reg = new RegExp(highilght.replace(/[.\\[\]{}()|^$?*+]/g, "\\$&"), "g");
        text = text.toString().replace(reg, '<span style="color: red">' + highilght + '</span>');
    }
    ;
    return text;
};

function ajaxPromise(options) {
    return new Promise(function (resolve, reject) {
        if (typeof options !== "object") {
            return reject("参数错误!");
        }
        let _type = options.type || "POST";
        //'application/json'
        $.ajax({
            type: _type,
            url: options.url,
            data: options.data,
            dataType: options.dataType,
            contentType: options.contentType,
            headers: {"token": $.cookie('ftoken')},
            success: function (result) {
                resolve(result);
            },
            error: function (error) {
                reject(error);
            }
        });
    })
}

/**
 * 生成UUID
 *
 * @returns uuid
 */
function uuid() {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4";
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);
    s[8] = s[13] = s[18] = s[23] = "-";

    var uuid = s.join("");
    return uuid;
}

ajaxPromise({
    url: ITEMSALLURL,
    data: {name: KVTREEKEY}
}).then((result) => {
    debugger
    defaultUsedClass = result;
});