|
@@ -38,26 +38,129 @@
|
|
|
:value="item.remark"
|
|
|
/>
|
|
|
</el-select>
|
|
|
- <div class="text" style="margin-top: 20px">
|
|
|
- 上限(3σ):{{ value ? JSON.parse(value).ucl : "-" }}
|
|
|
+ <!-- <div class="text" style="margin-top: 20px">-->
|
|
|
+ <!-- 上限(3σ):{{ value ? JSON.parse(value).ucl : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="text">-->
|
|
|
+ <!-- 上限子界限(2σ):{{ value ? JSON.parse(value).ucl_c : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="text">-->
|
|
|
+ <!-- 上限子界限(σ):{{ value ? JSON.parse(value).ucl_b : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="text">-->
|
|
|
+ <!-- 中心线:{{ value ? JSON.parse(value).cl : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="text">-->
|
|
|
+ <!-- 下限子界限(σ):{{ value ? JSON.parse(value).lcl_c : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="text">-->
|
|
|
+ <!-- 下限子界限(2σ):{{ value ? JSON.parse(value).lcl_b : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+ <!-- <div class="text">-->
|
|
|
+ <!-- 下限(3σ):{{ value ? JSON.parse(value).lcl : "-" }}-->
|
|
|
+ <!-- </div>-->
|
|
|
+
|
|
|
+ <div
|
|
|
+ class="edit-item"
|
|
|
+ @dblclick="startEdit('ucl')"
|
|
|
+ style="margin-top: 20px"
|
|
|
+ >
|
|
|
+ <span v-if="!editing.ucl" class="text"
|
|
|
+ >上限(3σ):{{ displayValue.ucl }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.ucl"
|
|
|
+ ref="uclInput"
|
|
|
+ @blur="saveEdit('ucl')"
|
|
|
+ @keyup.enter="saveEdit('ucl')"
|
|
|
+ @keyup.escape="cancelEdit1('ucl')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="text">
|
|
|
- 上限子界限(2σ):{{ value ? JSON.parse(value).ucl_c : "-" }}
|
|
|
+ <div class="edit-item" @dblclick="startEdit('ucl_c')">
|
|
|
+ <span v-if="!editing.ucl_c" class="text"
|
|
|
+ >上限子界限(2σ):{{ displayValue.ucl_c }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.ucl_c"
|
|
|
+ ref="ucl_cInput"
|
|
|
+ @blur="saveEdit('ucl_c')"
|
|
|
+ @keyup.enter="saveEdit('ucl_c')"
|
|
|
+ @keyup.escape="cancelEdit1('ucl_c')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="text">
|
|
|
- 上限子界限(σ):{{ value ? JSON.parse(value).ucl_b : "-" }}
|
|
|
+ <div class="edit-item" @dblclick="startEdit('ucl_b')">
|
|
|
+ <span v-if="!editing.ucl_b" class="text"
|
|
|
+ >上限子界限(σ):{{ displayValue.ucl_b }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.ucl_b"
|
|
|
+ ref="ucl_bInput"
|
|
|
+ @blur="saveEdit('ucl_b')"
|
|
|
+ @keyup.enter="saveEdit('ucl_b')"
|
|
|
+ @keyup.escape="cancelEdit1('ucl_b')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="text">
|
|
|
- 中心线:{{ value ? JSON.parse(value).cl : "-" }}
|
|
|
+ <div class="edit-item" @dblclick="startEdit('cl')">
|
|
|
+ <span v-if="!editing.cl" class="text"
|
|
|
+ >中心线:{{ displayValue.cl }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.cl"
|
|
|
+ ref="clInput"
|
|
|
+ @blur="saveEdit('cl')"
|
|
|
+ @keyup.enter="saveEdit('cl')"
|
|
|
+ @keyup.escape="cancelEdit1('cl')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="text">
|
|
|
- 下限子界限(σ):{{ value ? JSON.parse(value).lcl_c : "-" }}
|
|
|
+ <div class="edit-item" @dblclick="startEdit('lcl_c')">
|
|
|
+ <span v-if="!editing.lcl_c" class="text"
|
|
|
+ >下限子界限(σ):{{ displayValue.lcl_c }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.lcl_c"
|
|
|
+ ref="lcl_cInput"
|
|
|
+ @blur="saveEdit('lcl_c')"
|
|
|
+ @keyup.enter="saveEdit('lcl_c')"
|
|
|
+ @keyup.escape="cancelEdit1('lcl_c')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="text">
|
|
|
- 下限子界限(2σ):{{ value ? JSON.parse(value).lcl_b : "-" }}
|
|
|
+ <div class="edit-item" @dblclick="startEdit('lcl_b')">
|
|
|
+ <span v-if="!editing.lcl_b" class="text"
|
|
|
+ >下限子界限(2σ):{{ displayValue.lcl_b }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.lcl_b"
|
|
|
+ ref="lcl_bInput"
|
|
|
+ @blur="saveEdit('lcl_b')"
|
|
|
+ @keyup.enter="saveEdit('lcl_b')"
|
|
|
+ @keyup.escape="cancelEdit1('lcl_b')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div class="text">
|
|
|
- 下限(3σ):{{ value ? JSON.parse(value).lcl : "-" }}
|
|
|
+ <div class="edit-item" @dblclick="startEdit('lcl')">
|
|
|
+ <span v-if="!editing.lcl" class="text"
|
|
|
+ >下限(3σ):{{ displayValue.lcl }}</span
|
|
|
+ >
|
|
|
+ <input
|
|
|
+ v-else
|
|
|
+ v-model.number="editValue.lcl"
|
|
|
+ ref="lclInput"
|
|
|
+ @blur="saveEdit('lcl')"
|
|
|
+ @keyup.enter="saveEdit('lcl')"
|
|
|
+ @keyup.escape="cancelEdit1('lcl')"
|
|
|
+ class="edit-input"
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -175,6 +278,108 @@ import EWMA from "@/views/analysis/process/EWMA.vue";
|
|
|
import IMR from "@/views/analysis/process/I-MR.vue";
|
|
|
import U from "@/views/analysis/process/U.vue";
|
|
|
|
|
|
+import { getDictList, updateDict } from "@/api/dict";
|
|
|
+
|
|
|
+const operationList = ref();
|
|
|
+const initOpOptions = () => {
|
|
|
+ getDictList({ dictCode: "spc_operation" }).then(({ data }) => {
|
|
|
+ operationList.value = data;
|
|
|
+ opOptions.value = data;
|
|
|
+ });
|
|
|
+};
|
|
|
+initOpOptions();
|
|
|
+
|
|
|
+// 初始值
|
|
|
+let initialValue = ref({
|
|
|
+ ucl: 0,
|
|
|
+ ucl_c: 0,
|
|
|
+ ucl_b: 0,
|
|
|
+ cl: 0,
|
|
|
+ lcl_c: 0,
|
|
|
+ lcl_b: 0,
|
|
|
+ lcl: 0,
|
|
|
+});
|
|
|
+
|
|
|
+// 显示的值
|
|
|
+const displayValue = ref(reactive({ ...initialValue.value }));
|
|
|
+
|
|
|
+// 编辑状态
|
|
|
+const editing = reactive({
|
|
|
+ ucl: false,
|
|
|
+ ucl_c: false,
|
|
|
+ ucl_b: false,
|
|
|
+ cl: false,
|
|
|
+ lcl_c: false,
|
|
|
+ lcl_b: false,
|
|
|
+ lcl: false,
|
|
|
+});
|
|
|
+
|
|
|
+// 编辑时的临时值
|
|
|
+const editValue = reactive({ ...initialValue.value });
|
|
|
+
|
|
|
+// 输入框引用
|
|
|
+const uclInput = ref(null);
|
|
|
+const ucl_cInput = ref(null);
|
|
|
+const ucl_bInput = ref(null);
|
|
|
+const clInput = ref(null);
|
|
|
+const lcl_cInput = ref(null);
|
|
|
+const lcl_bInput = ref(null);
|
|
|
+const lclInput = ref(null);
|
|
|
+
|
|
|
+// 开始编辑
|
|
|
+const startEdit = (field) => {
|
|
|
+ editing[field] = true;
|
|
|
+ editValue[field] = displayValue.value[field];
|
|
|
+
|
|
|
+ nextTick(() => {
|
|
|
+ let inputRef = null;
|
|
|
+ switch (field) {
|
|
|
+ case "ucl":
|
|
|
+ inputRef = uclInput.value;
|
|
|
+ break;
|
|
|
+ case "ucl_c":
|
|
|
+ inputRef = ucl_cInput.value;
|
|
|
+ break;
|
|
|
+ case "ucl_b":
|
|
|
+ inputRef = ucl_bInput.value;
|
|
|
+ break;
|
|
|
+ case "cl":
|
|
|
+ inputRef = clInput.value;
|
|
|
+ break;
|
|
|
+ case "lcl_c":
|
|
|
+ inputRef = lcl_cInput.value;
|
|
|
+ break;
|
|
|
+ case "lcl_b":
|
|
|
+ inputRef = lcl_bInput.value;
|
|
|
+ break;
|
|
|
+ case "lcl":
|
|
|
+ inputRef = lclInput.value;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ inputRef?.focus();
|
|
|
+ inputRef?.select();
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+// 保存编辑
|
|
|
+const saveEdit = (field) => {
|
|
|
+ editing[field] = false;
|
|
|
+ displayValue.value[field] = editValue[field];
|
|
|
+ console.log(`保存${field}值:`, displayValue.value[field]);
|
|
|
+ operationList.value.forEach((v) => {
|
|
|
+ if (v.dictLabel === showLable.value) {
|
|
|
+ v.remark = JSON.stringify(displayValue.value);
|
|
|
+ updateDict(v);
|
|
|
+ value.value = JSON.stringify(displayValue.value);
|
|
|
+ }
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
+// 取消编辑
|
|
|
+const cancelEdit1 = (field) => {
|
|
|
+ editing[field] = false;
|
|
|
+};
|
|
|
+
|
|
|
const handleDataFromChildXbarR = async (data) => {
|
|
|
await nextTick();
|
|
|
xbarRRefMethod(data);
|
|
@@ -292,6 +497,7 @@ const xbarsListRef = ref("xbarsListRef");
|
|
|
const showLable = ref("调阻");
|
|
|
const changeSelect = () => {
|
|
|
setTimeout(() => {
|
|
|
+ displayValue.value = JSON.parse(value.value);
|
|
|
showLable.value = selectRef.value.currentPlaceholder;
|
|
|
opOptions.value.forEach((item) => {
|
|
|
if (item.dictLabel == showLable.value) {
|
|
@@ -640,6 +846,7 @@ onMounted(async () => {
|
|
|
});
|
|
|
value2.value = "Xbar-R";
|
|
|
xbarrListRef.value.init(lableValue.value);
|
|
|
+ displayValue.value = JSON.parse(value.value);
|
|
|
});
|
|
|
onBeforeUnmount(() => {
|
|
|
// window.removeEventListener("resize", setView);
|
|
@@ -652,6 +859,38 @@ onBeforeUnmount(() => {
|
|
|
margin-left: -18%;
|
|
|
}
|
|
|
}
|
|
|
+.ctext {
|
|
|
+ margin-bottom: 20px;
|
|
|
+}
|
|
|
+.double-edit-container {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.edit-item {
|
|
|
+ padding: 8px 0px;
|
|
|
+ border-radius: 4px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: background-color 0.2s;
|
|
|
+ font-size: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.edit-item:hover {
|
|
|
+ background-color: #f5f5f5;
|
|
|
+}
|
|
|
+
|
|
|
+.edit-input {
|
|
|
+ width: 100px;
|
|
|
+ padding: 4px 8px;
|
|
|
+ border: 1px solid #dcdfe6;
|
|
|
+ border-radius: 4px;
|
|
|
+ outline: none;
|
|
|
+}
|
|
|
+
|
|
|
+.edit-input:focus {
|
|
|
+ border-color: #409eff;
|
|
|
+}
|
|
|
|
|
|
.ellipsis-text {
|
|
|
white-space: nowrap; /* 禁止换行 */
|
|
@@ -672,7 +911,7 @@ onBeforeUnmount(() => {
|
|
|
background-color: white;
|
|
|
|
|
|
.infobox {
|
|
|
- width: 230px;
|
|
|
+ width: 250px;
|
|
|
|
|
|
.header {
|
|
|
//height: 120px;
|