|
@@ -4,8 +4,8 @@
|
|
|
<div class="main" v-if="!isPreview">
|
|
|
<div class="from">
|
|
|
<div class="type">
|
|
|
- <div :class="[typeIndex == 0 ? 'sele' : '']" @click="cutType(0)">字模式</div>
|
|
|
- <div :class="[typeIndex == 1 ? 'sele' : '']" @click="cutType(1)">词模式</div>
|
|
|
+ <div :class="[typeIndex == 0 ? 'sele' : '']" @click="cutType(0)">字词模式</div>
|
|
|
+ <div :class="[typeIndex == 1 ? 'sele' : '']" @click="cutType(1)">句模式</div>
|
|
|
</div>
|
|
|
<div class="from_main">
|
|
|
<div class="left">
|
|
@@ -52,40 +52,55 @@
|
|
|
>
|
|
|
</el-switch>
|
|
|
<template v-if="typeIndex == 0">
|
|
|
- <el-switch active-color="#424242" v-model="from.StorkesUnfold" active-text="笔顺展开"> </el-switch>
|
|
|
+ <el-switch
|
|
|
+ active-color="#424242"
|
|
|
+ v-model="from.StorkesUnfold"
|
|
|
+ active-text="笔顺展开"
|
|
|
+ style="margin-right: 40px"
|
|
|
+ >
|
|
|
+ </el-switch>
|
|
|
+ <el-switch
|
|
|
+ active-color="#424242"
|
|
|
+ v-model="from.wordPinyin"
|
|
|
+ active-text="拼音"
|
|
|
+ style="margin-right: 40px"
|
|
|
+ >
|
|
|
+ </el-switch>
|
|
|
+ <el-switch active-color="#424242" v-model="from.wordVoice" active-text="读音"> </el-switch>
|
|
|
</template>
|
|
|
</div>
|
|
|
<div class="title" style="margin-top: 24px">书写配置:</div>
|
|
|
<div class="dv">
|
|
|
<div style="margin-right: 16px">
|
|
|
- <span class="title">书写格</span>
|
|
|
+ <span class="title">描红</span>
|
|
|
<el-input
|
|
|
style="width: 60px; text-align: center"
|
|
|
- v-model="from.writeBoxNumber"
|
|
|
- onkeyup="value=value.replace(/^0+(\d)|[^\d]+/g,'')"
|
|
|
+ v-model="from.miaoRedBoxNumber"
|
|
|
class="numbre-input"
|
|
|
+ onkeyup="value=value.replace(/^0+(\d)|[^\d]+/g,'')"
|
|
|
></el-input>
|
|
|
<span style="margin-left: 8px">{{ typeIndex == 0 ? '行' : '句' }}</span>
|
|
|
</div>
|
|
|
<div style="margin-right: 16px">
|
|
|
- <span class="title">描红</span>
|
|
|
+ <span class="title">默写</span>
|
|
|
<el-input
|
|
|
style="width: 60px; text-align: center"
|
|
|
- v-model="from.miaoRedBoxNumber"
|
|
|
- class="numbre-input"
|
|
|
+ v-model="from.writeBoxNumber"
|
|
|
onkeyup="value=value.replace(/^0+(\d)|[^\d]+/g,'')"
|
|
|
+ class="numbre-input"
|
|
|
></el-input>
|
|
|
- <span style="margin-left: 8px">{{ typeIndex == 0 ? '格' : '句' }}</span>
|
|
|
+ <span style="margin-left: 8px">{{ typeIndex == 0 ? '行' : '句' }}</span>
|
|
|
</div>
|
|
|
<div>
|
|
|
- <span class="title">文末空行</span>
|
|
|
+ <!-- <span class="title">文末空行</span>
|
|
|
<el-input
|
|
|
style="width: 60px; text-align: center"
|
|
|
v-model="from.lastNullrow"
|
|
|
onkeyup="value=value.replace(/^0+(\d)|[^\d]+/g,'')"
|
|
|
class="numbre-input"
|
|
|
></el-input>
|
|
|
- <span style="margin-left: 8px">行</span>
|
|
|
+ <span style="margin-left: 8px">行</span> -->
|
|
|
+ <el-checkbox class="auto-complete" v-model="from.autoCompletion">自动补足页面空白</el-checkbox>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="dv">
|
|
@@ -113,6 +128,8 @@
|
|
|
:data="itemT"
|
|
|
:pageNumber="indexT + 1"
|
|
|
:totalNumber="writeTableData.result.length"
|
|
|
+ :fontSize="from.fontSize"
|
|
|
+ :audio_file_obj="writeTableData.audio_file_obj"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -134,6 +151,8 @@
|
|
|
:data="writeTableData.result[previewIndex]"
|
|
|
:pageNumber="previewIndex + 1"
|
|
|
:totalNumber="writeTableData.result.length"
|
|
|
+ :fontSize="from.fontSize"
|
|
|
+ :audio_file_obj="writeTableData.audio_file_obj"
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -159,6 +178,7 @@ import writeTable from './writeTable.vue';
|
|
|
import html2canvas from 'html2canvas';
|
|
|
import { jsPDF } from 'jspdf';
|
|
|
import canvg from 'canvg';
|
|
|
+import { pinyin } from 'pinyin-pro';
|
|
|
|
|
|
import FileSaver from 'file-saver';
|
|
|
import htmlDocx from 'html-docx-js/dist/html-docx';
|
|
@@ -180,9 +200,12 @@ export default {
|
|
|
fontSize: 'center',
|
|
|
playStorkes: true,
|
|
|
StorkesUnfold: true,
|
|
|
+ wordPinyin: true, // 拼音
|
|
|
+ wordVoice: true, // 读音
|
|
|
writeBoxNumber: '0', //书写行
|
|
|
miaoRedBoxNumber: '0', //描红格
|
|
|
lastNullrow: '0', //文本末空行数
|
|
|
+ autoCompletion: true, // 自动补足页面空白
|
|
|
miaoRedBgcolor: '#E1E1E1', //描红底色
|
|
|
writeColor: '#000000', //书写颜色
|
|
|
borderColor: '#D65353', //边框颜色
|
|
@@ -275,14 +298,12 @@ export default {
|
|
|
return false;
|
|
|
}
|
|
|
// 开始打印
|
|
|
- console.log(content);
|
|
|
var contentWidth = content.width;
|
|
|
var contentHeight = content.height;
|
|
|
//以下是对svg的处理
|
|
|
var nodesToRecover = [];
|
|
|
var nodesToRemove = [];
|
|
|
var svgElem = $('#pdfDom').find('svg-icon'); //divReport为需要截取成图片的dom的id
|
|
|
- console.log(svgElem);
|
|
|
svgElem.each(function (index, node) {
|
|
|
var parentNode = node.parentNode;
|
|
|
var svg = node.outerHTML.trim();
|
|
@@ -399,6 +420,8 @@ export default {
|
|
|
typeIndex: this.typeIndex,
|
|
|
playStorkes: this.from.playStorkes,
|
|
|
StorkesUnfold: this.from.StorkesUnfold,
|
|
|
+ wordVoice: this.from.wordVoice,
|
|
|
+ wordPinyin: this.from.wordPinyin,
|
|
|
BoxbgType: this.from.BoxbgType,
|
|
|
miaoRedBgcolor: this.from.miaoRedBgcolor,
|
|
|
writeColor: this.from.writeColor,
|
|
@@ -415,6 +438,7 @@ export default {
|
|
|
data.pageNumber = 9;
|
|
|
data.marginBottom = '15px';
|
|
|
data.playWidth = '11px';
|
|
|
+ data.firstPageLine = 5;
|
|
|
} else if (this.from.fontSize == 'center') {
|
|
|
data.width = '49px';
|
|
|
data.fontSize = '38px';
|
|
@@ -422,6 +446,7 @@ export default {
|
|
|
data.pageNumber = 12;
|
|
|
data.marginBottom = '8px';
|
|
|
data.playWidth = '9px';
|
|
|
+ data.firstPageLine = 6;
|
|
|
} else {
|
|
|
data.width = '41px';
|
|
|
data.fontSize = '31px';
|
|
@@ -429,23 +454,21 @@ export default {
|
|
|
data.pageNumber = 14;
|
|
|
data.marginBottom = '7px';
|
|
|
data.playWidth = '8px';
|
|
|
+ data.firstPageLine = 7;
|
|
|
}
|
|
|
if (this.from.content == '') {
|
|
|
this.$message.warning('请先输入内容');
|
|
|
return;
|
|
|
}
|
|
|
- if (!(this.from.writeBoxNumber || this.from.miaoRedBoxNumber || this.from.lastNullrow)) {
|
|
|
+ if (!(this.from.writeBoxNumber || this.from.miaoRedBoxNumber || this.from.autoCompletion)) {
|
|
|
this.$message.warning('请先输入配置内容');
|
|
|
return;
|
|
|
}
|
|
|
if (Number(this.from.writeBoxNumber) < Number(this.from.miaoRedBoxNumber) && this.typeIndex == 1) {
|
|
|
- this.$message.warning('书写格数不能小于描红数');
|
|
|
+ this.$message.warning('默写数不能小于描红数');
|
|
|
return;
|
|
|
- } else if (
|
|
|
- Number(this.from.writeBoxNumber) < Math.ceil(this.from.miaoRedBoxNumber / data.rowNumber) &&
|
|
|
- this.typeIndex == 0
|
|
|
- ) {
|
|
|
- this.$message.warning('书写格数不能小于描红所用行数');
|
|
|
+ } else if (Number(this.from.writeBoxNumber) < Math.ceil(this.from.miaoRedBoxNumber) && this.typeIndex == 0) {
|
|
|
+ this.$message.warning('默写数不能小于描红所用行数');
|
|
|
return;
|
|
|
}
|
|
|
let option = [];
|
|
@@ -513,10 +536,12 @@ export default {
|
|
|
});
|
|
|
},
|
|
|
// 生成
|
|
|
- handleEvent(hzDetailList, oldData) {
|
|
|
+ async handleEvent(hzDetailList, oldData) {
|
|
|
this.writeTableData = null;
|
|
|
let data = JSON.parse(JSON.stringify(oldData));
|
|
|
let contentArr = this.from.content.split('\n');
|
|
|
+ let final_result = [];
|
|
|
+ let audio_file_obj = {};
|
|
|
for (let i = 0; i < contentArr.length; i++) {
|
|
|
if (data.typeIndex == 0) {
|
|
|
if (contentArr[i].length == 1) {
|
|
@@ -527,14 +552,22 @@ export default {
|
|
|
data.option.push(obj);
|
|
|
}
|
|
|
} else {
|
|
|
+ let conItem = '';
|
|
|
for (let m = 0; m < contentArr[i].length; m++) {
|
|
|
if (/^[\u4e00-\u9fa5]/.test(contentArr[i][m])) {
|
|
|
- let obj = {
|
|
|
- con: contentArr[i][m],
|
|
|
- };
|
|
|
- data.option.push(obj);
|
|
|
+ conItem += contentArr[i][m];
|
|
|
+ // let obj = {
|
|
|
+ // con: contentArr[i][m],
|
|
|
+ // };
|
|
|
+ // data.option.push(obj);
|
|
|
}
|
|
|
}
|
|
|
+ if (conItem) {
|
|
|
+ let obj = {
|
|
|
+ con: conItem,
|
|
|
+ };
|
|
|
+ data.option.push(obj);
|
|
|
+ }
|
|
|
}
|
|
|
} else {
|
|
|
let contentItem = '';
|
|
@@ -546,15 +579,33 @@ export default {
|
|
|
if (contentItem) data.option.push(contentItem);
|
|
|
}
|
|
|
}
|
|
|
- // 字模式 笔顺打开
|
|
|
- if (data.typeIndex == 0) {
|
|
|
- data.option.forEach((item, i) => {
|
|
|
- item.hzDetail = {
|
|
|
- hz_json: null,
|
|
|
+ await data.option.forEach(async (item, i) => {
|
|
|
+ let hz_list = [];
|
|
|
+ item.con.split('').forEach((items) => {
|
|
|
+ let res = JSON.parse(JSON.stringify(hzDetailList[items]));
|
|
|
+ let obj = {
|
|
|
+ con: items,
|
|
|
+ hzDetail: {
|
|
|
+ hz_json: res,
|
|
|
+ },
|
|
|
};
|
|
|
- let res = JSON.parse(JSON.stringify(hzDetailList[item.con]));
|
|
|
- this.$set(data.option[i].hzDetail, 'hz_json', res);
|
|
|
+ hz_list.push(obj);
|
|
|
+ });
|
|
|
+ item.hz_list = hz_list;
|
|
|
+ item.pinyin = pinyin(item.con);
|
|
|
+ let MethodName = 'tool-PinyinToVoiceFile';
|
|
|
+ let datas = {
|
|
|
+ pinyin: item.pinyin.split(' ').join(','),
|
|
|
+ };
|
|
|
+ await getLogin(MethodName, datas).then((res) => {
|
|
|
+ if (res.status === 1) {
|
|
|
+ audio_file_obj[item.con] = res.file_id;
|
|
|
+ }
|
|
|
});
|
|
|
+ });
|
|
|
+
|
|
|
+ // 字模式 笔顺打开
|
|
|
+ if (data.typeIndex == 0) {
|
|
|
if (data.StorkesUnfold) {
|
|
|
let allArr = [];
|
|
|
data.option.forEach((item) => {
|
|
@@ -562,93 +613,130 @@ export default {
|
|
|
let hzLength = 1;
|
|
|
let arrOption = [];
|
|
|
// 拆分字和笔画为每一项
|
|
|
- arr.push({
|
|
|
- con: item.con,
|
|
|
- hzDetail: JSON.parse(JSON.stringify(item.hzDetail.hz_json)),
|
|
|
- });
|
|
|
- if (item.hzDetail && item.hzDetail.hz_json && item.hzDetail.hz_json.medians) {
|
|
|
- hzLength += item.hzDetail.hz_json.medians.length;
|
|
|
- item.hzDetail.hz_json.medians.forEach((items, indexs) => {
|
|
|
- arr.push({
|
|
|
- con: item.con,
|
|
|
- answer: indexs + 1,
|
|
|
- hzDetail: JSON.parse(JSON.stringify(item.hzDetail.hz_json)),
|
|
|
+ item.hz_list.forEach((items, indexss) => {
|
|
|
+ let item_row = []; // 每个字的描红内容
|
|
|
+ if (items.hzDetail && items.hzDetail.hz_json && items.hzDetail.hz_json.medians) {
|
|
|
+ items.hzDetail.hz_json.medians.forEach((itemss, indexs) => {
|
|
|
+ item_row.push({
|
|
|
+ con: items.con,
|
|
|
+ answer: indexs + 1,
|
|
|
+ hzDetail: JSON.parse(JSON.stringify(items.hzDetail.hz_json)),
|
|
|
+ });
|
|
|
});
|
|
|
- });
|
|
|
- }
|
|
|
- // 如果不满一行则补满
|
|
|
- let newarr = [];
|
|
|
- if (arr.length % data.rowNumber != 0) {
|
|
|
- let num = data.rowNumber - (arr.length % data.rowNumber);
|
|
|
- for (let i = 0; i < num; i++) {
|
|
|
- arr.push({});
|
|
|
}
|
|
|
- if (arr.length > data.rowNumber) {
|
|
|
- newarr = this.arrSplice(arr, data.rowNumber);
|
|
|
- newarr.forEach((itemss) => {
|
|
|
- allArr.push(itemss);
|
|
|
- });
|
|
|
+ if (item_row.length % data.rowNumber !== 0) {
|
|
|
+ let num = data.rowNumber - (item_row.length % data.rowNumber);
|
|
|
+ for (let i = 0; i < num; i++) {
|
|
|
+ item_row.push({});
|
|
|
+ }
|
|
|
+ if (item_row.length > data.rowNumber) {
|
|
|
+ newarr = this.arrSplice(item_row, data.rowNumber);
|
|
|
+ newarr.forEach((itemss) => {
|
|
|
+ arr.push(itemss);
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ arr.push(item_row);
|
|
|
+ }
|
|
|
} else {
|
|
|
- allArr.push(arr);
|
|
|
+ arr.push(item_row);
|
|
|
}
|
|
|
- } else {
|
|
|
- allArr.push(arr);
|
|
|
- }
|
|
|
+ });
|
|
|
// 添加书写行
|
|
|
if (data.writeBoxNumber) {
|
|
|
for (let i = 0; i < data.writeBoxNumber; i++) {
|
|
|
let numrow = [];
|
|
|
for (let k = 0; k < data.rowNumber; k++) {
|
|
|
numrow.push({
|
|
|
- con: item.con,
|
|
|
+ con: item.con.split('')[0],
|
|
|
write: true,
|
|
|
});
|
|
|
}
|
|
|
// 描红格
|
|
|
if (i == 0 && data.miaoRedBoxNumber) {
|
|
|
let m =
|
|
|
- Math.ceil(data.miaoRedBoxNumber / data.rowNumber) > data.writeBoxNumber
|
|
|
- ? data.writeBoxNumber
|
|
|
- : Math.ceil(data.miaoRedBoxNumber / data.rowNumber);
|
|
|
- for (let j = 0; j < m; j++) {
|
|
|
- let miaoArr = [];
|
|
|
- for (let l = 0; l < data.rowNumber; l++) {
|
|
|
- if (j * data.rowNumber + l < data.miaoRedBoxNumber) {
|
|
|
- miaoArr[l] = {
|
|
|
- con: item.con,
|
|
|
+ Number(data.miaoRedBoxNumber) > Number(data.writeBoxNumber)
|
|
|
+ ? Number(data.writeBoxNumber)
|
|
|
+ : Number(data.miaoRedBoxNumber);
|
|
|
+ let s = Math.ceil((m * data.rowNumber) / item.hz_list.length); // 循环多少次词组
|
|
|
+ let miaoArr = [];
|
|
|
+ for (let j = 0; j < s; j++) {
|
|
|
+ item.hz_list.forEach((items) => {
|
|
|
+ if (miaoArr.length < m * data.rowNumber) {
|
|
|
+ miaoArr.push({
|
|
|
+ con: items.con,
|
|
|
miaoRed: true,
|
|
|
write: true,
|
|
|
- };
|
|
|
- } else {
|
|
|
- miaoArr[l] = {
|
|
|
- con: item.con,
|
|
|
- write: true,
|
|
|
- };
|
|
|
+ });
|
|
|
}
|
|
|
- }
|
|
|
- arrOption.push(JSON.parse(JSON.stringify(miaoArr)));
|
|
|
+ });
|
|
|
+ }
|
|
|
+ let result = []; // 将描红数组切割为二维数组
|
|
|
+ for (let i = 0; i < miaoArr.length; i += data.rowNumber) {
|
|
|
+ result.push(miaoArr.slice(i, i + data.rowNumber));
|
|
|
}
|
|
|
+ arrOption = JSON.parse(JSON.stringify(result));
|
|
|
}
|
|
|
arrOption.push(numrow);
|
|
|
arrOption = arrOption.slice(0, data.writeBoxNumber);
|
|
|
}
|
|
|
arrOption.forEach((itemA) => {
|
|
|
- allArr.push(itemA);
|
|
|
+ arr.push(itemA);
|
|
|
});
|
|
|
}
|
|
|
- });
|
|
|
- if (data.lastNullrow) {
|
|
|
- for (let i = 0; i < data.lastNullrow; i++) {
|
|
|
- let numrow = [];
|
|
|
- for (let k = 0; k < data.rowNumber; k++) {
|
|
|
- numrow.push({
|
|
|
- write: true,
|
|
|
+ if (this.from.autoCompletion) {
|
|
|
+ let complet_line = 0; // 需要补齐的行数
|
|
|
+ if (arr.length <= data.firstPageLine) {
|
|
|
+ complet_line = data.firstPageLine - arr.length;
|
|
|
+ } else {
|
|
|
+ complet_line = data.pageNumber - ((arr.length - data.firstPageLine) % data.pageNumber);
|
|
|
+ }
|
|
|
+ for (let i = 0; i < complet_line; i++) {
|
|
|
+ let numrow = [];
|
|
|
+ for (let k = 0; k < data.rowNumber; k++) {
|
|
|
+ numrow.push({
|
|
|
+ write: true,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ arr.push(numrow);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (arr.length <= data.firstPageLine) {
|
|
|
+ let obj = {
|
|
|
+ fileList: [],
|
|
|
+ info: {
|
|
|
+ definition: '',
|
|
|
+ collocation: '',
|
|
|
+ exampleSent: '',
|
|
|
+ },
|
|
|
+ list: arr,
|
|
|
+ hz_info: item.hz_list,
|
|
|
+ pinyin: item.pinyin,
|
|
|
+ con: item.con,
|
|
|
+ };
|
|
|
+ final_result.push(obj);
|
|
|
+ } else {
|
|
|
+ let obj = {
|
|
|
+ fileList: [],
|
|
|
+ info: {
|
|
|
+ definition: '',
|
|
|
+ collocation: '',
|
|
|
+ exampleSent: '',
|
|
|
+ },
|
|
|
+ list: arr.slice(0, data.firstPageLine),
|
|
|
+ hz_info: item.hz_list,
|
|
|
+ pinyin: item.pinyin,
|
|
|
+ con: item.con,
|
|
|
+ };
|
|
|
+ final_result.push(obj);
|
|
|
+ for (let i = data.firstPageLine; i < arr.length; i += data.pageNumber) {
|
|
|
+ final_result.push({
|
|
|
+ list: arr.slice(i, i + data.pageNumber),
|
|
|
});
|
|
|
}
|
|
|
- allArr.push(numrow);
|
|
|
}
|
|
|
- }
|
|
|
- data.result = this.arrSplice(allArr, data.pageNumber);
|
|
|
+ });
|
|
|
+ data.result = final_result;
|
|
|
+ data.audio_file_obj = audio_file_obj;
|
|
|
this.writeTableData = data;
|
|
|
} else {
|
|
|
let allArr = [];
|
|
@@ -745,6 +833,7 @@ export default {
|
|
|
data.result = this.arrSplice(allArr, data.pageNumber);
|
|
|
this.writeTableData = data;
|
|
|
}
|
|
|
+ console.log(this.writeTableData);
|
|
|
this.$forceUpdate();
|
|
|
this.isCread = true;
|
|
|
} else {
|
|
@@ -832,6 +921,7 @@ export default {
|
|
|
});
|
|
|
});
|
|
|
this.writeTableData = data;
|
|
|
+ console.log(this.writeTableData);
|
|
|
this.$forceUpdate();
|
|
|
this.isCread = true;
|
|
|
}
|
|
@@ -915,9 +1005,12 @@ export default {
|
|
|
fontSize: 'center',
|
|
|
playStorkes: true,
|
|
|
StorkesUnfold: true,
|
|
|
+ wordPinyin: true, // 拼音
|
|
|
+ wordVoice: true, // 读音
|
|
|
writeBoxNumber: '0', //书写行
|
|
|
miaoRedBoxNumber: '0', //描红格
|
|
|
lastNullrow: '0', //文本末空行数
|
|
|
+ autoCompletion: true, // 自动补足页面空白
|
|
|
miaoRedBgcolor: '#E1E1E1', //描红底色
|
|
|
writeColor: '#000000', //书写颜色
|
|
|
borderColor: '#D65353', //边框颜色
|
|
@@ -958,19 +1051,19 @@ export default {
|
|
|
box-sizing: border-box;
|
|
|
.type {
|
|
|
display: flex;
|
|
|
- width: 104px;
|
|
|
+ width: 116px;
|
|
|
height: 28px;
|
|
|
background: #eeeeee;
|
|
|
border-radius: 4px;
|
|
|
padding: 2px;
|
|
|
> div {
|
|
|
- width: 52px;
|
|
|
font-weight: 400;
|
|
|
font-size: 12px;
|
|
|
line-height: 28px;
|
|
|
text-align: center;
|
|
|
color: #888888;
|
|
|
cursor: pointer;
|
|
|
+ padding: 0 8px;
|
|
|
}
|
|
|
.sele {
|
|
|
font-weight: 500;
|
|
@@ -1185,5 +1278,14 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ .auto-complete {
|
|
|
+ .el-checkbox__label {
|
|
|
+ color: #000000;
|
|
|
+ }
|
|
|
+ .el-checkbox__input.is-checked .el-checkbox__inner {
|
|
|
+ background-color: #165dff;
|
|
|
+ border-color: #165dff;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|