123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579 |
- 'use strict';
- /**
- *
- *
- * @author Mai
- * @date 2019/3/7
- * @version
- */
- const EmptyTenderHtml = [
- '<div class="jumbotron">',
- '<h3 class="display-6">还没有标段数据</h3>',
- '</div>'
- ];
- // levelTree - setting
- const levelTreeSetting = {
- view: {
- selectedMulti: false
- },
- data: {
- simpleData: {
- idKey: 'lid',
- pIdKey: 'lpId',
- rootPId: 0,
- enable: true,
- }
- },
- edit: {
- enable: true,
- showRemoveBtn: false,
- showRenameBtn: false,
- drag: {
- autoExpandTrigger: true,
- isCopy: false,
- isMove: true,
- prev: false,
- next: false,
- inner: true,
- }
- },
- callback: {
- beforeDrop: function (treeId, treeNodes, targetNode, moveType, isCopy) {
- if (targetNode !== null && targetNode.lid !== 1) {
- const parent = targetNode.getParentNode();
- if (parent && parent.lid === 1) {
- return false;
- }
- }
- for (var i=0,l=treeNodes.length; i<l; i++) {
- if (treeNodes[i].drag === false) {
- return false;
- }
- if (!targetNode && treeNodes[i].dropRoot === false) {
- return false;
- }
- if(treeNodes[i].isParent === true && targetNode.lid !== 1){
- return false;
- }
- }
- return true;
- },
- onDrop: function onDropNode(event, treeId, treeNodes, targetNode, moveType) {
- const zTree = $.fn.zTree.getZTreeObj(treeId);
- function resetFixNode(id) {
- const node = zTree.getNodeByParam('lid', id);
- node.isParent = true;
- zTree.updateNode(node, false);
- zTree.expandNode(node, true);
- }
- function moveChildren(children, node) {
- if (!children || children.length === 0) { return }
- for (const c of children) {
- moveChildren(c.children, node);
- zTree.moveNode(node, c, 'inner');
- }
- }
- resetFixNode(1);
- resetFixNode(2);
- if (targetNode !== null && targetNode.lid === 1 && treeNodes[0].children && treeNodes[0].children.length !== 0) {
- moveChildren(treeNodes[0].children, zTree.getNodeByParam('lid', 1));
- } else if (targetNode !== null && targetNode.lid !== 1) {
- if (targetNode.children.length >= 2) {
- for (const c of targetNode.children) {
- if (c.lid !== treeNodes[0].lid) {
- zTree.moveNode(treeNodes[0], c, 'inner');
- }
- }
- }
- }
- },
- }
- };
- let selfLevelSort;
- const levelNodes =[];
- const tenderTree = [];
- let parentId = 0;
- function createTree(key) {
- const zTree = $.fn.zTree.getZTreeObj(key);
- if (zTree) zTree.destroy();
- $.fn.zTree.init($(`#${key}`), levelTreeSetting, levelNodes);
- }
- // 查询方法
- function findNode (key, value, arr) {
- for (const a of arr) {
- if (a[key] && a[key] === value) {
- return a;
- }
- }
- }
- function getPId(level) {
- if (level !== 1) {
- const p = findNode('show_level', level - 1, levelNodes);
- if (p) {
- return p.lid
- } else {
- return 1;
- }
- } else {
- return 2;
- }
- }
- // 分类数据排序
- function loadSelfCategoryLevel(selfLevel){
- selfLevelSort = selfLevel ? selfLevel.split(',') : [];
- selfLevelSort = selfLevelSort.filter(x => {
- return category.find(c => { return c.id + '' === x; });
- });
- category.forEach(cate => {
- cate.is_self = selfLevelSort.length > 0;
- cate.self_level = selfLevelSort.indexOf(cate.id + '') + 1;
- });
- }
- function sortCategory() {
- category.forEach(cate => {
- cate.show_level = cate.is_self ? cate.self_level : cate.level;
- });
- category.sort(function (a, b) {
- return a.show_level ? (b.show_level ? a.show_level - b.show_level : -1) : a.id - b.id;
- });
- }
- // 初始化分类树结构数据
- function initCategoryLevelNode() {
- levelNodes.length = 0;
- levelNodes.push(
- { lid:1, lpId:0, name:"可用类别", open:true, isParent: true, drag: false},
- { lid:2, lpId:0, name:"已用类别", open:true, isParent: true, drag: false}
- );
- for (const c of category) {
- const cate = JSON.parse(JSON.stringify(c));
- cate.lid = levelNodes.length + 1;
- cate.open = true;
- cate.dropRoot = false;
- if (!cate.show_level) {
- cate.lpId = 1;
- levelNodes.push(cate);
- } else {
- cate.lpId = getPId(cate.show_level);
- levelNodes.push(cate);
- }
- }
- }
- // 新建标段 -- 分类属性选择
- function getCategoryHtml(cg, value = 0) {
- function getSelectCategoryHtml (cate, value) {
- const html = [];
- html.push('<div class="form-group" cate-id="' + cate.id + '">');
- html.push('<label>', cate.name, '</label>');
- html.push('<select class="form-control form-control-sm">');
- for (const v of cate.value) {
- html.push('<option value="' + v.id + '">', v.value, '</option>');
- }
- html.push(`<option value="0" ${value === 0 ? 'selected' : ''}>不选</option>`);
- html.push('</select>');
- html.push('</div>');
- return html.join('');
- }
- function getRadioCategoryHtml (cate) {
- const html = [];
- html.push('<div class="form-group" cate-id="' + cate.id + '">');
- html.push('<lable>', cate.name, '</lable>');
- html.push('<div>');
- for (const iV in cate.value) {
- const v = cate.value[iV];
- html.push('<div class="form-check-inline">');
- html.push('<input class="form-check-input" type="radio"', 'name="' + cate.name + '" ', 'value="' , v.id, (iV == 0 ? '" checked="' : ''), '">');
- html.push('<label class="form-check-label">', v.value, '</label>');
- html.push('</div>');
- }
- html.push('</div>');
- html.push('</div>');
- return html.join('');
- }
- const html = [];
- for (const c of cg) {
- // if (c.type === categoryType.key.dropDown) {
- html.push(getSelectCategoryHtml(c, value));
- // } else if (c.type === categoryType.key.radio) {
- // html.push(getRadioCategoryHtml(c));
- // }
- }
- return html.join('');
- }
- // 初始化TenderTree数据
- function initTenderTree () {
- const levelCategory = category.filter(function (c) {
- return c.show_level && c.show_level > 0;
- });
- function findCategoryNode(cid, value, array) {
- for (const a of array) {
- if (a.cid === cid && a.vid === value) {
- return a;
- }
- }
- }
- function getCategoryNode(category, value, parent, i = null) {
- const array = parent ? parent.children : tenderTree;
- let cate = findCategoryNode(category.id, value, array);
- if (!cate) {
- const cateValue = findNode('id', value, category.value);
- if (!cateValue) return null;
- cate = {
- cid: category.id,
- vid: value,
- name: cateValue.value,
- children: [],
- level: i ? i : category.show_level,
- sort_id: ++parentId,
- sort: cateValue.sort,
- };
- array.push(cate);
- }
- return cate;
- }
- function loadTenderCategory (tender) {
- let tenderCategory = null;
- for (const [index,lc] of levelCategory.entries()) {
- const tenderCate = findNode('cid', lc.id, tender.category);
- if (tenderCate) {
- tenderCategory = getCategoryNode(lc, tenderCate.value, tenderCategory);
- } else {
- if (index === 0 && tender.category) {
- for (const [i,c] of tender.category.entries()) {
- const cate = findNode('id', c.cid, category);
- if (cate) {
- tenderCategory = getCategoryNode(cate, c.value, tenderCategory, i+1);
- } else {
- console.log(tender.name, c.cid, c.value);
- }
- }
- }
- return tenderCategory;
- }
- }
- return tenderCategory;
- }
- tenderTree.splice(0, tenderTree.length);
- for (const t of tenders) {
- if (tenderListSpec.calculateTender) tenderListSpec.calculateTender(t);
- t.valid = true;
- delete t.level;
- if (t.category && levelCategory.length > 0) {
- const parent = loadTenderCategory(t);
- if (parent) {
- t.level = parent.level + 1;
- parent.children.push(t);
- } else {
- tenderTree.push(t);
- }
- } else {
- tenderTree.push(t);
- }
- }
- sortTenderTree(tenderTree);
- if (tenderListSpec.calculateParent) {
- for (const t of tenderTree) {
- tenderListSpec.calculateParent(t);
- }
- }
- }
- function recursiveGetTenderNodeHtml (node, arr, pid) {
- const html = [];
- html.push(tenderListSpec.getTenderNodeHtml(node, arr, pid));
- if (node.children) {
- for (const c of node.children) {
- html.push(recursiveGetTenderNodeHtml(c, node.children, node.sort_id));
- }
- }
- return html.join('');
- }
- // 根据TenderTree数据获取Html代码
- function getTenderTreeHtml () {
- if (tenderTree.length > 0) {
- const html = [];
- html.push(tenderListSpec.getTenderTreeHeaderHtml());
- parentId = 0;
- for (const t of tenderTree) {
- html.push(recursiveGetTenderNodeHtml(t, tenderTree, ''));
- }
- html.push('</table>');
- return html.join('');
- } else {
- return EmptyTenderHtml.join('');
- }
- }
- function bindTenderUrl() {
- // 打开标段
- $('body').on('click', '.c-body a[name=name]', function () {
- const tenderId = parseInt($(this).attr('id'));
- const tender = _.find(tenders, function (t) {
- return t.id === tenderId;
- });
- if (!tender) return;
- if (!tender.measure_type && tender.user_id !== userID) return;
- if (tender.measure_type) {
- // window.location.href = '/tender/' + tenderId;
- window.open('/tender/' + tenderId, '_blank');
- } else {
- for (const a of $('a', '#jlms')) {
- a.href = '/tender/' + tenderId + '/type?type=' + $(a).attr('mst');
- }
- $('#jlms').modal('show');
- }
- });
- // 编辑
- $('body').on('click', '.c-body a[name=edit]', function () {
- const tid = parseInt($(this).parent().attr('tid'));
- const tender = _.find(tenders, {id: tid});
- $('[name=name]', '#edit-bd').val(tender.name);
- $('[name=spid]', '#edit-bd').val(tender.spid);
- $('input[type=radio]', '#add-bd').prop('checked', false);
- $('option[value=0]', '#edit-bd').prop('selected', true);
- $('#cate-list', '#edit-bd').html(getCategoryHtml(category));
- for (const c of tender.category) {
- // $('input[value=' + c.value + ']', '#edit-bd').prop('checked', 'checked');
- $('option[value=' + c.value + ']', '#edit-bd').prop('selected', true);
- }
- $('#edit-bd-ok').attr('tid', tid);
- $('#edit-bd').modal('show');
- });
- // 删除
- $('body').on('click', '.c-body a[name=del]', function () {
- const tid = parseInt($(this).parent().attr('tid'));
- const tender = _.find(tenders, {id: tid});
- $('#del-bd-ok').attr('tid', tid);
- $('#del-tender-name').text(tender.name);
- $('#del-bd').modal('show');
- });
- }
- $(document).ready(() => {
- autoFlashHeight();
- loadSelfCategoryLevel(selfCategoryLevel);
- sortCategory();
- // 初始化分类数据
- initCategoryLevelNode();
- $('.modal-body', '#add-bd').append(getCategoryHtml(category));
- // $('.modal-body', '#edit-bd').append(getCategoryHtml(category));
- // 初始化标段树结构
- tenderListOrder.reOrderTenders();
- initTenderTree();
- $('.c-body').html(getTenderTreeHtml());
- bindTenderUrl();
- localHideList();
- tenderTreeShowLevel.initShowLevel();
- if ($("#progress-table").length > 0) {
- $("#progress-table").colResizable({
- liveDrag: true,
- gripInnerHtml:"<div class='grip'></div>",
- draggingClass:"dragging",
- resizeMode:'fit',
- postbackSafe:true,
- partialRefresh:true,
- // headerOnly: true,
- });
- }
- // 分类
- $('#cate-set').on('show.bs.modal', function () {
- createTree('treeLevel');
- });
- $('#set-cate-ok').click(function () {
- const data = [];
- const zTree = $.fn.zTree.getZTreeObj('treeLevel');
- for (const c of category) {
- const node = zTree.getNodeByParam('id', c.id);
- const parent = node.getParentNode();
- if (parent.lid === 1) {
- data.push({id: c.id, level: 0});
- } else {
- data.push({id: c.id, level: node.getPath().length - 1});
- }
- }
- postData('/setting/category/level', data, function (rst) {
- for (const d of data) {
- const c = findNode('id', d.id, category);
- c.level = d.level;
- }
- sortCategory();
- initCategoryLevelNode();
- initTenderTree();
- $('.c-body').html(getTenderTreeHtml());
- localHideList();
- $('#cate-set').modal('hide');
- tenderTreeShowLevel.refreshMenuVisible();
- });
- });
- $('#cate-set-self').on('show.bs.modal', function () {
- createTree('treeLevel-self');
- });
- $('#set-cate-self-reset').click(function () {
- postData(`/sp/${spid}/setting/category/self-level`, {self_category_level: ''}, function (rst) {
- loadSelfCategoryLevel('');
- sortCategory();
- initCategoryLevelNode();
- initTenderTree();
- $('.c-body').html(getTenderTreeHtml());
- localHideList();
- $('#cate-set-self').modal('hide');
- tenderTreeShowLevel.refreshMenuVisible();
- });
- });
- $('#set-cate-self-ok').click(function () {
- const zTree = $.fn.zTree.getZTreeObj('treeLevel-self');
- const defaultLevel = [], selfLevel = [];
- for (const c of category) {
- const node = zTree.getNodeByParam('id', c.id);
- const parent = node.getParentNode();
- if (c.level > 0) defaultLevel.push({id: c.id, level: c.level});
- if (parent.lid != 1) {
- selfLevel.push({id: c.id, level: node.getPath().length - 1});
- }
- }
- const defaultLevelStr = defaultLevel.sort((x, y) => { return x.level - y.level; }).map(x => {return x.id; }).join(',');
- const selfLevelStr = selfLevel.sort((x, y) => { return x.level - y.level; }).map(x => {return x.id; }).join(',');
- const self_category_level = selfLevelStr === defaultLevelStr ? '' : selfLevelStr;
- postData(`/sp/${spid}/setting/category/self-level`, {self_category_level}, function (rst) {
- loadSelfCategoryLevel(self_category_level);
- sortCategory();
- initCategoryLevelNode();
- initTenderTree();
- $('.c-body').html(getTenderTreeHtml());
- localHideList();
- $('#cate-set-self').modal('hide');
- tenderTreeShowLevel.refreshMenuVisible();
- });
- });
- $('a[name=add]').click(function () {
- $('input[type=radio]', '#edit-bd').prop('checked', false);
- $('input[type=radio]', '#add-bd').eq(0).prop('checked', true);
- });
- // 新增标段
- $('#add-bd-ok').click(function () {
- const data = {
- name: cleanSymbols($('[name=name]', '#add-bd').val()),
- valuation: $('[name=valuation]:checked').val(),
- category: [],
- spid: $('[name=spid]', '#add-bd').val()
- };
- if (!data.name || data.name === '') {
- // TODO 提示用户
- return;
- }
- for (const c of category) {
- const cateObj = $('[cate-id=' + c.id + ']', '#add-bd');
- if (parseInt($('select', cateObj).val()) !== 0) {
- const cate = {cid: c.id};
- cate.value = parseInt($('select', cateObj).val());
- data.category.push(cate);
- }
- // if (c.type === categoryType.key.dropDown) {
- // cate.value = parseInt($('select', cateObj).val());
- // } else if (c.type === categoryType.key.radio) {
- // cate.value = parseInt($('input:checked', cateObj).val());
- // }
- }
- postData(`/sp/${spid}/list/add`, data, function (result) {
- tenders.push(result);
- initTenderTree();
- $('.c-body').html(getTenderTreeHtml());
- bindTenderUrl();
- localHideList();
- $('#add-bd').modal('hide');
- $('[name=name]', '#add-bd').val('');
- });
- });
- // 编辑标段
- $('#edit-bd-ok').click(function () {
- const data = {
- id: parseInt($(this).attr('tid')),
- name: cleanSymbols($('[name=name]', '#edit-bd').val()),
- category: [],
- spid: $('[name=spid]', '#edit-bd').val(),
- };
- if (!data.name || data.name === '') {
- // TODO 提示用户
- return;
- }
- $('#cate-list .form-group').each(function (index, item) {
- const cid = $(item).attr('cate-id');
- if (parseInt($('select', item).val()) !== 0) {
- data.category.push({cid: parseInt(cid), value: parseInt($('select', item).val())});
- }
- });
- console.log(data);
- // for (const c of category) {
- // const cateObj = $('[cate-id=' + c.id + ']', '#edit-bd');
- // if (parseInt($('select', cateObj).val()) !== 0) {
- // const cate = {cid: c.id};
- // cate.value = parseInt($('select', cateObj).val());
- // data.category.push(cate);
- // }
- // if (c.type === categoryType.key.dropDown) {
- // cate.value = parseInt($('select', cateObj).val());
- // } else if (c.type === categoryType.key.radio) {
- // cate.value = parseInt($('input:checked', cateObj).val());
- // }
- // data.category.push(cate);
- // }
- postData(`/sp/${spid}/list/update`, data, function (result) {
- const tender = _.find(tenders, {id: result.id});
- if (tender.spid !== data.spid) {
- setTimeout(function () {
- window.location.reload();
- }, 500);
- return;
- }
- _.assign(tender, result);
- initTenderTree();
- $('.c-body').html(getTenderTreeHtml());
- bindTenderUrl();
- localHideList();
- $('#edit-bd').modal('hide');
- });
- });
- // 删除标段
- $('#del-bd-ok').click(function () {
- const tid = parseInt($(this).attr('tid'));
- if (tid >= 0) {
- postData(`/sp/${spid}/list/del`, [tid], function (result) {
- function getCategory(arr, id) {
- for (const a of arr) {
- if (a.cid) {
- const ac = getCategory(a.children, id);
- if (ac) {
- return ac;
- }
- } else if (a.id === id) {
- return arr;
- }
- }
- return null;
- }
- for (const rid of result) {
- const tr = $('td[tid=' + rid + ']').parent();
- const arr = getCategory(tenderTree, rid);
- if (arr) {
- const a = arr.find(function (x) {
- return x.id === rid;
- });
- if (arr.length > 1 && arr.indexOf(a) === arr.length - 1) {
- const span = $('span', tr.prev());
- span.text('└');
- }
- arr.splice(arr.indexOf(a), 1);
- }
- _.remove(tenders, function (n) {
- return n.id === rid;
- });
- tr.remove();
- $('#del-bd').modal('hide');
- }
- });
- } else {
- $('#del-bd').modal('hide');
- }
- });
- });
|