| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569 |
- $(document).ready(function() {
- autoFlashHeight();
- class ConfigDir {
- constructor() {
- this.spread = SpreadJsObj.createNewSpread($('#config-dir-spread')[0]);
- this.spread.options.showHorizontalScrollbar = false;
- this.sheet = this.spread.getActiveSheet();
- this.treeIcons = {
- closed: new Image(),
- open: new Image(),
- leaf: new Image(),
- };
- const refreshTreeIcon = () => { this.spread.refresh(); };
- this.treeIcons.closed.onload = refreshTreeIcon;
- this.treeIcons.open.onload = refreshTreeIcon;
- this.treeIcons.leaf.onload = refreshTreeIcon;
- this.treeIcons.closed.src = '/public/images/filesjs-tree-closed.png';
- this.treeIcons.open.src = '/public/images/filesjs-tree-open.png';
- this.treeIcons.leaf.src = '/public/images/filesjs-tree-leaf.png';
- const treeIcons = this.treeIcons;
- this.filingTree = createNewPathTree('base', {
- id: 'tree_id', pid: 'tree_pid', order: 'order', level: 'level',
- isLeaf: 'is_leaf', fullPath: 'full_path', rootId: -1,
- });
- this.spreadSetting = {
- cols: [
- {
- title: '目录名称', colSpan: '1', rowSpan: '1', field: 'name', hAlign: 0, width: 260, formatter: '@', cellType: 'tree',
- getValue: function(data) {
- return data.name;
- },
- getIcon: function(data) {
- const fallback = data.is_leaf ? 'file' : 'folder';
- return {
- image: data.is_leaf ? treeIcons.leaf : (data.expanded ? treeIcons.open : treeIcons.closed),
- fallback,
- size: 18,
- };
- },
- },
- { title: '已传文件', colSpan: '1', rowSpan: '1', field: 'file_count', hAlign: 1, width: 75, formatter: '@' },
- {
- title: '固定目录', colSpan: '1', rowSpan: '1', field: 'is_fixed', hAlign: 1, width: 75, formatter: '@',
- getValue: function(data) { return data.is_fixed ? '\u{1F512}' : ''; },
- },
- { title: '归档单位', colSpan: '1', rowSpan: '1', field: 'file_company', hAlign: 0, width: 160, formatter: '@', cellType: 'autoTip', wordWrap: true },
- { title: '上传说明', colSpan: '1', rowSpan: '1', field: 'upload_tips', hAlign: 0, width: 200, formatter: '@', cellType: 'autoTip', wordWrap: true },
- { title: '授权用户', colSpan: '1', rowSpan: '1', field: 'auth_users', hAlign: 0, width: 320, formatter: '@', cellType: 'autoTip' },
- { title: '添加人', colSpan: '1', rowSpan: '1', field: 'add_user', hAlign: 0, width: 90, formatter: '@', cellType: 'autoTip' },
- ],
- emptyRows: 0, headRows: 1, headRowHeight: [32], defaultRowHeight: 24,
- headColWidth: [25], headerFont: '12px 微软雅黑', font: '12px 微软雅黑',
- readOnly: true, selectedBackColor: '#e8f4fd',
- };
- SpreadJsObj.initSheet(this.sheet, this.spreadSetting);
- this.curNode = null;
- this.editableTextFields = [ 'upload_tips', 'file_company' ];
- var editableTextFields = this.editableTextFields;
- this.editableTextColumnIndexes = this.spreadSetting.cols.reduce(function(indexes, col, index) {
- if (editableTextFields.indexOf(col.field) >= 0) indexes.push(index);
- return indexes;
- }, []);
- this._textCellEditing = null;
- this._editableTextCellType = null;
- this._authUserSaving = false;
- this._authTargetSaving = false;
- this._buildAuthAccountList();
- this._buildAuthUserMap();
- this._loadData();
- this._bindEvents();
- this._resizeSpreadColumns();
- this._refreshAuthUserButton(this._getSelectedNode());
- }
- _buildAuthAccountList() {
- var accountMap = {};
- accountList.forEach(function(account) {
- accountMap[Number(account.id)] = Object.assign({}, account);
- });
- permissionData.forEach(function(permission) {
- var userId = Number(permission.uid);
- if (!userId || accountMap[userId]) return;
- accountMap[userId] = {
- id: userId,
- name: permission.name || '',
- company: permission.company || '',
- role: permission.role || '',
- mobile: permission.mobile || '',
- selectable: false,
- };
- });
- this.authAccountList = Object.keys(accountMap).map(function(userId) {
- return accountMap[userId];
- });
- }
- _buildAuthUserMap() {
- this.authUserMap = {};
- if (filingPermissionData && filingPermissionData.length > 0) {
- for (const permission of filingPermissionData) {
- if (!permission.filing_id) continue;
- const account = this.authAccountList.find(function(x) {
- return Number(x.id) === Number(permission.uid);
- });
- if (!account) continue;
- const filingId = String(permission.filing_id);
- if (!this.authUserMap[filingId]) this.authUserMap[filingId] = [];
- if (!this.authUserMap[filingId].some(function(user) { return Number(user.id) === Number(account.id); })) {
- this.authUserMap[filingId].push({
- id: account.id, name: account.name, company: account.company, role: account.role,
- });
- }
- }
- }
- }
- _convertData(sourceData) {
- var data = [];
- var skippedIds = new Set();
- var sortedData = sourceData.slice().sort(function(a, b) { return Number(a.tree_level) - Number(b.tree_level); });
- for (var i = 0; i < sortedData.length; i++) {
- var node = sortedData[i];
- if (skippedIds.has(node.tree_pid)) {
- skippedIds.add(node.id);
- continue;
- }
- var parent = (node.tree_pid === '-1' || node.tree_pid === -1)
- ? undefined
- : data.find(function(x) { return x.id === node.tree_pid; });
- var hasChild = sourceData.some(function(x) { return x.tree_pid === node.id; });
- var authUsers = this.authUserMap[String(node.id)] || [];
- if (!parent && node.tree_pid !== '-1' && node.tree_pid !== -1) {
- skippedIds.add(node.id);
- continue;
- }
- data.push({
- id: node.id,
- tree_id: data.length + 1,
- tree_pid: parent ? parent.tree_id : -1,
- order: Number(node.tree_order) + 1,
- level: Number(node.tree_level),
- is_leaf: !hasChild,
- full_path: '',
- name: node.name,
- filing_type: Number(node.filing_type),
- file_count: Number(node.file_count) || 0,
- is_fixed: node.is_fixed,
- upload_tips: node.upload_tips || '',
- file_company: node.file_company || '',
- auth_users: authUsers.map(function(x) { return x.name; }).join('、'),
- auth_user_ids: authUsers.map(function(x) { return Number(x.id); }),
- add_user: node.add_user || '',
- spid: node.spid,
- });
- }
- return data;
- }
- _loadData() {
- var convertedData = this._convertData(filingData);
- this.filingTree.loadDatas(convertedData);
- SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Tree, this.filingTree);
- this._applyEditableTextCellType();
- this._applyLastColumnRightBorder();
- }
- _reloadTree() {
- var convertedData = this._convertData(filingData);
- this.filingTree.loadDatas(convertedData);
- SpreadJsObj.loadSheetData(this.sheet, SpreadJsObj.DataType.Tree, this.filingTree, true);
- this._applyEditableTextCellType();
- this._resizeSpreadColumns();
- }
- _isEditableTextColumn(columnIndex) {
- return this.editableTextColumnIndexes.indexOf(columnIndex) >= 0;
- }
- _applyEditableTextCellType() {
- if (!this._editableTextCellType) {
- this._editableTextCellType = SpreadJsObj.CellType.getAutoTipCellType();
- var defaultIsReservedKey = this._editableTextCellType.isReservedKey;
- this._editableTextCellType.isReservedKey = function(event, context) {
- var target = event && (event.target || event.srcElement);
- var isEditingInput = target && target.getAttribute &&
- target.getAttribute('gcUIElement') === 'gcEditingInput';
- if (event && event.keyCode === 13 && context && context.isEditing && isEditingInput &&
- !event.ctrlKey && !event.altKey && !event.metaKey) {
- return true;
- }
- return defaultIsReservedKey ? defaultIsReservedKey.call(this, event, context) : false;
- };
- }
- var self = this;
- this.editableTextColumnIndexes.forEach(function(columnIndex) {
- self.sheet.getRange(-1, columnIndex, -1, 1)
- .cellType(self._editableTextCellType)
- .wordWrap(true);
- });
- }
- _applyLastColumnRightBorder() {
- var lastColumnIndex = this.spreadSetting.cols.length - 1;
- var borderLine = this.sheet.borderLine || new spreadNS.LineBorder('#cccccc', spreadNS.LineStyle.thin);
- var headerRowCount = this.sheet.getRowCount(spreadNS.SheetArea.colHeader);
- var dataRowCount = this.sheet.getRowCount(spreadNS.SheetArea.viewport);
- if (headerRowCount > 0) {
- this.sheet.getRange(
- 0, lastColumnIndex, headerRowCount, 1, spreadNS.SheetArea.colHeader
- ).setBorder(borderLine, { right: true });
- }
- if (dataRowCount > 0) {
- this.sheet.getRange(
- 0, lastColumnIndex, dataRowCount, 1, spreadNS.SheetArea.viewport
- ).setBorder(borderLine, { right: true });
- }
- }
- _resizeSpreadColumns() {
- var containerWidth = Math.floor($('#config-dir-spread').innerWidth() || 0);
- if (containerWidth <= 0) return;
- var rowHeaderWidth = 25;
- var fileCompanyWidth = 160;
- var fixedWidth = 75 + 75 + fileCompanyWidth + 113;
- var minimumFlexWidth = 600;
- var usableWidth = Math.max(containerWidth - rowHeaderWidth, fixedWidth + minimumFlexWidth);
- var flexWidth = usableWidth - fixedWidth;
- var nameWidth = Math.floor(flexWidth * 0.34);
- var tipsWidth = Math.floor(flexWidth * 0.24);
- var authUserWidth = flexWidth - nameWidth - tipsWidth;
- var widths = [ nameWidth, 75, 75, fileCompanyWidth, tipsWidth, authUserWidth, 90 ];
- for (var index = 0; index < widths.length; index++) {
- this.sheet.setColumnWidth(index, widths[index]);
- }
- this.spread.options.showHorizontalScrollbar = containerWidth <
- fixedWidth + minimumFlexWidth + rowHeaderWidth;
- this._applyLastColumnRightBorder();
- this.spread.refresh();
- }
- _getSelectedNode() { return SpreadJsObj.getSelectObject(this.sheet); }
- _refreshAuthUserButton(node) {
- var button = $('#cd-auth-user');
- if (button.length === 0) return;
- var disabled = !node;
- button
- .toggleClass('disabled btn-outline-secondary', disabled)
- .toggleClass('btn-outline-primary', !disabled)
- .attr('aria-disabled', disabled ? 'true' : 'false')
- .attr('tabindex', disabled ? '-1' : '0');
- }
- _findOriginalId(treeId) {
- var node = this.filingTree.nodes.find(function(x) { return x.tree_id === treeId; });
- return node ? node.id : null;
- }
- _bindEvents() {
- var self = this;
- var resizeTimer;
- $(window).off('resize.configDir').on('resize.configDir', function() {
- clearTimeout(resizeTimer);
- resizeTimer = setTimeout(function() { self._resizeSpreadColumns(); }, 80);
- });
- this.spread.bind(spreadNS.Events.SelectionChanged, function() {
- var node = self._getSelectedNode();
- if (node) self.curNode = node;
- self._refreshAuthUserButton(node);
- });
- this.spread.bind(spreadNS.Events.EditStarting, function(e, info) {
- var editing = self._textCellEditing;
- if (!editing || info.row !== editing.row || info.col !== editing.col ||
- !configDirLocked || !canManageConfigDir) {
- info.cancel = true;
- }
- });
- this.spread.bind(spreadNS.Events.EditEnded, function(e, info) {
- self._saveTextCellEdit(info);
- });
- $('#cd-add-sibling').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- if (node.is_fixed) { toastr.error('固定分类不可添加同级'); return; }
- var treePid = node.tree_pid === -1 ? '-1' : self._findOriginalId(node.tree_pid);
- postData('config-dir/update', { updateType: 'add', tree_pid: treePid, tree_pre_id: node.id }, function(result) {
- filingData.push.apply(filingData, result.create);
- if (result.update) {
- for (var i = 0; i < result.update.length; i++) {
- var srcNode = filingData.find(function(x) { return x.id === result.update[i].id; });
- if (srcNode) srcNode.tree_order = result.update[i].tree_order;
- }
- }
- self._reloadTree();
- var newIdx = self.filingTree.nodes.findIndex(function(x) { return x.id === result.create[0].id; });
- if (newIdx >= 0) self.sheet.setSelection(newIdx, 0, 1, 1);
- });
- });
- $('#cd-add-child').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- var children = self.filingTree.getChildren(node);
- var fixedChild = children.find(function(x) { return x.is_fixed; });
- if (fixedChild) { toastr.error('该分类下存在固定分类,不可添加子级'); return; }
- if (node.file_count > 0) { toastr.error('该分类下已导入文件,不可添加子级'); return; }
- postData('config-dir/update', { updateType: 'add', tree_pid: node.id }, function(result) {
- filingData.push.apply(filingData, result.create);
- self._reloadTree();
- var newIdx = self.filingTree.nodes.findIndex(function(x) { return x.id === result.create[0].id; });
- if (newIdx >= 0) self.sheet.setSelection(newIdx, 0, 1, 1);
- });
- });
- $('#cd-move-up').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- if (node.is_fixed) { toastr.error('固定分类不可移动'); return; }
- if (self._hasSubtreeFiles(node)) { toastr.error('该目录或子目录下已有文件,不可移动'); return; }
- var siblings = self.filingTree.nodes.filter(function(x) { return x.tree_pid === node.tree_pid; });
- siblings.sort(function(a, b) { return a.order - b.order; });
- var idx = siblings.findIndex(function(x) { return x.tree_id === node.tree_id; });
- if (idx <= 0) { toastr.warning('已经是第一个,无法上移'); return; }
- var prevNode = siblings[idx - 1];
- if (prevNode.is_fixed) { toastr.error('上方是固定分类,不可交换'); return; }
- if (self._hasSubtreeFiles(prevNode)) { toastr.error('上方目录或子目录下已有文件,不可交换'); return; }
- var srcId = self._findOriginalId(node.tree_id);
- var preId = self._findOriginalId(prevNode.tree_id);
- var parentOrigId = node.tree_pid === -1 ? '-1' : self._findOriginalId(node.tree_pid);
- var preParentOrigId = prevNode.tree_pid === -1 ? '-1' : self._findOriginalId(prevNode.tree_pid);
- var curSel = self.sheet.getSelections()[0];
- var curRow = curSel ? curSel.row : -1;
- postData('config-dir/update', { updateType: 'move', id: srcId, tree_pid: parentOrigId, tree_order: prevNode.order - 1 }, function() {
- postData('config-dir/update', { updateType: 'move', id: preId, tree_pid: preParentOrigId, tree_order: prevNode.order }, function() {
- var srcNode = filingData.find(function(x) { return x.id === srcId; });
- if (srcNode) srcNode.tree_order = prevNode.order - 1;
- var preNode = filingData.find(function(x) { return x.id === preId; });
- if (preNode) preNode.tree_order = prevNode.order;
- self._reloadTree();
- if (curRow > 0) self.sheet.setSelection(curRow - 1, 0, 1, 1);
- });
- });
- });
- $('#cd-move-down').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- if (node.is_fixed) { toastr.error('固定分类不可移动'); return; }
- if (self._hasSubtreeFiles(node)) { toastr.error('该目录或子目录下已有文件,不可移动'); return; }
- var siblings = self.filingTree.nodes.filter(function(x) { return x.tree_pid === node.tree_pid; });
- siblings.sort(function(a, b) { return a.order - b.order; });
- var idx = siblings.findIndex(function(x) { return x.tree_id === node.tree_id; });
- if (idx < 0 || idx >= siblings.length - 1) { toastr.warning('已经是最后一个,无法下移'); return; }
- var nextNode = siblings[idx + 1];
- if (nextNode.is_fixed) { toastr.error('下方是固定分类,不可交换'); return; }
- if (self._hasSubtreeFiles(nextNode)) { toastr.error('下方目录或子目录下已有文件,不可交换'); return; }
- var srcId = self._findOriginalId(node.tree_id);
- var nextId = self._findOriginalId(nextNode.tree_id);
- var parentOrigId = node.tree_pid === -1 ? '-1' : self._findOriginalId(node.tree_pid);
- var curSel = self.sheet.getSelections()[0];
- var curRow = curSel ? curSel.row : -1;
- postData('config-dir/update', { updateType: 'move', id: srcId, tree_pid: parentOrigId, tree_order: nextNode.order }, function() {
- postData('config-dir/update', { updateType: 'move', id: nextId, tree_pid: parentOrigId, tree_order: nextNode.order - 1 }, function() {
- var srcNode = filingData.find(function(x) { return x.id === srcId; });
- if (srcNode) srcNode.tree_order = nextNode.order;
- var nextOrigNode = filingData.find(function(x) { return x.id === nextId; });
- if (nextOrigNode) nextOrigNode.tree_order = nextNode.order - 1;
- self._reloadTree();
- if (curRow >= 0) self.sheet.setSelection(curRow + 1, 0, 1, 1);
- });
- });
- });
- $('#cd-move').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- if (!self._hasSubtreeFiles(node)) { toastr.warning('当前目录及子目录暂无可移动文件'); return; }
- self._showMoveModal(node);
- });
- $('#cd-delete').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- if (node.is_fixed) { toastr.error('固定分类不可删除'); return; }
- deleteAfterHint(function() {
- postData('config-dir/update', { updateType: 'del', id: node.id }, function(result) {
- if (result && result.delete) {
- for (var i = 0; i < result.delete.length; i++) {
- var idx = filingData.findIndex(function(x) { return x.id === result.delete[i]; });
- if (idx >= 0) filingData.splice(idx, 1);
- }
- }
- if (result && result.update) {
- for (var j = 0; j < result.update.length; j++) {
- var srcNode = filingData.find(function(x) { return x.id === result.update[j].id; });
- if (srcNode) srcNode.tree_order = result.update[j].tree_order;
- }
- }
- self._reloadTree();
- });
- }, '确认删除分类【' + node.name + '】及其子分类?');
- });
- $('#cd-edit-name').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- self._showEditModal(node);
- });
- $('#cd-edit-tips').click(function() {
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- self._showTipsModal(node);
- });
- $('#cd-auth-user').click(function() {
- if ($(this).attr('aria-disabled') === 'true') return;
- var node = self._getSelectedNode();
- if (!node) { toastr.warning('请先选择一个分类'); return; }
- self._showAuthUserModal(node);
- });
- $('#cd-auth-batch-add').click(function() {
- self._showAuthTargetModal('add');
- });
- $('#cd-auth-batch-cover').click(function() {
- self._showAuthTargetModal('cover');
- });
- $('#cd-auth-user-search, #cd-auth-target-user-search')
- .on('click', function(event) { event.stopPropagation(); })
- .on('input propertychange', function() {
- if (this.id === 'cd-auth-user-search') {
- self._renderAuthUserDropdown();
- } else {
- self._renderAuthTargetUserDropdown();
- }
- });
- $('[name=cd-show-level]').click(function() {
- self._showLevel($(this).attr('tag'));
- });
- $('#config-dir-spread').dblclick(function() {
- if (!configDirLocked || !canManageConfigDir) return;
- var node = self._getSelectedNode();
- if (!node) return;
- var selection = self.sheet.getSelections()[0];
- if (selection && self._isEditableTextColumn(selection.col)) {
- self._startTextCellEdit(selection.row, selection.col, node);
- return;
- }
- self._showEditModal(node);
- });
- }
- _startTextCellEdit(row, col, node) {
- if (row < 0 || !node || !this._isEditableTextColumn(col)) return;
- var field = this.spreadSetting.cols[col].field;
- this._textCellEditing = {
- row: row,
- col: col,
- field: field,
- filingId: String(node.id),
- originalValue: String(node[field] || ''),
- };
- this.sheet.getCell(row, col).locked(false);
- this.sheet.startEdit(true);
- }
- _saveTextCellEdit(info) {
- if (!info || !this._isEditableTextColumn(info.col)) return;
- info.sheet.getCell(info.row, info.col).locked(true);
- var editing = this._textCellEditing;
- this._textCellEditing = null;
- var node = this.filingTree.nodes[info.row];
- if (!editing || !node || editing.row !== info.row || editing.col !== info.col ||
- String(node.id) !== editing.filingId) {
- if (node) SpreadJsObj.reLoadRowData(info.sheet, info.row);
- return;
- }
- var textValue = String(info.editingText || '').trim();
- if (textValue === editing.originalValue) {
- SpreadJsObj.reLoadRowData(info.sheet, info.row);
- return;
- }
- var saveData = { updateType: 'save', id: node.id };
- saveData[editing.field] = textValue;
- postData('config-dir/update', saveData, function() {
- var srcNode = filingData.find(function(item) { return String(item.id) === String(node.id); });
- if (srcNode) srcNode[editing.field] = textValue;
- node[editing.field] = textValue;
- SpreadJsObj.reLoadRowData(info.sheet, info.row);
- }, function() {
- node[editing.field] = editing.originalValue;
- SpreadJsObj.reLoadRowData(info.sheet, info.row);
- });
- }
- _getSubtreeTreeIds(node) {
- var result = new Set([node.tree_id]);
- var pending = [node.tree_id];
- while (pending.length > 0) {
- var parentTreeId = pending.shift();
- for (var i = 0; i < this.filingTree.nodes.length; i++) {
- var child = this.filingTree.nodes[i];
- if (child.tree_pid !== parentTreeId || result.has(child.tree_id)) continue;
- result.add(child.tree_id);
- pending.push(child.tree_id);
- }
- }
- return result;
- }
- _hasSubtreeFiles(node) {
- var subtreeTreeIds = this._getSubtreeTreeIds(node);
- return this.filingTree.nodes.some(function(item) {
- return subtreeTreeIds.has(item.tree_id) && Number(item.file_count) > 0;
- });
- }
- _showEditModal(node) {
- if (!configDirLocked || !canManageConfigDir) return;
- var self = this;
- var subtreeTreeIds = this._getSubtreeTreeIds(node);
- var currentParentId = node.tree_pid === -1 ? '-1' : String(this._findOriginalId(node.tree_pid));
- var hasFiles = this._hasSubtreeFiles(node);
- var isFixed = Boolean(Number(node.is_fixed));
- var $parent = $('#cd-edit-parent').empty();
- $parent.append($('<option></option>').val('-1').text('根目录'));
- for (var i = 0; i < this.filingTree.nodes.length; i++) {
- var target = this.filingTree.nodes[i];
- if (subtreeTreeIds.has(target.tree_id)) continue;
- if (Number(target.file_count) > 0 && String(target.id) !== currentParentId) continue;
- var prefix = '';
- for (var level = 0; level < target.level; level++) prefix += ' ';
- $parent.append($('<option></option>').val(String(target.id)).text(prefix + target.name));
- }
- $parent.val(currentParentId);
- $('#cd-edit-dir-name').val(node.name);
- $('#cd-edit-fixed').prop('checked', isFixed);
- var moveDisabled = hasFiles || isFixed;
- $parent.prop('disabled', moveDisabled);
- $('#cd-edit-move-hint')
- .toggleClass('d-none', !moveDisabled)
- .text(hasFiles ? '当前目录或子目录下已有文件,不允许移动目录。' : '固定目录不允许移动,请先取消固定并保存。');
- $('#cd-edit-modal').modal('show');
- $('#cd-edit-dir-name').trigger('focus').select();
- $('#cd-edit-save').off('click').on('click', function() {
- var name = $('#cd-edit-dir-name').val().trim();
- if (!name) { toastr.warning('请输入目录名称'); return; }
- var treePid = $parent.prop('disabled') ? currentParentId : String($parent.val());
- var isFixedValue = $('#cd-edit-fixed').prop('checked') ? 1 : 0;
- postData('config-dir/update', {
- updateType: 'edit', id: node.id, tree_pid: treePid,
- name: name, is_fixed: isFixedValue,
- }, function(result) {
- if (result && result.update) {
- for (var i = 0; i < result.update.length; i++) {
- var updateItem = result.update[i];
- var srcNode = filingData.find(function(item) { return item.id === updateItem.id; });
- if (!srcNode) continue;
- Object.keys(updateItem).forEach(function(key) {
- if (key !== 'id') srcNode[key] = updateItem[key];
- });
- }
- }
- self._reloadTree();
- var selectedRow = self.filingTree.nodes.findIndex(function(item) { return item.id === node.id; });
- if (selectedRow >= 0) self.sheet.setSelection(selectedRow, 0, 1, 1);
- $('#cd-edit-modal').modal('hide');
- });
- });
- }
- _showLevel(level) {
- var nodes = this.filingTree.nodes;
- var hideRows = [];
- if (level === 'last') {
- for (var i = 0; i < nodes.length; i++) { if (!nodes[i].is_leaf) hideRows.push(i); }
- } else {
- var maxLevel = parseInt(level);
- for (var i = 0; i < nodes.length; i++) { if (nodes[i].level > maxLevel) hideRows.push(i); }
- }
- for (var i = 0; i < nodes.length; i++) this.sheet.setRowVisible(i, true);
- for (var j = 0; j < hideRows.length; j++) this.sheet.setRowVisible(hideRows[j], false);
- }
- _showMoveModal(node) {
- var self = this;
- var subtreeTreeIds = this._getSubtreeTreeIds(node);
- $('#cd-move-source-name').text(node.name);
- this._moveTargetExpanded = {};
- this.filingTree.nodes.forEach(function(item) {
- if (!item.is_leaf) self._moveTargetExpanded[item.tree_id] = true;
- });
- var html = [];
- var hasSelectableTarget = false;
- for (var i = 0; i < this.filingTree.nodes.length; i++) {
- var n = this.filingTree.nodes[i];
- var hasChildren = this.filingTree.nodes.some(function(child) { return child.tree_pid === n.tree_id; });
- var inSourceSubtree = subtreeTreeIds.has(n.tree_id);
- var selectable = n.is_leaf && !inSourceSubtree;
- var indent = Math.max(Number(n.level) - 1, 0) * 20;
- if (selectable) hasSelectableTarget = true;
- html.push('<tr data-move-tree-id="' + n.tree_id + '" data-move-tree-pid="' + n.tree_pid + '">');
- html.push('<td class="text-center"><input type="radio" name="cd-move-target" value="' +
- self._escapeAuthUserHtml(n.id) + '" tree-id="' + n.tree_id + '"' + (selectable ? '' : ' disabled') + '></td>');
- html.push('<td><span style="display:inline-block;width:' + indent + 'px;"></span>');
- if (hasChildren) {
- html.push('<a href="javascript:void(0);" class="cd-move-target-toggle mr-1" data-tree-id="' + n.tree_id + '">');
- html.push('<i class="fa fa-minus-square-o"></i></a>');
- html.push('<i class="fa fa-folder-open text-warning mr-1 cd-move-target-folder" data-tree-id="' + n.tree_id + '"></i>');
- } else {
- html.push('<span class="d-inline-block mr-1" style="width:12px;"></span>');
- html.push('<i class="fa fa-file-o text-primary mr-1"></i>');
- }
- html.push(self._escapeAuthUserHtml(n.name));
- if (String(n.id) === String(node.id)) html.push('<span class="text-muted ml-1">(当前目录)</span>');
- html.push('</td></tr>');
- }
- if (!hasSelectableTarget) {
- html.push('<tr><td colspan="2" class="text-muted text-center py-3">暂无可选择的目标底层目录</td></tr>');
- }
- $('#cd-move-target-list').html(html.join(''));
- this._refreshMoveTargetTreeVisibility();
- $('#cd-move-target-list').off('click', '.cd-move-target-toggle')
- .on('click', '.cd-move-target-toggle', function(event) {
- event.preventDefault();
- var treeId = Number($(this).attr('data-tree-id'));
- self._moveTargetExpanded[treeId] = !self._moveTargetExpanded[treeId];
- self._refreshMoveTargetTreeVisibility();
- });
- $('#cd-move-modal').modal('show');
- $('#cd-move-ok').off('click').on('click', function() {
- var target = $('input[name=cd-move-target]:checked');
- if (target.length === 0) { toastr.warning('请选择目标底层目录'); return; }
- var targetOrigId = target.attr('value');
- var srcOrigId = self._findOriginalId(node.tree_id);
- postData('config-dir/file/move', {
- source_filing_id: srcOrigId,
- target_filing_id: targetOrigId,
- }, function(result) {
- if (result && result.filings) {
- for (var i = 0; i < result.filings.length; i++) {
- var updateItem = result.filings[i];
- var srcNode = filingData.find(function(x) { return String(x.id) === String(updateItem.id); });
- if (srcNode) srcNode.file_count = Number(updateItem.file_count) || 0;
- }
- }
- self._reloadTree();
- var selectedRow = self.filingTree.nodes.findIndex(function(item) {
- return String(item.id) === String(srcOrigId);
- });
- if (selectedRow >= 0) self.sheet.setSelection(selectedRow, 0, 1, 1);
- $('#cd-move-modal').modal('hide');
- toastr.success('已移动' + Number(result.moved_count || 0) + '个文件');
- });
- });
- }
- _refreshMoveTargetTreeVisibility() {
- var self = this;
- var nodeMap = {};
- this.filingTree.nodes.forEach(function(node) { nodeMap[node.tree_id] = node; });
- this.filingTree.nodes.forEach(function(node) {
- var visible = true;
- var parentTreeId = node.tree_pid;
- while (parentTreeId !== -1) {
- if (!self._moveTargetExpanded[parentTreeId]) {
- visible = false;
- break;
- }
- var parent = nodeMap[parentTreeId];
- if (!parent) break;
- parentTreeId = parent.tree_pid;
- }
- $('#cd-move-target-list tr[data-move-tree-id="' + node.tree_id + '"]').toggle(visible);
- var expanded = Boolean(self._moveTargetExpanded[node.tree_id]);
- $('#cd-move-target-list .cd-move-target-toggle[data-tree-id="' + node.tree_id + '"] i')
- .toggleClass('fa-minus-square-o', expanded)
- .toggleClass('fa-plus-square-o', !expanded);
- $('#cd-move-target-list .cd-move-target-folder[data-tree-id="' + node.tree_id + '"]')
- .toggleClass('fa-folder-open', expanded)
- .toggleClass('fa-folder', !expanded);
- });
- }
- _showTipsModal(node) {
- var self = this;
- $('#cd-tips-filing-name').text(node.name);
- $('#cd-tips-input').val(node.upload_tips || '');
- $('#cd-tips-modal').modal('show');
- $('#cd-tips-save').off('click').on('click', function() {
- var upload_tips = $('#cd-tips-input').val().trim();
- postData('config-dir/update', { updateType: 'save', id: node.id, upload_tips: upload_tips }, function() {
- var srcNode = filingData.find(function(x) { return x.id === node.id; });
- if (srcNode) srcNode.upload_tips = upload_tips;
- node.upload_tips = upload_tips;
- var idx = self.filingTree.nodes.indexOf(node);
- if (idx >= 0) SpreadJsObj.reLoadRowsData(self.sheet, [idx]);
- $('#cd-tips-modal').modal('hide');
- });
- });
- }
- _showAuthUserModal(node) {
- var self = this;
- this._authUserFiling = node;
- this._authUserIds = (node.auth_user_ids || []).map(function(id) { return Number(id); });
- this._authUserPermissionState = {};
- this._authUserIds.forEach(function(userId) {
- self._authUserPermissionState[userId] = self._getInitialAuthUserPermissionState(
- userId, node.id, node.filing_type
- );
- });
- $('#auth-user-filing-name').text(node.name);
- $('#cd-auth-user-search').val('');
- this._renderAuthUserDropdown();
- this._renderAuthUserList();
- this._setAuthUserSaveState(false);
- $('#auth-user-modal').modal('show');
- $('#cd-auth-user-options').off('click', '.cd-auth-unit-row').on('click', '.cd-auth-unit-row', function(event) {
- event.preventDefault();
- event.stopPropagation();
- var groupId = $(this).attr('data-group-id');
- var children = $('#cd-auth-user-options').find('[data-group-content="' + groupId + '"]');
- children.toggle();
- $('i', this).toggleClass('fa-plus-square fa-minus-square-o');
- });
- $('#auth-user-modal').off('click', '.cd-auth-list-action').on('click', '.cd-auth-list-action', function(event) {
- if ($(this).attr('aria-disabled') !== 'true') return;
- event.preventDefault();
- event.stopPropagation();
- });
- $('#cd-auth-user-options').off('click', '.cd-auth-add-unit').on('click', '.cd-auth-add-unit', function(event) {
- event.preventDefault();
- event.stopPropagation();
- var company = $(this).attr('data-company');
- var userIds = accountList.filter(function(account) {
- return (account.company || '未设置单位') === company;
- }).map(function(account) { return Number(account.id); });
- self._addAuthUsers(userIds);
- });
- $('#cd-auth-user-options').off('click', '.cd-auth-add-user').on('click', '.cd-auth-add-user', function(event) {
- event.preventDefault();
- event.stopPropagation();
- self._addAuthUsers([Number($(this).attr('data-user-id'))]);
- });
- $('#auth-user-list').off('click', '.cd-auth-user-remove').on('click', '.cd-auth-user-remove', function(event) {
- event.preventDefault();
- var userId = Number($(this).attr('data-user-id'));
- self._authUserIds = self._authUserIds.filter(function(id) { return id !== userId; });
- delete self._authUserPermissionState[userId];
- self._renderAuthUserList();
- self._syncAuthUserDropdownMarks();
- });
- $('#cd-auth-user-select-all').off('change').on('change', function() {
- var checked = this.checked;
- var userIds = [];
- $('#auth-user-list input[name=cd-auth-user-check]').prop('checked', checked).each(function() {
- userIds.push(Number($(this).attr('data-user-id')));
- });
- if (!checked) self._setAuthUserPermissions(userIds, false);
- self._syncAuthUserSelectAll();
- self._syncAuthPermissionHeaders();
- self._refreshAuthUserActionState();
- });
- $('#auth-user-list').off('change', 'input[name=cd-auth-user-check]').on('change', 'input[name=cd-auth-user-check]', function() {
- var userId = Number($(this).attr('data-user-id'));
- if (!this.checked) self._setAuthUserPermissions([userId], false);
- self._syncAuthUserSelectAll();
- self._syncAuthPermissionHeaders();
- self._refreshAuthUserActionState();
- });
- $('.cd-auth-permission-all').off('change').on('change', function() {
- var permissionKey = $(this).attr('data-permission');
- var checked = this.checked;
- $('#auth-user-list .cd-auth-permission-check[data-permission="' + permissionKey + '"]').each(function() {
- var userId = Number($(this).attr('data-user-id'));
- $(this).prop('checked', checked);
- self._ensureAuthUserPermissionState(userId)[permissionKey] = checked;
- if (checked) {
- $('#auth-user-list input[name=cd-auth-user-check][data-user-id="' + userId + '"]').prop('checked', true);
- }
- });
- self._syncAuthUserSelectAll();
- self._syncAuthPermissionHeaders();
- self._refreshAuthUserActionState();
- });
- $('#auth-user-list').off('change', '.cd-auth-permission-check').on('change', '.cd-auth-permission-check', function() {
- var userId = Number($(this).attr('data-user-id'));
- var permissionKey = $(this).attr('data-permission');
- self._ensureAuthUserPermissionState(userId)[permissionKey] = this.checked;
- if (this.checked) {
- $('#auth-user-list input[name=cd-auth-user-check][data-user-id="' + userId + '"]').prop('checked', true);
- }
- self._syncAuthUserSelectAll();
- self._syncAuthPermissionHeaders();
- self._refreshAuthUserActionState();
- });
- $('#cd-auth-batch-delete').off('click').on('click', function(event) {
- event.preventDefault();
- if ($(this).attr('aria-disabled') === 'true') return;
- var removeIds = [];
- $('#auth-user-list input[name=cd-auth-user-check]:checked').each(function() {
- removeIds.push(Number($(this).attr('data-user-id')));
- });
- self._authUserIds = self._authUserIds.filter(function(userId) {
- return removeIds.indexOf(userId) < 0;
- });
- removeIds.forEach(function(userId) { delete self._authUserPermissionState[userId]; });
- self._renderAuthUserList();
- self._syncAuthUserDropdownMarks();
- });
- $('#auth-user-save').off('click').on('click', function() {
- if (self._authUserSaving) return;
- var userIds = self._authUserIds.slice();
- var userPermissions = userIds.map(function(userId) {
- var state = self._ensureAuthUserPermissionState(userId);
- return {
- uid: userId,
- can_upload: state.upload_reference ? 1 : 0,
- can_edit_file: state.edit_file ? 1 : 0,
- can_edit_dir: state.edit_dir ? 1 : 0,
- can_lock_file: state.lock_file ? 1 : 0,
- };
- });
- self._setAuthUserSaveState(true);
- postData('config-dir/permission/save', {
- filing_id: node.id,
- user_permissions: userPermissions,
- }, function(result) {
- self._setAuthUserSaveState(false);
- var savedPermissions = result && result.permissions instanceof Array
- ? result.permissions : [];
- var affectedFilings = result && result.filings instanceof Array
- ? result.filings : [{ id: node.id, add_user: node.add_user || '' }];
- var affectedIds = affectedFilings.map(function(filing) { return String(filing.id); });
- for (var pIndex = filingPermissionData.length - 1; pIndex >= 0; pIndex--) {
- var cachedPermission = filingPermissionData[pIndex];
- var isAffectedNode = cachedPermission.filing_id &&
- affectedIds.indexOf(String(cachedPermission.filing_id)) >= 0;
- if (isAffectedNode) {
- filingPermissionData.splice(pIndex, 1);
- }
- }
- savedPermissions.forEach(function(permission) {
- filingPermissionData.push({
- uid: Number(permission.uid),
- filing_id: String(permission.filing_id),
- filing_type: Number(permission.filing_type),
- can_upload: Number(permission.can_upload) ? 1 : 0,
- can_edit_file: Number(permission.can_edit_file) ? 1 : 0,
- can_edit_dir: Number(permission.can_edit_dir) ? 1 : 0,
- can_lock_file: Number(permission.can_lock_file) ? 1 : 0,
- is_legacy: Number(permission.is_legacy) === 1 ? 1 : 0,
- });
- });
- self._buildAuthUserMap();
- affectedFilings.forEach(function(filingInfo) {
- var filingId = String(filingInfo.id);
- var authUsers = self.authUserMap[filingId] || [];
- var srcNode = filingData.find(function(item) { return String(item.id) === filingId; });
- if (!srcNode) return;
- srcNode.auth_users = authUsers.map(function(user) { return user.name; }).join('、');
- srcNode.auth_user_ids = authUsers.map(function(user) { return Number(user.id); });
- srcNode.add_user = filingInfo.add_user || '';
- });
- self._reloadTree();
- var sourceIndex = self.filingTree.nodes.findIndex(function(item) {
- return String(item.id) === String(node.id);
- });
- if (sourceIndex >= 0) self.sheet.setSelection(sourceIndex, 0, 1, 1);
- self._refreshAuthUserButton(sourceIndex >= 0 ? self.filingTree.nodes[sourceIndex] : null);
- $('#auth-user-modal').modal('hide');
- toastr.success('保存成功');
- }, function() {
- self._setAuthUserSaveState(false);
- });
- });
- }
- _setAuthUserSaveState(saving) {
- this._authUserSaving = Boolean(saving);
- $('#auth-user-save')
- .prop('disabled', this._authUserSaving)
- .text(this._authUserSaving ? '保存中...' : '确定');
- }
- _showAuthTargetModal(mode) {
- var self = this;
- var selectedNode = this._getSelectedNode();
- this._authTargetReturnId = selectedNode ? String(selectedNode.id) : '';
- this._authTargetMode = mode === 'cover' ? 'cover' : 'add';
- this._authTargetIds = [];
- this._authTargetExpanded = {};
- this._authTargetUserIds = [];
- this._authTargetPermissionState = {};
- this.filingTree.nodes.forEach(function(node) {
- if (!node.is_leaf) self._authTargetExpanded[node.tree_id] = true;
- });
- $('#cd-auth-target-modal-title').text(
- this._authTargetMode === 'cover' ? '批量覆盖授权' : '批量新增授权'
- );
- this._renderAuthTargetTree();
- $('#cd-auth-target-user-search').val('');
- this._renderAuthTargetUserDropdown();
- this._renderAuthTargetUserList();
- this._setAuthTargetSaveState(false);
- $('#cd-auth-target-list').off('click', '.cd-auth-target-toggle')
- .on('click', '.cd-auth-target-toggle', function(event) {
- event.preventDefault();
- var treeId = Number($(this).attr('data-tree-id'));
- self._authTargetExpanded[treeId] = !self._authTargetExpanded[treeId];
- self._refreshAuthTargetTreeVisibility();
- });
- $('#cd-auth-target-list').off('change', '.cd-auth-target-check')
- .on('change', '.cd-auth-target-check', function() {
- self._setAuthTargetBranchChecked(Number($(this).attr('data-tree-id')), this.checked);
- self._syncAuthTargetSelectionState();
- });
- $('#cd-auth-target-user-options').off('click', '.cd-auth-target-unit-row')
- .on('click', '.cd-auth-target-unit-row', function(event) {
- event.preventDefault();
- event.stopPropagation();
- var groupId = $(this).attr('data-group-id');
- var children = $('#cd-auth-target-user-options').find('[data-group-content="' + groupId + '"]');
- children.toggle();
- $('i', this).toggleClass('fa-plus-square fa-minus-square-o');
- });
- $('#cd-auth-target-user-options').off('click', '.cd-auth-target-add-unit')
- .on('click', '.cd-auth-target-add-unit', function(event) {
- event.preventDefault();
- event.stopPropagation();
- var company = $(this).attr('data-company');
- self._addAuthTargetUsers(accountList.filter(function(account) {
- return (account.company || '未设置单位') === company;
- }).map(function(account) { return Number(account.id); }));
- });
- $('#cd-auth-target-user-options').off('click', '.cd-auth-target-add-user')
- .on('click', '.cd-auth-target-add-user', function(event) {
- event.preventDefault();
- event.stopPropagation();
- self._addAuthTargetUsers([Number($(this).attr('data-user-id'))]);
- });
- $('#cd-auth-target-user-list').off('click', '.cd-auth-target-user-remove')
- .on('click', '.cd-auth-target-user-remove', function(event) {
- event.preventDefault();
- self._removeAuthTargetUsers([Number($(this).attr('data-user-id'))]);
- });
- $('#cd-auth-target-user-select-all').off('change').on('change', function() {
- var checked = this.checked;
- var userIds = [];
- $('#cd-auth-target-user-list input[name=cd-auth-target-user-check]')
- .prop('checked', checked).each(function() {
- userIds.push(Number($(this).attr('data-user-id')));
- });
- if (!checked) self._setAuthTargetUserPermissions(userIds, false);
- self._syncAuthTargetUserControls();
- });
- $('#cd-auth-target-user-list').off('change', 'input[name=cd-auth-target-user-check]')
- .on('change', 'input[name=cd-auth-target-user-check]', function() {
- var userId = Number($(this).attr('data-user-id'));
- if (!this.checked) self._setAuthTargetUserPermissions([userId], false);
- self._syncAuthTargetUserControls();
- });
- $('.cd-auth-target-permission-all').off('change').on('change', function() {
- var permissionKey = $(this).attr('data-permission');
- var checked = this.checked;
- $('#cd-auth-target-user-list .cd-auth-target-permission-check[data-permission="' + permissionKey + '"]')
- .each(function() {
- var userId = Number($(this).attr('data-user-id'));
- $(this).prop('checked', checked);
- self._ensureAuthTargetUserPermissionState(userId)[permissionKey] = checked;
- if (checked) {
- $('#cd-auth-target-user-list input[name=cd-auth-target-user-check][data-user-id="' + userId + '"]')
- .prop('checked', true);
- }
- });
- self._syncAuthTargetUserControls();
- });
- $('#cd-auth-target-user-list').off('change', '.cd-auth-target-permission-check')
- .on('change', '.cd-auth-target-permission-check', function() {
- var userId = Number($(this).attr('data-user-id'));
- var permissionKey = $(this).attr('data-permission');
- self._ensureAuthTargetUserPermissionState(userId)[permissionKey] = this.checked;
- if (this.checked) {
- $('#cd-auth-target-user-list input[name=cd-auth-target-user-check][data-user-id="' + userId + '"]')
- .prop('checked', true);
- }
- self._syncAuthTargetUserControls();
- });
- $('#cd-auth-target-user-delete').off('click').on('click', function(event) {
- event.preventDefault();
- if ($(this).attr('aria-disabled') === 'true') return;
- var removeIds = $('#cd-auth-target-user-list input[name=cd-auth-target-user-check]:checked')
- .map(function() { return Number($(this).attr('data-user-id')); }).get();
- self._removeAuthTargetUsers(removeIds);
- });
- $('#cd-auth-target-save').off('click').on('click', function() {
- if (self._authTargetSaving) return;
- if (self._authTargetIds.length === 0) {
- toastr.warning('请选择目标资料目录');
- return;
- }
- if (self._authTargetUserIds.length === 0) {
- toastr.warning('请选择需要授权的用户');
- return;
- }
- var isCover = self._authTargetMode === 'cover';
- self._setAuthTargetSaveState(true);
- postData(isCover ? 'config-dir/permission/cover-other' : 'config-dir/permission/add-other', {
- target_filing_ids: self._authTargetIds.slice(),
- user_permissions: self._getAuthTargetUserPermissions(),
- }, function(result) {
- self._setAuthTargetSaveState(false);
- self._applyAuthTargetResult(result || {});
- $('#cd-auth-target-modal').modal('hide');
- toastr.success(isCover ? '批量覆盖授权成功' : '批量新增授权成功');
- }, function() {
- self._setAuthTargetSaveState(false);
- });
- });
- $('#cd-auth-target-modal').modal('show');
- }
- _renderAuthTargetTree() {
- var self = this;
- var nodes = this.filingTree.nodes;
- var html = [];
- nodes.forEach(function(node) {
- var hasChildren = nodes.some(function(child) { return child.tree_pid === node.tree_id; });
- var indent = Math.max(Number(node.level) - 1, 0) * 18;
- html.push('<tr data-target-tree-id="' + node.tree_id + '" data-target-tree-pid="' + node.tree_pid + '">');
- html.push('<td class="text-center"><input type="checkbox" class="cd-auth-target-check" data-tree-id="' +
- node.tree_id + '" data-filing-id="' + self._escapeAuthUserHtml(node.id) + '"></td>');
- html.push('<td><span style="display:inline-block;width:' + indent + 'px;"></span>');
- if (hasChildren) {
- html.push('<a href="javascript:void(0);" class="cd-auth-target-toggle mr-1" data-tree-id="' + node.tree_id + '">');
- html.push('<i class="fa ' + (self._authTargetExpanded[node.tree_id] ? 'fa-minus-square-o' : 'fa-plus-square-o') + '"></i></a>');
- html.push('<img class="mr-1 cd-auth-target-folder" data-tree-id="' + node.tree_id +
- '" src="/public/images/filesjs-tree-open.png" width="18" height="18" alt="">');
- } else {
- html.push('<span class="d-inline-block mr-1" style="width:12px;"></span>');
- html.push('<img class="mr-1" src="/public/images/filesjs-tree-leaf.png" width="18" height="18" alt="">');
- }
- html.push(self._escapeAuthUserHtml(node.name) + '</td></tr>');
- });
- if (nodes.length === 0) {
- html.push('<tr><td colspan="2" class="text-muted text-center py-4">暂无可选择的目录</td></tr>');
- }
- $('#cd-auth-target-list').html(html.join(''));
- this._refreshAuthTargetTreeVisibility();
- this._syncAuthTargetSelectionState();
- }
- _refreshAuthTargetTreeVisibility() {
- var self = this;
- var nodeMap = {};
- this.filingTree.nodes.forEach(function(node) { nodeMap[node.tree_id] = node; });
- this.filingTree.nodes.forEach(function(node) {
- var visible = true;
- var parentTreeId = node.tree_pid;
- while (parentTreeId !== -1) {
- if (!self._authTargetExpanded[parentTreeId]) {
- visible = false;
- break;
- }
- var parent = nodeMap[parentTreeId];
- if (!parent) break;
- parentTreeId = parent.tree_pid;
- }
- $('#cd-auth-target-list tr[data-target-tree-id="' + node.tree_id + '"]').toggle(visible);
- var expanded = Boolean(self._authTargetExpanded[node.tree_id]);
- $('#cd-auth-target-list .cd-auth-target-toggle[data-tree-id="' + node.tree_id + '"] i')
- .toggleClass('fa-minus-square-o', expanded)
- .toggleClass('fa-plus-square-o', !expanded);
- $('#cd-auth-target-list .cd-auth-target-folder[data-tree-id="' + node.tree_id + '"]')
- .attr('src', expanded
- ? '/public/images/filesjs-tree-open.png'
- : '/public/images/filesjs-tree-closed.png');
- });
- }
- _setAuthTargetBranchChecked(treeId, checked) {
- var pending = [treeId];
- while (pending.length > 0) {
- var currentId = pending.shift();
- $('#cd-auth-target-list .cd-auth-target-check[data-tree-id="' + currentId + '"]')
- .prop('checked', checked).prop('indeterminate', false);
- this.filingTree.nodes.filter(function(node) { return node.tree_pid === currentId; })
- .forEach(function(child) { pending.push(child.tree_id); });
- }
- this._syncAuthTargetParentChecks();
- }
- _syncAuthTargetParentChecks() {
- var nodes = this.filingTree.nodes.slice().sort(function(a, b) { return Number(b.level) - Number(a.level); });
- nodes.forEach(function(node) {
- var children = nodes.filter(function(child) { return child.tree_pid === node.tree_id; });
- if (children.length === 0) return;
- var childChecks = children.map(function(child) {
- return $('#cd-auth-target-list .cd-auth-target-check[data-tree-id="' + child.tree_id + '"]')[0];
- }).filter(Boolean);
- var allChecked = childChecks.length > 0 && childChecks.every(function(check) { return check.checked; });
- var hasChecked = childChecks.some(function(check) { return check.checked || check.indeterminate; });
- $('#cd-auth-target-list .cd-auth-target-check[data-tree-id="' + node.tree_id + '"]')
- .prop('checked', allChecked)
- .prop('indeterminate', !allChecked && hasChecked);
- });
- }
- _syncAuthTargetSelectionState() {
- this._authTargetIds = $('#cd-auth-target-list .cd-auth-target-check:checked').map(function() {
- return String($(this).attr('data-filing-id'));
- }).get();
- var hasTargets = this._authTargetIds.length > 0;
- var hasUsers = (this._authTargetUserIds || []).length > 0;
- $('#cd-auth-target-save').prop('disabled', this._authTargetSaving || !hasTargets || !hasUsers);
- $('#cd-auth-cover-warning').toggle(this._authTargetMode === 'cover' && hasTargets);
- }
- _setAuthTargetSaveState(saving) {
- this._authTargetSaving = Boolean(saving);
- $('#cd-auth-target-save').text(this._authTargetSaving ? '保存中...' : '确定');
- this._syncAuthTargetSelectionState();
- }
- _renderAuthTargetUserDropdown() {
- var self = this;
- var keyword = String($('#cd-auth-target-user-search').val() || '').trim();
- if (keyword) {
- $('#cd-auth-target-user-options').html(this._getAuthUserSearchHtml(keyword, true)).scrollTop(0);
- this._syncAuthTargetUserDropdownMarks();
- return;
- }
- var html = [];
- this._getAuthUserGroups().forEach(function(group, groupIndex) {
- html.push('<dt class="px-2 py-1 mb-0 cd-auth-target-unit-row" data-group-id="' + groupIndex + '" style="cursor:pointer;">');
- html.push('<a href="javascript:void(0);"><i class="fa fa-plus-square mr-1"></i></a>');
- html.push('<span>' + self._escapeAuthUserHtml(group.company) + '</span></dt>');
- html.push('<div class="dd-content" data-group-content="' + groupIndex + '" style="display:none;">');
- html.push('<dd class="border-bottom p-2 mb-0 cd-auth-target-add-unit" data-company="' +
- self._escapeAuthUserHtml(group.company) + '"><span class="text-primary">添加单位下全部用户</span></dd>');
- group.users.forEach(function(user) {
- html.push(self._getAuthUserOptionHtml(user, true));
- });
- html.push('</div>');
- });
- if (html.length === 0) html.push('<div class="text-muted text-center py-3">数据范围内暂无可选用户</div>');
- $('#cd-auth-target-user-options').html(html.join('')).scrollTop(0);
- this._syncAuthTargetUserDropdownMarks();
- }
- _syncAuthTargetUserDropdownMarks() {
- var selectedIds = this._authTargetUserIds || [];
- $('#cd-auth-target-user-options [data-target-user-mark]').each(function() {
- var userId = Number($(this).attr('data-target-user-mark'));
- $(this).toggle(selectedIds.indexOf(userId) >= 0);
- });
- }
- _addAuthTargetUsers(userIds) {
- var selectableIds = accountList.map(function(account) { return Number(account.id); });
- for (var index = 0; index < userIds.length; index++) {
- var userId = Number(userIds[index]);
- if (selectableIds.indexOf(userId) < 0 || this._authTargetUserIds.indexOf(userId) >= 0) continue;
- this._authTargetUserIds.push(userId);
- this._ensureAuthTargetUserPermissionState(userId);
- }
- this._renderAuthTargetUserList();
- this._syncAuthTargetUserDropdownMarks();
- }
- _removeAuthTargetUsers(userIds) {
- var self = this;
- this._authTargetUserIds = this._authTargetUserIds.filter(function(userId) {
- return userIds.indexOf(userId) < 0;
- });
- userIds.forEach(function(userId) { delete self._authTargetPermissionState[userId]; });
- this._renderAuthTargetUserList();
- this._syncAuthTargetUserDropdownMarks();
- }
- _ensureAuthTargetUserPermissionState(userId) {
- if (!this._authTargetPermissionState[userId]) {
- this._authTargetPermissionState[userId] = {
- upload_reference: false,
- edit_file: false,
- edit_dir: false,
- lock_file: false,
- };
- }
- return this._authTargetPermissionState[userId];
- }
- _renderAuthTargetUserList() {
- var self = this;
- var html = [];
- this.authAccountList.filter(function(account) {
- return self._authTargetUserIds.indexOf(Number(account.id)) >= 0;
- }).forEach(function(user) {
- var userId = Number(user.id);
- var state = self._ensureAuthTargetUserPermissionState(userId);
- var selected = state.upload_reference || state.edit_file || state.edit_dir || state.lock_file;
- html.push('<tr class="text-center" data-user-id="' + userId + '">');
- html.push('<td><input type="checkbox" name="cd-auth-target-user-check" data-user-id="' + userId + '"' + (selected ? ' checked' : '') + '></td>');
- html.push('<td>' + self._escapeAuthUserHtml(user.name) + '</td>');
- html.push('<td><i class="fa fa-check text-primary"></i></td>');
- [ 'upload_reference', 'edit_file', 'edit_dir', 'lock_file' ].forEach(function(key) {
- html.push('<td><input type="checkbox" class="cd-auth-target-permission-check" data-user-id="' + userId +
- '" data-permission="' + key + '"' + (state[key] ? ' checked' : '') + '></td>');
- });
- html.push('<td><a href="javascript:void(0);" class="text-danger cd-auth-target-user-remove" data-user-id="' + userId + '">移除</a></td></tr>');
- });
- if (html.length === 0) {
- html.push('<tr><td colspan="8" class="text-muted text-center py-4">请添加需要授权的用户</td></tr>');
- }
- $('#cd-auth-target-user-list').html(html.join(''));
- this._syncAuthTargetUserControls();
- }
- _setAuthTargetUserPermissions(userIds, checked) {
- var self = this;
- userIds.forEach(function(userId) {
- $('#cd-auth-target-user-list .cd-auth-target-permission-check[data-user-id="' + userId + '"]')
- .each(function() {
- var key = $(this).attr('data-permission');
- $(this).prop('checked', checked);
- self._ensureAuthTargetUserPermissionState(userId)[key] = checked;
- });
- });
- }
- _syncAuthTargetUserControls() {
- var userChecks = $('#cd-auth-target-user-list input[name=cd-auth-target-user-check]');
- var checkedCount = userChecks.filter(':checked').length;
- $('#cd-auth-target-user-select-all')
- .prop('checked', userChecks.length > 0 && checkedCount === userChecks.length)
- .prop('indeterminate', checkedCount > 0 && checkedCount < userChecks.length);
- $('.cd-auth-target-permission-all').each(function() {
- var key = $(this).attr('data-permission');
- var permissionChecks = $('#cd-auth-target-user-list .cd-auth-target-permission-check[data-permission="' + key + '"]');
- var permissionCheckedCount = permissionChecks.filter(':checked').length;
- $(this)
- .prop('checked', permissionChecks.length > 0 && permissionCheckedCount === permissionChecks.length)
- .prop('indeterminate', permissionCheckedCount > 0 && permissionCheckedCount < permissionChecks.length);
- });
- $('#cd-auth-target-user-delete')
- .attr('aria-disabled', checkedCount > 0 ? 'false' : 'true')
- .attr('tabindex', checkedCount > 0 ? '0' : '-1')
- .toggleClass('text-muted', checkedCount === 0)
- .toggleClass('text-danger', checkedCount > 0);
- this._syncAuthTargetSelectionState();
- }
- _getAuthTargetUserPermissions() {
- var self = this;
- return this._authTargetUserIds.map(function(userId) {
- var state = self._ensureAuthTargetUserPermissionState(userId);
- return {
- uid: userId,
- can_upload: state.upload_reference ? 1 : 0,
- can_edit_file: state.edit_file ? 1 : 0,
- can_edit_dir: state.edit_dir ? 1 : 0,
- can_lock_file: state.lock_file ? 1 : 0,
- };
- });
- }
- _applyAuthTargetResult(result) {
- var targetIds = this._authTargetIds || [];
- var permissions = result.permissions instanceof Array ? result.permissions : [];
- var filingInfos = result.filings instanceof Array ? result.filings : [];
- for (var index = filingPermissionData.length - 1; index >= 0; index--) {
- var permission = filingPermissionData[index];
- if (permission.filing_id && targetIds.indexOf(String(permission.filing_id)) >= 0) {
- filingPermissionData.splice(index, 1);
- }
- }
- permissions.forEach(function(permission) { filingPermissionData.push(permission); });
- this._buildAuthUserMap();
- var self = this;
- targetIds.forEach(function(filingId) {
- var filing = filingData.find(function(item) { return String(item.id) === filingId; });
- if (!filing) return;
- var authUsers = self.authUserMap[filingId] || [];
- filing.auth_users = authUsers.map(function(user) { return user.name; }).join('、');
- filing.auth_user_ids = authUsers.map(function(user) { return Number(user.id); });
- var filingInfo = filingInfos.find(function(item) { return String(item.id) === filingId; });
- if (filingInfo) filing.add_user = filingInfo.add_user || '';
- });
- var returnId = this._authTargetReturnId;
- this._reloadTree();
- var returnIndex = this.filingTree.nodes.findIndex(function(node) { return String(node.id) === returnId; });
- if (returnIndex >= 0) this.sheet.setSelection(returnIndex, 0, 1, 1);
- this._refreshAuthUserButton(returnIndex >= 0 ? this.filingTree.nodes[returnIndex] : this._getSelectedNode());
- }
- _escapeAuthUserHtml(value) {
- return $('<div>').text(value === undefined || value === null ? '' : value).html();
- }
- _getAuthUserGroups() {
- var groups = [];
- accountList.forEach(function(account) {
- var company = account.company || '未设置单位';
- var group = groups.find(function(item) { return item.company === company; });
- if (!group) {
- group = { company: company, users: [] };
- groups.push(group);
- }
- group.users.push(account);
- });
- return groups;
- }
- _renderAuthUserDropdown() {
- var self = this;
- var keyword = String($('#cd-auth-user-search').val() || '').trim();
- if (keyword) {
- $('#cd-auth-user-options').html(this._getAuthUserSearchHtml(keyword, false)).scrollTop(0);
- this._syncAuthUserDropdownMarks();
- return;
- }
- var html = [];
- var groups = this._getAuthUserGroups();
- groups.forEach(function(group, groupIndex) {
- html.push('<dt class="px-2 py-1 mb-0 cd-auth-unit-row" data-group-id="' + groupIndex + '" style="cursor:pointer;">');
- html.push('<a href="javascript:void(0);" class="cd-auth-unit-toggle">');
- html.push('<i class="fa fa-plus-square mr-1"></i></a>');
- html.push('<span>' + self._escapeAuthUserHtml(group.company) + '</span></dt>');
- html.push('<div class="dd-content" data-group-content="' + groupIndex + '" style="display:none;">');
- html.push('<dd class="border-bottom p-2 mb-0 cd-auth-add-unit" data-company="' + self._escapeAuthUserHtml(group.company) + '">');
- html.push('<span class="text-primary">添加单位下全部用户</span></dd>');
- group.users.forEach(function(user) {
- html.push(self._getAuthUserOptionHtml(user, false));
- });
- html.push('</div>');
- });
- if (groups.length === 0) html.push('<div class="text-muted text-center py-3">数据范围内暂无可选用户</div>');
- $('#cd-auth-user-options').html(html.join('')).scrollTop(0);
- this._syncAuthUserDropdownMarks();
- }
- _syncAuthUserDropdownMarks() {
- var selectedIds = this._authUserIds || [];
- $('#cd-auth-user-options [data-user-mark]').each(function() {
- var userId = Number($(this).attr('data-user-mark'));
- $(this).toggle(selectedIds.indexOf(userId) >= 0);
- });
- }
- _addAuthUsers(userIds) {
- var selectableIds = accountList.map(function(account) { return Number(account.id); });
- for (var i = 0; i < userIds.length; i++) {
- var userId = Number(userIds[i]);
- if (selectableIds.indexOf(userId) < 0 || this._authUserIds.indexOf(userId) >= 0) continue;
- this._authUserIds.push(userId);
- this._ensureAuthUserPermissionState(userId);
- }
- this._renderAuthUserList();
- this._syncAuthUserDropdownMarks();
- }
- _ensureAuthUserPermissionState(userId) {
- if (!this._authUserPermissionState[userId]) {
- this._authUserPermissionState[userId] = {
- upload_reference: false,
- edit_file: false,
- edit_dir: false,
- lock_file: false,
- };
- }
- return this._authUserPermissionState[userId];
- }
- _getInitialAuthUserPermissionState(userId, filingId, filingType) {
- var explicit = filingPermissionData.find(function(permission) {
- return Number(permission.uid) === Number(userId) &&
- Number(permission.is_legacy) !== 1 && permission.filing_id &&
- String(permission.filing_id) === String(filingId);
- });
- if (explicit) {
- return {
- upload_reference: Number(explicit.can_upload) === 1,
- edit_file: Number(explicit.can_edit_file) === 1,
- edit_dir: Number(explicit.can_edit_dir) === 1,
- lock_file: Number(explicit.can_lock_file) === 1,
- };
- }
- var compatiblePermission = filingPermissionData.find(function(permission) {
- return Number(permission.uid) === Number(userId) && Number(permission.is_legacy) === 1 &&
- permission.filing_id && String(permission.filing_id) === String(filingId);
- });
- if (compatiblePermission) {
- return {
- upload_reference: Number(compatiblePermission.can_upload) === 1,
- edit_file: Number(compatiblePermission.can_edit_file) === 1,
- edit_dir: Number(compatiblePermission.can_edit_dir) === 1,
- lock_file: Number(compatiblePermission.can_lock_file) === 1,
- };
- }
- var legacyPermission = filingPermissionData.find(function(permission) {
- return Number(permission.uid) === Number(userId) && !permission.filing_id &&
- Number(permission.filing_type) === Number(filingType);
- });
- if (legacyPermission) {
- return {
- upload_reference: Number(legacyPermission.can_upload) === 1,
- edit_file: Number(legacyPermission.can_edit_file) === 1,
- edit_dir: Number(legacyPermission.can_edit_dir) === 1,
- lock_file: Number(legacyPermission.can_lock_file) === 1,
- };
- }
- var oldPermission = permissionData.find(function(permission) {
- return Number(permission.uid) === Number(userId);
- });
- var oldFilingTypes = oldPermission && oldPermission.filing_type === 'all'
- ? 'all'
- : (oldPermission && oldPermission.filing_type instanceof Array
- ? oldPermission.filing_type.map(function(value) { return Number(value); })
- : []);
- var oldValues = oldPermission && oldPermission.file_permission
- ? (oldPermission.file_permission instanceof Array
- ? oldPermission.file_permission.map(function(value) { return Number(value); })
- : oldPermission.file_permission.split(',').map(function(value) { return Number(value); }))
- : [];
- var hasOldView = oldFilingTypes === 'all' || oldFilingTypes.indexOf(Number(filingType)) >= 0;
- return {
- upload_reference: hasOldView && oldValues.indexOf(2) >= 0,
- edit_file: hasOldView && oldValues.indexOf(4) >= 0,
- edit_dir: hasOldView && oldValues.indexOf(3) >= 0,
- lock_file: false,
- };
- }
- _setAuthUserPermissions(userIds, checked) {
- var self = this;
- userIds.forEach(function(userId) {
- $('#auth-user-list .cd-auth-permission-check[data-user-id="' + userId + '"]').each(function() {
- var permissionKey = $(this).attr('data-permission');
- $(this).prop('checked', checked);
- self._ensureAuthUserPermissionState(userId)[permissionKey] = checked;
- });
- });
- }
- _renderAuthUserList() {
- var self = this;
- var html = [];
- var selectedUsers = this.authAccountList.filter(function(account) {
- return self._authUserIds.indexOf(Number(account.id)) >= 0;
- });
- selectedUsers.forEach(function(user) {
- var userId = Number(user.id);
- var permissionState = self._ensureAuthUserPermissionState(userId);
- var userSelected = permissionState.upload_reference || permissionState.edit_file ||
- permissionState.edit_dir || permissionState.lock_file;
- html.push('<tr class="text-center" data-user-id="' + userId + '">');
- html.push('<td><input type="checkbox" name="cd-auth-user-check" data-user-id="' + userId + '"' + (userSelected ? ' checked' : '') + '></td>');
- html.push('<td>' + self._escapeAuthUserHtml(user.name) + '</td>');
- html.push('<td><i class="fa fa-check text-primary"></i></td>');
- html.push('<td><input type="checkbox" class="cd-auth-permission-check" data-user-id="' + userId + '" data-permission="upload_reference"' + (permissionState.upload_reference ? ' checked' : '') + '></td>');
- html.push('<td><input type="checkbox" class="cd-auth-permission-check" data-user-id="' + userId + '" data-permission="edit_file"' + (permissionState.edit_file ? ' checked' : '') + '></td>');
- html.push('<td><input type="checkbox" class="cd-auth-permission-check" data-user-id="' + userId + '" data-permission="edit_dir"' + (permissionState.edit_dir ? ' checked' : '') + '></td>');
- html.push('<td><input type="checkbox" class="cd-auth-permission-check" data-user-id="' + userId + '" data-permission="lock_file"' + (permissionState.lock_file ? ' checked' : '') + '></td>');
- html.push('<td><a href="javascript:void(0);" class="text-danger cd-auth-user-remove" data-user-id="' + userId + '">移除</a></td>');
- html.push('</tr>');
- });
- if (selectedUsers.length === 0) html.push('<tr><td colspan="8" class="text-muted text-center py-4">当前目录暂未添加授权用户</td></tr>');
- $('#auth-user-list').html(html.join(''));
- this._syncAuthUserSelectAll();
- this._syncAuthPermissionHeaders();
- this._refreshAuthUserActionState();
- }
- _syncAuthUserSelectAll() {
- var rowChecks = $('#auth-user-list input[name=cd-auth-user-check]');
- var checkedCount = rowChecks.filter(':checked').length;
- $('#cd-auth-user-select-all')
- .prop('checked', rowChecks.length > 0 && checkedCount === rowChecks.length)
- .prop('indeterminate', checkedCount > 0 && checkedCount < rowChecks.length);
- }
- _syncAuthPermissionHeaders() {
- $('.cd-auth-permission-all').each(function() {
- var permissionKey = $(this).attr('data-permission');
- var rowChecks = $('#auth-user-list .cd-auth-permission-check[data-permission="' + permissionKey + '"]');
- var checkedCount = rowChecks.filter(':checked').length;
- $(this)
- .prop('checked', rowChecks.length > 0 && checkedCount === rowChecks.length)
- .prop('indeterminate', checkedCount > 0 && checkedCount < rowChecks.length);
- });
- }
- _refreshAuthUserActionState() {
- var hasUsers = $('#auth-user-list input[name=cd-auth-user-check]:checked').length > 0;
- $('.cd-auth-list-action')
- .attr('aria-disabled', hasUsers ? 'false' : 'true')
- .attr('tabindex', hasUsers ? '0' : '-1');
- $('#cd-auth-batch-delete')
- .toggleClass('text-muted', !hasUsers)
- .toggleClass('text-danger', hasUsers);
- }
- _getAuthUserOptionHtml(user, isTarget) {
- var userId = Number(user.id);
- var addClass = isTarget ? 'cd-auth-target-add-user' : 'cd-auth-add-user';
- var markAttribute = isTarget ? 'data-target-user-mark' : 'data-user-mark';
- var markClass = isTarget ? '' : 'cd-auth-selected-mark ';
- var html = [];
- html.push('<dd class="border-bottom p-2 mb-0 ' + addClass + '" data-user-id="' + userId + '">');
- html.push('<p class="mb-0 d-flex"><span class="text-primary">' + this._escapeAuthUserHtml(user.name) + '</span>');
- html.push('<span class="ml-auto">' + this._escapeAuthUserHtml(user.mobile || '') + '</span>');
- html.push('<span class="' + markClass + 'text-success ml-2" ' + markAttribute + '="' + userId + '"><i class="fa fa-check"></i></span></p>');
- html.push('<span class="text-muted">' + this._escapeAuthUserHtml(user.role || '') + '</span></dd>');
- return html.join('');
- }
- _getAuthUserSearchHtml(keyword, isTarget) {
- var self = this;
- var users = accountList.filter(function(account) {
- return String(account.name || '').indexOf(keyword) >= 0 ||
- String(account.mobile || '').indexOf(keyword) >= 0;
- });
- if (users.length === 0) return '<dd class="text-muted text-center py-3 mb-0">未找到匹配用户</dd>';
- return users.map(function(user) {
- return self._getAuthUserOptionHtml(user, isTarget);
- }).join('');
- }
- }
- new ConfigDir();
- });
|