| | |
| | | // æ¶é´è½¬æ¢ |
| | | import Moment from "moment"; |
| | | |
| | | import Big from 'big.js' |
| | | |
| | | // å
¨å±æ¹æ³æè½½ |
| | | Vue.prototype.$Big = Big; |
| | | Vue.prototype.getDicts = getDicts; |
| | | Vue.prototype.getConfigKey = getConfigKey; |
| | | Vue.prototype.parseTime = parseTime; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import Big from "big.js"; |
| | | |
| | | /** |
| | | * å®å
¨è®¡ç®å¨ï¼æ¯æ + - * / 忬å·ï¼ |
| | | * @param {string} expr æ°å¦è¡¨è¾¾å¼ï¼å¦ "(0.1 + 0.2) * 3" |
| | | * @returns {string} 计ç®ç»æå符串 |
| | | */ |
| | | export function bigEval(expr) { |
| | | console.log(expr) |
| | | // æ¥éª¤1ï¼è¯æ³åæ |
| | | const tokens = tokenize(expr); |
| | | // æ¥éª¤2ï¼è½¬æ¢ä¸ºéæ³¢å
°è¡¨è¾¾å¼ï¼åç¼è¡¨è¾¾å¼ï¼ |
| | | const rpn = shuntingYard(tokens); |
| | | // æ¥éª¤3ï¼æ§è¡è®¡ç® |
| | | return evaluateRPN(rpn); |
| | | } |
| | | |
| | | // è¯æ³åæå¨ |
| | | function tokenize(expr) { |
| | | const tokens = []; |
| | | let numBuffer = ""; |
| | | let prevToken = null; |
| | | |
| | | const flushNumber = () => { |
| | | if (numBuffer) { |
| | | // æ°å¢ï¼éªè¯æ°åæ ¼å¼ï¼æ¯æè´æ°ãå°æ°ï¼ |
| | | if (!/^-?(\d+(\.\d*)?|\.\d+)$/.test(numBuffer)) { |
| | | throw new Error(`æ ææ°åæ ¼å¼: ${numBuffer}`); |
| | | } |
| | | if (numBuffer.startsWith(".")) numBuffer = "0" + numBuffer; |
| | | tokens.push({ type: "number", value: numBuffer }); |
| | | numBuffer = ""; |
| | | } |
| | | }; |
| | | |
| | | for (let i = 0; i < expr.length; i++) { |
| | | const c = expr[i]; |
| | | if (/\d|\./.test(c)) { |
| | | numBuffer += c; |
| | | } else if ("+-*/()".includes(c)) { |
| | | // ä¿®æ¹ï¼å¢å numBuffer 为空ç夿ï¼ç¡®ä¿è´å·åªè½ä½ä¸ºæ°ååç¼ï¼å
³é®ä¿®å¤ï¼ |
| | | if (c === "-" && numBuffer === "" && ( |
| | | !prevToken || |
| | | (prevToken.type === "operator" && prevToken.value !== ")") |
| | | )) { |
| | | numBuffer += c; |
| | | } else { |
| | | flushNumber(); |
| | | tokens.push({ type: "operator", value: c }); |
| | | } |
| | | prevToken = tokens[tokens.length - 1]; |
| | | } else if (c !== " ") { |
| | | throw new Error(`éæ³å符: ${c}`); |
| | | } |
| | | } |
| | | |
| | | flushNumber(); |
| | | return tokens; |
| | | } |
| | | |
| | | // è°åº¦åºç®æ³çæéæ³¢å
°è¡¨è¾¾å¼ |
| | | function shuntingYard(tokens) { |
| | | const output = []; |
| | | const stack = []; |
| | | const precedence = { "+": 1, "-": 1, "*": 2, "/": 2 }; |
| | | |
| | | for (const token of tokens) { |
| | | if (token.type === "number") { |
| | | output.push(token.value); |
| | | } else if (token.value === "(") { |
| | | stack.push(token.value); |
| | | } else if (token.value === ")") { |
| | | while (stack.length && stack[stack.length - 1] !== "(") { |
| | | output.push(stack.pop()); |
| | | } |
| | | stack.pop(); // å¼¹åºå·¦æ¬å· |
| | | } else { |
| | | while ( |
| | | stack.length && |
| | | stack[stack.length - 1] !== "(" && |
| | | precedence[stack[stack.length - 1]] >= precedence[token.value] |
| | | ) { |
| | | output.push(stack.pop()); |
| | | } |
| | | stack.push(token.value); |
| | | } |
| | | } |
| | | |
| | | while (stack.length) output.push(stack.pop()); |
| | | return output; |
| | | } |
| | | |
| | | // æ§è¡éæ³¢å
°è¡¨è¾¾å¼è®¡ç® |
| | | function evaluateRPN(rpn) { |
| | | const stack = []; |
| | | |
| | | for (const token of rpn) { |
| | | if (/[-]?\d|\./.test(token)) { |
| | | stack.push(new Big(token)); |
| | | } else { |
| | | const b = stack.pop(); |
| | | const a = stack.pop(); |
| | | |
| | | switch (token) { |
| | | case "+": stack.push(a.plus(b)); break; |
| | | case "-": stack.push(a.minus(b)); break; |
| | | case "*": stack.push(a.times(b)); break; |
| | | case "/": |
| | | if (b.eq(0)) throw new Error("餿°ä¸è½ä¸ºé¶"); |
| | | stack.push(a.div(b)); |
| | | break; |
| | | default: throw new Error(`æªç¥è¿ç®ç¬¦: ${token}`); |
| | | } |
| | | } |
| | | } |
| | | |
| | | return stack.pop().toString(); |
| | | } |
| | |
| | | :value="a.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierName" v-if="tabIndex===2"> |
| | | <el-input v-model="queryParams.supplierName" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="goSearch"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="mini" type="primary" @click="refreshTable()">æ¥è¯¢</el-button> |
| | | <el-button size="mini" @click="refresh()">éç½®</el-button> |
| | |
| | | import {upReportUrl} from "@/api/business/insReport"; |
| | | import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue"; |
| | | import filePreview from "@/components/Preview/filePreview.vue"; |
| | | import tab from "../../../plugins/tab"; |
| | | export default { |
| | | name: 'InspectionTask', |
| | | components: { |
| | |
| | | } |
| | | }, |
| | | }, |
| | | { label: "é¶ä»¶æè¿°", prop: "partDesc", width: "150px" }, |
| | | { label: "æ ·ååå·", prop: "sampleModel", width: "120px" }, |
| | | { |
| | | label: "ç´§æ¥ç¨åº¦", |
| | |
| | | calcInbondLength(startMeterMark,endMeterMark){ |
| | | let inboundLength = null; |
| | | if((startMeterMark!=null && startMeterMark!=='') && (endMeterMark!=null&&endMeterMark!=='')){ |
| | | inboundLength = Math.abs(endMeterMark - startMeterMark) |
| | | let minus = this.$Big(endMeterMark).minus(this.$Big(startMeterMark)); |
| | | inboundLength = Math.abs(minus) |
| | | } |
| | | return inboundLength; |
| | | }, |
| | |
| | | }); |
| | | }); |
| | | // è·å尿大æ£éªå¼è¾å
¥ä¸ªæ°åéç»æ°æ® |
| | | console.log("æå¤§ä¸ªæ°ï¼", maxNum); |
| | | let obj0 = { |
| | | name: j, |
| | | arr: data[i][j].result, |
| | |
| | | import {dateFormat} from "@/utils/date"; |
| | | import AuxiliaryWireCore from "../productOrder/components/auxiliaryWireCore.vue"; |
| | | import cableConfig from "../productOrder/components/cable-config.vue"; |
| | | import {bigEval} from "../../../utils/bigEval"; |
| | | export default { |
| | | name: "CustomsInspectionOrder", |
| | | dicts: ['check_type', 'urgency_level'], |
| | |
| | | this.saveLoad = false |
| | | }) |
| | | }, |
| | | /** |
| | | * è·åå°æ°çæå¤§ä½æ° |
| | | * @param number åå·åæ° |
| | | * @param ask è¦æ±å¼ |
| | | * @param calcNum 计ç®å¼ |
| | | */ |
| | | getDecimalPlaces(number, ask, calcNum) { |
| | | console.log("计ç®å°æ°ç¹-->", number, ask, calcNum); |
| | | let count1 = 0; |
| | | let count2 = 0; |
| | | const reg = /(\d+\.)(\d+)/g; |
| | | let matches = []; |
| | | if (ask) { |
| | | matches = ask.match(reg); |
| | | } |
| | | if ( |
| | | matches && |
| | | matches.length > 0 && |
| | | matches[0].toString().indexOf(".") > -1 |
| | | ) { |
| | | count1 = matches[0].toString().split(".")[1].length; |
| | | } |
| | | if (number.toString().indexOf(".") > -1) { |
| | | count2 = number.toString().split(".")[1].length; |
| | | } |
| | | if (calcNum.toString().indexOf(".") > -1) { |
| | | const pointLength2 = calcNum.toString().split(".")[1].length; |
| | | count2 = count2 > pointLength2 ? count2 : pointLength2; |
| | | } |
| | | return count1 > count2 ? count1 : count2; |
| | | }, |
| | | handleAsk(ask,symbolItem, value) { |
| | | try{ |
| | | let code = [">", "<", "=", "ï¼", "ï¼", "â¥", "â¤", "±", "*", "/"]; |
| | |
| | | let index = code.findIndex(b => m.includes(b)) |
| | | if (index > -1) { |
| | | let arr = m.split(code[index]).filter(b => !!b) |
| | | let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | let calcNum = this.$Big( |
| | | bigEval(this.replaceAll(arr[0], symbolItem, value)) |
| | | ); |
| | | let num = calcNum.toFixed( |
| | | this.getDecimalPlaces(value, ask, calcNum) |
| | | ); |
| | | // let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | m = code[index] + '' + num |
| | | arr1.push(m) |
| | | } |
| | |
| | | let index = code.findIndex(b => ask.includes(b)) |
| | | if (index > -1) { |
| | | let arr = ask.split(code[index]).filter(b => !!b) |
| | | let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | let calcNum = this.$Big( |
| | | bigEval(this.replaceAll(arr[0], symbolItem, value)) |
| | | ); |
| | | let num = calcNum.toFixed( |
| | | this.getDecimalPlaces(value, ask, calcNum) |
| | | ); |
| | | // let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | return code[index] + '' + num |
| | | } |
| | | } |
| | |
| | | @keyup.enter.native="goSearch"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierName" > |
| | | <el-input v-model="entity.supplierName" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="goSearch"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 4" |
| | | :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" style="color: #3A7BFA;" type="text" |
| | |
| | | <el-button size="mini" type="primary" @click="goSearch">æ¥è¯¢</el-button> |
| | | <el-button size="mini" @click="refresh()">éç½®</el-button> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierName" |
| | | v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more"> |
| | | <el-input v-model="entity.supplierName" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="goSearch"> |
| | | </el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="æ ·ååå·" prop="sampleModel" |
| | | v-if="(tabIndex === 2 || tabIndex === 3 || tabIndex === 4) && more"> |
| | | <el-input v-model="entity.sampleModel" clearable placeholder="请è¾å
¥" size="small" |
| | |
| | | import {selectsStandardMethodByFLSSM} from "@/api/standard/standardLibrary"; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import {selectCustomPageList} from "@/api/system/customer"; |
| | | import { bigEval } from "@/utils/bigEval"; |
| | | import {mapGetters} from "vuex"; |
| | | import {addQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling"; |
| | | |
| | |
| | | return symbolItem |
| | | } |
| | | }, |
| | | /** |
| | | * è·åå°æ°çæå¤§ä½æ° |
| | | * @param number åå·åæ° |
| | | * @param ask è¦æ±å¼ |
| | | * @param calcNum 计ç®å¼ |
| | | */ |
| | | getDecimalPlaces(number, ask, calcNum) { |
| | | console.log("计ç®å°æ°ç¹-->", number, ask, calcNum); |
| | | let count1 = 0; |
| | | let count2 = 0; |
| | | const reg = /(\d+\.)(\d+)/g; |
| | | let matches = []; |
| | | if (ask) { |
| | | matches = ask.match(reg); |
| | | } |
| | | if ( |
| | | matches && |
| | | matches.length > 0 && |
| | | matches[0].toString().indexOf(".") > -1 |
| | | ) { |
| | | count1 = matches[0].toString().split(".")[1].length; |
| | | } |
| | | if (number.toString().indexOf(".") > -1) { |
| | | count2 = number.toString().split(".")[1].length; |
| | | } |
| | | if (calcNum.toString().indexOf(".") > -1) { |
| | | const pointLength2 = calcNum.toString().split(".")[1].length; |
| | | count2 = count2 > pointLength2 ? count2 : pointLength2; |
| | | } |
| | | return count1 > count2 ? count1 : count2; |
| | | }, |
| | | handleAsk(ask,symbolItem, value) { |
| | | try{ |
| | | let code = [">", "<", "=", "ï¼", "ï¼", "â¥", "â¤", "±"]; |
| | |
| | | let index = code.findIndex(b => m.includes(b)) |
| | | if (index > -1) { |
| | | let arr = m.split(code[index]).filter(b => !!b) |
| | | let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | let calcNum = this.$Big( |
| | | bigEval(this.replaceAll(arr[0], symbolItem, value)) |
| | | ); |
| | | let num = calcNum.toFixed( |
| | | this.getDecimalPlaces(value, ask, calcNum) |
| | | ); |
| | | // let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | m = code[index] + '' + num |
| | | arr1.push(m) |
| | | } |
| | |
| | | let index = code.findIndex(b => ask.includes(b)) |
| | | if (index > -1) { |
| | | let arr = ask.split(code[index]).filter(b => !!b) |
| | | let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | let calcNum = this.$Big( |
| | | bigEval(this.replaceAll(arr[0], symbolItem, value)) |
| | | ); |
| | | let num = calcNum.toFixed( |
| | | this.getDecimalPlaces(value, ask, calcNum) |
| | | ); |
| | | // let num = eval(this.replaceAll(arr[0], symbolItem, value)) |
| | | return code[index] + '' + num |
| | | } |
| | | } |
| | |
| | | <el-option v-for="(a, i) in orderTypeList" :key="i" :label="a.label" :value="a.value"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="é¶ä»¶æè¿°" prop="partDesc" > |
| | | <el-input v-model="entity.partDesc" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="refreshTable"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ä¾åºååç§°" prop="supplierName" > |
| | | <el-input v-model="entity.supplierName" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="refreshTable"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="mini" type="primary" @click="refreshTable()">æ¥è¯¢</el-button> |
| | | <el-button size="mini" @click="refresh()">éç½®</el-button> |
| | |
| | | </div> |
| | | <div> |
| | | <lims-table :tableData="valueTableData" :column="column" :page="page" :tableLoading="tableLoading" |
| | | :isSelection="true" :handleSelectionChange="handleChange" :height="'calc(100vh - 290px)'" |
| | | :isSelection="true" :handleSelectionChange="handleChange" :height="'calc(100vh - 320px)'" |
| | | @pagination="pagination" key="valueTableData"> |
| | | <div slot="action" slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="viewIssued(scope.row)">æ¥çæ¥å</el-button> |
| | |
| | | width: "120px", |
| | | }, |
| | | { |
| | | label: "é¶ä»¶æè¿°", |
| | | prop: "partDesc", |
| | | width: "120px", |
| | | }, |
| | | { |
| | | label: "ä¾åºååç§°", |
| | | prop: "supplierName", |
| | | width: "120px", |
| | | }, |
| | | { |
| | | label: "æ¥åç¼å·", |
| | | prop: "code", |
| | | width: "160px", |