'use strict'; /** * * * @author Zhong * @date 2019/11/14 * @version */ const lockUtil = (() => { // 从地址栏获取是否锁定 function getLocked() { const search = window.location.search; const reg = /locked=(false|true)/; const match = search.match(reg); return match ? JSON.parse(match[1]) : true; } function lockTools($range, locked) { const $btns = $range.find('.lock-btn-control'); const toolList = []; for (const $btn of $btns) { toolList.push({ $ref: $($btn), type: 'button' }); } const $texts = $range.find('.lock-text-control'); for (const $text of $texts) { toolList.push({ $ref: $($text), type: 'text' }); } toolList.forEach(item => { switch (item.type) { case 'button': locked ? item.$ref.addClass('disabled') : item.$ref.removeClass('disabled'); break; case 'text': item.$ref.prop('readOnly', locked); break; } }); } function lockSpreads(spreads, locked) { if (!locked) { return; } spreads.forEach(spread => { spread.unbind(GC.Spread.Sheets.Events.ButtonClicked); const sheetCount = spread.getSheetCount(); for (let i = 0; i < sheetCount; i++) { const sheet = spread.getSheet(i); sheet.unbind(GC.Spread.Sheets.Events.ButtonClicked); sheet.unbind(GC.Spread.Sheets.Events.EditStarting); sheet.unbind(GC.Spread.Sheets.Events.EditEnded); sheet.unbind(GC.Spread.Sheets.Events.RangeChanged); sheet.unbind(GC.Spread.Sheets.Events.ClipboardChanging); sheet.unbind(GC.Spread.Sheets.Events.ClipboardChanged); sheet.unbind(GC.Spread.Sheets.Events.CellDoubleClick); sheet.unbind(GC.Spread.Sheets.Events.CellClick); sheet.unbind(GC.Spread.Sheets.Events.ValueChanged); sheet.suspendPaint(); sheet.suspendEvent(); sheet.options.isProtected = true; const rowCount = sheet.getRowCount(); const colCount = sheet.getColumnCount(); for (let row = 0; row < rowCount; row++) { for (let col = 0; col < colCount; col++) { sheet.getCell(row, col).locked(true); } } sheet.resumePaint(); sheet.resumeEvent(); } }); } function lockURL(locked, $url) { const originURL = $url.prop('href'); const originLocked = !locked; const reg = new RegExp(`locked=${originLocked}`); const curURL = reg.test(originURL) ? originURL.replace(reg, `locked=${locked}`) : `${originURL}&locked=${locked}`; $url.prop('href', curURL); } function displayLock($lock, locked) { $lock.data('locked', locked); const innerHtml = locked ? '' : ''; $lock.html(innerHtml); const title = locked ? '解锁' : '锁定'; $lock.prop('title', title); } // 库列表页面,锁定按钮点击操作 function handleLockClick($lock) { const curLocked = !$lock.data().locked; displayLock($lock, curLocked); const $url = $lock.parent().parent().children(':first-child').children(':first-child'); lockURL(curLocked, $url); const $range = $lock.parent().parent(); lockTools($range, curLocked); } function lockSpreadsAndTools(spreads, $range, locked) { if (!locked) { return; } lockSpreads(spreads, locked); lockTools($range, locked); } return { getLocked, lockTools, lockSpreads, lockURL, displayLock, handleLockClick, lockSpreadsAndTools } })();