{"id":28,"date":"2025-06-23T10:27:01","date_gmt":"2025-06-23T02:27:01","guid":{"rendered":"https:\/\/kzqgy.cn\/?p=28"},"modified":"2025-06-23T10:27:01","modified_gmt":"2025-06-23T02:27:01","slug":"vue%e9%a1%b9%e7%9b%ae%e5%89%8d%e7%ab%af%e9%80%9a%e7%94%a8%e5%9f%8b%e7%82%b9%e6%96%b9%e6%a1%88","status":"publish","type":"post","link":"https:\/\/kzqgy.cn\/index.php\/2025\/06\/23\/vue%e9%a1%b9%e7%9b%ae%e5%89%8d%e7%ab%af%e9%80%9a%e7%94%a8%e5%9f%8b%e7%82%b9%e6%96%b9%e6%a1%88\/","title":{"rendered":"vue\u9879\u76ee\u524d\u7aef\u901a\u7528\u57cb\u70b9\u65b9\u6848"},"content":{"rendered":"<p>\u57cb\u70b9\u65b9\u6848\u4e3b\u8981\u6d41\u7a0b<br \/>\n1\u3001 \u5728 main.js \u6587\u4ef6\u4e2d\u751f\u6210 capol-log-uuid \u57cb\u70b9\u4f1a\u8bdd\u552f\u4e00id\uff0c\u5e76\u5b58\u5165sessionStorage\u4e2d<\/p>\n<p>router.afterEach((to, from, next) =&gt; {<br \/>\n\/\/\u4f18\u5148\u53d6url\u4e0a\u9762\u643a\u5e26\u7684\u57cb\u70b9id<br \/>\nconst uuid = to.query.logId ? to.query.logId : Utils.uuid()<br \/>\nconsole.log(&#8216;\u8fdb\u5165\u9875\u9762\uff0c\u751f\u6210\u56de\u8bddid&#8217;)<br \/>\nsessionStorage.setItem(&#8216;capol-log-uuid&#8217;,uuid)<br \/>\n})<br \/>\n2\u3001\u5728 utils \u6587\u4ef6\u5939\u4e0b\u6dfb\u52a0 commonLog.js \u516c\u5171\u57cb\u70b9\u65b9\u6cd5\u7c7b\uff0c\u63d0\u4f9b3\u4e2a\u65b9\u6cd5\uff1a<\/p>\n<p>\u6dfb\u52a0\u57cb\u70b9\u51fd\u6570\uff1aCapolLog.pointAdd(dynamicInfo, el)<br \/>\n\u66f4\u65b0\u57cb\u70b9\u51fd\u6570\uff1aCapolLog.pointUpdate(id, type,updateData)<br \/>\n\u66f4\u65b0\u57cb\u70b9\u8f85\u52a9\u51fd\u6570\uff1aCapolLog.pointUpdateHelper(event,operateResultBool)<br \/>\n3\u3001\u5c01\u88c5v-capol-log\u6307\u4ee4\uff0c\u76d1\u542c\u5143\u7d20\u70b9\u51fb\u4e8b\u4ef6\uff0c\u89e6\u53d1\u57cb\u70b9<\/p>\n<p>\/\/\u901a\u7528\u6309\u94ae\u57cb\u70b9\u6307\u4ee4<br \/>\nVue.directive(&#8216;capol-log&#8217;, {<br \/>\ninserted(el, binding) {<br \/>\n\/\/\u6309\u94ae\u70b9\u51fb\u6267\u884c\u4e8b\u4ef6<br \/>\nconst handleClick = (el, binding) =&gt; {<br \/>\n\/\/\u4fee\u9970\u7b26<br \/>\nconst idFlag = binding.modifiers.idFlag ? 1 : 0;<br \/>\n\/\/\u7ed1\u5b9a\u503c<br \/>\nconst data = binding.value<br \/>\n\/\/\u57cb\u70b9\u5916\u90e8\u4f20\u53c2\u5bf9\u8c61<br \/>\nconst dynamicInfo = { idFlag, &#8230;data }<br \/>\nCapolLog.pointAdd(dynamicInfo,el)<br \/>\n}<br \/>\nconst wrappedClickEvent = function (event) {<br \/>\nhandleClick(el, binding, event)<br \/>\n}<br \/>\nel.addEventListener(&#8216;click&#8217;, Utils.debounce(wrappedClickEvent, 300))<br \/>\nel.handleClick = handleClick<br \/>\n},<br \/>\nunbind(el, binding) {<br \/>\nconst handleClick = el.handleClick<br \/>\nel.removeEventListener(&#8216;click&#8217;, handleClick)<br \/>\ndelete el.handleClick<br \/>\n},<br \/>\n})<\/p>\n<p>4\u3001\u5c06\u57cb\u70b9\u516c\u5171\u65b9\u6cd5\u6dfb\u52a0\u5230Vue.prototype\u539f\u578b\u5bf9\u8c61\u4e2d\uff0c\u624b\u52a8\u8c03\u7528\uff0c\u89e6\u53d1\u57cb\u70b9<\/p>\n<p>startTask(event) {<br \/>\n\/\/\u6a21\u62df\u63a5\u53e3\u54cd\u5e94\u65f6\u95f42s<br \/>\nsetTimeout(() =&gt; {<br \/>\nthis.$CapolLog<br \/>\n.pointUpdateHelper(event, true)<br \/>\n.then((res) =&gt; {<br \/>\nconsole.log(res)<br \/>\n})<br \/>\n.catch((error) =&gt; {<br \/>\nconsole.error(error)<br \/>\n})<br \/>\n}, 2000)<br \/>\nthis.getMajorData()<br \/>\nthis.showStartTaskDialog = true<br \/>\n},<br \/>\n\u57cb\u70b9\u63a5\u53e3\u4f20\u53c2\u8bf4\u660e<br \/>\n\u6dfb\u52a0\u57cb\u70b9\u53c2\u6570<br \/>\n\u5b57\u6bb5 \u662f\u5426\u5fc5\u586b \u5907\u6ce8\u8bf4\u660e<br \/>\nsource \u662f \u6765\u6e90\u7aef<br \/>\nfunctionType \u662f \u529f\u80fd\u7c7b\u578b<br \/>\nlogType \u662f \u65e5\u5fd7\u7c7b\u578b<br \/>\ninfo \u662f \u57cb\u70b9\u57fa\u672c\u4fe1\u606f<br \/>\nuuid \u662f \u56de\u8bdd\u552f\u4e00\u503c<br \/>\nmenuCode \u5426 \u83dc\u5355\u7f16\u7801<br \/>\nbuttonName \u5426\uff08\u70b9\u51fb\u6309\u94ae\u4e3a\u5fc5\u586b\uff09 \u6309\u94ae\u540d\u79f0\uff08\u5e94\u8be5\u5e26\u4e0a\u4e0b\u6587\uff09<br \/>\nprivateData \u662f \u79c1\u6709\u53c2\u6570json\u5b57\u7b26\u4e32<br \/>\nidFlag \u662f id\u503c\u662f\u5426\u9700\u8981\u8fd4\u56de\uff0c\u540e\u7eed\u7528\u4e8e\u66f4\u65b0<br \/>\n\u66f4\u65b0\u57cb\u70b9\u53c2\u6570<br \/>\n\u5b57\u6bb5 \u662f\u5426\u5fc5\u586b \u5907\u6ce8\u8bf4\u660e<br \/>\nfunctionType \u662f \u529f\u80fd\u7c7b\u578b\uff08\u548c\u6dfb\u52a0\u57cb\u70b9\u65f6\u4f20\u53c2\u4fdd\u6301\u4e00\u81f4\uff09<br \/>\nupdateData \u662f \u66f4\u65b0\u57cb\u70b9\u53c2\u6570json\u5b57\u7b26\u4e32\uff08\u5fc5\u987b\u5305\u542bid\u5b57\u6bb5\uff0c\u5176\u4ed6\u4e3a\u66f4\u65b0\u53c2\u6570\uff09<br \/>\n\u90e8\u5206\u53c2\u6570\u679a\u4e3e\u8bf4\u660e<br \/>\nfunctionType\uff08\u529f\u80fd\u7c7b\u578b\uff09<br \/>\n\u529f\u80fd\u7c7b\u578bkey \u529f\u80fd\u7c7b\u578bval<br \/>\n0 \u6309\u94ae\u70b9\u51fb<br \/>\n1 \u9875\u9762\u521d\u59cb<br \/>\n2 \u6587\u4ef6\u4e0b\u8f7d<br \/>\n3 \u6587\u4ef6\u6d4f\u89c8<br \/>\n4 \u6587\u4ef6\u5206\u4eab<br \/>\n5 \u6587\u4ef6\u4e0a\u4f20<br \/>\n6 \u9009\u62e9\u6a21\u677f<br \/>\n7 \u8fdb\u5ea6\u6d4f\u89c8<br \/>\n8 \u7ba1\u63a7\u4e8b\u4ef6<br \/>\n9 \u56fe\u6a21\u5173\u8054<br \/>\n10 \u95ee\u9898\u5bfc\u51fa<br \/>\nlogType\uff08\u65e5\u5fd7\u7c7b\u578b\uff09<br \/>\n\u529f\u80fd\u7c7b\u578bkey \u529f\u80fd\u7c7b\u578bval<br \/>\n0 \u5de5\u5177\u57cb\u70b9\u70b9\u51fb<br \/>\n1 \u6846\u67b6\u57cb\u70b9\u521d\u59cb<br \/>\n2 \u6587\u4ef6\u9879\u76ee\u6587\u4ef6\u4e0b\u8f7d<br \/>\n3 \u6587\u4ef6\u5206\u4eab\u6587\u4ef6\u4e0b\u8f7d<br \/>\n4 \u7ba1\u63a7\u6587\u4ef6\u4e0b\u8f7d<br \/>\n5 \u9879\u76ee\u6587\u4ef6\u6d4f\u89c8<br \/>\n6 \u5206\u4eab\u6587\u4ef6\u6d4f\u89c8<br \/>\n7 \u7ba1\u63a7\u6587\u4ef6\u6d4f\u89c8<br \/>\n8 \u56fe\u7eb8\u6587\u4ef6\u6d4f\u89c8<br \/>\n9 \u9879\u76ee\u6587\u4ef6\u5206\u4eab<br \/>\n10 \u9879\u76ee\u6587\u4ef6\u4e0a\u4f20<br \/>\n11 \u7ba1\u63a7\u6587\u4ef6\u4e0a\u4f20<br \/>\n12 \u9009\u62e9\u6a21\u677f\u57cb\u70b9<br \/>\n13 \u8fdb\u5ea6\u6d4f\u89c8\u57cb\u70b9<br \/>\n14 \u8fdb\u5ea6\u7ba1\u63a7\u57cb\u70b9<br \/>\n15 \u56fe\u6a21\u5173\u8054\u57cb\u70b9<br \/>\n16 \u95ee\u9898\u5bfc\u51fa\u57cb\u70b9<br \/>\nsource\uff08\u6765\u6e90\u7aef\uff09<br \/>\n\u6765\u6e90key \u6765\u6e90Val<br \/>\n0 pc<br \/>\n1 android<br \/>\n2 ios<br \/>\n3 wx<br \/>\n4 Capol3D<br \/>\n5 Capol2D<br \/>\n\u6307\u4ee4\u57cb\u70b9\u8be6\u7ec6\u8bf4\u660e<br \/>\n\u5b9e\u73b0\u65b9\u6848<br \/>\n1\u3001\u5728\u9700\u8981\u57cb\u70b9\u7684\u5143\u7d20\u4e0a\u7ed1\u5b9a v-capol-log \u6307\u4ee4\uff0c\u76d1\u542c\u5143\u7d20\u70b9\u51fb\u4e8b\u4ef6\uff0c\u5f53\u5143\u7d20\u70b9\u51fb\u65f6\uff0c\u81ea\u52a8\u89e6\u53d1\u6dfb\u52a0\u57cb\u70b9\u65b9\u6cd5\uff0c\u5982\u679c v-capol-log \u4fee\u9970\u7b26idFlag\u4e3atrue\uff0c\u5728\u6dfb\u52a0\u57cb\u70b9\u6210\u529f\u540e\uff0c\u5728\u8be5\u70b9\u51fb\u5143\u7d20\u4e0a\u6dfb\u52a0capol-log-element \u7c7b\u540d\u3001data-id\uff08\u8bb0\u5f55\u6b64\u6b21\u57cb\u70b9id\uff09\u3001data-type\uff08\u8bb0\u5f55\u6b64\u6b21\u57cb\u70b9\u7c7b\u578b\uff09<\/p>\n<p>&lt;button type=&#8221;button&#8221; class=&#8221;el-button el-button&#8211;default el-button&#8211;small is-plain capol-log-element&#8221; data-id=&#8221;1929582931271722&#8243; data-type=&#8221;\u6309\u94ae\u70b9\u51fb&#8221;&gt;\u53d1\u8d77\u5ba1\u6279\u4efb\u52a1&lt;\/span&gt;&lt;\/button&gt;<br \/>\n2\u3001\u5728\u70b9\u51fb\u4e8b\u4ef6\u76f8\u5173\u4e1a\u52a1\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u901a\u8fc7\u70b9\u51fb\u4e8b\u4ef6\u7684event\u5bf9\u8c61\u62ff\u5230\u5143\u7d20\u4e0a\u8bb0\u5f55\u7684\u57cb\u70b9id\u3001\u57cb\u70b9\u7c7b\u578btype\uff0c\u5c06\u64cd\u4f5c\u7ed3\u679c\uff08\u2018\u201c\u64cd\u4f5c\u6210\u529f\u201d || \u201c\u64cd\u4f5c\u5931\u8d25\u201d\uff09\u4f5c\u4e3a\u66f4\u65b0\u53c2\u6570\u4f5c\u4e3aupdateData\u53c2\u6570\uff0c\u8c03\u7528CapolLog.pointUpdate(id, type,updateData)\u66f4\u65b0\u57cb\u70b9\u65b9\u6cd5\u5b9e\u73b0\u57cb\u70b9\u66f4\u65b0\u3002\u540e\u53f0\u5c06\u6839\u636e\u521d\u6b21\u57cb\u70b9\u65f6\u95f4\u3001\u66f4\u65b0\u57cb\u70b9\u65f6\u95f4\uff0c\u8ba1\u7b97\u51fa****\u6b64\u6b21\u70b9\u51fb\u4e8b\u4ef6\u7684\u54cd\u5e94\u65f6\u95f4responseTime\u3002<\/p>\n<p>\u4f7f\u7528\u65b9\u6848<br \/>\n1\u3001\u7ed1\u5b9a\u6307\u4ee4<\/p>\n<p>&lt;el-button<br \/>\nv-capol-log.idFlag=&#8221;{<br \/>\nfunctionType: 0,<br \/>\nlogType: 0,<br \/>\nbuttonName: &#8216;\u53d1\u8d77\u5ba1\u6279\u4efb\u52a1-\u6210\u529f\u5ba1\u67e5&#8217;,<br \/>\nprivateData: { functionName: &#8216;\u53d1\u8d77\u5ba1\u6279\u4efb\u52a1&#8217;, menuName: &#8216;\u6210\u679c\u5ba1\u67e5&#8217;,projectId:123,enterpriseId:456 },<br \/>\n}&#8221;<br \/>\nplain<br \/>\n@click=&#8221;startTask&#8221;<br \/>\n&gt;\u53d1\u8d77\u5ba1\u6279\u4efb\u52a1<br \/>\n&lt;\/el-button&gt;<br \/>\n\u6307\u4ee4\u4f20\u53c2\u8bf4\u660e\uff1a<\/p>\n<p>\u5b57\u6bb5 \u662f\u5426\u5fc5\u586b \u5907\u6ce8\u8bf4\u660e<br \/>\nidFlag \u5426 \u6307\u4ee4\u4fee\u9970\u7b26\uff0c\u540e\u7eed\u9700\u8981\u66f4\u65b0\u57cb\u70b9\u5fc5\u4f20<br \/>\nfunctionType \u662f \u529f\u80fd\u7c7b\u578b\uff0c\u6839\u636e\u679a\u4e3e\u8bf4\u660e\u8868\u4f20\u5bf9\u5e94\u4e0b\u6807\u5373\u53ef\uff08eg\uff1a\u6309\u94ae\u70b9\u51fb\u4f200\uff09<br \/>\nlogType \u662f \u65e5\u5fd7\u7c7b\u578b\uff0c\u6839\u636e\u679a\u4e3e\u8bf4\u660e\u8868\u4f20\u5bf9\u5e94\u4e0b\u6807\u5373\u53ef\uff08eg\uff1a\u5de5\u5177\u57cb\u70b9\u70b9\u51fb\u4f200\uff09<br \/>\nbuttonName \u662f \u6309\u94ae\u540d\u79f0\uff0c\u9700\u8981\u5e26\u4e0a\u4e0b\u6587\uff08eg\uff1a\u53d1\u8d77\u5ba1\u6279\u4efb\u52a1-\u6210\u529f\u5ba1\u67e5\uff09<br \/>\nprivateData \u662f \u79c1\u6709\u53c2\u6570\u5bf9\u8c61\uff0cfunctionName\uff08\u6309\u94ae\u540d\u79f0\uff09\u3001menuName\uff08\u83dc\u5355\u540d\u79f0\uff09\u8fd9\u4e24\u4e2a\u5b57\u6bb5\u5fc5\u4f20\uff0c\u5176\u4ed6\u5b57\u6bb5\u6309\u9700\u4f20\u9012\u5373\u53ef<br \/>\nmenuCode \u5426 \u83dc\u5355\u7f16\u7801\uff0c\u4e0d\u4f20\u4f18\u5148\u53d6\u5de6\u4fa7\u5bfc\u822a\u680f\u9ad8\u4eae\u83dc\u5355code,\u53d6\u4e0d\u5230\u53d6\u5f53\u524d\u8def\u7531code<br \/>\n2\u3001\u70b9\u51fb\u4e8b\u4ef6\u4e1a\u52a1\u6267\u884c\u5b8c\u6bd5\u540e\uff0c\u8c03\u7528**this.$CapolLog.pointUpdateHelper\uff08event,operateResultBool\uff09**\u66f4\u65b0\u57cb\u70b9\uff08\u5982\u679c\u9700\u8981\uff09<\/p>\n<p>startTask(event) {<br \/>\n\/\/\u6a21\u62df\u63a5\u53e3\u54cd\u5e94\u65f6\u95f42s<br \/>\nsetTimeout(() =&gt; {<br \/>\nthis.$CapolLog<br \/>\n.pointUpdateHelper(event, true)<br \/>\n.then((res) =&gt; {<br \/>\nconsole.log(res)<br \/>\n})<br \/>\n.catch((error) =&gt; {<br \/>\nconsole.error(error)<br \/>\n})<br \/>\n}, 2000)<br \/>\nthis.getMajorData()<br \/>\nthis.showStartTaskDialog = true<br \/>\n},<br \/>\n\u9875\u9762\u521d\u59cb\u57cb\u70b9\u8be6\u7ec6\u8bf4\u660e<br \/>\n\u5f85\u540e\u7eed\u66f4\u65b0\u2026<\/p>\n<p>\u4e3b\u8981\u5b9e\u73b0\u4ee3\u7801<br \/>\ncommonLog.js\uff08\u901a\u7528\u57cb\u70b9\u65b9\u6cd5\uff09<br \/>\nimport API from &#8216;..\/api&#8217;<br \/>\nimport router from &#8216;..\/router&#8217;<br \/>\nimport Utils from &#8216;.\/utils&#8217;<br \/>\nimport store from &#8216;..\/store&#8217;<br \/>\nimport { getDeviceInfo } from &#8216;.\/getDeviceInfo&#8217;<\/p>\n<p>\/\/ \u83b7\u53d6\u529f\u80fd\u7c7b\u578b<br \/>\nfunction getFunctionType(val) {<br \/>\nconst List = {<br \/>\n0: &#8216;\u6309\u94ae\u70b9\u51fb&#8217;,<br \/>\n1: &#8216;\u9875\u9762\u521d\u59cb&#8217;,<br \/>\n2: &#8216;\u6587\u4ef6\u4e0b\u8f7d&#8217;,<br \/>\n3: &#8216;\u6587\u4ef6\u6d4f\u89c8&#8217;,<br \/>\n4: &#8216;\u6587\u4ef6\u5206\u4eab&#8217;,<br \/>\n5: &#8216;\u6587\u4ef6\u4e0a\u4f20&#8217;,<br \/>\n6: &#8216;\u9009\u62e9\u6a21\u677f&#8217;,<br \/>\n7: &#8216;\u8fdb\u5ea6\u6d4f\u89c8&#8217;,<br \/>\n8: &#8216;\u7ba1\u63a7\u4e8b\u4ef6&#8217;,<br \/>\n9: &#8216;\u56fe\u6a21\u5173\u8054&#8217;,<br \/>\n10: &#8216;\u95ee\u9898\u5bfc\u51fa&#8217;,<br \/>\n}<br \/>\nreturn List[val] || &#8221;<br \/>\n}<\/p>\n<p>\/\/ \u83b7\u53d6\u65e5\u5fd7\u7c7b\u578b<br \/>\nfunction getLogType(val) {<br \/>\nconst List = {<br \/>\n0: &#8216;\u5de5\u5177\u57cb\u70b9\u70b9\u51fb&#8217;,<br \/>\n1: &#8216;\u6846\u67b6\u57cb\u70b9\u521d\u59cb&#8217;,<br \/>\n2: &#8216;\u9879\u76ee\u6587\u4ef6\u4e0b\u8f7d&#8217;,<br \/>\n3: &#8216;\u5206\u4eab\u6587\u4ef6\u4e0b\u8f7d&#8217;,<br \/>\n4: &#8216;\u7ba1\u63a7\u6587\u4ef6\u4e0b\u8f7d&#8217;,<br \/>\n5: &#8216;\u9879\u76ee\u6587\u4ef6\u6d4f\u89c8&#8217;,<br \/>\n6: &#8216;\u5206\u4eab\u6587\u4ef6\u6d4f\u89c8&#8217;,<br \/>\n7: &#8216;\u7ba1\u63a7\u6587\u4ef6\u6d4f\u89c8&#8217;,<br \/>\n8: &#8216;\u56fe\u7eb8\u6587\u4ef6\u6d4f\u89c8&#8217;,<br \/>\n9: &#8216;\u9879\u76ee\u6587\u4ef6\u5206\u4eab&#8217;,<br \/>\n10: &#8216;\u9879\u76ee\u6587\u4ef6\u4e0a\u4f20&#8217;,<br \/>\n11: &#8216;\u7ba1\u63a7\u6587\u4ef6\u4e0a\u4f20&#8217;,<br \/>\n12: &#8216;\u9009\u62e9\u6a21\u677f\u57cb\u70b9&#8217;,<br \/>\n13: &#8216;\u8fdb\u5ea6\u6d4f\u89c8\u57cb\u70b9&#8217;,<br \/>\n14: &#8216;\u8fdb\u5ea6\u7ba1\u63a7\u57cb\u70b9&#8217;,<br \/>\n15: &#8216;\u56fe\u6a21\u5173\u8054\u57cb\u70b9&#8217;,<br \/>\n16: &#8216;\u95ee\u9898\u5bfc\u51fa\u57cb\u70b9&#8217;,<br \/>\n}<br \/>\nreturn List[val] || &#8221;<br \/>\n}<\/p>\n<p>\/\/ \u83b7\u53d6\u6765\u6e90\u7aef<br \/>\n\/\/ function getScource(val) {<br \/>\n\/\/ const List = {<br \/>\n\/\/ 0: &#8216;pc&#8217;, \/\/WEB\u7aef<br \/>\n\/\/ 1: &#8216;android&#8217;, \/\/\u5b89\u5353\u7aef<br \/>\n\/\/ 2: &#8216;ios&#8217;, \/\/\u82f9\u679c\u7aef<br \/>\n\/\/ 3: &#8216;wx&#8217;, \/\/\u5c0f\u7a0b\u5e8f\u7aef<br \/>\n\/\/ 4: &#8216;Capol3D&#8217;, \/\/\u901f\u5efa\u7aef<br \/>\n\/\/ 5: &#8216;Capol2D&#8217;, \/\/\u901f\u7ed8\u7aef<br \/>\n\/\/ }<br \/>\n\/\/ return List[val] || &#8221;<br \/>\n\/\/ }<\/p>\n<p>\/\/ \u83b7\u53d6\u57fa\u672c\u57cb\u70b9\u4fe1\u606f<br \/>\nfunction getBasicInfo() {<br \/>\nconst basicInfo = getDeviceInfo(null, router.history.current)<br \/>\nconsole.log(basicInfo, &#8216;basicInfo&#8217;)<br \/>\nreturn basicInfo<br \/>\n}<\/p>\n<p>\/\/\u83b7\u53d6\u56de\u8bdd\u552f\u4e00id<br \/>\nfunction getUUID() {<br \/>\nlet uuid = sessionStorage.getItem(&#8216;capol-log-uuid&#8217;)<br \/>\nif (!uuid) {<br \/>\nuuid = Utils.uuid()<br \/>\nsessionStorage.setItem(&#8216;capol-log-uuid&#8217;, uuid)<br \/>\n}<br \/>\nreturn uuid<br \/>\n}<\/p>\n<p>\/\/\u6309\u7167\u540e\u53f0\u8981\u6c42 \u5c06\u5bf9\u8c61\u8f6c\u6210json\u5b57\u7b26\u4e32<br \/>\nfunction getJSONObj(obj) {<br \/>\nif (typeof obj === &#8216;object&#8217; &amp;&amp; obj !== null) {<br \/>\nreturn JSON.stringify(obj).replace(\/&#8221;\/g, &#8220;&#8216;&#8221;)<br \/>\n} else {<br \/>\nreturn &#8221;<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/ \u6241\u5e73\u5316\u7cfb\u7edf\u83dc\u5355\u6570\u7ec4<br \/>\nfunction flatterArray(arr, finalArr = []) {<br \/>\nif (arr.length === 0) return finalArr<br \/>\nfor (let i = 0; i &lt; arr.length; i++) {<br \/>\nconst item = arr[i]<br \/>\nif (item.children &amp;&amp; item.children.length) {<br \/>\nflatterArray(item.children, finalArr)<br \/>\n} else {<br \/>\nfinalArr.push(item)<br \/>\n}<br \/>\n}<br \/>\nreturn finalArr<br \/>\n}<\/p>\n<p>\/\/\u83b7\u53d6\u83dc\u5355code<br \/>\nfunction getMenuCode() {<br \/>\n\/\/\u9ed8\u8ba4\u53d6\u8def\u7531\u540d\u79f0<br \/>\nlet code = router.currentRoute.name || &#8221;<br \/>\nlet menuList = store.getters.menuList || []<br \/>\nif (menuList.length === 0) {<br \/>\nconst queryObj = Utils.getURLParameters(decodeURIComponent(window.location.href))<br \/>\nconst { proId, enterpriseId } = queryObj<br \/>\nmenuList = JSON.parse(localStorage.getItem(&#8216;pro_menu_list_&#8217; + proId + &#8216;_&#8217; + enterpriseId))<br \/>\n}<br \/>\n\/\/\u4ece\u7cfb\u7edf\u83dc\u5355\u5217\u8868\u4e2d\u53d6code<br \/>\nif (menuList.length) {<br \/>\nconst flatterMenuList = flatterArray(menuList)<br \/>\nconst activeMenuText = document.querySelector(<br \/>\n&#8216;.sidebar-el-menu .el-menu-item.is-active .item span&#8217;<br \/>\n)?.innerHTML<br \/>\nconst activeMenu = flatterMenuList.find((el) =&gt; el.title === activeMenuText)<br \/>\nif (activeMenu) {<br \/>\ncode = activeMenu.code<br \/>\n}<br \/>\n}<br \/>\nreturn code<br \/>\n}<\/p>\n<p>\/\/\u57cb\u70b9\u65b9\u6cd5\u7c7b<br \/>\nexport default class CapolLog {<br \/>\n\/**<br \/>\n* \u901a\u7528\u6dfb\u52a0\u57cb\u70b9\u51fd\u6570<br \/>\n* @param dynamicInfo \u6dfb\u52a0\u57cb\u70b9\u7684\u53c2\u6570 \uff08\u5fc5\u586b\uff09<br \/>\n* @param dynamicInfo \u5fc5\u586b\u9879\u8bf4\u660e\uff1afunctionType\uff08\u529f\u80fd\u7c7b\u578b\uff09\uff1blogType\uff08\u65e5\u5fd7\u7c7b\u578b\uff09\uff1bprivateData\uff08\u57cb\u70b9\u79c1\u6709\u53c2\u6570\uff09\uff1bidFlag\uff08\u662f\u5426\u9700\u8981\u540e\u53f0\u8fd4\u56de\u6b64\u6b21\u57cb\u70b9id\uff0c\u7528\u4e8e\u540e\u7eed\u66f4\u65b0\uff09<br \/>\n* @param el dom\u5143\u7d20\uff0c\u5982\u679c\u6709\u4f20\uff0c\u5c06\u5f80dom\u5143\u7d20\u4e0a\u6dfb\u52a0\u57cb\u70b9\u4fe1\u606f \uff08\u975e\u5fc5\u586b\uff09<br \/>\n* @returns {Promise} \u6dfb\u52a0\u57cb\u70b9\u7684\u72b6\u6001<br \/>\n*\/<br \/>\nstatic pointAdd = (dynamicInfo, el) =&gt; {<br \/>\nlet { functionType, source, logType, menuCode, buttonName, privateData, idFlag } =<br \/>\ndynamicInfo<br \/>\nconst params = {<br \/>\nsource: source || &#8216;pc&#8217;, \/\/\u6765\u6e90\u7aef<br \/>\nfunctionType: getFunctionType(functionType), \/\/\u529f\u80fd\u7c7b\u578b<br \/>\nlogType: getLogType(logType), \/\/\u65e5\u5fd7\u7c7b\u578b<br \/>\ninfo: getJSONObj(getBasicInfo()), \/\/\u57cb\u70b9\u57fa\u672c\u4fe1\u606f<br \/>\nuuid: getUUID(), \/\/\u56de\u8bdd\u552f\u4e00\u503c<br \/>\nmenuCode: menuCode || getMenuCode(), \/\/\u83dc\u5355\u7f16\u7801 (\u975e\u5fc5\u586b)<br \/>\nbuttonName, \/\/\u6309\u94ae\u540d\u79f0<br \/>\n\/\/\u79c1\u6709\u53c2\u6570json\u5b57\u7b26\u4e32<br \/>\nprivateData: getJSONObj(privateData),<br \/>\nidFlag: idFlag || 0, \/\/id\u503c\u662f\u5426\u9700\u8981\u8fd4\u56de<br \/>\n}<br \/>\nreturn new Promise((resolve, reject) =&gt; {<br \/>\nAPI.log<br \/>\n.capolAddLog(params)<br \/>\n.then((res) =&gt; {<br \/>\nif (res.status === 200) {<br \/>\nif (res.data &amp;&amp; el) {<br \/>\nel.classList.add(&#8216;capol-log-element&#8217;)<br \/>\nel.setAttribute(&#8216;data-id&#8217;, res.data)<br \/>\nel.setAttribute(&#8216;data-type&#8217;, getFunctionType(functionType))<br \/>\n}<br \/>\nresolve(res)<br \/>\n} else {<br \/>\nreject(res)<br \/>\n}<br \/>\n})<br \/>\n.catch((error) =&gt; {<br \/>\nreject(error)<br \/>\n})<br \/>\n})<br \/>\n}<br \/>\n\/**<br \/>\n* \u66f4\u65b0\u57cb\u70b9\u901a\u7528\u51fd\u6570<br \/>\n* @param id \u6b64\u6b21\u9700\u8981\u66f4\u65b0\u7684\u57cb\u70b9id (\u5fc5\u586b)<br \/>\n* @param type \u529f\u80fd\u7c7b\u578b eg(&#8216;\u6309\u94ae\u70b9\u51fb&#8217;) (\u5fc5\u586b)<br \/>\n* @param updateData \u66f4\u65b0\u7684\u79c1\u6709\u53c2\u6570 (\u5fc5\u586b)<br \/>\n* @returns {Promise} \u8fd4\u56de\u66f4\u65b0\u57cb\u70b9\u7684\u72b6\u6001<br \/>\n*\/<br \/>\nstatic pointUpdate = (id, type, updateData) =&gt; {<br \/>\nconst params = {<br \/>\nfunctionType: type,<br \/>\nupdateData: getJSONObj({<br \/>\nid,<br \/>\n&#8230;updateData,<br \/>\n}),<br \/>\n}<br \/>\nreturn new Promise((resolve, reject) =&gt; {<br \/>\nAPI.log<br \/>\n.capolUpdateLog(params)<br \/>\n.then((res) =&gt; {<br \/>\nif (res.status === 200) {<br \/>\nresolve(res)<br \/>\n} else {<br \/>\nreject(res)<br \/>\n}<br \/>\n})<br \/>\n.catch((error) =&gt; {<br \/>\nreject(error)<br \/>\n})<br \/>\n})<br \/>\n}<br \/>\n\/**<br \/>\n* \u6309\u94ae\u70b9\u51fb\u66f4\u65b0\u57cb\u70b9\u8f85\u52a9\u51fd\u6570<br \/>\n* @param event \u70b9\u51fb\u4e8b\u4ef6\u7684 event \u5bf9\u8c61 \uff08\u5fc5\u586b\uff09<br \/>\n* @param operateResultBool \u70b9\u51fb\u4e8b\u4ef6\u7684\u64cd\u4f5c\u7ed3\u679c true || false \uff08\u5fc5\u586b\uff09<br \/>\n* @returns {updatePromise} \u8fd4\u56de\u66f4\u65b0\u57cb\u70b9\u7684\u72b6\u6001<br \/>\n*\/<br \/>\nstatic pointUpdateHelper = async (event, operateResultBool) =&gt; {<br \/>\nif (!event || operateResultBool === undefined) {<br \/>\nreturn Promise.reject(new Error(&#8216;\u66f4\u65b0\u57cb\u70b9\u53c2\u6570\u7f3a\u5931&#8217;))<br \/>\n}<br \/>\nconst updateData = {<br \/>\noperateResult: operateResultBool ? &#8216;\u64cd\u4f5c\u6210\u529f&#8217; : &#8216;\u64cd\u4f5c\u5931\u8d25&#8217;,<br \/>\n}<br \/>\nconsole.log(event?.target.closest(&#8216;.capol-log-element&#8217;))<br \/>\nconst targetBtn = event?.target.closest(&#8216;.capol-log-element&#8217;)<br \/>\n\/\/\u8fd4\u56de\u66f4\u65b0\u57cb\u70b9\u7684\u72b6\u6001<br \/>\nlet updatePromise<br \/>\nif (targetBtn) {<br \/>\nconst id = targetBtn.dataset.id<br \/>\nconst type = targetBtn.dataset.type<br \/>\nupdatePromise = await this.pointUpdate(id, type, updateData)<br \/>\n} else {<br \/>\nupdatePromise = Promise.reject(new Error(&#8216;\u83b7\u53d6\u4e0d\u5230\u66f4\u65b0\u57cb\u70b9id&#8217;))<br \/>\n}<br \/>\nreturn updatePromise<br \/>\n}<br \/>\n}<\/p>\n<p>\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014\u2014<\/p>\n<p>\u7248\u6743\u58f0\u660e\uff1a\u672c\u6587\u4e3a\u535a\u4e3b\u539f\u521b\u6587\u7ae0\uff0c\u9075\u5faa CC 4.0 BY-SA \u7248\u6743\u534f\u8bae\uff0c\u8f6c\u8f7d\u8bf7\u9644\u4e0a\u539f\u6587\u51fa\u5904\u94fe\u63a5\u548c\u672c\u58f0\u660e\u3002<\/p>\n<p>\u539f\u6587\u94fe\u63a5\uff1a<a href=\"https:\/\/blog.csdn.net\/Y_seaboy\/article\/details\/134839137\">https:\/\/blog.csdn.net\/Y_seaboy\/article\/details\/134839137\u00a0<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u57cb\u70b9\u65b9\u6848\u4e3b\u8981\u6d41\u7a0b 1\u3001 \u5728 main.js \u6587\u4ef6\u4e2d\u751f\u6210 capol-log-uu&#8230; <a href=\"https:\/\/kzqgy.cn\/index.php\/2025\/06\/23\/vue%e9%a1%b9%e7%9b%ae%e5%89%8d%e7%ab%af%e9%80%9a%e7%94%a8%e5%9f%8b%e7%82%b9%e6%96%b9%e6%a1%88\/\" class=\"readmore\">Read more<span class=\"screen-reader-text\">vue\u9879\u76ee\u524d\u7aef\u901a\u7528\u57cb\u70b9\u65b9\u6848<\/span><span class=\"fa fa-angle-double-right\" aria-hidden=\"true\"><\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-28","post","type-post","status-publish","format-standard","hentry","category-all","content-layout-excerpt-thumb"],"_links":{"self":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts\/28","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/comments?post=28"}],"version-history":[{"count":1,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts\/28\/revisions"}],"predecessor-version":[{"id":29,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/posts\/28\/revisions\/29"}],"wp:attachment":[{"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/media?parent=28"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/categories?post=28"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kzqgy.cn\/index.php\/wp-json\/wp\/v2\/tags?post=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}