'use strict'; /** * * * @author Mai * @date 2018/9/26 * @version */ let editCate; // 初始化分类数据 function InitCategoryData(category) { const data = category instanceof Array ? category : [category]; for (const d of data) { d.typeStr = cType.text[d.type]; } } // 获取自定义分类可选类型Html(下拉、单选) function getTypeHtml() { const html = []; for (const k in cType.key) { const value = cType.key[k]; html.push('
'); html.push(''); html.push(''); html.push('
'); } return html.join(''); } // 获取自定义分类html function getCategoryHtml(category) { const data = category instanceof Array ? category : [category]; const html = []; for (const d of data) { html.push(' 0 ? '' : 'class="table-warning"', 'cid="' + d.id + '">'); html.push('', d.name, ''); // html.push('', d.typeStr, ''); html.push(''); if (d.value && d.value.length > 0) { for (const v of d.value) { html.push('', v.value, '\n'); } } else { html.push('请在右侧添加值'); } html.push(''); html.push(''); html.push('添加值\n'); html.push('编辑\n'); html.push('删除 '); html.push(''); html.push(''); } return html.join(''); } // 获取分类值html function getValueHtml(value) { const html = []; for (const v of value) { html.push(''); html.push(''); html.push(''); html.push('', v.relaTenders.length + v.newTenders.length ,''); html.push('删除'); html.push(''); } return html.join(''); } function makeIconColor() { $('#value-list a').removeClass('text-secondary'); $('#value-list').children('tr').eq(0).find('.up-btn').addClass('text-secondary'); $('#value-list').children('tr').eq(-2).find('.down-btn').addClass('text-secondary'); } // 根据分类id查找分类 function findCategory(cid) { for (const c of cData) { if (c.id === cid) { return c; } } } // 删除值 获取其他可用值的html function getValidValueHtml(vid) { const html = []; const values = $('tr:not(.table-danger)[name=value]', '#value-list'); for (const value of values) { const v = $(value); if (v.attr('vid') === vid || $('input', v).val() === '') { continue } html.push('
'); html.push(''); html.push(''); html.push('
'); } return html.join(''); } // 初始化 添加值 编辑数据 function getEditCate(category) { function findTenderCate(tender, value) { for (const c of tender.category) { if (c.cid == value.cid) { return c; } } } editCate = JSON.parse(JSON.stringify(category)); for (const v of editCate.value) { v.relaTenders = tenders.filter(function (t) { const cate = findTenderCate(t, v); return cate ? cate.value == v.id : false; }); v.newTenders = []; } } // 绑定编辑值、删除值 function bindCategoryValueControl() { $('body').on('click', 'a[name="del-value"]', function () { const vid = $(this).attr('vid'); const value = _.find(editCate.value, function (v) { return v.id == vid; }); const delHtml = $(this).parents('td').html(); const _self = $(this).parents('td'); $(this).remove(); if (value.delete) { return; } if (value.relaTenders.length > 0) { // 提示用户转移标段 _self.html(delHtml); $('#tender-count').text(value.relaTenders.length).attr('vid', vid); $('#tender-target').html(getValidValueHtml(vid)); $('input[type=radio]', '#tender-target')[0].checked = true; $('#del-cate-value-ok').click(function () { const delVid = $('#tender-count').attr('vid'); const tarVid = $('input:checked', '#tender-target').val(); const delValue = _.find(editCate.value, function (v) { return v.id == delVid; }); const tarValue = _.find(editCate.value, function (v) { return v.id == tarVid; }); tarValue.newTenders = tarValue.newTenders.concat(delValue.relaTenders, delValue.newTenders); delValue.relaTenders = []; delValue.newTenders = []; delValue.delete = true; const delTr = $('tr[vid=' + delVid + ']'); delTr.addClass('table-danger'); $('input', delTr).attr('disabled', ''); delTr.children()[2].innerText = '移动到其他项'; $('tr[vid=' + tarVid + ']').children()[2].innerText = tarValue.relaTenders.length + tarValue.newTenders.length; $('#del-cate-value').modal('hide'); }); $('#del-cate-value').modal('show'); } else { value.delete = true; const tr = $('tr[vid=' + vid + ']'); tr.addClass('table-danger'); $('input', tr).attr('disabled', ''); } }); } // 绑定分类控制等(添加值、编辑、删除) function bindCategoryControl() { // 弹出添加值 $('body').on('click', 'a[name=add]', function () { const id = parseInt($(this).attr('cid')); const category = findCategory(id); getEditCate(category); $('#add-ok').attr('cid', id); if (editCate) { const list = $('#value-list'); list.html(getValueHtml(editCate.value) + '添加新值'); $('#add-value-row').click(function () { const newID = editCate.value.length > 0 ? _.maxBy(editCate.value, function (v) { return v.id; }).id + 1 : 1; const newValue = { isNew: true, id: newID, value: '', relaTenders: [], newTenders: editCate.value.length > 0 ? [] : tenders.concat([]), }; editCate.value.push(newValue); $(this).before(getValueHtml([newValue])); bindCategoryValueControl(); makeIconColor(); }); bindCategoryValueControl(); makeIconColor(); $('#add').modal('show'); } }); // 弹出 编辑 $('body').on('click', 'a[name=edit-cate]', function () { const id = parseInt($(this).attr('cid')); const category = findCategory(id); $('input[name=name]', '#edit-cate').val(category.name); // $('div[name=type]', '#edit-cate').html(getTypeHtml()); // $('#inlineRadio' + category.type, '#edit-cate')[0].checked = true; $('#edit-cate-ok').attr('cid', $(this).attr('cid')); $('#edit-cate').modal('show'); }); // 弹出 删除类别 $('body').on('click', 'a[name=del]', function () { $('#del-cate-ok').attr('cid', $(this).attr('cid')); $('#del-cate').modal('show'); }); } $(document).ready(() => { // InitCategoryData(cData); $('#categoryList').html(getCategoryHtml(cData)); bindCategoryControl(); // $('div[name=type]', '#add-cate').html(getTypeHtml()); // 新增分类 $('#add-cate-ok').click(function () { const name = $('input[name=name]', '#add-cate'); // const type = $('input[type=radio]:checked', '#add-cate'); const data = { name: name.val(), // type: parseInt(type.val()), }; postData('/setting/category/add', data, function (data) { // InitCategoryData(data); $('#categoryList').append(getCategoryHtml(data)); bindCategoryControl(); cData.push(data); $('#add-cate').modal('hide'); name.val(''); // type[0].checked = false; }, function (msg) { $('#add-cate').modal('hide'); }); }); // 添加值 $('#add-ok').click(function () { const valueArr = []; const value = $('input[name=value]'); for (const v of value) { if (v.value !== '') { const cateValue = _.find(editCate.value, function (ec) { return $(v).attr('vid') == ec.id; }); let newValue = {}; if (cateValue.delete) { newValue = { id: cateValue.id, delete: true, }; } else if (cateValue.isNew) { newValue = { value: $(v).val(), new: true, }; } else { newValue = { id: cateValue.id, value: $(v).val()}; } if (!cateValue.delete && cateValue.newTenders.length > 0) { newValue.newTenders = _.map(cateValue.newTenders, 'id'); } valueArr.push(newValue); } } const data = { id: parseInt($(this).attr('cid')), updateValue: valueArr, }; postData('/setting/category/value', data, function (data) { tenders = data.tenders; const category = findCategory(data.category.id); category.value = data.category.value; // InitCategoryData(category); $('tr[cid=' + data.category.id + ']')[0].outerHTML = getCategoryHtml(category); bindCategoryControl(); $('#add').modal('hide'); }, function () { $('#add').modal('hide'); }); }); // 编辑 $('#edit-cate-ok').click(function () { const name = $('input[name=name]', '#edit-cate'); // const type = $('input[type=radio]:checked', '#edit-cate'); const data = { id: parseInt($(this).attr('cid')), name: name.val(), // type: parseInt(type.val()), } postData('/setting/category/update', data, function (data) { const category = findCategory(data.id); for (const c in data) { category[c] = data[c]; } // InitCategoryData(category); $('tr[cid=' + data.id + ']')[0].outerHTML = getCategoryHtml(category); bindCategoryControl(); $('#edit-cate').modal('hide'); }, function () { $('#edit-cate').modal('hide'); }); }); // 删除类别 $('#del-cate-ok').click(function () { const data = { id: parseInt($(this).attr('cid')), } postData('/setting/category/del', data, function () { $('tr[cid=' + data.id + ']').remove(); $('#del-cate').modal('hide'); }, function () { $('#del-cate').modal('hide'); }); }); // 上移值 $('body').on('click', '.up-btn', function () { const prev = $(this).parents("tr").prev(); const prevIndex = parseInt($(prev).index('#value-list tr')); $(this).parents("tr").insertBefore(prev); makeIconColor(); // if(prevIndex === 1){ // console.log('hello'); // } }); // 下一值 $('body').on('click', '.down-btn', function () { const next = $(this).parents("tr").next(); const nextIndex = parseInt($(next).index('#value-list tr')); const nowlength = $('#value-list tr').length - 1; if (nextIndex < nowlength) { $(this).parents("tr").insertAfter(next); } makeIconColor(); }); });