|
@@ -130,7 +130,68 @@ const resetOb = ref({
|
|
|
cellFormat: true, // 设置单元格格式
|
|
|
},
|
|
|
data: null,
|
|
|
+ hook: {
|
|
|
+ cellUpdated: function (r, c, oldVal, newVal) {
|
|
|
+ const rule = getCellRule(r, c);
|
|
|
+ if (rule) {
|
|
|
+ const res = getCheckRes(newVal.v, rule);
|
|
|
+ if (res == false) {
|
|
|
+ newVal.bg = "#ea5530";
|
|
|
+ newVal.fc = "#ffffff";
|
|
|
+ } else {
|
|
|
+ newVal.bg = "";
|
|
|
+ newVal.fc = "#000000";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
});
|
|
|
+//数据渲染前根据规则设置cell样式
|
|
|
+const setCheckData = (data, dataVerification) => {
|
|
|
+ const setData = JSON.parse(JSON.stringify(data));
|
|
|
+ setData.forEach((element, row) => {
|
|
|
+ element.forEach((cell, col) => {
|
|
|
+ if (!cell) {
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ const rule = dataVerification[`${row}_${col}`];
|
|
|
+ if (rule) {
|
|
|
+ //校验
|
|
|
+ const res = getCheckRes(cell.v, rule);
|
|
|
+ if (res == false) {
|
|
|
+ cell.bg = "#ea5530";
|
|
|
+ cell.fc = "#ffffff";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ return setData;
|
|
|
+};
|
|
|
+//获取单元格规则
|
|
|
+const getCellRule = (row, column) => {
|
|
|
+ return luckysheet.getSheet().dataVerification[`${row}_${column}`];
|
|
|
+};
|
|
|
+//判断当前表格校验规则结果
|
|
|
+const getCheckRes = (val, rull) => {
|
|
|
+ let res = false;
|
|
|
+ switch (rull.type2) {
|
|
|
+ //类型为value1和value2直接
|
|
|
+ case "bw":
|
|
|
+ if (val >= Number(rull.value1) && val <= Number(rull.value2)) {
|
|
|
+ res = true;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ return res;
|
|
|
+};
|
|
|
+//设置某个单元格样式
|
|
|
+const setCellStyle = (row, column) => {
|
|
|
+ luckysheet.setCellValue(row, column, {
|
|
|
+ bg: "#ea5530",
|
|
|
+ fc: "#ffffff",
|
|
|
+ });
|
|
|
+};
|
|
|
//print
|
|
|
const print = () => {
|
|
|
console.log(luckysheet);
|
|
@@ -181,6 +242,10 @@ const leadingExcel = (item, fileList) => {
|
|
|
resetOb.value.data = data;
|
|
|
emits("update:data", data);
|
|
|
inName.value = file.name;
|
|
|
+ resetOb.value.data[0].data = setCheckData(
|
|
|
+ resetOb.value.data[0].data,
|
|
|
+ resetOb.value.data[0].dataVerification
|
|
|
+ );
|
|
|
window.luckysheet.create(resetOb.value);
|
|
|
});
|
|
|
};
|
|
@@ -230,16 +295,18 @@ const setVerification = () => {
|
|
|
) {
|
|
|
} else {
|
|
|
let option = {
|
|
|
- type: "number",
|
|
|
+ type: JSON.parse(props.verifications[i].checkStr).type,
|
|
|
type2: "bw",
|
|
|
- value1: JSON.parse(props.verifications[i].checkStr).down,
|
|
|
- value2: JSON.parse(props.verifications[i].checkStr).up,
|
|
|
+ value1: Number(JSON.parse(props.verifications[i].checkStr).down),
|
|
|
+ value2: Number(JSON.parse(props.verifications[i].checkStr).up),
|
|
|
hintShow: true,
|
|
|
hintText: `请输入${JSON.parse(props.verifications[i].checkStr).down}-${JSON.parse(props.verifications[i].checkStr).up}的数字`,
|
|
|
};
|
|
|
luckysheet.setDataVerification(
|
|
|
{ ...option },
|
|
|
- { range: props.verifications[i].position }
|
|
|
+ {
|
|
|
+ range: props.verifications[i].position,
|
|
|
+ }
|
|
|
);
|
|
|
}
|
|
|
}
|
|
@@ -256,14 +323,19 @@ onMounted(() => {
|
|
|
if (props.option.edit == false) {
|
|
|
resetOb.value.allowEdit = false;
|
|
|
}
|
|
|
+ resetOb.value.data[0].data = setCheckData(
|
|
|
+ resetOb.value.data[0].data,
|
|
|
+ resetOb.value.data[0].dataVerification
|
|
|
+ );
|
|
|
luckysheet.create(resetOb.value);
|
|
|
});
|
|
|
+
|
|
|
watch(
|
|
|
() => props.verifications,
|
|
|
() => {
|
|
|
nextTick(() => {
|
|
|
if (props.checkStatus == true && props.verifications.length > 0) {
|
|
|
- setVerification();
|
|
|
+ // setVerification();
|
|
|
}
|
|
|
});
|
|
|
},
|