完成运维记录前端

master
lynn 7 months ago
parent 1dab99204b
commit 74d5a4acc2

@ -0,0 +1,67 @@
import request from '@/utils/request';
// 设备运维规则配置
export function getMaintainConfigList(params) {
return request({
url: '/api/admin/equipment-maintain-config/index',
method: 'get',
params
});
}
export function getMaintainConfigDetail(params) {
return request({
url: '/api/admin/equipment-maintain-config/show',
method: 'get',
params
});
}
export function saveMaintainConfig(data) {
return request({
url: '/api/admin/equipment-maintain-config/save',
method: 'post',
data
});
}
export function deleteMaintainConfig(params) {
return request({
url: '/api/admin/equipment-maintain-config/destroy',
method: 'get',
params
});
}
// 设备运维记录
export function getOperationList(params) {
return request({
url: '/api/admin/equipment-operation/index',
method: 'get',
params
});
}
export function getOperationDetail(params) {
return request({
url: '/api/admin/equipment-operation/show',
method: 'get',
params
});
}
export function saveOperation(data) {
return request({
url: '/api/admin/equipment-operation/save',
method: 'post',
data
});
}
export function deleteOperation(params) {
return request({
url: '/api/admin/equipment-operation/destroy',
method: 'get',
params
});
}

@ -165,7 +165,10 @@
</div> </div>
<div class="form-group signature-area"> <div class="form-group signature-area">
<label>签名:</label> <label>签名:</label>
<div class="signature-display">当前用户: {{ currentUser }}</div> <div class="signature-pad-wrapper">
<canvas ref="signaturePad" class="signature-canvas"></canvas>
<Button size="small" style="margin-top: 8px;" @click="clearSignature"></Button>
</div>
</div> </div>
</form> </form>
</div> </div>
@ -339,6 +342,7 @@ export default {
mounted() { mounted() {
this.calcTableHeight(); this.calcTableHeight();
window.addEventListener('resize', this.calcTableHeight); window.addEventListener('resize', this.calcTableHeight);
this.initSignaturePad();
}, },
beforeDestroy() { beforeDestroy() {
window.removeEventListener('resize', this.calcTableHeight); window.removeEventListener('resize', this.calcTableHeight);
@ -503,6 +507,85 @@ export default {
closeViewModal() { closeViewModal() {
this.showViewModal = false; this.showViewModal = false;
this.currentRecord = {}; this.currentRecord = {};
},
initSignaturePad() {
const canvas = this.$refs.signaturePad;
if (!canvas) return;
const ctx = canvas.getContext('2d');
//
const dpr = window.devicePixelRatio || 1;
const container = canvas.parentNode;
const displayWidth = container.offsetWidth || 400;
canvas.width = displayWidth * dpr;
canvas.height = 120 * dpr;
canvas.style.width = displayWidth + 'px';
canvas.style.height = '120px';
ctx.scale(dpr, dpr);
ctx.lineWidth = 2;
ctx.lineCap = 'round';
let drawing = false;
let lastX = 0, lastY = 0;
const getPos = e => {
if (e.touches && e.touches.length) {
const rect = canvas.getBoundingClientRect();
return {
x: e.touches[0].clientX - rect.left,
y: e.touches[0].clientY - rect.top
};
} else {
const rect = canvas.getBoundingClientRect();
return {
x: e.clientX - rect.left,
y: e.clientY - rect.top
};
}
};
const start = e => {
drawing = true;
const pos = getPos(e);
lastX = pos.x;
lastY = pos.y;
};
const move = e => {
if (!drawing) return;
const pos = getPos(e);
ctx.beginPath();
ctx.moveTo(lastX, lastY);
ctx.lineTo(pos.x, pos.y);
ctx.stroke();
lastX = pos.x;
lastY = pos.y;
};
const end = () => { drawing = false; };
canvas.addEventListener('mousedown', start);
canvas.addEventListener('mousemove', move);
canvas.addEventListener('mouseup', end);
canvas.addEventListener('mouseleave', end);
canvas.addEventListener('touchstart', start);
canvas.addEventListener('touchmove', move);
canvas.addEventListener('touchend', end);
this.signaturePadCtx = ctx;
this.signaturePadCanvas = canvas;
},
clearSignature() {
if (this.signaturePadCtx && this.signaturePadCanvas) {
this.signaturePadCtx.clearRect(0, 0, this.signaturePadCanvas.width, this.signaturePadCanvas.height);
}
},
getSignatureDataUrl() {
if (this.signaturePadCanvas) {
return this.signaturePadCanvas.toDataURL('image/png');
}
return '';
}
},
watch: {
showModal(val) {
if (val) {
this.$nextTick(() => {
this.initSignaturePad();
});
}
} }
} }
} }
@ -719,6 +802,8 @@ export default {
} }
.form-group { .form-group {
width: 100%;
min-width: 0;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
@ -759,17 +844,29 @@ export default {
color: #6c757d; color: #6c757d;
} }
.signature-area .signature-display { .signature-area {
background-color: #f8f9fa; width: 100%;
border: 1px dashed #ced4da; min-width: 0;
padding: 1rem; }
text-align: center; .signature-pad-wrapper {
color: #6c757d; width: 100%;
border-radius: 0.25rem; min-width: 0;
min-height: 80px;
display: flex; display: flex;
align-items: center; flex-direction: column;
justify-content: center; align-items: flex-start;
}
.signature-canvas {
border: 1px dashed #ced4da;
background: #fff;
border-radius: 4px;
width: 100%;
height: 120px;
cursor: crosshair;
display: block;
box-sizing: border-box;
margin: 0;
padding: 0;
min-width: 0;
} }
.form-value { .form-value {

Loading…
Cancel
Save