npm
# 安装的时候可能会遇到一个源没有的情况, 然后就换另一个源使用.
npm config set registry https://registry.npmmirror.com
npm config set registry https://mirrors.cloud.tencent.com/npm
npm config set registry https://mirrors.huaweicloud.com/repository/npm
npm config get registry
npm config delete registry
# 清理缓存, 可以解决一些安装问题
npm cache clean --force
# 显示详细日志定位安装问题
npm install --verbose
# 运行
npm run
npm run serve
npm run dev
# Error: Cannot find module '@nodelib/fs.stat'
# If you miss some package, reinstall it.
npm install @nodelib/fs.stat
npm install vue-template-compiler --save-dev
alpinejs
https://alpinejs.dev/start-here https://tailkits.com/components/pines-alpine-ui-library/
使用x-html
直接渲染data里面的HTML代码
<template x-for="item in data">
<div x-html="marked.parse(item)"></div>
</template>
reference
https://www.cnblogs.com/deali/p/18561643
tempus-dominus
时间选择控件
官方说明
https://getdatepicker.com/ https://getdatepicker.com/6/locale.html
<!-- Popperjs -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js" crossorigin="anonymous"></script>
<!-- Tempus Dominus JavaScript -->
<script src="https://cdn.jsdelivr.net/npm/@eonasdan/[email protected]/dist/js/tempus-dominus.min.js" crossorigin="anonymous"></script>
<!-- Tempus Dominus Styles -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@eonasdan/[email protected]/dist/css/tempus-dominus.min.css" crossorigin="anonymous">
使用示例
<!-- tempus-dominus -->
<asset:stylesheet src="tempus-dominus/tempus-dominus.6.9.4.css"/>
<div class="col-sm-3">
<div class="form-group">
<label>担保责任解除日期</label>
<div class="input-group date" id="guaranteeDutyEndDate"
data-target-input="nearest">
<input type="text" title="guaranteeDutyEndDate"
name="guaranteeDutyEndDate"
class="form-control datetimepicker-input"
data-target="#guaranteeDutyEndDate"/>
<div class="input-group-append" data-target="#guaranteeDutyEndDate"
data-toggle="datetimepicker">
<div class="input-group-text"><i class="fa fa-calendar"></i>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
tempusDominus.loadLocale(tempusDominus.locales.ch);
tempusDominus.locale(tempusDominus.locales.ch.name);
const datetimepicker1 = new tempusDominus.TempusDominus(document.getElementById('datetimepicker1'),
{
display: {
inline: false,
}
}
);
</script>
自定义配置,用于匹配中文
/*!
* Tempus Dominus v6.9.4 (https://getdatepicker.com/) * Copyright 2013-2023 Jonathan Peterson * Licensed under MIT (https://github.com/Eonasdan/tempus-dominus/blob/master/LICENSE) */(function (g, f) { typeof exports === 'object' && typeof module !== 'undefined' ? f(exports) : typeof define === 'function' && define.amd ? define(['exports'], f) : (g = typeof globalThis !== 'undefined' ? globalThis : g || self, f((g.tempusDominus = g.tempusDominus || {}, g.tempusDominus.locales = g.tempusDominus.locales || {}, g.tempusDominus.locales.ch = {}))); })(this, (function (exports) {
'use strict'; const name = 'ch';
const localization = {
today: '转到今天',
clear: '清除选中',
close: '关闭选择器',
selectMonth: '选择月份',
previousMonth: '上一月',
nextMonth: '下一月',
selectYear: '选择年份',
previousYear: '前一年',
nextYear: '后一年',
selectDecade: '选择十年',
previousDecade: '前一个十年',
nextDecade: '下一个十年',
previousCentury: '前一个世纪',
nextCentury: '下一个世纪',
pickHour: '选择小时',
incrementHour: '增加小时',
decrementHour: '减少小时',
pickMinute: '选择分钟',
incrementMinute: '增加分钟',
decrementMinute: '减少分钟',
pickSecond: '选择秒',
incrementSecond: '增加秒',
decrementSecond: '减少秒',
toggleMeridiem: '切换上午/下午',
selectTime: '选择时间',
selectDate: '选择日期',
dayViewHeaderFormat: { month: 'long', year: '2-digit' },
locale: 'ch',
startOfTheWeek: 1,
dateFormats: {
LT: 'H:mm',
LTS: 'H:mm:ss',
L: 'yyyy-MM-dd',
LL: 'd MMMM yyyy г.',
LLL: 'd MMMM yyyy г., H:mm',
LLLL: 'dddd, d MMMM yyyy г., H:mm',
},
ordinal: (n) => n,
format: 'L',
}; exports.localization = localization; exports.name = name; Object.defineProperty(exports, '__esModule', { value: true });
}));
前端低代码设计器
https://github.com/baidu/amis/releases https://aisuda.bce.baidu.com/amis/zh-CN/docs/start/getting-started
jQuery
xhr(XMLHttpRequest)
<script>
$(document).ready(function() {
// 拦截测试按钮点击
$('#testBtn').on('click', function(e) {
e.preventDefault();
// 发起AJAX请求
$.ajax({
url: "/component/test/" +${this.component?.id},
type: 'GET',
success: function(response) {
// 格式化JSON响应
console.log("111")
const formatted = JSON.stringify(response, null, 4);
$('#testResultContent').html(formatted);
},
error: function(xhr) {
console.log(xhr)
$('#testResultContent').html(xhr.statusText);
}
});
});
});
</script>
选定页面元素
document.querySelector('textarea[name=\"message\"]')
WebSocket
https://www.cnblogs.com/goloving/p/10746378.html
this.stompClient = null;
// 初始化WebSocket连接
function initWebSocket() {
// 确保只建立一个连接
if (stompClient && stompClient.connected) return;
// 使用StompJs.Client构造函数初始化
stompClient = new StompJs.Client({
brokerURL: "ws${createLink(uri: '/stomp', absolute: true).replaceFirst('(?i)http', '')}",
onConnect: () => {
console.log('STOMP连接成功');
// 订阅消息主题
stompClient.subscribe('/topic/hello', (response) => {
try {
// 尝试解析 JSON 格式(兼容未来可能的 JSON 响应)
const message = JSON.parse(response.body);
addMessageToChat({ content: message.content }, false);
} catch (e) {
// 解析失败时直接将响应体作为文本内容处理
addMessageToChat({ content: response.body }, false);
}
});
},
onStompError: (frame) => {
console.error('STOMP错误: ' + frame.headers['message']);
},
reconnectDelay: 3000 // 自动重连延迟(毫秒)
});
// 激活客户端连接
stompClient.activate();
};
console.log(this.stompClient);