layui.define(["tool"], function (exports) { const layer = layui.layer, tool = layui.tool, form = layui.form, table = layui.table, tree = layui.tree; const dataPicker = { department: { title: "选择部门", url: "/api/index/get_department", area: ["400px", "524px"], searchbar: "", page: false, cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "部门名称" } ] }, position: { title: "选择岗位", url: "/api/index/get_position", area: ["400px", "524px"], searchbar: "", page: false, cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "岗位名称" } ] }, services: { title: "选择服务类型", url: "/api/index/get_services", area: ["400px", "524px"], searchbar: "", page: false, cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "服务名称" }, { field: "price", title: "服务单价" } ] }, template: { title: "选择消息模板", url: "/api/index/get_template", area: ["600px", "568px"], cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "消息模板名称" } ] }, workcate: { title: "选择工作类型", url: "/api/index/get_work_cate", area: ["400px", "524px"], searchbar: "", page: false, cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "工作类型名称" } ] }, property: { title: "选择固定资产", url: "/adm/api/get_property", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "资产名称" } ] }, car: { title: "选择车辆信息", url: "/adm/api/get_car", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "车辆名称" }, { field: "name", width: 100, title: "车牌号码", align: "center" } ] }, room: { title: "选择会议室", url: "/adm/api/get_meeting_room", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "会议室名称" }, { field: "num", width: 100, title: "可容纳人数", align: "center" } ] }, customer: { title: "选择客户", url: "/customer/api/get_customer", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "name", title: "客户名称" } ] }, supplier: { title: "选择供应商", url: "/contract/api/get_supplier", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "供应商名称" } ] }, contract: { title: "选择销售合同", url: "/contract/api/get_contract", area: ["800px", "568px"], cols: [ { field: "code", width: 160, title: "合同编号", align: "center" }, { field: "name", title: "合同名称" }, { field: "customer", title: "关联客户", width: 240 } ] }, product: { title: "选择产品", url: "/contract/api/get_product", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "产品名称" }, { field: "sale_price", title: "销售单价", width: 120, align: "center" } ] }, purchase: { title: "选择采购合同", url: "/contract/api/get_purchase", area: ["800px", "568px"], cols: [ { field: "code", width: 160, title: "合同编号", align: "center" }, { field: "name", title: "合同名称" }, { field: "supplier", title: "关联供应商", width: 240 } ] }, purchased: { title: "选择采购物品", url: "/contract/api/get_purchased", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "采购物品名称" }, { field: "purchase_price", title: "采购单价", width: 120, align: "center" } ] }, project: { title: "选择项目", url: "/project/api/get_project", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "项目名称" } ] }, task: { title: "选择任务", url: "/project/api/get_task", area: ["800px", "568px"], cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "title", title: "任务主题" }, { field: "project", width: 240, title: "关联项目" } ] }, workPlan: { title: "选择班次", url: "/user/api/get_work_plan", cols: [ { field: "id", width: 90, title: "序号", align: "center" }, { field: "name", title: "班次名称" }, { field: "time", width: 240, title: "考勤时间" } ] } }; let select_ids = []; select_names = []; select_array = []; const obj = { employeeRender: function () { var me = this, letterTem = ""; for (var i = 0; i < 26; i++) { letterTem += '' + String.fromCharCode(65 + i) + ""; } var tpl = '
\
\
\
\
⇐ 点击左边部门筛选员工,或者点击下面字母筛选
' + letterTem + '
\
\
已选择全选
\
' + me.employeeSelect(0) + "
\
"; return tpl; }, employeeSelect: function (t) { var me = this, select_tags = ""; if (me.settings.type == 0) { select_tags += '' + me.settings.names + ""; } else { select_ids = []; select_names = []; for (var a = 0; a < select_array.length; a++) { if ( me.settings.fixedid == select_array[a].id && me.settings.fixedid != 0 ) { select_tags += '' + select_array[a].name + ""; } else { select_tags += '' + select_array[a].name + ''; } if (t == 1) { $("#employee") .find('[data-id="' + select_array[a].id + '"]') .addClass("on"); } select_ids.push(parseInt(select_array[a].id)); select_names.push(select_array[a].name); } } //console.log(select_array); return select_tags; }, employeeInit: function (options) { const opts = { title: "选择员工", department_url: "/api/index/get_department_tree", employee_url: "/api/index/get_employee", type: 1, //1单人,2多人 fixedid: 0, ids: "", names: "", ajax_data: [], callback: function () {} }; this.settings = $.extend({}, opts, options); var me = this; select_ids = []; select_names = []; select_array = []; if (me.settings.ids != "" && me.settings.names != "") { select_ids = me.settings.ids.split(","); select_names = me.settings.names.split(","); select_ids.sort((a, b) => a - b); for (var m = 0; m < select_ids.length; m++) { select_array.push({ id: select_ids[m], name: select_names[m] }); } } $(parent.$(".express-close")).addClass("parent-colse"); layer.open({ type: 1, title: me.settings.title, area: ["800px", "500px"], resize: false, content: me.employeeRender(), end: function () { $(parent.$(".express-close")).removeClass("parent-colse"); }, success: function (obj, idx) { var dataList = [], letterBar = $("#letterBar"), employee = $("#employee"), selectTags = $("#selectTags"); $.ajax({ url: me.settings.department_url, type: "get", success: function (res) { //仅节点左侧图标控制收缩 tree.render({ elem: "#employeeDepament", data: res.trees, onlyIconControl: true, //是否仅允许节点左侧图标控制展开收缩 click: function (obj) { var tagsItem = '
暂无员工
'; $("#employeeDepament") .find(".layui-tree-main") .removeClass("on"); $(obj.elem).find(".layui-tree-main").eq(0).addClass("on"); letterBar.find("span").removeClass("on"); $.ajax({ url: me.settings.employee_url, type: "get", data: { did: obj.data.id }, success: function (res) { me.ajax_data = res.data; dataList = me.ajax_data; if (dataList.length > 1 && me.settings.type == 2) { $(".layui-tags-all").show(); } else { $(".layui-tags-all").hide(); } if (dataList.length > 0) { tagsItem = ""; for (var i = 0; i < dataList.length; i++) { if (select_ids.indexOf(dataList[i].id) == -1) { tagsItem += '' + dataList[i].name + ""; } else { tagsItem += '' + dataList[i].name + ""; } } } employee.html(tagsItem); } }); } }); letterBar.on("click", "span", function () { var code = $(this).data("code"); $(this).addClass("on").siblings().removeClass("on"); $.ajax({ url: me.settings.employee_url, type: "get", data: { id: 1 }, success: function (res) { me.ajax_data = res.data; var letterData = [], tagsItem = '
暂无员工
'; if (me.ajax_data.length > 0) { var tagsItemCode = ""; for (var i = 0; i < me.ajax_data.length; i++) { if (me.ajax_data[i].username.slice(0, 1) == code) { if (select_ids.indexOf(me.ajax_data[i].id) == -1) { tagsItemCode += '' + me.ajax_data[i].name + ""; } else { tagsItemCode += '' + me.ajax_data[i].name + ""; } letterData.push(me.ajax_data[i]); } } dataList = letterData; if (dataList.length > 2 && me.settings.type == 2) { $(".layui-tags-all").show(); } else { $(".layui-tags-all").hide(); } if (tagsItemCode != "") { tagsItem = tagsItemCode; } } employee.html(tagsItem); } }); }); } }); if (me.settings.type == 2) { $(".layui-tags-all").on("click", function () { for (var a = 0; a < dataList.length; a++) { if (select_ids.indexOf(dataList[a]["id"]) == -1) { select_array.push(dataList[a]); } } selectTags.html(me.employeeSelect(1)); }); } employee.on("click", ".layui-tags-span", function () { let item_idx = $(this).data("idx"); let select_item = me.ajax_data[item_idx]; if (me.settings.type == 1) { me.settings.callback([select_item]); layer.close(idx); } else { if (select_ids.indexOf(select_item["id"]) == -1) { select_array.push(select_item); selectTags.html(me.employeeSelect(1)); } } }); selectTags.on("click", ".layui-tags-close", function () { let id = $(this).data("id"); let new_slected = []; $("#employee") .find('[data-id="' + id + '"]') .removeClass("on"); for (var i = 0; i < select_array.length; i++) { if (select_array[i].id != id) { new_slected.push(select_array[i]); } } select_array = new_slected; selectTags.html(me.employeeSelect(1)); }); if (me.settings.type == 1) { $("#layui-layer" + idx) .find(".layui-layer-btn0") .hide(); } }, btn: ["确定添加", "清空已选"], btnAlign: "c", btn1: function (idx) { me.settings.callback(select_array); layer.close(idx); }, btn2: function (idx) { let canceldata = { department: "", did: 0, id: 0, mobile: 0, name: "", nickname: "", position_id: 0, sex: 0, status: 0, thumb: "", username: "" }; me.settings.callback([canceldata]); layer.close(idx); } }); }, picker: function (types, type, callback, map) { let pickerIndex = new Date().getTime(); let pickerTable, options; const opts = { title: "选择", url: "", ids: "", titles: "", where: map, area: ["600px", "568px"], cols: [ { field: "id", width: 80, title: "序号", align: "center" }, { field: "title", title: "名称" } ], searchbar: '
', page: true, type: type, //1单选择,2多选 btnno: true, add: "", //新增url callback: callback }; if (Object.prototype.toString.call(types) === "[object Object]") { options = types; } else { options = dataPicker[types]; } let settings = $.extend({}, opts, options); //console.log(settings); let btn = ["确定选择"]; if (settings.btnno == true) { btn = ["确定选择", "清空已选"]; } if (settings.add != "") { btn = ["确定选择", "清空已选", "新增"]; } $(parent.$(".express-close")).addClass("parent-colse"); layer.open({ title: settings.title, area: settings.area, type: 1, skin: "gougu-picker", content: '
' + settings.searchbar + '
', end: function () { $(parent.$(".express-close")).removeClass("parent-colse"); }, success: function () { let cols = JSON.parse(JSON.stringify(settings.cols)); if (settings.type == 1) { cols.splice(0, 0, { type: "radio", title: "选择" }); } if (settings.type == 2) { cols.splice(0, 0, { type: "checkbox", title: "选择" }); } // 单独处理 // 班次的列格式化显示 if (types == "workPlan") { cols[cols.length - 1].templet = function (d) { var html = ""; if (d.times && d.times.length) { for (var i = 0; i < d.times.length; i++) { html += "" + d.times[i].begin_time + " - " + d.times[i].end_time + ""; } } else { html = "-"; } return html; }; } pickerTable = table.render({ elem: "#pickerTable" + pickerIndex, url: settings.url, where: settings.where, page: settings.page, //开启分页 limit: 10, height: "407", cols: [cols] }); //搜索提交 form.on("submit(picker)", function (data) { let maps = $.extend({}, settings.where, data.field); pickerTable.reload({ where: maps, page: { curr: 1 } }); return false; }); //重置搜索提交 $("#pickerBox" + pickerIndex).on( "click", '[lay-filter="picker-reset"]', function () { let prev = $(this).prev(); if (typeof prev != "undefined") { setTimeout(function () { prev.click(); }, 10); } } ); }, btn: btn, btnAlign: "c", btn1: function (idx) { var checkStatus = table.checkStatus(pickerTable.config.id); var data = checkStatus.data; if (data.length > 0) { callback(data); layer.close(idx); } else { layer.msg("请先选择内容"); return false; } }, btn2: function (idx) { callback([{ id: 0, title: "", name: "" }]); layer.close(idx); }, btn3: function (idx) { tool.side(settings.add); layer.close(idx); } }); } }; //选择员工弹窗 $("body").on("click", ".picker-admin", function () { let that = $(this); let type = that.data("type"); if (typeof type == "undefined" || type == "") { type = 1; } let ids = that.next().val() + "", names = that.val() + ""; obj.employeeInit({ ids: ids, names: names, type: type, callback: function (data) { let select_id = [], select_name = []; for (var a = 0; a < data.length; a++) { select_id.push(data[a].id); select_name.push(data[a].name); } console.log(select_name); that.val(select_name.join(",")); that.next().val(select_id.join(",")); } }); }); //选择下属员工弹窗 $("body").on("click", ".picker-sub", function () { let that = $(this); let type = that.data("type"); if (typeof type == "undefined" || type == "") { type = 1; } let ids = that.next().val() + "", names = that.val() + ""; obj.employeeInit({ title: "选择下属", department_url: "/api/index/get_department_tree_sub", employee_url: "/api/index/get_employee_sub", ids: ids, names: names, type: type, callback: function (data) { let select_id = [], select_name = []; for (var a = 0; a < data.length; a++) { select_id.push(data[a].id); select_name.push(data[a].name); } console.log(select_name); that.val(select_name.join(",")); that.next().val(select_id.join(",")); } }); }); //选择OA数据弹层 $("body").on("click", ".picker-oa", function () { let that = $(this), ids = [], titles = [], map = {}; let types = that.data("types"); let type = that.data("type"); let where = that.data("where"); if (typeof types == "undefined" || types == "") { layer.msg("请设置【picker】的类型"); return false; } if (typeof type == "undefined" || type == "") { type = 1; } if (typeof where == "undefined" || where == "") { map = {}; } else { map = JSON.parse(where); } let callback = function (data) { for (var i = 0; i < data.length; i++) { ids.push(data[i].id); if (!data[i].title) { titles.push(data[i].name); } else { titles.push(data[i].title); } } that.val(titles.join(",")); that.next().val(ids.join(",")); // 单独处理班次按钮的处理结果 if (types == "workPlan") { var selectName = data[0].name; var html = ""; if (selectName) { html += selectName + ":"; } if (data[0].times && data[0].times.length) { for (var i = 0; i < data[0].times.length; i++) { var timeItem = data[0].times[i]; html += "" + timeItem.begin_time + " - " + timeItem.end_time + ""; } } that.parent().prev().html(html); } }; obj.picker(types, type, callback, map); }); //输出接口 exports("oaPicker", obj); });