From 841b389629f13bc96652772a25aed7bc1a5eafb9 Mon Sep 17 00:00:00 2001
From: WXL <1785969728@qq.com>
Date: 星期一, 29 七月 2024 15:17:30 +0800
Subject: [PATCH] 测试完成
---
src/views/repositoryai/verbaltrick/particulars/index.vue | 522 +++++++++++++++++++++++++++++++++++----------------------
1 files changed, 317 insertions(+), 205 deletions(-)
diff --git a/src/views/repositoryai/verbaltrick/particulars/index.vue b/src/views/repositoryai/verbaltrick/particulars/index.vue
index a97de91..07ed606 100644
--- a/src/views/repositoryai/verbaltrick/particulars/index.vue
+++ b/src/views/repositoryai/verbaltrick/particulars/index.vue
@@ -25,7 +25,14 @@
<div class="leftvlue">
<!-- 鍩烘湰淇℃伅 -->
<div v-if="Editprogress == 1">
- <div class="leftvlue-jbxx">鍩烘湰淇℃伅</div>
+ <div class="leftvlue-jbxx">
+ 鍩烘湰淇℃伅
+ <span style="margin-left: 30px"
+ ><el-button type="success" round @click="gettargetInfo"
+ >+閫夋嫨鎸囨爣</el-button
+ ></span
+ >
+ </div>
<el-divider></el-divider>
<el-form
ref="form"
@@ -104,9 +111,9 @@
</el-row>
<el-row :gutter="20">
<el-col :span="20">
- <el-form-item label="闂涓绘棬" prop="questiontitle">
+ <el-form-item label="闂涓绘棬" prop="scriptTopic">
<el-input
- v-model="indexform.questiontitle"
+ v-model="indexform.scriptTopic"
placeholder="璇疯緭鍏ラ棶棰樹富鏃�"
maxlength="80"
/>
@@ -131,6 +138,7 @@
@change="handleInputConfirm"
filterable
remote
+ allow-create
reserve-keyword
default-first-option
:remote-method="remoteMethodtag"
@@ -154,40 +162,46 @@
>
</div>
</el-form-item>
- <el-form-item label="閫氱煡鍙橀噺" prop="name">
- <div style="margin-bottom: 5px" v-for="item in variablelist">
- <el-row>
- <el-col :span="5">
- <el-input
- v-model="item.variatename"
- placeholder="璇疯緭鍏ュ彉閲忓悕"
- ></el-input>
- </el-col>
- <el-col :span="8" :offset="1">
- <el-input
- v-model="item.variate"
- placeholder="璇疯緭鍏ュ彉閲忓唴瀹�"
- ></el-input>
- </el-col>
- <el-col :span="8" :offset="1">
- <el-button
- type="success"
- icon="el-icon-plus"
- circle
- @click="addvariable(item)"
- ></el-button>
- <el-button
- v-if="!item.default"
- type="danger"
- icon="el-icon-delete"
- circle
- @click="delvariable(item)"
- ></el-button>
- </el-col>
- </el-row>
- </div>
- </el-form-item>
-
+ <el-drawer
+ title="鍙橀噺缂栬緫"
+ :visible.sync="variabledeawer"
+ direction="ttb"
+ size="35%"
+ >
+ <el-form-item label="閫氱煡鍙橀噺" prop="name">
+ <div style="margin-bottom: 5px" v-for="item in variablelist">
+ <el-row>
+ <el-col :span="5">
+ <el-input
+ v-model="item.variatename"
+ placeholder="璇疯緭鍏ュ彉閲忓悕"
+ ></el-input>
+ </el-col>
+ <el-col :span="8" :offset="1">
+ <el-input
+ v-model="item.variate"
+ placeholder="璇疯緭鍏ュ彉閲忓唴瀹�"
+ ></el-input>
+ </el-col>
+ <el-col :span="8" :offset="1">
+ <el-button
+ type="success"
+ icon="el-icon-plus"
+ circle
+ @click="addvariable(item)"
+ ></el-button>
+ <el-button
+ v-if="!item.default"
+ type="danger"
+ icon="el-icon-delete"
+ circle
+ @click="delvariable(item)"
+ ></el-button>
+ </el-col>
+ </el-row>
+ </div>
+ </el-form-item>
+ </el-drawer>
<el-row>
<el-col :span="6">
<el-form-item label="浠呴檺闄㈠尯" prop="region">
@@ -211,8 +225,8 @@
<el-col :span="6">
<el-form-item label="閫傜敤鏂瑰紡" prop="status">
<el-select
+ disabled
v-model="indexform.suitway"
- multiple
placeholder="璇烽�夋嫨"
>
<el-option
@@ -225,56 +239,36 @@
</el-select>
</el-form-item>
</el-col>
- <el-col :span="8">
- <el-form-item label="鍏宠仈鎸囨爣" prop="region">
- <el-select
- v-model="indexform.targetid"
- filterable
- remote
- reserve-keyword
- placeholder="璇疯緭鍏ュ叧閿瘝"
- :remote-method="remoteMethod"
- @change="targetchange"
- :loading="loading"
- >
- <el-option
- v-for="item in targetlist"
- :key="item.id"
- :label="item.targetname"
- :value="item.id"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-col>
</el-row>
<el-row>
<el-col :span="24">
- <div
- style="display: flex; margin-left: 100px; margin-bottom: 10px"
- >
- <div
- v-for="item in variablelist"
- class="tsgname"
- @click="tsgnameto(item)"
- >
- {{ item.variatename }}
+ <el-form-item label="闂鍙橀噺" prop="scriptContent">
+ <div style="display: flex; margin-bottom: 10px">
+ <div
+ v-for="item in variablelist"
+ class="tsgname"
+ @click="tsgnameto(item)"
+ >
+ {{ item.variatename }}
+ </div>
+ <div class="tsgnamebj" @click="variabledeawer = true">
+ 鍙橀噺缂栬緫
+ </div>
</div>
- </div>
+ </el-form-item>
</el-col></el-row
>
<el-row>
<el-col :span="24">
- <el-form-item label="闂鏂囨湰" prop="questionText">
+ <el-form-item label="闂鏂囨湰" prop="scriptContent">
<el-input
- :rows="2"
+ :rows="2"
type="textarea"
- id="questionText"
- maxlength="66"
+ id="scriptContent"
show-word-limit
placeholder="璇疯緭鍏ュ唴瀹�"
- v-model.sync="indexform.questionText"
- @focus="handleInput('questionText')"
+ v-model.sync="indexform.scriptContent"
+ @focus="handleInput('scriptContent')"
/>
</el-form-item> </el-col
></el-row>
@@ -298,15 +292,14 @@
>
<el-row>
<el-col :span="24">
- <el-form-item label="鏃犲尮閰嶆枃鏈�" prop="nomatchtext">
+ <el-form-item label="鏃犲尮閰嶆枃鏈�" prop="noMatchText">
<el-input
type="textarea"
:rows="2"
- id="nomatchtext"
+ id="noMatchText"
placeholder="璇疯緭鍏ュ唴瀹�"
- v-model.sync="indexform.nomatchtext"
- @focus="handleInput('nomatchtext')"
- maxlength="66"
+ v-model.sync="indexform.noMatchText"
+ @focus="handleInput('noMatchText')"
show-word-limit
/>
</el-form-item> </el-col
@@ -329,15 +322,14 @@
>
<el-row>
<el-col :span="24">
- <el-form-item label="鏃犲0鏂囨湰" prop="sliencetext">
+ <el-form-item label="鏃犲0鏂囨湰" prop="slienceText">
<el-input
type="textarea"
:rows="2"
- id="sliencetext"
+ id="slienceText"
placeholder="璇疯緭鍏ュ唴瀹�"
- v-model.sync="indexform.sliencetext"
- @focus="handleInput('sliencetext')"
- maxlength="66"
+ v-model.sync="indexform.slienceText"
+ @focus="handleInput('slienceText')"
show-word-limit
/>
</el-form-item> </el-col
@@ -358,48 +350,17 @@
</el-form-item>
</el-col></el-row
>
+
<el-row>
<el-col :span="24">
- <el-form-item label="閫氱敤搴撴枃鏈�" prop="submoduletext">
+ <el-form-item label="鍚笉娓呮枃鏈�" prop="noClearlyText">
<el-input
type="textarea"
- :rows="2"
- id="submoduletext"
- placeholder="璇疯緭鍏ュ唴瀹�"
- v-model.sync="indexform.submoduletext"
- @focus="handleInput('submoduletext')"
- maxlength="66"
- show-word-limit
- />
- </el-form-item> </el-col
- ></el-row>
- <el-row>
- <el-col :span="6">
- <el-form-item label="閫氱敤搴撹闊�" prop="libraryy">
- <el-upload
- class="upload-demo"
- action="https://jsonplaceholder.typicode.com/posts/"
- :on-change="handleChange"
- :file-list="fileList"
- :limit="1"
- :on-exceed="handleExceed"
- >
- <el-button size="small" type="primary">鐐瑰嚮涓婁紶</el-button>
- </el-upload>
- </el-form-item>
- </el-col></el-row
- >
- <el-row>
- <el-col :span="24">
- <el-form-item label="鍚笉娓呮枃鏈�" prop="noclearlytext">
- <el-input
- type="textarea"
- id="noclearlytext"
+ id="noClearlyText"
:rows="2"
placeholder="璇疯緭鍏ュ唴瀹�"
- @focus="handleInput('noclearlytext')"
- v-model.sync="indexform.noclearlytext"
- maxlength="66"
+ @focus="handleInput('noClearlyText')"
+ v-model.sync="indexform.noClearlyText"
show-word-limit
/>
</el-form-item> </el-col
@@ -429,7 +390,14 @@
</div>
<!-- 鎸囨爣璁剧疆 -->
<div v-if="Editprogress == 2">
- <div class="leftvlue-jbxx">鎸囨爣棰樼洰璁剧疆</div>
+ <div class="leftvlue-jbxx">
+ 鎸囨爣棰樼洰璁剧疆
+ <span style="margin-left: 30px"
+ ><el-button type="success" round @click="gettargetInfo"
+ >+閫夋嫨鎸囨爣</el-button
+ ></span
+ >
+ </div>
<el-divider></el-divider>
<el-form
ref="form"
@@ -438,12 +406,21 @@
label-width="100px"
>
<el-row>
- <el-col :span="12">
+ <el-col :span="8">
<el-form-item label="鎸囨爣鍚嶇О" prop="deptId">
<el-input
v-model="indexform.targetname"
placeholder="璇疯緭鍏ユ寚鏍囧悕绉�"
- maxlength="40"
+ maxlength="20"
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鎸囨爣鎻忚堪" prop="deptId">
+ <el-input
+ v-model="indexform.targetdesc"
+ placeholder="璇疯緭鍏ユ寚鏍囨弿杩�"
+ maxlength="60"
/>
</el-form-item>
</el-col>
@@ -452,10 +429,19 @@
<el-row>
<el-col :span="24">
<el-form-item label="鍊肩被鍨�">
- <el-radio-group v-model="indexform.valueType">
+ <el-radio-group disabled v-model="indexform.valueType">
<el-radio :label="1">閫夐」</el-radio>
<el-radio :label="2">鏂囨湰</el-radio>
<el-radio :label="3">鏁板��</el-radio>
+ </el-radio-group>
+ </el-form-item>
+
+ <el-form-item label="棰樼洰绫诲瀷">
+ <el-radio-group disabled v-model="indexform.scriptType">
+ <el-radio :label="1">鍗曢��</el-radio>
+ <el-radio :label="2">澶氶��</el-radio>
+ <el-radio :label="3">濉┖</el-radio>
+ <el-radio :label="4">闂瓟</el-radio>
</el-radio-group>
</el-form-item>
</el-col></el-row
@@ -468,6 +454,7 @@
@deloption="deloption"
@syioption="syioption"
@xiayioption="xiayioption"
+ :intent="false"
/>
</el-card>
<el-row :gutter="20">
@@ -510,14 +497,94 @@
<el-button @click="Saveproblem()">淇濆瓨鏁版嵁</el-button>
</div>
</div>
+ <el-drawer
+ title="閫夋嫨鎸囨爣"
+ :visible.sync="drawer"
+ custom-class="demo-drawer"
+ size="50%"
+ >
+ <div class="preview-left">
+ <el-form
+ :model="queryParams"
+ ref="queryForm"
+ size="small"
+ :inline="true"
+ label-width="98px"
+ >
+ <el-form-item label="鏍囬" prop="userName">
+ <el-input
+ v-model="queryParams.targetname"
+ placeholder="璇疯緭鍏�"
+ clearable
+ style="width: 200px"
+ @keyup.enter.native="gettargetInfo"
+ />
+ </el-form-item>
+
+ <el-form-item>
+ <el-button
+ type="primary"
+ icon="el-icon-search"
+ size="medium"
+ @click="gettargetInfo"
+ >鎼滅储</el-button
+ >
+ <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
+ >閲嶇疆</el-button
+ >
+ </el-form-item>
+ </el-form>
+ <el-table v-loading="loading" :data="targetList">
+ <el-table-column
+ label="鏍囬"
+ align="center"
+ key="targetname"
+ prop="targetname"
+ width="100"
+ />
+ <el-table-column
+ label="闂鍐呭"
+ align="center"
+ key="targetdesc"
+ prop="targetdesc"
+ width="200"
+ :show-overflow-tooltip="true"
+ />
+
+ <el-table-column
+ label="鎿嶄綔"
+ align="center"
+ class-name="small-padding fixed-width"
+ >
+ <template slot-scope="scope">
+ <el-button
+ size="medium"
+ type="text"
+ @click="selectlabel(scope.row)"
+ ><span class="button-textxg"
+ ><i class="el-icon-circle-plus-outline"></i>閫夋嫨</span
+ ></el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ v-show="total > 0"
+ :total="total"
+ :page.sync="queryParams.pageNum"
+ :limit.sync="queryParams.pageSize"
+ @pagination="gettargetInfo"
+ />
+ </div>
+ </el-drawer>
</div>
</template>
<script>
import { listtag } from "@/api/system/label";
import {
- getverbaltricklist,
- verbaltrickinfo,
+ gettagerlist,
+ testtagerlist,
delverbaltrickinfo,
compileverbaltrick,
getverbaltrick,
@@ -540,7 +607,9 @@
radioas: "", //濉┖棰樼瓟妗�
dynamicTags: [],
dellist: [],
+ targetList: [],
inputVisible: false,
+ drawer: false,
inputValue: "",
testvalue: "",
testgovalue: "",
@@ -548,6 +617,7 @@
indexform: {
ivrLibaScriptTargetoptionList: [],
ivrLibaScriptTagList: [],
+ suitway: "2",
},
mode: [],
questionclass: [],
@@ -555,13 +625,6 @@
courtyardlist: [],
// 鎬绘潯鏁�
total: 1,
-
- targetlist: [
- {
- value: "閫夐」1",
- label: "鍥炬枃",
- },
- ],
rules: {},
rulesa: {},
optionstag: [],
@@ -586,12 +649,8 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- userName: undefined,
- phonenumber: undefined,
- status: undefined,
- deptId: undefined,
- IDnumber: undefined,
},
+ variabledeawer: false,
};
},
@@ -612,8 +671,7 @@
if (id) {
getverbaltrick({ id: id }).then((res) => {
this.indexform = res.data;
- if (this.indexform.suitway)
- this.indexform.suitway = this.indexform.suitway.split(",");
+
this.indexform.assortid = parseInt(this.indexform.assortid);
this.variablelist = JSON.parse(this.indexform.otherdata).length
? JSON.parse(this.indexform.otherdata)
@@ -621,18 +679,8 @@
this.dynamicTags = this.indexform.ivrLibaScriptTagList.map(
this.processElement
);
-
- // this.targetlist = [
- // {
- // id: this.indexform.targetid,
- // targetname: this.indexform.targetname,
- // },
- // ];
});
}
- gettargetInfolist({ pageSize: 100, pageNum: 1 }).then((res) => {
- this.targetlist = res.rows;
- });
// 鏍�
getbaltrickclassify({}).then((res) => {
this.questionclass = res.rows;
@@ -643,9 +691,6 @@
// 淇濆瓨璇︾粏淇℃伅
Saveproblem() {
this.indexform.otherdata = JSON.stringify(this.variablelist);
- if (this.indexform.suitway) {
- this.indexform.suitway = this.indexform.suitway.join(",");
- }
if (this.indexform.id) {
this.indexform.ivrLibaScriptTargetoptionList =
@@ -660,6 +705,11 @@
console.log(this.dellist);
this.indexform.ivrLibaScriptTargetoptionList =
this.indexform.ivrLibaScriptTargetoptionList.concat(this.dellist);
+ this.indexform.targetoptions =
+ this.indexform.ivrLibaScriptTargetoptionList
+ .filter((item) => item.isope != 3) // 杩囨护鎺� isope 涓� 3 鐨勯」
+ .map((item) => item.targetvalue)
+ .join(", ");
compileverbaltrick(this.indexform).then((res) => {
if (res.code == 200) {
this.$modal.msgSuccess("淇敼鎴愬姛");
@@ -687,43 +737,74 @@
});
}
},
- remoteMethod(query) {
- if (query !== "") {
- this.loading = true;
- setTimeout(() => {
- this.loading = false;
- gettargetInfolist({ targetname: query }).then((res) => {
- this.targetlist = res.rows;
+
+ // targetchange(res) {
+ // console.log(res);
+ // gettargetInfo({ id: res }).then((res) => {
+ // console.log(res.rows[0]);
+ // this.$modal
+ // .confirm('鏄惁娣诲姞"' + res.rows[0].targetname + '"鎸囨爣鐨勯�夐」锛�')
+ // .then(() => {
+ // this.indexform.valueType = res.rows[0].valueType;
+ // this.indexform.scriptType = res.rows[0].scriptType;
+ // this.indexform.scriptTopic = res.rows[0].targetname;
+ // this.indexform.targetname = res.rows[0].targetname;
+ // this.indexform.targetid = res.rows[0].id;
+ // this.indexform.targetdesc = res.rows[0].targetdesc;
+ // this.indexform.isAvailable = "0";
+ // this.indexform.language = "鏅�氳瘽";
+ // this.indexform.isenable = res.rows[0].isenable;
+ // this.$forceUpdate();
+ // res.rows[0].targetoptionList.forEach((item) => {
+ // item.isoperation = 1;
+ // this.indexform.ivrLibaScriptTargetoptionList.push(item);
+ // });
+ // })
+ // .catch(() => {
+ // this.$modal.msgSuccess("宸插彇娑�");
+ // });
+ // });
+ // },
+ // 閫夋嫨鎸囨爣
+ selectlabel(row) {
+ this.$modal
+ .confirm(
+ '鏄惁閫夋嫨鏍囬涓�"' + row.targetname + '"鐨勬寚鏍囧苟鏇挎崲濉厖闂淇℃伅锛�'
+ )
+ .then(() => {
+ console.log(row);
+ this.indexform.valueType = row.valueType;
+ this.indexform.scriptType = row.scriptType;
+ this.indexform.scriptTopic = row.targetname;
+ this.indexform.targetname = row.targetname;
+ this.indexform.targetid = row.id;
+ this.indexform.targetdesc = row.targetdesc;
+ this.indexform.isAvailable = "0";
+ this.indexform.language = "鏅�氳瘽";
+ this.indexform.isenable = row.isenable;
+ const labellist = row.targetoptionList;
+ labellist.forEach((item) => {
+ item.isoperation = 1;
+ this.indexform.ivrLibaScriptTargetoptionList.push(item);
});
- }, 200);
- } else {
- this.targetlist = [];
- }
+ this.drawer = false;
+ })
+ .catch(() => {});
},
- targetchange(res) {
- console.log(res);
- gettargetInfo({ id: res }).then((res) => {
- console.log(res.rows[0]);
- this.$modal
- .confirm('鏄惁娣诲姞"' + res.rows[0].targetname + '"鎸囨爣鐨勯�夐」锛�')
- .then(() => {
- this.indexform.valueType = res.rows[0].valueType;
- this.indexform.questiontitle = res.rows[0].targetname;
- this.indexform.targetname = res.rows[0].targetname;
- this.indexform.questionText = res.rows[0].targetdesc;
- this.indexform.isAvailable = "0";
- this.indexform.language = "鏅�氳瘽";
- this.indexform.isenable = res.rows[0].isenable;
- this.$forceUpdate()
- res.rows[0].targetoptionList.forEach((item) => {
- item.isoperation = 1;
- this.indexform.ivrLibaScriptTargetoptionList.push(item);
- });
- })
- .catch(() => {
- this.$modal.msgSuccess("宸插彇娑�");
- });
+ gettargetInfo() {
+ gettargetInfo(this.queryParams).then((res) => {
+ console.log(res);
+ this.targetList = res.rows;
+ this.total = res.total;
+ this.drawer = true;
});
+ },
+ resetQuery() {
+ this.queryParams = {
+ pageNum: 1,
+ pageSize: 10,
+ };
+ this.gettargetInfo();
},
// 涓嬩竴姝�
@@ -925,14 +1006,14 @@
let inputValueArr = "";
let el = document.querySelector("#" + this.currentInputId);
//el.selectionStart; 杩欏氨鏄綋鍓嶅厜鏍囨墍鍦ㄧ殑浣嶇疆锛堝瓧绗︿覆涓瓧绗︾殑index锛�
- if (this.currentInputId == "questionText") {
- inputValueArr = this.indexform.questionText.split("");
- } else if (this.currentInputId == "nomatchtext") {
- inputValueArr = this.indexform.nomatchtext.split("");
- } else if (this.currentInputId == "sliencetext") {
- inputValueArr = this.indexform.sliencetext.split("");
- } else if (this.currentInputId == "noclearlytext") {
- inputValueArr = this.indexform.noclearlytext.split("");
+ if (this.currentInputId == "scriptContent") {
+ inputValueArr = this.indexform.scriptContent.split("");
+ } else if (this.currentInputId == "noMatchText") {
+ inputValueArr = this.indexform.noMatchText.split("");
+ } else if (this.currentInputId == "slienceText") {
+ inputValueArr = this.indexform.slienceText.split("");
+ } else if (this.currentInputId == "noClearlyText") {
+ inputValueArr = this.indexform.noClearlyText.split("");
} else if (this.currentInputId == "submoduletext") {
inputValueArr = this.indexform.submoduletext.split("");
} else {
@@ -947,14 +1028,14 @@
// 鎶婃暟缁勯噸鏂拌浆鎹负瀛楃涓插苟璧嬪��
inputValueArr = inputValueArr.join("");
console.log(inputValueArr);
- if (this.currentInputId == "questionText") {
- this.indexform.questionText = inputValueArr;
- } else if (this.currentInputId == "nomatchtext") {
- this.indexform.nomatchtext = inputValueArr;
- } else if (this.currentInputId == "sliencetext") {
- this.indexform.sliencetext = inputValueArr;
- } else if (this.currentInputId == "noclearlytext") {
- this.indexform.noclearlytext = inputValueArr;
+ if (this.currentInputId == "scriptContent") {
+ this.indexform.scriptContent = inputValueArr;
+ } else if (this.currentInputId == "noMatchText") {
+ this.indexform.noMatchText = inputValueArr;
+ } else if (this.currentInputId == "slienceText") {
+ this.indexform.slienceText = inputValueArr;
+ } else if (this.currentInputId == "noClearlyText") {
+ this.indexform.noClearlyText = inputValueArr;
} else if (this.currentInputId == "submoduletext") {
this.indexform.submoduletext = inputValueArr;
} else {
@@ -1062,6 +1143,37 @@
.tsgname:hover {
background: #3366f5;
}
+.tsgnamebj {
+ width: 90px;
+ margin-left: 15px;
+ text-align: center;
+ cursor: pointer;
+ height: 40px;
+ line-height: 40px;
+ background: #49dbb7;
+ color: #ffff;
+ font-size: 18px;
+ border-radius: 5px;
+}
+.tsgnamebj:hover {
+ background: #27c449;
+}
+.preview-left {
+ margin: 20px;
+ // margin: 20px;
+ padding: 30px;
+ background: #ffff;
+ border: 1px solid #dcdfe6;
+ -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+ 0 0 6px 0 rgba(0, 0, 0, 0.04);
+ .scriptTopic-dev {
+ margin-bottom: 25px;
+ font-size: 20px !important;
+ .dev-text {
+ margin-bottom: 10px;
+ }
+ }
+}
::v-deep .addtopic-input {
input {
--
Gitblit v1.9.3