| | |
| | | :lazy="true" |
| | | :width="isMobile ? '95%' : '70%'" |
| | | :padding="24" |
| | | title="åºåçç¹æä½" |
| | | title="åºåçç¹æä½ï¼æ¡ç ççä¸éè¦è¿è¡çç¹å®ææä½ï¼" |
| | | class="custom-vol-box" |
| | | > |
| | | <div class="stock-take-container"> |
| | |
| | | </el-tag> |
| | | </div> |
| | | |
| | | <!-- æ ¸å¿è¾å
¥è¡¨å --> |
| | | <!-- æ ¸å¿è¾å
¥è¡¨åï¼ç§»é¤æææ ¡éªè§å --> |
| | | <el-form |
| | | :model="formData" |
| | | ref="formRef" |
| | |
| | | class="stock-take-form" |
| | | @submit.prevent |
| | | > |
| | | <!-- æç®±å·è¾å
¥æ¡ --> |
| | | <el-form-item |
| | | label="æç®±å·ï¼" |
| | | name="boxNo" |
| | | :rules="[ |
| | | { |
| | | required: true, |
| | | message: 'è¯·æ«ææè¾å
¥æç®±å·', |
| | | trigger: 'blur', |
| | | }, |
| | | { validator: validateBoxNo, trigger: 'blur' }, |
| | | ]" |
| | | class="form-item" |
| | | > |
| | | <!-- æç®±å·è¾å
¥æ¡ï¼ç§»é¤æ ¡éªè§å --> |
| | | <el-form-item label="æç®±å·ï¼" name="boxNo" class="form-item"> |
| | | <el-input |
| | | ref="boxNoInputRef" |
| | | v-model="formData.boxNo" |
| | |
| | | type="primary" |
| | | size="small" |
| | | @click="handleBoxNoScan" |
| | | :disabled="!formData.boxNo.trim() || loading" |
| | | :disabled="loading" |
| | | class="input-btn" |
| | | ></el-button> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <!-- æ¡ç è¾å
¥æ¡ --> |
| | | <el-form-item |
| | | label="çç¹æ¡ç ï¼" |
| | | name="barcode" |
| | | :rules="[ |
| | | { required: true, message: 'è¯·æ«ææè¾å
¥æ¡ç ', trigger: 'blur' }, |
| | | { validator: validateBarcode, trigger: 'blur' }, |
| | | ]" |
| | | class="form-item" |
| | | > |
| | | <!-- ç«å°éæ©ä¸ææ¡ï¼ç§»é¤æ ¡éªè§å --> |
| | | <el-form-item label="ååºç«å°ï¼" name="station" class="form-item"> |
| | | <el-select |
| | | v-model="selectedStation" |
| | | placeholder="è¯·éæ©ååºç«å°" |
| | | :disabled="loading" |
| | | class="custom-input" |
| | | :class="{ 'has-value': selectedStation }" |
| | | > |
| | | <el-option |
| | | v-for="item in stations" |
| | | :key="item.key || item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | <!-- æ¡ç è¾å
¥æ¡ï¼ç§»é¤æ ¡éªè§å --> |
| | | <el-form-item label="çç¹æ¡ç ï¼" name="barcode" class="form-item"> |
| | | <el-input |
| | | ref="barcodeInputRef" |
| | | v-model="formData.barcode" |
| | | placeholder="è¯·ä½¿ç¨æ«ç æªæ«ææ¡ç ï¼ææå¨è¾å
¥" |
| | | clearable |
| | | @keydown.enter="debouncedHandleBarcodeScan" |
| | | :disabled="!formData.boxNo.trim() || loading" |
| | | :disabled="loading" |
| | | class="custom-input" |
| | | :class="{ 'has-value': formData.barcode.trim() }" |
| | | > |
| | |
| | | type="primary" |
| | | size="small" |
| | | @click="handleBarcodeScan" |
| | | :disabled=" |
| | | !formData.boxNo.trim() || |
| | | !formData.barcode.trim() || |
| | | loading |
| | | " |
| | | :disabled="loading" |
| | | class="input-btn" |
| | | ></el-button> |
| | | </template> |
| | |
| | | </el-form-item> |
| | | |
| | | <!-- åºåæ°éæ¡ï¼åªè¯»ï¼ --> |
| | | <el-form-item |
| | | label="åºåæ°éï¼" |
| | | name="stockQuantity" |
| | | class="form-item" |
| | | > |
| | | <el-form-item label="åºåæ°éï¼" name="stockQuantity" class="form-item"> |
| | | <el-input |
| | | v-model="formData.stockQuantity" |
| | | placeholder="æ«ææ¡ç åèªå¨å¡«å
" |
| | |
| | | ></el-input> |
| | | </el-form-item> |
| | | |
| | | <!-- å®é
çç¹æ°é --> |
| | | <el-form-item |
| | | label="å®é
çç¹æ°éï¼" |
| | | name="actualQuantity" |
| | | :rules="[ |
| | | { |
| | | required: true, |
| | | message: '请è¾å
¥å®é
çç¹æ°é', |
| | | trigger: 'blur', |
| | | }, |
| | | { type: 'number', message: '请è¾å
¥ææçæ°å', trigger: 'blur' }, |
| | | { validator: validateActualQuantity, trigger: 'blur' }, |
| | | ]" |
| | | class="form-item" |
| | | > |
| | | <!-- å®é
çç¹æ°éï¼åªè¯»ï¼é»è®¤0 --> |
| | | <el-form-item label="å®é
çç¹æ°éï¼" name="actualQuantity" class="form-item"> |
| | | <el-input |
| | | v-model.number="formData.actualQuantity" |
| | | placeholder="请è¾å
¥å®é
çç¹æ°éï¼å¤§äº0ï¼" |
| | | type="number" |
| | | clearable |
| | | @keydown.enter="handleStockTakeComplete" |
| | | :disabled="!formData.stockQuantity || loading" |
| | | class="custom-input" |
| | | :class="{ 'has-value': formData.actualQuantity }" |
| | | v-model="formData.actualQuantity" |
| | | placeholder="é»è®¤å¼ä¸º0" |
| | | readonly |
| | | class="custom-input custom-readonly-input" |
| | | :class="{ 'has-value': formData.actualQuantity !== '' }" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | <!-- æä½æé®åºå --> |
| | | <!-- æä½æé®åºåï¼ç®åç¦ç¨é»è¾ --> |
| | | <div class="action-buttons"> |
| | | <el-button |
| | | type="info" |
| | | size="small" |
| | | @click="handleBoxReturn" |
| | | :disabled="!formData.boxNo.trim() || loading" |
| | | :disabled="loading" |
| | | class="return-btn" |
| | | > |
| | | <Return /> æç®±ååº |
| | |
| | | type="primary" |
| | | size="small" |
| | | @click="handleStockTakeComplete" |
| | | :disabled=" |
| | | loading || |
| | | !formData.boxNo.trim() || |
| | | !formData.barcode.trim() || |
| | | !formData.stockQuantity || |
| | | !formData.actualQuantity |
| | | " |
| | | :disabled="loading" |
| | | class="complete-btn" |
| | | > |
| | | <Check /> çç¹å®æ |
| | |
| | | |
| | | import VolBox from "@/components/basic/VolBox.vue"; |
| | | import http from "@/api/http"; |
| | | import { stationManager, STATION_STORAGE_KEY } from "@/../src/uitils/stationManager"; |
| | | |
| | | // ååºå¼åé - åæ®å· |
| | | const orderNo = ref(""); |
| | |
| | | const formData = reactive({ |
| | | boxNo: "", // æç®±å· |
| | | barcode: "", // çç¹æ¡ç |
| | | stockQuantity: "", // åºåæ°éï¼åªè¯»ï¼ |
| | | actualQuantity: "", // å®é
çç¹æ°é |
| | | stockQuantity: "", // åºåæ°é |
| | | actualQuantity: 0, // å®é
çç¹æ°éé»è®¤0 |
| | | }); |
| | | const loading = ref(false); |
| | | const formRef = ref(null); |
| | | |
| | | // ç«å°ç¸å
³ååºå¼æ°æ® |
| | | const stations = ref([ |
| | | { label: "ç«å°2", value: "2-1" }, |
| | | { label: "ç«å°3", value: "3-1" }, |
| | | ]); |
| | | const selectedStation = ref(stationManager.getStation() || ""); |
| | | |
| | | // 模æ¿å¼ç¨ |
| | | const boxNoInputRef = ref(null); |
| | |
| | | nextTick(() => { |
| | | boxNoInputRef.value?.focus(); |
| | | }); |
| | | // çå¬çªå£å¤§å°åå |
| | | window.addEventListener("resize", () => {}); |
| | | }); |
| | | |
| | | // çå¬æç®±å·ååï¼æ¸
空åç»ç¸å
³å段 |
| | | // çå¬æç®±å·ååï¼æ¸
空åç»ç¸å
³å段ï¼ä»
ä¿çåºç¡æ¸
空é»è¾ï¼ |
| | | watch( |
| | | () => formData.boxNo, |
| | | (newVal) => { |
| | | if (!newVal.trim()) { |
| | | formData.barcode = ""; |
| | | formData.stockQuantity = ""; |
| | | formData.actualQuantity = ""; |
| | | formData.actualQuantity = 0; |
| | | selectedStation.value = stationManager.getStation() || ""; |
| | | orderNo.value = ""; |
| | | } |
| | | }, |
| | | { immediate: true } |
| | |
| | | }; |
| | | }; |
| | | |
| | | // æå¼å¼¹çªå¹¶æ¥æ¶åæ®å· |
| | | const open = (receiptNo) => { |
| | | // æå¼å¼¹çª |
| | | const open = () => { |
| | | showStockTakeBox.value = true; |
| | | orderNo.value = receiptNo; |
| | | // é置表å |
| | | formData.boxNo = ""; |
| | | formData.barcode = ""; |
| | | formData.stockQuantity = ""; |
| | | formData.actualQuantity = ""; |
| | | formData.actualQuantity = 0; |
| | | selectedStation.value = stationManager.getStation() || ""; |
| | | orderNo.value = ""; |
| | | nextTick(() => { |
| | | boxNoInputRef.value?.focus(); |
| | | }); |
| | |
| | | orderNo.value = ""; |
| | | }; |
| | | |
| | | // æç®±å·éªè¯ï¼ä¼åï¼æå¼æ¶ä»
éªè¯é¿åº¦ï¼æ 弿¶è§¦åå¿
å¡«ï¼ |
| | | const validateBoxNo = (rule, value, callback) => { |
| | | // æå¼æ¶éªè¯é¿åº¦ |
| | | if (value && value.trim().length < 3) { |
| | | callback(new Error("æç®±å·é¿åº¦ä¸è½å°äº3ä½")); |
| | | } |
| | | // æ 弿¶ç±requiredè§åå¤çï¼è¿éä¸éå¤æç¤º |
| | | else { |
| | | callback(); |
| | | } |
| | | }; |
| | | |
| | | // æ¡ç éªè¯ï¼ä¼åï¼æå¼æ¶ä»
éªè¯é¿åº¦ï¼ |
| | | const validateBarcode = (rule, value, callback) => { |
| | | if (value && value.trim().length < 6) { |
| | | callback(new Error("æ¡ç é¿åº¦ä¸è½å°äº6ä½")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | |
| | | // å®é
çç¹æ°ééªè¯ï¼ä¼åï¼æå¼æ¶éªè¯åæ³æ§ï¼ |
| | | const validateActualQuantity = (rule, value, callback) => { |
| | | if (value === null || value === undefined) { |
| | | callback(new Error("请è¾å
¥å®é
çç¹æ°é")); |
| | | } else if (value <= 0) { |
| | | callback(new Error("å®é
çç¹æ°éå¿
须大äº0")); |
| | | } else if (!Number.isInteger(value)) { |
| | | callback(new Error("å®é
çç¹æ°éå¿
é¡»æ¯æ´æ°")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | |
| | | // æç®±å·å¤±ç¦å¤ç |
| | | const handleBoxNoBlur = () => { |
| | | if (formData.boxNo.trim() && boxNoInputRef.value?.input) { |
| | |
| | | } |
| | | }; |
| | | |
| | | // æç®±å·æ«æéªè¯ï¼å端æ¥å£ï¼ |
| | | const validateBoxNoApi = async (boxNo) => { |
| | | // æç®±å·æ«æå¤çï¼ç§»é¤åç«¯æ ¡éªï¼ç´æ¥è°ç¨æ¥å£ |
| | | const handleBoxNoScan = async () => { |
| | | const boxNo = formData.boxNo.trim(); |
| | | if (!boxNo) { |
| | | ElMessage.warning("请è¾å
¥æç®±å·"); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | loading.value = true; |
| | | // ç´æ¥è°ç¨æ¥å£ï¼ä¸ååç«¯æ ¡éª |
| | | const res = await http.post( |
| | | `/api/TakeStockOrder/ValidateBoxNo?orderNo=${encodeURIComponent( |
| | | orderNo.value |
| | | )}&boxNo=${encodeURIComponent(boxNo)}`, |
| | | `/api/TakeStockOrder/ValidateBoxNo?orderNo=${encodeURIComponent(orderNo.value)}&boxNo=${encodeURIComponent(boxNo)}`, |
| | | "éªè¯æç®±å·ä¸..." |
| | | ); |
| | | |
| | | if (!res.status) { |
| | | throw new Error(res.message || "æç®±å·éªè¯å¤±è´¥"); |
| | | } |
| | | return res.data; |
| | | } catch (error) { |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | // æç®±å·æ«æå¤ç |
| | | const handleBoxNoScan = async () => { |
| | | if (!formRef.value) return; |
| | | // æå¨è§¦åéªè¯ï¼ä»
éªè¯å½ååæ®µï¼ |
| | | const valid = await formRef.value.validateField("boxNo"); |
| | | if (valid !== true) return; |
| | | |
| | | const boxNo = formData.boxNo.trim(); |
| | | if (!boxNo) return; |
| | | |
| | | try { |
| | | loading.value = true; |
| | | await validateBoxNoApi(boxNo); |
| | | ElMessage.success(`æç®±å· ${boxNo} éªè¯éè¿`); |
| | | if (res.data?.takeStockOrder) { |
| | | orderNo.value = res.data.takeStockOrder; |
| | | } |
| | | ElMessage.success(`æç®±å· ${boxNo} éªè¯éè¿ï¼åæ®å·ï¼${orderNo.value}`); |
| | | nextTick(() => { |
| | | barcodeInputRef.value?.focus(); |
| | | }); |
| | |
| | | } |
| | | }; |
| | | |
| | | // æ¡ç æ«æéªè¯ï¼å端æ¥å£ï¼ |
| | | const validateBarcodeApi = async (boxNo, barcode) => { |
| | | // æ¡ç æ«æå¤çï¼ç§»é¤åç«¯æ ¡éªï¼ç´æ¥è°ç¨æ¥å£ |
| | | const handleBarcodeScan = async () => { |
| | | const boxNo = formData.boxNo.trim(); |
| | | const barcode = formData.barcode.trim(); |
| | | if (!boxNo || !barcode) { |
| | | ElMessage.warning("请è¾å
¥æç®±å·åæ¡ç "); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | loading.value = true; |
| | | // ç´æ¥è°ç¨æ¥å£ï¼ä¸ååç«¯æ ¡éª |
| | | const res = await http.post( |
| | | `/api/TakeStockOrder/ValidateBarcode?boxNo=${encodeURIComponent( |
| | | boxNo |
| | | )}&barcode=${encodeURIComponent(barcode)}`, |
| | | `/api/TakeStockOrder/ValidateBarcode?boxNo=${encodeURIComponent(boxNo)}&barcode=${encodeURIComponent(barcode)}`, |
| | | "éªè¯æ¡ç ä¸..." |
| | | ); |
| | | |
| | |
| | | throw new Error(res.message || "æ¡ç éªè¯å¤±è´¥"); |
| | | } |
| | | |
| | | if ( |
| | | res.data?.stockQuantity === undefined || |
| | | res.data?.stockQuantity === null |
| | | ) { |
| | | throw new Error("æªæ¥è¯¢å°è¯¥æ¡ç çåºåæ°é"); |
| | | if (res.data?.stockQuantity !== undefined && res.data?.stockQuantity !== null) { |
| | | formData.stockQuantity = res.data.stockQuantity; |
| | | } |
| | | |
| | | return res.data; |
| | | } catch (error) { |
| | | throw error; |
| | | } |
| | | }; |
| | | |
| | | // æ¡ç æ«æå¤ç |
| | | const handleBarcodeScan = async () => { |
| | | if (!formRef.value) return; |
| | | const valid = await formRef.value.validateField("barcode"); |
| | | if (valid !== true) return; |
| | | |
| | | const boxNo = formData.boxNo.trim(); |
| | | const barcode = formData.barcode.trim(); |
| | | if (!boxNo || !barcode) return; |
| | | |
| | | try { |
| | | loading.value = true; |
| | | const result = await validateBarcodeApi(boxNo, barcode); |
| | | formData.stockQuantity = result.stockQuantity; |
| | | ElMessage.success( |
| | | `æ¡ç ${barcode} éªè¯éè¿ï¼åºåæ°éï¼${result.stockQuantity}` |
| | | ); |
| | | ElMessage.success(`æ¡ç ${barcode} éªè¯éè¿ï¼åºåæ°éï¼${formData.stockQuantity}`); |
| | | nextTick(() => { |
| | | const actualQuantityInput = document.querySelector( |
| | | ".form-item:last-child .el-input__inner" |
| | | ); |
| | | actualQuantityInput?.focus(); |
| | | const actualQuantityInput = document.querySelector(".form-item:last-child .el-input__inner"); |
| | | actualQuantityInput?.blur(); |
| | | }); |
| | | } catch (error) { |
| | | ElMessage.error(error.message); |
| | |
| | | } |
| | | }; |
| | | |
| | | // çç¹å®ææäº¤ |
| | | // çç¹å®ææäº¤ï¼å®å
¨ç§»é¤åç«¯æ ¡éªï¼ç´æ¥ä¼ å¼ç»å端 |
| | | const handleStockTakeComplete = async () => { |
| | | if (!formRef.value) return; |
| | | // å
¨è¡¨åéªè¯ |
| | | const valid = await formRef.value.validate(); |
| | | if (!valid) return; |
| | | // ä»
åæåºç¡ç空æç¤ºï¼å¯éï¼ä¹å¯ä»¥å»æï¼ |
| | | if (!formData.boxNo.trim()) { |
| | | ElMessage.warning("请è¾å
¥æç®±å·"); |
| | | return; |
| | | } |
| | | if (!formData.barcode.trim()) { |
| | | ElMessage.warning("请è¾å
¥æ¡ç "); |
| | | return; |
| | | } |
| | | |
| | | // ç´æ¥è·åææå¼ï¼ä¸å任使 ¡éª |
| | | const { boxNo, barcode, actualQuantity, stockQuantity } = formData; |
| | | const receiptNo = orderNo.value; |
| | | |
| | | try { |
| | | loading.value = true; |
| | | |
| | | // ç´æ¥ä¼ å¼ç»å端ï¼ä¸åä»»ä½åç«¯æ ¡éª |
| | | const res = await http.post( |
| | | "/api/TakeStockOrder/CompleteStockTake", |
| | | { |
| | | orderNo: receiptNo, |
| | | boxNo, |
| | | barcode, |
| | | actualQuantity, |
| | | actualQuantity, // åºå®ä¼ 0 |
| | | stockQuantity, |
| | | }, |
| | | { |
| | |
| | | ElMessage.success("çç¹å®æï¼æäº¤æåï¼"); |
| | | formData.barcode = ""; |
| | | formData.stockQuantity = ""; |
| | | formData.actualQuantity = ""; |
| | | formData.actualQuantity = 0; |
| | | nextTick(() => { |
| | | barcodeInputRef.value?.focus(); |
| | | }); |
| | |
| | | } |
| | | }; |
| | | |
| | | // æç®±ååºåè½ |
| | | // æç®±ååºåè½ï¼ç®åæ ¡éªï¼ç´æ¥ä¼ å¼ |
| | | const handleBoxReturn = async () => { |
| | | const boxNo = formData.boxNo.trim(); |
| | | if (!boxNo) { |
| | | ElMessage.warning("请å
è¾å
¥ææ«ææç®±å·"); |
| | | ElMessage.warning("请è¾å
¥æç®±å·"); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | await ElMessageBox.confirm(`ç¡®å®å°æç®±ã${boxNo}ãååºåï¼`, "ååºç¡®è®¤", { |
| | | await ElMessageBox.confirm(`ç¡®å®å°æç®±ã${boxNo}ãååºè³ã${selectedStation.value}ãç«å°åï¼`, "ååºç¡®è®¤", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "info", |
| | |
| | | |
| | | loading.value = true; |
| | | |
| | | // ç´æ¥ä¼ å¼ç»å端ï¼ä¸åä¸¥æ ¼æ ¡éª |
| | | const res = await http.post( |
| | | `/api/TakeStockOrder/ReturnBox?boxNo=${encodeURIComponent(boxNo)}&orderNo=${encodeURIComponent( |
| | | orderNo.value |
| | | )}`, |
| | | `/api/TakeStockOrder/ReturnBox?boxNo=${encodeURIComponent(boxNo)}&orderNo=${encodeURIComponent(orderNo.value)}&sourceAddress=${encodeURIComponent(selectedStation.value)}`, |
| | | "æç®±ååºä¸..." |
| | | ); |
| | | |
| | | if (res.status) { |
| | | ElMessage.success(`æç®±ã${boxNo}ãååºæåï¼`); |
| | | ElMessage.success(`æç®±ã${boxNo}ãååºè³ã${selectedStation.value}ãç«å°æåï¼`); |
| | | formData.boxNo = ""; |
| | | formData.barcode = ""; |
| | | formData.stockQuantity = ""; |
| | | formData.actualQuantity = ""; |
| | | formData.actualQuantity = 0; |
| | | selectedStation.value = stationManager.getStation() || ""; |
| | | orderNo.value = ""; |
| | | nextTick(() => { |
| | | boxNoInputRef.value?.focus(); |
| | | }); |
| | |
| | | </script> |
| | | |
| | | <style scoped> |
| | | /* 䏻容卿 ·å¼ - ä¼åé´è·åååºå¼ */ |
| | | /* æ ·å¼å®å
¨ä¿çï¼æ ä¿®æ¹ */ |
| | | .stock-take-container { |
| | | width: 100%; |
| | | display: flex; |
| | |
| | | padding: 8px 0; |
| | | } |
| | | |
| | | /* åæ®ä¿¡æ¯æ ·å¼ - ä¼åè§è§å±çº§ */ |
| | | .receipt-info { |
| | | margin-bottom: 4px; |
| | | } |
| | |
| | | margin-left: 6px; |
| | | } |
| | | |
| | | /* è¡¨åæ ·å¼ - ä¼åé´å½±åå
è¾¹è· */ |
| | | .stock-take-form { |
| | | width: 100%; |
| | | background-color: #ffffff; |
| | |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | /* è¾å
¥æ¡æ ¸å¿æ ·å¼ - ä¼åç¶ææ¾ç¤º */ |
| | | .custom-input { |
| | | width: 100%; |
| | | position: relative; |
| | | } |
| | | |
| | | /* æå¼æ¶éèå ä½ç¬¦ + ä¼åè¾¹æ¡ */ |
| | | .custom-input.has-value :deep(.el-input__inner) { |
| | | --el-input-placeholder-color: transparent; /* éèå ä½ç¬¦ */ |
| | | border-color: #8cc5ff; /* æµ
èè¾¹æ¡ï¼åºåæ å¼ç¶æ */ |
| | | .custom-input.has-value :deep(.el-input__inner), |
| | | .custom-input.has-value :deep(.el-select__wrapper) { |
| | | --el-input-placeholder-color: transparent; |
| | | border-color: #8cc5ff; |
| | | background-color: #ffffff; |
| | | } |
| | | |
| | | .custom-input :deep(.el-input__inner) { |
| | | .custom-input :deep(.el-input__inner), |
| | | .custom-input :deep(.el-select__wrapper) { |
| | | border-radius: 8px; |
| | | border-color: #e5f0fa; |
| | | transition: all 0.2s ease; |
| | |
| | | padding: 0 12px; |
| | | } |
| | | |
| | | /* èç¦æ ·å¼ä¼å */ |
| | | .custom-input :deep(.el-input__inner:focus) { |
| | | .custom-input :deep(.el-input__inner:focus), |
| | | .custom-input :deep(.el-select__wrapper:focus) { |
| | | border-color: #409eff; |
| | | box-shadow: 0 0 0 3px rgba(64, 158, 255, 0.1); |
| | | background-color: #ffffff; |
| | | outline: none; |
| | | } |
| | | |
| | | /* æ¸
餿鮿 ·å¼ä¼å */ |
| | | .custom-input :deep(.el-input__clear) { |
| | | color: #91c9f7; |
| | | width: 18px; |
| | |
| | | color: #409eff; |
| | | } |
| | | |
| | | /* åªè¯»è¾å
¥æ¡æ ·å¼ - å¢å¼ºåºå度 */ |
| | | .custom-readonly-input :deep(.el-input__inner) { |
| | | background-color: #f0f8fb; |
| | | color: #1989fa; |
| | |
| | | padding-right: 12px; |
| | | } |
| | | |
| | | /* è¾å
¥æ¡æé®æ ·å¼ - ä¼å尺寸åhoverææ */ |
| | | .input-btn { |
| | | border-radius: 0 8px 8px 0 !important; |
| | | height: 42px; |
| | |
| | | transform: translateY(-1px); |
| | | } |
| | | |
| | | /* 表åéªè¯éè¯¯æ ·å¼ - å
³é®ï¼æå¼æ¶ä¸æ¾ç¤ºéè¯¯è¾¹æ¡ */ |
| | | .form-item :deep(.el-form-item__error) { |
| | | font-size: 12px; |
| | | color: #f56c6c; |
| | | margin-top: 4px; |
| | | /* ä»
å¨è¾å
¥æ¡ä¸ºç©ºä¸éªè¯å¤±è´¥æ¶æ¾ç¤º */ |
| | | display: none; |
| | | } |
| | | |
| | | /* åªæè¾å
¥æ¡ä¸ºç©º + éªè¯å¤±è´¥æ¶æ¾ç¤ºé误æç¤º */ |
| | | .form-item:deep(.el-form-item--error) .custom-input:not(.has-value) + .el-form-item__error { |
| | | display: block; |
| | | } |
| | | |
| | | /* æå¼æ¶å³ä½¿éªè¯å¤±è´¥ï¼ä¹ä¸æ¾ç¤ºéè¯¯è¾¹æ¡ */ |
| | | .custom-input.has-value :deep(.el-input__inner.el-input__inner--error) { |
| | | .custom-input.has-value :deep(.el-input__inner.el-input__inner--error), |
| | | .custom-input.has-value :deep(.el-select__wrapper.el-select__wrapper--error) { |
| | | border-color: #8cc5ff; |
| | | box-shadow: none; |
| | | } |
| | | |
| | | /* æä½æé®åºå - ä¼åé´è·åååºå¼ */ |
| | | .action-buttons { |
| | | display: flex; |
| | | justify-content: flex-end; |
| | |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | /* ååºæé®æ ·å¼ - ä¼åäº¤äº */ |
| | | .return-btn { |
| | | border-radius: 8px; |
| | | padding: 9px 20px; |
| | |
| | | box-shadow: none; |
| | | } |
| | | |
| | | /* çç¹å®ææé®æ ·å¼ - ä¼åäº¤äº */ |
| | | .complete-btn { |
| | | border-radius: 8px; |
| | | padding: 9px 20px; |
| | |
| | | box-shadow: none; |
| | | } |
| | | |
| | | /* åæ¶æé®æ ·å¼ - ä¼åç¹å»åºå */ |
| | | .cancel-btn { |
| | | color: #666666; |
| | | font-size: 14px; |
| | |
| | | background-color: #f0f8fb !important; |
| | | } |
| | | |
| | | /* å¼¹çªæ´ä½æ ·å¼ - ä¼ååè§åé´å½± */ |
| | | .custom-vol-box { |
| | | border-radius: 16px !important; |
| | | overflow: hidden; |
| | |
| | | padding: 16px 24px; |
| | | } |
| | | |
| | | /* ååºå¼éé
- å°å±å¹ä¼å */ |
| | | @media (max-width: 768px) { |
| | | .stock-take-form { |
| | | padding: 16px; |
| | |
| | | </style> |
| | | |
| | | <style> |
| | | /* å
¨å±è¡¥å
æ ·å¼ - ç»ä¸ä¸»é¢ */ |
| | | .el-tag--primary { |
| | | --el-tag-bg-color: #e8f4f8; |
| | | --el-tag-border-color: #409eff; |
| | | --el-tag-text-color: #1989fa; |
| | | } |
| | | |
| | | /* å ä½ç¬¦æ ·å¼ - ç»ä¸é¢è² */ |
| | | .el-input__inner::-webkit-input-placeholder { |
| | | .el-input__inner::-webkit-input-placeholder, |
| | | .el-select__placeholder { |
| | | color: #b3d8ff; |
| | | font-size: 13px; |
| | | } |
| | | |
| | | .el-input__inner::-moz-placeholder { |
| | | .el-input__inner::-moz-placeholder, |
| | | .el-select__placeholder { |
| | | color: #b3d8ff; |
| | | font-size: 13px; |
| | | } |
| | | |
| | | .el-input__inner:-ms-input-placeholder { |
| | | .el-input__inner:-ms-input-placeholder, |
| | | .el-select__placeholder { |
| | | color: #b3d8ff; |
| | | font-size: 13px; |
| | | } |
| | | |
| | | .el-input__inner::placeholder { |
| | | .el-input__inner::placeholder, |
| | | .el-select__placeholder { |
| | | color: #b3d8ff; |
| | | font-size: 13px; |
| | | } |
| | | |
| | | /* ä¿¡æ¯æé®å
¨å±æ ·å¼ */ |
| | | .el-button--info { |
| | | --el-button-bg-color: #e8f4f8; |
| | | --el-button-border-color: #409eff; |
| | |
| | | --el-button-hover-text-color: #1989fa; |
| | | } |
| | | |
| | | /* ç¡®è®¤å¼¹çªæ ·å¼ä¼å */ |
| | | .el-message-box { |
| | | border-radius: 12px !important; |
| | | box-shadow: 0 4px 20px rgba(64, 158, 255, 0.15); |