|
|
@@ -69,27 +69,55 @@
|
|
|
<el-dialog
|
|
|
title="添加拼音校正"
|
|
|
:visible="visible"
|
|
|
- width="460px"
|
|
|
+ width="660px"
|
|
|
:close-on-click-modal="false"
|
|
|
class="add-chapter"
|
|
|
@close="dialogClose"
|
|
|
>
|
|
|
- <el-form ref="form" :model="data" :rules="rules" label-width="80px">
|
|
|
- <el-form-item label="词汇" prop="word">
|
|
|
- <el-input ref="word" v-model="data.word" placeholder="请输入词汇" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="词性" prop="pos">
|
|
|
- <el-select v-model="data.pos">
|
|
|
- <el-option v-for="item in cxList" :key="item.pos" :label="item.pos_name" :value="item.pos" />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="拼音" prop="pinyin">
|
|
|
- <el-input ref="pinyin" v-model="data.pinyin" placeholder="多个拼音用,分割" />
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="连体拼音" prop="pinyin_lt">
|
|
|
- <el-input ref="pinyin_lt" v-model="data.pinyin_lt" placeholder="请输入连体拼音" />
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
+ <div class="pinyin-correction-add">
|
|
|
+ <el-form ref="form" :model="data" :rules="rules" label-width="80px">
|
|
|
+ <el-form-item label="词汇" prop="word">
|
|
|
+ <el-input ref="word" v-model="data.word" placeholder="请输入词汇" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="词性" prop="pos">
|
|
|
+ <el-select v-model="data.pos">
|
|
|
+ <el-option v-for="item in cxList" :key="item.pos" :label="item.pos_name" :value="item.pos" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="拼音" prop="pinyin">
|
|
|
+ <el-input
|
|
|
+ ref="pinyin"
|
|
|
+ v-model="data.pinyin"
|
|
|
+ placeholder="多个拼音用,分割"
|
|
|
+ @blur="handleReplaceTone(data.pinyin, 'pinyin')"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="连体拼音" prop="pinyin_lt">
|
|
|
+ <el-input
|
|
|
+ ref="pinyin_lt"
|
|
|
+ v-model="data.pinyin_lt"
|
|
|
+ placeholder="请输入连体拼音"
|
|
|
+ @blur="handleReplaceTone(data.pinyin_lt, 'pinyin_lt')"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div class="yunmu">
|
|
|
+ <span>点击可复制</span>
|
|
|
+ <table border="1" class="yunmu-table">
|
|
|
+ <tr v-for="(item, index) in tableData" :key="'tableData' + index">
|
|
|
+ <td
|
|
|
+ v-for="(tdItem, tdIndex) in item"
|
|
|
+ :key="'td' + index + tdIndex"
|
|
|
+ :id="'td' + index + tdIndex"
|
|
|
+ @click="CopyToClipboard('td' + index + tdIndex)"
|
|
|
+ style="font-family: 'Sans-GBNPC'; background: #fff"
|
|
|
+ >
|
|
|
+ {{ tdItem }}
|
|
|
+ </td>
|
|
|
+ </tr>
|
|
|
+ </table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div slot="footer">
|
|
|
<el-button @click="dialogClose">取消</el-button>
|
|
|
<el-button type="primary" :loading="loading" @click="addTemplate">确定</el-button>
|
|
|
@@ -140,6 +168,21 @@ export default {
|
|
|
visible: false,
|
|
|
loading: false,
|
|
|
cxList: [],
|
|
|
+ tableData: [
|
|
|
+ ['ā', 'á', 'ǎ', 'à', 'a'],
|
|
|
+ ['ō', 'ó', 'ǒ', 'ò', 'o'],
|
|
|
+ ['ē', 'é', 'ě', 'è', 'e'],
|
|
|
+ ['ī', 'í', 'ǐ', 'ì', 'i'],
|
|
|
+ ['ū', 'ú', 'ǔ', 'ù', 'u'],
|
|
|
+ ['ǖ', 'ǘ', 'ǚ', 'ǜ', 'ü'],
|
|
|
+ ['Ā', 'Á', 'Â', 'À', 'A'],
|
|
|
+ ['Ō', 'Ó', 'Ô', 'Ò', 'O'],
|
|
|
+ ['Ē', 'É', 'Ê', 'È', 'E'],
|
|
|
+ ['Ī', 'Í', 'Î', 'Ì', 'I'],
|
|
|
+ ['Ū', 'Ú', 'Û', 'Ù', 'U'],
|
|
|
+ ['n', 'ń', 'ň', 'ǹ', 'n'],
|
|
|
+ ['m̄', 'ḿ', 'm', 'm̀', 'm'],
|
|
|
+ ],
|
|
|
};
|
|
|
},
|
|
|
created() {
|
|
|
@@ -155,9 +198,14 @@ export default {
|
|
|
methods: {
|
|
|
// 获取词性列表
|
|
|
getCXList() {
|
|
|
- this.cxList = [];
|
|
|
+ this.cxList = [
|
|
|
+ {
|
|
|
+ pos: '',
|
|
|
+ pos_name: '任意',
|
|
|
+ },
|
|
|
+ ];
|
|
|
toolGetCXList().then(({ cx_list }) => {
|
|
|
- this.cxList = cx_list;
|
|
|
+ this.cxList = this.cxList.concat(cx_list);
|
|
|
});
|
|
|
},
|
|
|
handleSort(value) {
|
|
|
@@ -245,6 +293,129 @@ export default {
|
|
|
})
|
|
|
.catch(() => {});
|
|
|
},
|
|
|
+ CopyToClipboard(element) {
|
|
|
+ var doc = document,
|
|
|
+ text = doc.getElementById(element),
|
|
|
+ range,
|
|
|
+ selection;
|
|
|
+ if (doc.body.createTextRange) {
|
|
|
+ range = doc.body.createTextRange();
|
|
|
+ range.moveToElementText(text);
|
|
|
+ range.select();
|
|
|
+ } else if (window.getSelection) {
|
|
|
+ selection = window.getSelection();
|
|
|
+ range = doc.createRange();
|
|
|
+ range.selectNodeContents(text);
|
|
|
+ selection.removeAllRanges();
|
|
|
+ selection.addRange(range);
|
|
|
+ }
|
|
|
+ document.execCommand('copy');
|
|
|
+ this.$message({
|
|
|
+ message: '复制成功',
|
|
|
+ type: 'success',
|
|
|
+ });
|
|
|
+ window.getSelection().removeAllRanges();
|
|
|
+ },
|
|
|
+ handleReplaceTone(e, obj) {
|
|
|
+ let _this = this;
|
|
|
+ _this.$nextTick(() => {
|
|
|
+ let value = e;
|
|
|
+ _this.resArr = [];
|
|
|
+ if (value) {
|
|
|
+ let valueArr = [];
|
|
|
+ value.replace(/\s+/g, ' ');
|
|
|
+ valueArr = value.split(' ');
|
|
|
+ // let reg = /\s+/g;
|
|
|
+ // valueArr = value.split(reg);
|
|
|
+
|
|
|
+ valueArr.forEach((item, index) => {
|
|
|
+ this.handleValue(item);
|
|
|
+ });
|
|
|
+ let str = '';
|
|
|
+ setTimeout(() => {
|
|
|
+ _this.resArr.forEach((item) => {
|
|
|
+ str += ' ';
|
|
|
+ item.forEach((sItem) => {
|
|
|
+ if (sItem.number && sItem.con) {
|
|
|
+ let number = Number(sItem.number);
|
|
|
+ let con = sItem.con;
|
|
|
+ let word = _this.addTone(number, con);
|
|
|
+ str += word;
|
|
|
+ } else if (sItem.number) {
|
|
|
+ str += sItem.number;
|
|
|
+ } else if (sItem.con) {
|
|
|
+ str += ` ${sItem.con} `;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+
|
|
|
+ this.data[obj] = str.trim().replace(/\s+/g, '');
|
|
|
+ }, 10);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleValue(valItem) {
|
|
|
+ let reg = /\d/;
|
|
|
+ let reg2 = /[A-Za-z]+\d/g;
|
|
|
+ let numList = [];
|
|
|
+ let valArr = valItem.split('');
|
|
|
+ if (reg2.test(valItem)) {
|
|
|
+ for (let i = 0; i < valArr.length; i++) {
|
|
|
+ let item = valItem[i];
|
|
|
+ if (reg.test(item)) {
|
|
|
+ let numIndex = numList.length == 0 ? 0 : numList[numList.length - 1].index;
|
|
|
+ let con = valItem.substring(numIndex, i);
|
|
|
+ con = con.replace(/\d/g, '');
|
|
|
+ let obj = {
|
|
|
+ index: i,
|
|
|
+ number: item,
|
|
|
+ con,
|
|
|
+ isTran: true,
|
|
|
+ };
|
|
|
+ numList.push(obj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ numList = [];
|
|
|
+ }
|
|
|
+ if (numList.length == 0) {
|
|
|
+ this.resArr.push([{ con: valItem }]);
|
|
|
+ } else {
|
|
|
+ this.resArr.push(numList);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ addTone(number, con) {
|
|
|
+ let _this = this;
|
|
|
+ let zmList = ['a', 'o', 'e', 'i', 'u', 'v', 'A', 'O', 'E', 'I', 'U', 'n', 'm'];
|
|
|
+ if (number) {
|
|
|
+ for (let i = 0; i < zmList.length; i++) {
|
|
|
+ let zm = zmList[i];
|
|
|
+ if (con.indexOf(zm) > -1) {
|
|
|
+ let zm2 = _this.tableData[i][number - 1];
|
|
|
+ if (con.indexOf('iu') > -1) {
|
|
|
+ zm2 = _this.tableData[4][number - 1];
|
|
|
+ con = con.replace('u', zm2);
|
|
|
+ } else if (con.indexOf('ui') > -1) {
|
|
|
+ zm2 = _this.tableData[3][number - 1];
|
|
|
+ con = con.replace('i', zm2);
|
|
|
+ } else if (
|
|
|
+ con.indexOf('yv') > -1 ||
|
|
|
+ con.indexOf('jv') > -1 ||
|
|
|
+ con.indexOf('qv') > -1 ||
|
|
|
+ con.indexOf('xv') > -1
|
|
|
+ ) {
|
|
|
+ zm2 = _this.tableData[4][number - 1];
|
|
|
+ con = con.replace('v', zm2);
|
|
|
+ } else {
|
|
|
+ con = con.replace(zm, zm2);
|
|
|
+ }
|
|
|
+
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return con;
|
|
|
+ },
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
@@ -267,4 +438,24 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.pinyin-correction-add {
|
|
|
+ display: flex;
|
|
|
+ gap: 30px;
|
|
|
+
|
|
|
+ .yunmu {
|
|
|
+ &-table {
|
|
|
+ width: 172px;
|
|
|
+
|
|
|
+ > tr {
|
|
|
+ td {
|
|
|
+ height: 26px;
|
|
|
+ font-size: 16px;
|
|
|
+ text-align: center;
|
|
|
+ cursor: pointer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|