var lnv_dp = lnv_dp || {}; (function () { var Valuation = function (config) { this.config = { style: true, isPhone: false, collect: false, uid: 0, sid: 0, rid: 0, label: { star: '\u661f\u7ea7', impress: '\u5370\u8c61', impress_btn: ['\u8010\u5fc3', '\u4e13\u4e1a', '\u70ed\u60c5', '\u7ec6\u81f4', '\u9ad8\u6548'], addimp: '+', comment: '\u8bc4\u4ef7', submit: '\u63d0 \u4ea4', collect: '\u5c06\u0054\u0061\u6536\u85cf\u4e3a\u4e13\u5c5e\u5de5\u7a0b\u5e08', textarea: '\u611f\u8c22\u60a8\u81f4\u7535\u8054\u60f3\uff0c\u5982\u679c\u60a8\u5bf9\u6211\u7684\u670d\u52a1\u6ee1\u610f\uff0c\u5e0c\u671b\u60a8\u7ed9\u4e94\u661f\u7ea7\u8bc4\u4ef7\uff0cO(\u2229_\u2229)O\u8c22\u8c22\u3002' }, error: { 10010: '\u8bf7\u9009\u62e9\u6ee1\u610f\u5ea6', 10011: '\u8bf7\u81f3\u5c11\u9009\u62e91\u4e2a\u5370\u8c61', 10012: '\u60a8\u53ea\u80fd\u9009\u62e95\u4e2a\u5370\u8c61\u5662', 10013: '\u60a8\u7684\u8bc4\u4ef7\u5185\u5bb9\u8fc7\u957f' }, onAddImpress: '', onRender: '', onSubmit: '', onFailure: '' }; this.tips = ['\u5fcd\u4e0d\u4e86!', '\u4e0d\u600e\u4e48\u6837', '\u4e00\u822c', '\u633a\u597d\u54d2!', '\u592a\u68d2\u4e86!']; this.data = { star: [], impress: {}, comment: [], collect: [] }; this.config = $.extend(this.config, config); this.dom = $('#' + this.config.dom); this.postFlag = true; this.__init(); }; Valuation.prototype = { __init: function () { if (this.config.style) { $('head').append('<link rel="stylesheet" href="lnv_valuation.css">'); }; this.__packHtml(); this.__bindEvent(); }, __packHtml: function () { var me = this, star = 5, html = [], _sh = [], _label = me.config.label.impress_btn; var _i = typeof me.config.sid == "number" ? 0 : me.config.sid.length - 1; for (var i = 1; i <= star; i++) { _sh.push('<a href="javascript:;" class="dp-star-a"></a>'); } html.push('<form action="" method="post" id="dp-valuation-form" target="dp-valuation-target" class="dp-valuation dp-wrapper">'); for (var i = 0; i <= _i; i++) { var impress = _label.length > 0 && _label[i]? _label[i].split(',') : '', _ih = []; for (var j = 0; j < impress.length; j++) { _ih.push('<a href="javascript:void(0);" class="dp-imp-a">' + impress[j] + '</a>'); } html.push('<div class="dp-div dp-index-' + i + '" data-id="' + i + '">'); html.push('<div class="dp-valuation dp-star" data-log="star"><label>' + me.config.label.star + '</label><span>' + _sh.join('') + '</span><b></b></div>'); html.push('<div class="dp-valuation dp-imp" data-log="impress"><label>' + me.config.label.impress + '</label><span>' + _ih.join('')); html.push('<a href="javascript:;" class="dp-imp-add">' + me.config.label['addimp'] + '</a></span></div>'); if (me.config.collect) { html.push('<div class="dp-valuation dp-collect" data-log="collect"><i class="collect"></i> ' + me.config.label['collect'] + '</div>'); } /**start***/ //html.push('<div class="dp-valuation dp-collect" data-log="collect"><i class="collect"></i> 将Ta收藏为专属工程师</div>'); /**end**/ html.push('<div class="dp-valuation dp-comment" data-log="comment"><label>' + me.config.label.comment + '</label>'); html.push('<textarea cols="" rows="" name="content' + i + '" placeholder="' + me.config.label.textarea + '"></textarea></div>'); html.push('<input type="hidden" name="score' + i + '"/><input type="hidden" name="labels' + i + '"/><input type="hidden" name="collect' + i + '"/>'); html.push('<input type="hidden" name="sid' + i + '" value="' + (_i == 0 ? me.config.sid : me.config.sid[i]) + '"/>'); } html.push('<div class="dp-error"></div><div class="dp-valuation dp-submit" data-log="submit">'); html.push('<p><button class="dp-submit-btn">' + me.config.label.submit + '</button></p></div>'); html.push('</div>'); html.push('</form>'); me.dom.html(html.join('')); if (typeof me.config.onRender == 'function') { me.config.onRender(me, html); } }, __bindEvent: function () { var me = this, _starbox = $('.dp-star'), _star = $('.dp-star-a'), _imp = $('.dp-imp-a'), _collect = $('.dp-collect'); _star.on('click',function (e) { var _off = $(this).index() + 1, _cur = $(this).closest('.dp-div'), _id = _cur.attr('data-id'); _cur.find('.dp-star-a').removeClass('stared'); _cur.find('.dp-star-a:lt(' + _off + ')').addClass('stared'); me.data.star[_id] = _off; //if (_off > 4) { // _cur.find('.collect').addClass('cur'); // _cur.find('input[name="collect' + _id + '"]').val(1); //} else { // _cur.find('.collect').removeClass('cur'); // _cur.find('input[name="collect' + _id + '"]').val(0); //} $(this).closest('span').siblings('b').html(me.tips[_off - 1]); $('.dp-error').text(''); e.preventDefault(); }).on('mouseover', function (e) { var _index = $(this).index() + 1; //if (_index) { // $(".dp-star-a:lt(" + _index + ")").addClass('stared'); // $(".dp-star-a:gt(" + (_index - 1) + ")").removeClass('stared'); // $(this).closest('span').siblings('b').html(me.tips[_index - 1]); //} if (_index) { // $(this).closest('.dp-div').find(".dp-star-a:lt(" + _index + ")").addClass('stared'); // $(this).closest('.dp-div').find(".dp-star-a:gt(" + (_index - 1) + ")").removeClass('stared'); // $(this).closest('span').siblings('b').html(me.tips[_index - 1]); } }) _starbox.on('mouseleave', function (e) { var _id = $(this).closest('.dp-div').attr('data-id'), _index = me.data.star[_id] - 1; if (_index >= 0) { //_star.eq(_index).trigger('click'); } else { _star.removeClass('stared'); $(this).find('b').html(''); } }); _collect.on('click',function () { var _c = 0, _cur = $(this).closest('.dp-div'), _id = _cur.attr('data-id'); if (_cur.find('.collect').hasClass('cur')) { _cur.find('.collect').removeClass('cur'); _c = 0; } else { _cur.find('.collect').addClass('cur'); _c = 1 } _cur.find('input[name="collect' + _id + '"]').val(_c); }) if (me.config.isPhone) { var _offset = []; $('.dp-star').find('span').on('touchmove',function (e) { var _x = e.originalEvent.touches[0].clientX; $.each($('.dp-star a'), function (index, item) { if (_x >= $(item).offset().left) { $(item).trigger('click'); } }); e.preventDefault(); }); } $(document).delegate('.dp-imp-a', 'click',function (e) { var _cur = $(this).closest('.dp-div').attr('data-id'), _imp = me.data.impress; $('.dp-error').text(''); if ($(this).hasClass('dp-imp-new')) return; if ($(this).hasClass('selected')) { $(this).removeClass('selected'); if (_imp[_cur].length <= 1) { _imp[_cur].length = []; // me.__onFailure(10011); } else { if ($.inArray($(this).html(), _imp[_cur]) >= 0) { _imp[_cur].splice($.inArray($(this).html(), _imp[_cur]), 1); } } //$('.dp-error').html($(this).html()); } else { if (!_imp[_cur]) { _imp[_cur] = []; } if (_imp[_cur].length < 5) { _imp[_cur].push($(this).html()); $(this).addClass('selected'); } else { alert(me.config.error[10012]); } } e.preventDefault(); }); $('.dp-imp-add').on('click',function (e) { if (typeof me.config.onAddImpress == 'function') { me.config.onAddImpress(me, $(this)); } else { me.__onAddImp($(this)); } e.preventDefault(); }); $('.dp-submit-btn').on('click',function () { var data = ''; if(typeof me.config.onSubmit == 'function'){ mydata = me.config.onSubmit(me) } var _submit = me.__validator(me); if (_submit) { var _form = $('#dp-valuation-form'); var _main = $('.dp-div'); _main.each(function (index, item) { me.data.comment[index] = $(item).find('textarea[name="content' + index + '"]').val(); me.data.collect[index] = $(item).find('input[name="collect' + index + '"]').val(); }) if (!me.postFlag) return false; me.postFlag = false; $.post(me.config.submitUrl, { uid: me.config.uid, sid: me.config.sid, rid: me.config.rid, stype: me.config.stype, scode: mydata.scode, ecode: mydata.ecode, createby: mydata.creatby, star: me.data.star, impress: me.data.impress, comment: me.data.comment, collect: me.data.collect },function (response) { if (response.status == 200) { me.__onSuccess(me.data); } else { me.postFlag = true; } }) } return false; }); }, __onAddImp: function (btn) { var _imp = $('.dp-imp span'), _new = $('<a/>').attr('href', 'javascript:;').addClass('dp-imp-a dp-imp-new').html('<input type="text" value="" maxlength="7"/>'); if (_imp.find('input').length < 1) { btn.before(_new); _new.find('input').focus(); _new.find('input').blur(function () { if ($.trim($(this).val()) != '') { $(this).closest('a').html($(this).val()).removeClass('dp-imp-new'); } else { $(this).closest('a').remove(); } }); } else { _imp.find('input').focus(); } }, __validator: function (me) { var _data = me.data, _code = 0, _num = $('.dp-div').length, _star = _data.star, _imp = _data.impress; for (var i = 0; i < _num; i++) { if (!_star[i] || _star[i] < 1) { _code = 10010; } else if (!_imp[i] || _imp[i].length < 1) { _code = 10011; } else if (_imp[i].length > 5) { _code = 10012; } else if ($.trim(_data.comment[i]).length > 500) { _code = 10013; } } if (_code == 0) { return true; } else { me.__onFailure(_code); } }, __onFailure: function (errno) { var me = this; if (typeof me.config.onFailure == 'function') { me.config.onFailure(me, errno); } else { alert(me.config.error[errno]); } }, __onSuccess: function (data) { var me = this; if (typeof me.config.onSuccess == 'function') { me.config.onSuccess(data); } } }; lnv_dp.dianping = function () { return { init: function (config) { try { if (config.dom == '' || !$('#' + config.dom)) { throw 'need dom'; } else if (config.info == '') { throw 'miss info'; } else { return new Valuation(config); } } catch (x) { return x; } } } }(); })();