From b2eb82fce7d36b5c995b8b8058f20f29cae14d2d Mon Sep 17 00:00:00 2001 From: yyb <995253665@qq.com> Date: 星期三, 25 六月 2025 14:27:25 +0800 Subject: [PATCH] 取消报工接口联调 --- pages/product/report/index.vue | 753 +++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 457 insertions(+), 296 deletions(-) diff --git a/pages/product/report/index.vue b/pages/product/report/index.vue index a30fe52..52b71f8 100644 --- a/pages/product/report/index.vue +++ b/pages/product/report/index.vue @@ -1,303 +1,464 @@ <template> - <!-- 鎶ュ伐 --> - <div class="page"> - <u-form :model="form" ref="uForm" :label-width="200" :rules="rules" :error-type="['toast']"> - <u-form-item label="杞﹂棿" :border-bottom="false" prop="value0"> - <u-radio-group v-model="form.value0"> - <u-radio name="瀵间綋">瀵间綋</u-radio> - <u-radio name="閾滄潌">閾滄潌</u-radio> - </u-radio-group> - </u-form-item> - <u-form-item label="鎶ュ伐鍗曞彿" :border-bottom="false" prop="taskNo"> - <u-input v-model="form.taskNo" type="select" placeholder="璇锋壂鎻忔姤宸ュ崟鍙�" @click="open" /> - </u-form-item> - <u-form-item label="宸ュ簭" :border-bottom="false" prop="name"> - <u-input v-model="form.name" type="select" placeholder="璇锋壂鎻忔姤宸ュ崟鍙�" /> - </u-form-item> - <u-form-item label="璁㈠崟鍙�" :border-bottom="false" prop="moOn"> - <u-input v-model="form.moOn" type="select" placeholder="鐐瑰嚮閫夋嫨" @click="openList" /> - </u-form-item> - <u-form-item label="闆朵欢鍙�" :border-bottom="false" prop="partNo"> - <u-input v-model="form.partNo" placeholder="" disabled /> - </u-form-item> - <u-form-item label="闆朵欢鎻忚堪" :border-bottom="false" prop="partName"> - <u-input v-model="form.partName" placeholder="" disabled /> - </u-form-item> - <u-form-item label="鎵归噺澶у皬" :border-bottom="false" prop="value6"> - <u-input v-model="form.value6" placeholder="" disabled /> - </u-form-item> - <u-form-item label="鍓╀綑鏁伴噺" :border-bottom="false" prop="value7"> - <u-input v-model="form.value7" placeholder="" disabled /> - </u-form-item> - <u-form-item label="搴撲綅" :border-bottom="false" prop="value8"> - <u-input v-model="form.value8" placeholder="" disabled /> - </u-form-item> - <u-form-item label="鎶ュ伐绫诲瀷" prop="value9"> - <u-radio-group v-model="form.value9"> - <u-radio name="1">涓嬫満鎶ュ伐</u-radio> - <u-radio name="2">鏈笅鏈烘姤宸�</u-radio> - </u-radio-group> - </u-form-item> - <u-form-item label="鎺ユ敹闆朵欢" prop="value10"> - <u-radio-group v-model="form.value10"> - <u-radio name="1">杞﹂棿璁㈠崟</u-radio> - <u-radio name="2">鏇夸唬闆朵欢</u-radio> - </u-radio-group> - </u-form-item> - <u-form-item label="鐗╂枡" prop="value12"> - <u-radio-group v-model="form.value12" :disabled="true"> - <u-radio name="1">鍊掑啿</u-radio> - <u-radio name="2">鎶曟枡</u-radio> - </u-radio-group> - </u-form-item> - <u-form-item label="宸ュ簭" prop="value11"> - <u-checkbox-group> - <u-checkbox :name="item.name" v-for="(item, index) in checkboxList" :key="index" - v-model="item.value11" @change="changeCheckbox" :disabled="item.disabled"> - {{ item.name }} - </u-checkbox> - </u-checkbox-group> - </u-form-item> - <u-form-item label="浜у嚭鍒楄〃" :border-bottom="false"></u-form-item> - </u-form> - <view class="wrap"> - <scroll-view class="packing-registration-scroll-list" scroll-y="true"> - <u-cell-group class="packing-registration-scroll-list-group" :border="false"> - <view class="content" v-for="(item, index) in InventoryReceiptList" :key="index" :index="index"> - <view class="content-header"> - <view class="content-header-title">{{ index + 1 }}</view> - </view> - <view class="content-body"> - <view class="row-list"> - <view class="_label"> - <view class="_label-name">鎵瑰彿锛�</view> - </view> - <view class="_content"> - {{ item.value0 }} - </view> - </view> - <view class="row-list"> - <view class="_label"> - <view class="_label-name">鏁伴噺锛�</view> - </view> - <view class="_content"> - {{ item.value1 }} - </view> - </view> - <view class="row-list"> - <view class="_label"> - <view class="_label-name">搴撲綅锛�</view> - </view> - <view class="_content"> - {{ item.value0 }} - </view> - </view> - </view> - </view> - </u-cell-group> - </scroll-view> - </view> - <!-- 濉啓鎶ュ伐鍗� --> - <modalBg ref="modalBg" :confirm="confirm"> - <u-field v-model="form.value1" label="鎶ュ伐鍗曞彿" placeholder="璇疯緭鍏�" :border-bottom="false"> - </u-field> - </modalBg> - <saveForm ref="saveForm" :operationTaskId="this.operationTaskId" /> - <scan></scan> - </div> + <!-- 鎶ュ伐 --> + <div class="page"> + <u-form + :model="form" + ref="uForm" + :label-width="200" + :rules="rules" + :error-type="['toast']" + > + <u-form-item label="杞﹂棿" :border-bottom="false" prop="work"> + <u-radio-group v-model="form.work" :disabled="subdisabled"> + <u-radio name="dt">瀵间綋</u-radio> + <u-radio name="tg">閾滄潌</u-radio> + </u-radio-group> + </u-form-item> + <u-form-item label="鎶ュ伐鍗曞彿" :border-bottom="false" prop="taskNo"> + <u-input + v-model="form.taskNo" + type="select" + placeholder="璇锋壂鎻忔姤宸ュ崟鍙�" + @click="open" + /> + </u-form-item> + <u-form-item label="宸ュ簭" :border-bottom="false" prop="name"> + <u-input + v-model="form.name" + type="select" + placeholder="璇锋壂鎻忔姤宸ュ崟鍙�" + /> + </u-form-item> + <u-form-item label="璁㈠崟鍙�" :border-bottom="false" prop="moOn"> + <u-input + v-model="form.moOn" + type="select" + placeholder="鐐瑰嚮閫夋嫨" + @click="openList" + /> + </u-form-item> + <u-form-item label="闆朵欢鍙�" :border-bottom="false" prop="partNo"> + <u-input v-model="form.partNo" placeholder="" disabled /> + </u-form-item> + <u-form-item label="闆朵欢鎻忚堪" :border-bottom="false" prop="partName"> + <u-input v-model="form.partName" placeholder="" disabled /> + </u-form-item> + <u-form-item label="鎵归噺澶у皬" :border-bottom="false" prop="qtyRequired"> + <u-input v-model="form.qtyRequired" placeholder="" disabled /> + </u-form-item> + <u-form-item + label="鍓╀綑鏁伴噺" + :border-bottom="false" + prop="Jianqtyfinished" + > + <u-input v-model="form.Jianqtyfinished" placeholder="" disabled /> + </u-form-item> + <u-form-item label="搴撲綅" :border-bottom="false" prop="proposedLocation"> + <u-input v-model="form.proposedLocation" placeholder="" disabled /> + </u-form-item> + <u-form-item label="鎶ュ伐绫诲瀷" prop="productType"> + <u-radio-group v-model="form.productType" :disabled="subdisabled"> + <u-radio name="dep">涓嬫満鎶ュ伐</u-radio> + <u-radio name="ndep">鏈笅鏈烘姤宸�</u-radio> + </u-radio-group> + </u-form-item> + <u-form-item label="鎺ユ敹闆朵欢" prop="receive"> + <u-radio-group v-model="form.receive" :disabled="subdisabled"> + <u-radio name="mo">杞﹂棿璁㈠崟</u-radio> + <u-radio name="part">鏇夸唬闆朵欢</u-radio> + </u-radio-group> + </u-form-item> + <u-form-item label="鐗╂枡" prop="materialCost"> + <u-radio-group v-model="form.materialCost" :disabled="true"> + <u-radio name="鍊掑啿">鍊掑啿</u-radio> + <u-radio name="鎶曟枡">鎶曟枡</u-radio> + </u-radio-group> + </u-form-item> + <u-form-item label="宸ュ簭"> + <u-checkbox-group> + <u-checkbox + :name="item.name" + v-for="(item, index) in checkboxList" + :key="index" + v-model="item.value" + @change="changeCheckbox" + :disabled="subdisabled || item.disabled" + > + {{ item.name }} + </u-checkbox> + </u-checkbox-group> + </u-form-item> + <u-form-item label="浜у嚭鍒楄〃" :border-bottom="false"></u-form-item> + </u-form> + <view class="wrap"> + <scroll-view class="packing-registration-scroll-list" scroll-y="true"> + <u-cell-group + class="packing-registration-scroll-list-group" + :border="false" + > + <view + class="content" + v-for="(item, index) in InventoryReceiptList" + :key="index" + :index="index" + @click="cancelReport(item)" + > + <view class="content-header"> + <view class="content-header-title">{{ index + 1 }}</view> + </view> + <view class="content-body"> + <view class="row-list"> + <view class="_label"> + <view class="_label-name">鎵瑰彿锛�</view> + </view> + <view class="_content"> + {{ item.outBatchNo }} + </view> + </view> + <view class="row-list"> + <view class="_label"> + <view class="_label-name">鏁伴噺锛�</view> + </view> + <view class="_content"> + {{ item.netWeight }} + </view> + </view> + <view class="row-list"> + <view class="_label"> + <view class="_label-name">搴撲綅锛�</view> + </view> + <view class="_content"> + {{ item.proposedLocation }} + </view> + </view> + </view> + </view> + </u-cell-group> + </scroll-view> + </view> + <!-- 濉啓鎶ュ伐鍗� --> + <modalBg ref="modalBg" :confirm="confirm"> + <u-field + v-model="form.taskNo" + label="鎶ュ伐鍗曞彿" + placeholder="璇疯緭鍏�" + :border-bottom="false" + > + </u-field> + </modalBg> + <saveForm + ref="saveForm" + :operationTaskList="this.form" + @update="handleUpdate" + /> + <u-modal + width="720rpx" + v-model="showModal" + title="" + :show-cancel-button="true" + :show-confirm-button="true" + @confirm="confirmModle" + @cancel="cancelModle" + > + <view class="popup-content"> + <view class="packing-registration-param"> + <view class="packing-registration-param-view"> + <view class="packing-registration-param-item param-extra"> + <view class="packing-registration-param-item-left"> + <text class="item-one">鎵瑰彿</text> + </view> + <view class="packing-registration-param-item-right"> + <text class="item-one">{{ detailedList.outBatchNo }}</text> + </view> + </view> + <view class="packing-registration-param-item param-extra"> + <view class="packing-registration-param-item-left"> + <text class="item-one">闆朵欢鍙�</text> + </view> + <view class="packing-registration-param-item-right"> + <text class="item-one">{{ detailedList.partNo }}</text> + </view> + </view> + <view class="packing-registration-param-item param-extra"> + <view class="packing-registration-param-item-left"> + <text class="item-one">闆朵欢鎻忚堪</text> + </view> + <view class="packing-registration-param-item-right"> + <span class="item-one">{{ detailedList.partName }}</span> + </view> + </view> + <view class="packing-registration-param-item param-extra"> + <view class="packing-registration-param-item-left"> + <text class="item-one">鍙栨秷鎺ユ敹鏁伴噺</text> + </view> + <view class="packing-registration-param-item-right"> + <span class="item-one">{{ detailedList.netWeight }}</span> + </view> + </view> + </view> + </view> + </view> + </u-modal> + <scan></scan> + </div> </template> <script> - import modalBg from "@/components/modal/modal-bg.vue"; - import saveForm from "./components/saveForm.vue"; - import scan from "@/components/scan/scan.vue"; - export default { - components: { - modalBg, - saveForm, - scan - }, - data() { - return { - checkboxList: [{ - name: "宸ュ簭鐨勮嚜鍔ㄦ姤鍛�", - value: false, - disabled: false, - }, - { - name: "绠�鍖栫墿鏂欐鏌�", - value: false, - disabled: false, - }, - ], - InventoryReceiptList: [], - form: { - taskNo: "", - name: "", - moOn: "", - partNo: "", - partName: "", - value6: "", - value7: "", - value8: "", - value9: "1", - value10: "1", - value11: [], // 澶嶉�夋缁勭殑鍊� - value12: "1", - }, - rules: { - value0: [{ - required: true, - message: "璇烽�夋嫨杞﹂棿", - trigger: ["change"], - }, ], - value1: [{ - required: true, - message: "璇烽�夋嫨鎶ュ伐鍗曞彿", - trigger: ["change", "blur"], - }, ], - value2: [{ - required: true, - message: "璇烽�夋嫨宸ュ簭", - trigger: ["change", "blur"], - }, ], - value3: [{ - required: true, - message: "璇烽�夋嫨璁㈠崟鍙�", - trigger: ["change", "blur"], - }, ], - value9: [{ - required: true, - message: "璇烽�夋嫨鎶ュ伐绫诲瀷", - trigger: ["change"], - }, ], - value10: [{ - required: true, - message: "璇烽�夋嫨鎺ユ敹闆朵欢绫诲瀷", - trigger: ["change"], - }, ], - value11: [{ - type: "array", - required: true, - message: "璇疯嚦灏戦�夋嫨涓�涓墿鏂欏拰宸ュ簭閫夐」", - trigger: ["change"], - }, ], - }, - showSave: false, - operationTaskId: "", - }; - }, - // 鐐瑰嚮鎻愪氦鎸夐挳鐨勪簨浠跺鐞嗗嚱鏁� - onNavigationBarButtonTap() { - this.$refs.saveForm.open(); - this.form.value11 = this.checkboxList - .filter((item) => item.value) - .map((item) => item.name); - this.$refs.uForm.validate((valid) => { - if (valid) { - console.log("楠岃瘉閫氳繃"); - // 澶勭悊鎻愪氦閫昏緫 - // this.$refs.saveForm.open(); - } else { - console.log("楠岃瘉澶辫触"); - // 鍙互鑾峰彇鍏蜂綋鐨勯敊璇俊鎭� - const errors = this.$refs.uForm.getError(); - console.log("閿欒淇℃伅:", errors); - } - }); - }, - onReady() { - this.$refs.uForm.setRules(this.rules); - }, - onShow() { - let that = this; - console.log("1111111111111"); - uni.$off("scan"); // 姣忔杩涙潵鍏� 绉婚櫎鍏ㄥ眬鑷畾涔変簨浠剁洃鍚櫒 - uni.$on("scan", function(data) { - console.log("onscan"); - //鎵爜鎴愬姛鍚庣殑鍥炶皟锛屼綘鍙互鍐欒嚜宸辩殑閫昏緫浠g爜鍦ㄨ繖閲� - console.log("椤甸潰鎵爜缁撴灉锛�", data.code); - if (data.code) { - let codeInfo = JSON.parse(data.code); - this.operationTaskId = codeInfo.id; - if (codeInfo.moOn) { - // 鎵弿鎶ュ伐鍗曚簩缁寸爜 - that.saveForm(codeInfo); - this.$u.api.workReporting - .getProductMainV1({ - current: 1, - size: -1, - operationTaskId: this.operationTaskId, - }) - .then((res) => { - console.log("res", res); - this.InventoryReceiptList = res.data.records; - }); - } - } - }); - }, - methods: { - // // 澶氶�夊鐞� - // changeCheckbox(val) { - // if (val.name === "鍊掑啿") { - // this.checkboxList[2].value = false; - // } - // if (val.name === "绠�鍖栫墿鏂欐鏌�") { - // this.checkboxList[0].value = false; - // } - // }, - // 鎵撳紑寮规--鍚庨潰杩橀渶瑕佺洃鍚壂鐮佹灙鎵爜缁撴灉锛岃祴鍊肩粰鎶ュ伐鍗曞彿瀛楁锛岀劧鍚庢墦寮�寮规閫夋嫨璁㈠崟鍙风瓑鎿嶄綔 - open() { - this.$refs.modalBg.open(); - }, - // 寮规淇濆瓨 - confirm() { - console.log("淇濆瓨", this.form.value1); - // 璇锋眰鎺ュ彛锛屾牴鎹伐鍗曞彿鏌ヨ鍏朵粬淇℃伅骞惰祴鍊� - }, - // 閫夋嫨璁㈠崟鍙� - openList() { - if (this.form.taskNo === "") { - uni.showToast({ - title: "璇峰厛鎵弿鎴栬緭鍏ユ姤宸ュ崟鍙�", - icon: "none", - }); - return; - } - uni.navigateTo({ - url: "/pages/product/report/orderList", - }); - }, - // 瀛樿鍗曞彿 - setNo(val) { - this.form.value3 = val; - }, - // 鍥炴樉鎵爜鐨勪俊鎭�-鎶ュ伐鍗� - saveForm(val) { - console.log("鍥炴樉鐨勬暟鎹�", val); - let { - moOn, - name, - ORDER_NO, - taskNo, - partName, - partNo - } = val; - this.form.moOn = moOn; - this.form.name = name; - this.form.taskNo = taskNo; - this.form.partName = partName; - this.form.partNo = partNo; - // this.form.value3 = ORDER_NO - if (this.form.value12 == "1") { - this.checkboxList[1].disabled = true; - } - }, - }, - }; +import modalBg from "@/components/modal/modal-bg.vue"; +import saveForm from "./components/saveForm.vue"; +import scan from "@/components/scan/scan.vue"; +export default { + components: { + modalBg, + saveForm, + scan, + }, + data() { + return { + checkboxList: [ + { + name: "宸ュ簭鐨勮嚜鍔ㄦ姤鍛�", + value: false, + disabled: false, + }, + { + name: "绠�鍖栫墿鏂欐鏌�", + value: false, + disabled: false, + }, + ], + InventoryReceiptList: [], + form: { + workstationId: "", + work: "", + taskNo: "", + name: "", + moOn: "", + partNo: "", + partName: "", + qtyRequired: "", + Jianqtyfinished: "", + proposedLocation: "", + productType: "dep", + receive: "mo", + materialCost: "", + autoReport: false, + simplifyMaterials: false, + }, + rules: { + work: [ + { + required: true, + message: "璇烽�夋嫨杞﹂棿", + trigger: ["change"], + }, + ], + taskNo: [ + { + required: true, + message: "璇烽�夋嫨鎶ュ伐鍗曞彿", + trigger: ["change", "blur"], + }, + ], + name: [ + { + required: true, + message: "璇烽�夋嫨宸ュ簭", + trigger: ["change", "blur"], + }, + ], + moOn: [ + { + required: true, + message: "璇烽�夋嫨璁㈠崟鍙�", + trigger: ["change", "blur"], + }, + ], + productType: [ + { + required: true, + message: "璇烽�夋嫨鎶ュ伐绫诲瀷", + trigger: ["change"], + }, + ], + receive: [ + { + required: true, + message: "璇烽�夋嫨鎺ユ敹闆朵欢绫诲瀷", + trigger: ["change"], + }, + ], + }, + showSave: false, + operationTaskId: "", + subdisabled: false, + codeInfoId: "", + detailedList: {}, + showModal: false, + }; + }, + // 鐐瑰嚮鎻愪氦鎸夐挳鐨勪簨浠跺鐞嗗嚱鏁� + onNavigationBarButtonTap() { + this.$refs.uForm.validate((valid) => { + if (valid) { + uni.showLoading({ + mask: true, + title: "鍔犺浇涓�", + }); + // 澶勭悊鎻愪氦閫昏緫 + this.$u.api.workReporting + .operationTask({ + id: this.form.id, + }) + .then((res) => { + res.data.name = this.form.name; + this.$refs.saveForm.open(res); + uni.hideLoading(); + }); + } else { + // 鍙互鑾峰彇鍏蜂綋鐨勯敊璇俊鎭� + const errors = this.$refs.uForm.getError(); + } + }); + }, + onReady() { + this.$refs.uForm.setRules(this.rules); + }, + onShow() { + let that = this; + uni.$off("scan"); // 姣忔杩涙潵鍏� 绉婚櫎鍏ㄥ眬鑷畾涔変簨浠剁洃鍚櫒 + uni.$on("scan", function (data) { + //鎵爜鎴愬姛鍚庣殑鍥炶皟锛屼綘鍙互鍐欒嚜宸辩殑閫昏緫浠g爜鍦ㄨ繖閲� + if (data.code) { + let codeInfo = JSON.parse(data.code); + that.codeInfoId = codeInfo.id; + if (codeInfo.moOn) { + // 鎵弿鎶ュ伐鍗曚簩缁寸爜 + that.saveForm(codeInfo); + that.getHandelList(); + } + } + }); + }, + watch: { + "form.taskNo": function (newVal, oldVal) { + this.subdisabled = false; + this.checkboxList[1].value = false; + this.checkboxList[0].value = false; + }, + }, + methods: { + // 鐐瑰嚮纭鍚庤幏鍙栧彇娑堟姤宸ヨ褰� + confirmModle() { + console.log("鐐瑰嚮纭鍚庤幏鍙栧彇娑堟姤宸ヨ褰�"); + // 澶勭悊纭閫昏緫 + this.$u.api.cancelReporting + .cancelDTAOfWorkApplication({ + outBatchNo: this.detailedList.outBatchNo, + }) + .then((res) => { + console.log("res", res); + this.showModal = false; + this.getHandelList(); + this.$u.toast("鍙栨秷鎶ュ伐鎴愬姛"); + }); + }, + cancelModle() { + this.showModal = false; // 鍏抽棴寮圭獥 + }, + // 鍙栨秷鎶ュ伐 + cancelReport(item) { + let that = this; + uni.showModal({ + title: "鎻愮ず", + content: "鏄惁纭鍙栨秷鎵规" + item.outBatchNo + "鐨勬姤宸�", + success: function (res) { + if (res.confirm) { + that.detailedList = item; + that.showModal = true; + } else if (res.cancel) { + return; + } + }, + }); + }, + getHandelList() { + this.$u.api.workReporting + .getProductMainV1({ + current: 1, + size: -1, + id: this.codeInfoId, + }) + .then((res) => { + this.InventoryReceiptList = res.data.productOutputList; + }); + }, + // 澶氶�夊鐞� + changeCheckbox(val) { + if (val.name === "宸ュ簭鐨勮嚜鍔ㄦ姤鍛�") { + this.form.autoReport = val.value; + } + if (val.name === "绠�鍖栫墿鏂欐鏌�") { + this.form.simplifyMaterials = val.value; + } + }, + handleUpdate() { + this.subdisabled = true; + this.getHandelList(); + }, + // 鎵撳紑寮规--鍚庨潰杩橀渶瑕佺洃鍚壂鐮佹灙鎵爜缁撴灉锛岃祴鍊肩粰鎶ュ伐鍗曞彿瀛楁锛岀劧鍚庢墦寮�寮规閫夋嫨璁㈠崟鍙风瓑鎿嶄綔 + open() { + this.$refs.modalBg.open(); + }, + // 寮规淇濆瓨 + confirm() {}, + // 閫夋嫨璁㈠崟鍙� + openList() { + if (this.form.taskNo === "") { + uni.showToast({ + title: "璇峰厛鎵弿鎴栬緭鍏ユ姤宸ュ崟鍙�", + icon: "none", + }); + return; + } + uni.navigateTo({ + url: "/pages/product/report/orderList", + }); + }, + // 瀛樿鍗曞彿 + setNo(val) { + this.form.moOn = val.moNo; + }, + // 鍥炴樉鎵爜鐨勪俊鎭�-鎶ュ伐鍗� + saveForm(val) { + this.form = { + id: val.id, + workstationId: val.workstationId, + work: val.work, + taskNo: val.taskNo, + name: val.name, + moOn: val.moOn, + partNo: val.partNo, + partName: val.partName, + qtyRequired: val.qtyRequired, + Jianqtyfinished: val.qtyRequired - val.qtyFinished, + proposedLocation: val.proposedLocation, + productType: "dep", + receive: "mo", // 澶嶉�夋缁勭殑鍊� + materialCost: val.materialCost, + autoReport: false, + simplifyMaterials: false, + }; + this.checkboxList[1].value = false; + this.checkboxList[0].value = false; + if (this.form.materialCost == "鍊掑啿") { + this.checkboxList[1].disabled = true; + } + }, + }, +}; </script> <style lang="scss"> - @import "index.scss"; - </style> \ No newline at end of file +@import "index.scss"; +</style> \ No newline at end of file -- Gitblit v1.9.3