// ==UserScript== // @name 别样红-需打扫房间量统计 // @namespace https://bbs.tampermonkey.net.cn/ // @version 0.1.0 // @description try to take over the world! // @author You // @match https://mn.beyondh.com:8101/* // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js // @require https://scriptcat.org/lib/513/2.0.0/ElementGetter.js // @grant unsafeWindow // @grant GM_setValue // @grant GM_getValue // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // ==/UserScript== (function () { 'use strict'; unsafeWindow.jQuery = $ const options = { menus: { isShowCleaner: { toStr: (x) => '显示保洁:' + (x ? '✓' : '✕'), _new: null, _old: null }, }, register: (name) => { let val = GM_getValue(name) options.menus[name][!val ? '_new' : '_old'] = GM_registerMenuCommand(options.menus[name].toStr(val), () => { GM_setValue(name, !val) options.register(name) }) GM_unregisterMenuCommand(options.menus[name][val ? '_new' : '_old']) }, loads: () => { options.register('isShowCleaner') } } options.loads() const getCleaner = (roomID) => { if ((roomID >= 301 && roomID <= 311) || (roomID >= 601 && roomID <= 611)) return '谢' else if ((roomID >= 401 && roomID <= 411) || roomID == 706 || (roomID >= 708 && roomID <= 711) || (roomID >= 807 && roomID <= 812)) return '易' else return '段' } const GetRoomStatusBaseInfo = () => { var res = null $.ajax({ url: 'https://mn.beyondh.com:8111/api/Room/GetMixAllRoomDetails', type: 'GET', xhrFields: { withCredentials: true }, dataType: 'json', async: false, success: (data) => { res = data } }) if (res == null) return res for (let i = 0; i < res.Content.length; i++) { let roomID = parseInt(res.Content[i].RoomNumber) res.Content[i].Cleaner = getCleaner(roomID) } return res } elmGetter.selector('jquery') const xhrOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function () { const xhr = this if (/api\/Room\/GetMixAllRoomDetails/.test(arguments[1])) { const getter = Object.getOwnPropertyDescriptor(XMLHttpRequest.prototype, "responseText").get Object.defineProperty(xhr, "responseText", { get: () => { let result = getter.call(xhr) let roomInfo = JSON.parse(result) for (let i = 0; i < roomInfo.Content.length; i++) { let roomID = parseInt(roomInfo.Content[i].RoomNumber) roomInfo.Content[i].Cleaner = getCleaner(roomID) } jQuery('#cleaner').remove() let cleans = {} let rooms = roomInfo.Content for (let i = 0; i < rooms.length; i++) { let k = rooms[i].Cleaner if (!(k in cleans)) cleans[k] = 0 // VD=空脏; VC=空净; V_C=空夜; OOO=维修; OK=已检; OD=住脏; OC=住净; ED=预退; if (rooms[i].CustomerStatus == 'IsEstArrival' || /VD|OD|OC/.test(rooms[i].RoomStatus)) // if (rooms[i].CustomerStatus == 'IsEstArrival' || /OD|OC/.test(rooms[i].RoomStatus)) cleans[k] += 1 // console.log(`${rooms[i].RoomNumber} ${rooms[i].Cleaner} ${rooms[i].CustomerStatus}`) } jQuery('div>div.small:contains("出租率")').parent().prepend(`
(${ Object.keys(cleans).map((v) => `${v}:${cleans[v]}`).join(';')})
`) elmGetter.each('.room_number_default', (e) => { if (GM_getValue('isShowCleaner')) { if (!/[\(\)]/.test(e.text())) { let roomId = parseInt(e.text()) e.text(`${roomId} (${getCleaner(roomId)})`) } } else { if (/[\(\)]/.test(e.text())) { e.text(e.text().replace(/\s\(.+\)/, '')) } } }) return result }, }) } return xhrOpen.apply(xhr, arguments); }; })();