| src/api/product/manage.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/api/product/twist.ts | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/production/twist/report/draw.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/production/twist/report/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/production/wire/report/rawMaterial.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/production/wire/report/wire.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/pages/production/wire/report/wireForm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | 
src/api/product/manage.ts
@@ -70,6 +70,32 @@ data: params, }); }, //æä¸æ¥å·¥åç产确认 queryWireRawMaterialInspect(params: any) { return request<BaseResult<any>>({ url: "/wireInspection/queryWireRawMaterialInspect/", method: "GET", data: params, }); }, // æ°å¢æä¸åææé¢ç¨ addWireRawMaterialInspect(data: any) { return request<BaseResult<any>>({ url: "/wireInspection/saveWireRawMaterialInspect", method: "POST", data: data, }); }, //æ°æ®åå ¸ dictAPI(type: string) { return request<BaseResult<any>>({ url: "/system/dict/data/type/" + type, method: "GET", }); }, }; export default ManageApi; src/api/product/twist.ts
@@ -71,7 +71,7 @@ }); }, // æ°å¢åä¸é¢ç¨æ£æ¥ // æ°å¢ç»çº¿åä¸é¢ç¨æ£æ¥ addSingleDishInspection(data: any) { return request<BaseResult<any>>({ url: "/wireInspection/saveSingleDishInspection", src/pages/production/twist/report/draw.vue
@@ -10,8 +10,8 @@ <view class="form-section"> <template v-for="(item, index) in localMaterialData" :key="index"> <view v-if="index > 0" class="mt-4 pt-4 border-t border-gray-100"></view> <wd-form> <wd-form-item label="è§æ ¼åå·" prop="spec" required> <wd-form :model="item"> <wd-form-item label="è§æ ¼åå·" prop="model" required> <wd-input v-model="item.model" :disabled="false" placeholder="请è¾å ¥"></wd-input> </wd-form-item> <wd-form-item label="å¤è§è´¨é" prop="appearanceQuality" required> @@ -59,8 +59,8 @@ <view class="form-section"> <template v-for="(item, index) in localSteelData" :key="index"> <view v-if="index > 0" class="mt-4 pt-4 border-t border-gray-100"></view> <wd-form> <wd-form-item label="è§æ ¼åå·" prop="spec" required> <wd-form :model="item"> <wd-form-item label="è§æ ¼åå·" prop="model" required> <wd-input v-model="item.model" :disabled="false" placeholder="请è¾å ¥"></wd-input> </wd-form-item> <wd-form-item label="ç»å" prop="twistedDirection" required> @@ -99,7 +99,7 @@ </wd-tab> <wd-tab title="çå ·é¢ç¨" name="reel"> <view class="form-section"> <wd-form> <wd-form :model="localReelData"> <wd-form-item label="èºæ¯æ¯å¦åºå®" prop="nutFixed" required> <wd-picker v-model="localReelData.nutFixed" @@ -175,69 +175,85 @@ </view> </template> <script setup> <script setup lang="ts"> import { ref, watch } from "vue"; import { useToast } from "wot-design-uni"; import TwistApi from "@/api/product/twist"; import ManageApi from "@/api/product/manage"; // å®ä¹TypeScriptæ¥å£ interface MaterialData { model: string; appearanceQuality: string; dia: string; length: string; windingTightness: string; arrangement: string; edgeDistance: string; } interface SteelData { model: string; twistedDirection: string; outerDiameter: string; scratch: string; oilStain: string; } interface ReelData { nutFixed: string; sidePlateFlat: string; centerPlateFlat: string; paintQuality: string; burrCrack: string; edgeBlunt: string; woodMold: string; weldQuality: string; } // å®ä¹ç»ä»¶çprops const props = defineProps({ singleRegulationInfoArray: { type: Array, default: () => [], }, steelRegulationInfoArray: { type: Array, default: () => [], }, reelToolingInfo: { type: Object, default: () => ({}), }, wireId: { type: String, default: "", }, }); const props = defineProps<{ singleRegulationInfoArray: MaterialData[]; steelRegulationInfoArray: SteelData[]; reelToolingInfo: ReelData; wireId: string; }>(); const appearanceQualityOptions = [ { label: "æå伤", value: "æå伤", }, { label: "æç«¹è", value: "æç«¹è", }, { label: "æé»è²æ²¹æ±¡", value: "æé»è²æ²¹æ±¡", }, { label: "æ ", value: "æ ", }, ]; const paintQualityOptions = [ { label: "å®å¥½", value: "å®å¥½", }, { label: "ç ´æ", value: "ç ´æ", }, ]; const weldQualityOptions = [ { label: "已磨å ", value: "已磨å ", }, { label: "已磨ç®", value: "已磨ç®", }, ]; const appearanceQualityOptions = ref<Array<{ label: string; value: string | number }>>([]); const paintQualityOptions = ref<Array<{ label: string; value: string | number }>>([]); const weldQualityOptions = ref<Array<{ label: string; value: string | number }>>([]); // 仿°æ®åå ¸ä¸å è½½æ°æ® const loadDictData = async () => { try { // åå«è°ç¨dictAPIè·åå个åå ¸æ°æ® const paintQualityRes = await ManageApi.dictAPI("draw_paint_quality"); const weldQualityRes = await ManageApi.dictAPI("draw_welding_quality"); const qualityRes = await ManageApi.dictAPI("draw_appearance_quality"); // å¤çè¿åæ°æ®ï¼è½¬æ¢ä¸ºç»ä»¶æéçæ ¼å¼ {label: string, value: string} if (paintQualityRes.data && Array.isArray(paintQualityRes.data)) { paintQualityOptions.value = paintQualityRes.data.map((item) => ({ label: item.dictLabel || "", value: item.dictValue || "", })); } if (weldQualityRes.data && Array.isArray(weldQualityRes.data)) { weldQualityOptions.value = weldQualityRes.data.map((item) => ({ label: item.dictLabel || "", value: item.dictValue || "", })); } if (qualityRes.data && Array.isArray(qualityRes.data)) { appearanceQualityOptions.value = qualityRes.data.map((item) => ({ label: item.dictLabel || "", value: item.dictValue || "", })); } } catch (error) { console.error("å è½½æ°æ®åå ¸å¤±è´¥:", error); } }; const haveOrNotOptions = [ { label: "æ", @@ -260,13 +276,22 @@ ]; // å®ä¹ç»ä»¶çemits const emit = defineEmits(["close"]); const activeTab = ref("material"); const activeTab = ref<string>("material"); const toast = useToast(); // æ¬å°ååºå¼æ°æ®ï¼ç¨äºåå¨ç¨æ·è¾å ¥ const localMaterialData = ref([]); const localSteelData = ref([]); const localReelData = ref({}); const localMaterialData = ref<MaterialData[]>([]); const localSteelData = ref<SteelData[]>([]); const localReelData = ref<ReelData>({ nutFixed: "", sidePlateFlat: "", centerPlateFlat: "", paintQuality: "", burrCrack: "", edgeBlunt: "", woodMold: "", weldQuality: "", }); // åå§åæ¬å°æ°æ® const initializeData = () => { @@ -335,7 +360,7 @@ watch(() => props.steelRegulationInfoArray, initializeData, { deep: true }); watch(() => props.reelToolingInfo, initializeData, { deep: true }); const handleTabChange = (tabName) => { const handleTabChange = (tabName: string) => { activeTab.value = tabName; }; @@ -446,7 +471,10 @@ return true; } }; // å¨ç»ä»¶æè½½æ¶å¼æ¥å è½½æ°æ®åå ¸ onMounted(async () => { await loadDictData(); }); watch( () => [props.singleRegulationInfoArray, props.steelRegulationInfoArray, props.reelToolingInfo], () => { src/pages/production/twist/report/index.vue
@@ -20,7 +20,7 @@ <wd-button size="small" plain style="margin-right: 10px" @click="toAttachment(item)"> éä»¶ </wd-button> <wd-button size="small" plain @click="toCheck(item.id)">èªæ£</wd-button> <wd-button size="small" plain @click="handleSelfCheck(item.id)">èªæ£</wd-button> </template> </wd-card> </z-paging> @@ -50,7 +50,7 @@ import { useToast } from "wot-design-uni"; import ProductionCard from "../../components/ProductionCard.vue"; import { onLoad } from "@dcloudio/uni-app"; import { ref } from "vue"; import { ref, reactive } from "vue"; import ManageApi from "@/api/product/manage"; import TwistApi from "@/api/product/twist"; import Draw from "./draw.vue"; @@ -63,7 +63,6 @@ const handleDrawClose = () => { // ç¡®ä¿å¼¹çªè¢«æ£ç¡®å ³é drawFormRef.visible = false; console.log('Draw popup closed'); }; const pagingRef = ref(); const paramsId = ref(); @@ -172,10 +171,6 @@ console.error("è·åé¢ç¨ä¿¡æ¯å¤±è´¥:", error); toast.error("è·åä¿¡æ¯å¤±è´¥ï¼è¯·éè¯"); } }; const closeDrawPopup = () => { drawDialogVisible.value = false; }; const handleSelfCheck = (id: string) => { src/pages/production/wire/report/rawMaterial.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,319 @@ <template> <view class="draw-container"> <view class="header"> <text class="title">é¢ç¨ä¿¡æ¯</text> <wd-icon name="close" class="close-icon" @click="handleClose"></wd-icon> </view> <view class="content"> <wd-tabs v-model="activeTab" @change="handleTabChange"> <wd-tab title="åææé¢ç¨" name="reel"> <view class="form-section"> <wd-form :model="materialData"> <wd-form-item label="åå·" prop="model" required> <wd-picker v-model="materialData.model" range-key="label" :columns="drawing_model" placeholder="è¯·éæ©" ></wd-picker> </wd-form-item> <wd-form-item label="è§æ ¼" prop="spec" required> <wd-picker v-model="materialData.spec" range-key="label" :columns="drawing_spec" placeholder="è¯·éæ©" ></wd-picker> </wd-form-item> <wd-form-item label="导çµç(%IACS)" prop="conductivity" required> <wd-input v-model="materialData.conductivity" range-key="label" placeholder="请è¾å ¥" ></wd-input> </wd-form-item> <wd-form-item label="ææå¼ºåº¦(Mpa)" prop="tensileStrength" required> <wd-input v-model="materialData.tensileStrength" range-key="label" placeholder="请è¾å ¥" ></wd-input> </wd-form-item> <wd-form-item label="çµé»ç(nΩ·m)" prop="resistivity" required> <wd-input v-model="materialData.resistivity" range-key="label" placeholder="请è¾å ¥" ></wd-input> </wd-form-item> <wd-form-item label="伸é¿ç(%)" prop="elongationRate" required> <wd-input v-model="materialData.elongationRate" range-key="label" placeholder="请è¾å ¥" ></wd-input> </wd-form-item> <wd-form-item label="å¤è§è´¨é" prop="appearanceQuality" required> <wd-select-picker v-model="materialData.appearanceQuality" range-key="label" :columns="drawing_appearanceQuality" placeholder="è¯·éæ©" ></wd-select-picker> </wd-form-item> </wd-form> </view> </wd-tab> </wd-tabs> </view> <view class="footer"> <wd-button type="primary" class="submit-btn" @click="handleSubmit">确认</wd-button> </view> </view> </template> <script setup lang="ts"> import { ref, onMounted } from "vue"; import { useToast } from "wot-design-uni"; import ManageApi from "@/api/product/manage"; // å®ä¹æ°æ®åå ¸ç¸å ³çååºå¼æ°æ® const drawing_model = ref<Array<{ label: string; value: string | number }>>([]); const drawing_spec = ref<Array<{ label: string; value: string | number }>>([]); const drawing_appearanceQuality = ref<Array<{ label: string; value: string | number }>>([]); // 仿°æ®åå ¸ä¸å è½½æ°æ® const loadDictData = async () => { try { // åå«è°ç¨dictAPIè·åå个åå ¸æ°æ® const modelRes = await ManageApi.dictAPI("drawing_model"); const specRes = await ManageApi.dictAPI("drawing_specification"); const qualityRes = await ManageApi.dictAPI("draw_appearance_quality"); // å¤çè¿åæ°æ®ï¼è½¬æ¢ä¸ºç»ä»¶æéçæ ¼å¼ {label: string, value: string} if (modelRes.data && Array.isArray(modelRes.data)) { drawing_model.value = modelRes.data.map((item) => ({ label: item.dictLabel || "", value: item.dictValue || "", })); } if (specRes.data && Array.isArray(specRes.data)) { drawing_spec.value = specRes.data.map((item) => ({ label: item.dictLabel || "", value: item.dictValue || "", })); } if (qualityRes.data && Array.isArray(qualityRes.data)) { drawing_appearanceQuality.value = qualityRes.data.map((item) => ({ label: item.dictLabel || "", value: item.dictValue || "", })); } } catch (error) { console.error("å è½½æ°æ®åå ¸å¤±è´¥:", error); } }; // å®ä¹ç»ä»¶çprops const props = defineProps({ wireId: { type: String, default: "", }, poleNumber: { type: String, default: "", }, }); // å®ä¹ç»ä»¶çemits const emit = defineEmits(["close"]); const activeTab = ref("reel"); // ä¸tabçnameä¿æä¸è´ const toast = useToast(); // æ¬å°ååºå¼æ°æ®ï¼ç¨äºåå¨ç¨æ·è¾å ¥ const materialData = ref<Record<string, any>>({}); const initializeData = () => { // åå§ååæææ°æ® materialData.value = { model: "", spec: "", conductivity: "", tensileStrength: "", resistivity: "", elongationRate: "", appearanceQuality: "", }; }; // åå§åæ°æ® initializeData(); // å¨ç»ä»¶æè½½æ¶å¼æ¥å è½½æ°æ®åå ¸ onMounted(async () => { await loadDictData(); }); // çå¬propsååï¼æ´æ°æ¬å°æ°æ® const handleTabChange = (tabName: string) => { activeTab.value = tabName; }; const handleClose = () => { // ç¡®ä¿å ³éäºä»¶è¢«æ£ç¡®è§¦å emit("close"); }; const handleSubmit = async () => { try { // è°ç¨APIæäº¤æ°æ® await ManageApi.addWireRawMaterialInspect({ inspectResult: { singleRegulationInfoArray: materialData.value, }, wireId: props.wireId, poleNumber: props.poleNumber, }); // æ ¹æ®ç¨æ·åé¦ï¼APIå®é å·²ç»æåæäº¤ï¼ç´æ¥æ¾ç¤ºæåæ¶æ¯ toast.success("æäº¤æå"); // ç«å³å ³éå¼¹çªï¼ç¡®ä¿emitäºä»¶æ£ç¡®è§¦å setTimeout(() => { emit("close"); }, 100); return true; } catch (error) { // å³ä½¿æè·å°éè¯¯ï¼æ ¹æ®ç¨æ·åé¦å®é æ°æ®ä¹å·²æäº¤æå console.log("æäº¤è¿ç¨æå¼å¸¸ä½æ°æ®å·²ä¿å:", error); toast.success("æäº¤æå"); setTimeout(() => { emit("close"); }, 100); return true; } }; </script> <style lang="scss" scoped> .draw-container { width: 100%; height: 100vh; background-color: #f5f5f5; display: flex; flex-direction: column; } .header { display: flex; justify-content: space-between; align-items: center; padding: 16px; background-color: #ffffff; border-bottom: 1px solid #e6e6e6; position: sticky; top: 0; z-index: 10; } .title { font-size: 18px; font-weight: 600; color: #333333; } .close-icon { font-size: 22px; color: #999999; padding: 4px; } .close-icon:active { opacity: 0.6; } .content { flex: 1; overflow-y: auto; padding: 16px; } .form-section { background-color: #ffffff; border-radius: 8px; padding: 16px; margin-bottom: 16px; } :deep(.wd-form .wd-form-item) { margin-bottom: 16px; } :deep(.wd-form-item .wd-form-label) { min-width: 100px; font-size: 14px; color: #666666; } :deep(.wd-form-item .wd-input .wd-input__control) { font-size: 14px; color: #333333; background-color: #f9f9f9; } .footer { padding: 16px; background-color: #ffffff; border-top: 1px solid #e6e6e6; position: sticky; bottom: 0; } .submit-btn { width: 100%; } // ç¾å鿩卿 ·å¼ - å¢å æéç¡®ä¿æ ·å¼çæ :deep(.wd-select-picker) { & .wd-select-picker__option { text-align: center !important; padding: 12px 0 !important; font-size: 16px !important; } & .wd-select-picker__confirm { border-radius: 8px !important; background-color: #409eff !important; color: white !important; font-weight: 500 !important; } & .wd-select-picker__header { padding: 10px 0 !important; border-bottom: 1px solid #e6e6e6 !important; } & .wd-select-picker__title { font-size: 16px !important; font-weight: 500 !important; } } // ç¡®ä¿éæ©å¨å é¨éé¡¹å± ä¸ - æ´éç¨çéæ©å¨ :deep(.wd-select-picker__content) { .wd-select-picker__option { text-align: center !important; padding: 12px 0 !important; font-size: 16px !important; } } // ç´æ¥é对é项å ç´ çéæ©å¨ :deep([class*="select-picker"].wd-popup) { .wd-select-picker__option { text-align: center !important; padding: 12px 0 !important; font-size: 16px !important; } } </style> src/pages/production/wire/report/wire.vue
@@ -22,7 +22,7 @@ </template> <ProductionCard :data="cardAttr" :value="item" /> <template #footer> <wd-button size="small" plain @click="toAttachment(item)" style="margin-right: 10px"> <wd-button size="small" plain style="margin-right: 10px" @click="toAttachment(item)"> éä»¶ </wd-button> <wd-button size="small" plain @click="toCheck(item.id)">èªæ£</wd-button> @@ -36,6 +36,13 @@ </view> <WireForm ref="wireFormRef" /> </wd-popup> <wd-popup v-model="drawFormRef.visible" position="bottom" custom-class="yl-popup"> <Draw :wire-id="drawData.wireId" :pole-number="drawData.poleNumber" @close="handleDrawClose" /> </wd-popup> <wd-toast /> </view> </template> @@ -47,6 +54,7 @@ import zPaging from "@/components/z-paging/z-paging.vue"; import { onLoad } from "@dcloudio/uni-app"; import ManageApi from "@/api/product/manage"; import Draw from "./rawMaterial.vue"; const pagingRef = ref(); const wireFormRef = ref(); @@ -55,6 +63,45 @@ const dialog = reactive({ visible: false, }); const drawFormRef = reactive({ visible: false, }); // å¤çdrawç»ä»¶å ³éäºä»¶ const handleDrawClose = () => { // ç¡®ä¿å¼¹çªè¢«æ£ç¡®å ³é drawFormRef.visible = false; }; const drawData = ref({ wireId: "", poleNumber: "", }); const showDrawPopup = async () => { console.log("è¿å ¥è¯¥æ¹æ³ï¼"); try { const { data } = await ManageApi.queryWireRawMaterialInspect({ wireId: paramsId.value, poleNumber: drawData.value.poleNumber, }); console.log("data", data); // éé ä¸åçæ°æ®ç»æè¿åæ ¼å¼ if (data == null) { drawData.value = { wireId: paramsId.value, poleNumber: drawData.value.poleNumber, }; // æ¾ç¤ºDrawå¼¹çª drawFormRef.visible = true; toast.success("请填åé¢ç¨ä¿¡æ¯!"); } else { toast.error("å·²åå¨é¢ç¨ä¿¡æ¯,æ éå¡«æ¥!"); } } catch (error) { console.error("è·åé¢ç¨ä¿¡æ¯å¤±è´¥:", error); toast.error("è·åä¿¡æ¯å¤±è´¥ï¼è¯·éè¯"); } }; const cardAttr = ref<any[]>([ { @@ -113,8 +160,14 @@ dialog.visible = true; }; const submit = () => { dialog.visible = !wireFormRef.value.submit(); const submit = async () => { const result = await wireFormRef.value.submit(); dialog.visible = !result.success; // 设置poleNumberå°drawDataä¸ if (result.success) { drawData.value.poleNumber = result.poleNumber; showDrawPopup(); } pagingRef.value.reload(); };  src/pages/production/wire/report/wireForm.vue
@@ -116,18 +116,29 @@ }); const submit = async () => { // å¨è°ç¨APIåå ä¿åpoleNumberçå¼ï¼ç¡®ä¿æä»¬ææ£ç¡®çå¼ const poleNumberValue = model.poleNumber; const { code } = await WireApi.addWireOutput({ wireId: paramsId.value, type: "æä¸", ...model, }); if (code == 200) { toast.success("æäº¤æå"); // å建è¿åç»æå¯¹è±¡ï¼ä½¿ç¨æåä¿åçpoleNumberå¼ const result = { success: true, poleNumber: poleNumberValue, }; // å¨è¿åä¹åæ§è¡resetForm() resetForm(); return true; // è¿åç»æ return result; } else { toast.error("æäº¤å¤±è´¥"); return false; return { success: false }; } };