/* dom_id为字符串,表示单元格元素id,必填 fieldid为字符串,表示字段id,可把打星结果存入对应字段,必填 fieldValue为数组,表示每颗星对应的字段值,数组第0个值为0颗星的value,第1个值为第1个星的value,必填 noChoose为数字,表示是否允许取消选择,1表示允许,非1表示不允许,默认不允许,非必填 text_arr为数组,表示每颗星的备注,数组第0个值为0颗星的备注,实际无作用,第1个值为第1个星的备注,默认备注为“1星、2星”,非必填 size为数字,表示星星的大小,单位为px justify_content为字符串,表示星星的横向布局,默认为“left”靠左,一般可选“right”和“center” */ function emojiRating(dom_id, fieldid, fieldValue, noChoose, text_arr, size, justify_content) { let sr_size = size == undefined ? 20 : size; let sr_justify_content = justify_content == undefined ? "left" : justify_content; let sr_noChoose = noChoose == 1 ? 1 : 0; let sr_text_arr = []; if (text_arr == undefined || text_arr.length != fieldValue.length) { fieldValue.forEach((e, index) => { sr_text_arr.push(index + "星"); }); } else { sr_text_arr = text_arr; } //添加CSS样式 let style = document.createElement('style'); let css = ` .${dom_id}_rating:not(:checked) > input { position: absolute; appearance: none; } .${dom_id}_rating:not(:checked) > label { float: right; cursor: pointer; font-size: ${sr_size}px; fill: #fff; } .${dom_id}_rating:not(:checked) > label > svg { fill: #fff; /* Set default color for SVG */ transition: fill 0.3s ease; /* Add a transition effect */ } .${dom_id}_rating > input:checked + label:hover svg, .${dom_id}_rating > input:checked + label:hover ~ label svg, .${dom_id}_rating > input:checked ~ label:hover svg, .${dom_id}_rating > input:checked ~ label:hover ~ label svg, .${dom_id}_rating > label:hover ~ input:checked ~ label svg { fill: #e58e09; } .${dom_id}_rating:not(:checked) > label:hover svg, .${dom_id}_rating:not(:checked) > label:hover ~ label svg { fill: #ff9e0b; } .${dom_id}_rating > input:checked ~ label > svg { fill: #fcea2b; /* Set color for selected stars */ } .${dom_id}_rating { display: flex; justify-content: ${sr_justify_content}; align-items: center; flex-direction: row-reverse; }`; if (style.styleSheet) { // 针对 IE style.styleSheet.cssText = css; } else { // 其他浏览器 style.appendChild(document.createTextNode(css)); } document.head.appendChild(style); //添加图表标 $(`#${dom_id}`).append(`
`); for (let i = fieldValue.length - 1; i > 0; i--) { let emoji_svg; switch (i) { case 1: emoji_svg = ` `; break; case 2: emoji_svg = ` `; break; case 3: emoji_svg = ` `; break; case 4: emoji_svg = ` `; break; case 5: emoji_svg = ` `; break; default: emoji_svg = ` `; break; } $(`.${dom_id}_rating`).append(` `); } let initial_num = WfForm.getFieldValue(fieldid); if (initial_num !== undefined && initial_num !== "") { for (let i = 0; i < fieldValue.length; i++) { if (fieldValue[i] == +initial_num) { if (i > 0) { $(`#${dom_id}_star${i}`).attr({ checked: true }); if (sr_noChoose == 1) { $(`#${dom_id}_star${i}`)[0].setAttribute('data-checked', 1); } } break; } } } if (sr_noChoose == 1) { for (let i = 1; i < fieldValue.length; i++) { $(`#${dom_id}_star${i}`).click((event) => { if (event.target.getAttribute('data-checked') == 1) { event.target.checked = false; event.target.setAttribute('data-checked', 0); WfForm.changeFieldValue(fieldid, { value: fieldValue[0] }); } else { fieldValue.forEach((e, index) => { if (index > 0 && index != i) { $(`#${dom_id}_star${index}`)[0].setAttribute('data-checked', 0); } }); event.target.setAttribute('data-checked', 1); WfForm.changeFieldValue(fieldid, { value: fieldValue[i] }); } }); } } else { for (let i = 1; i < fieldValue.length; i++) { $(`#${dom_id}_star${i}`).click(() => { WfForm.changeFieldValue(fieldid, { value: fieldValue[i] }); }); } } }