|
@@ -1,301 +1,239 @@
|
|
<template>
|
|
<template>
|
|
- <div class="editor-attribute" v-if="com != null">
|
|
|
|
- <!-- <el-cascader
|
|
|
|
- v-model="com.category_id"
|
|
|
|
- :options="categoryList"
|
|
|
|
- :props="props"
|
|
|
|
- @change="onChangeCategory"
|
|
|
|
- placeholder="请选择模块分类"
|
|
|
|
- /> --><!-- @change="onChangeCategory" -->
|
|
|
|
- <el-form>
|
|
|
|
- <!-- <el-form-item label="模块分类:">
|
|
|
|
- <el-select
|
|
|
|
- v-model="com.category_id"
|
|
|
|
- placeholder="请选择模块分类"
|
|
|
|
- size="large"
|
|
|
|
- style="width: 100%"
|
|
|
|
- >
|
|
|
|
- <el-option
|
|
|
|
- v-for="item in categoryList"
|
|
|
|
- :key="item.id"
|
|
|
|
- :label="item.name"
|
|
|
|
- :value="item.id"
|
|
|
|
- />
|
|
|
|
- </el-select>
|
|
|
|
-
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="模块引用名:">
|
|
|
|
- <el-input
|
|
|
|
- v-model="com.code"
|
|
|
|
- class="input-item"
|
|
|
|
- placeholder="请填写模块引用名"
|
|
|
|
- />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="模块名称:">
|
|
|
|
- <el-input
|
|
|
|
- v-model="com.name"
|
|
|
|
- class="input-item"
|
|
|
|
- placeholder="请填写模块名称"
|
|
|
|
- />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item label="模块描述:">
|
|
|
|
- <el-input
|
|
|
|
- type="textarea"
|
|
|
|
- class="input-item"
|
|
|
|
- v-model="com.intro"
|
|
|
|
- placeholder="请填写模块介绍"
|
|
|
|
- />
|
|
|
|
- </el-form-item>
|
|
|
|
- <el-form-item>
|
|
|
|
- <div class="btn-save">
|
|
|
|
- <el-button type="primary" size="mini" @click="onSaveTemplate(com)"
|
|
|
|
- >保存模块</el-button
|
|
|
|
- >
|
|
|
|
- <el-button
|
|
|
|
- type="primary"
|
|
|
|
- size="mini"
|
|
|
|
- @click="onSaveAs(com)"
|
|
|
|
- v-if="com.id > 0"
|
|
|
|
- >另存为</el-button
|
|
|
|
- >
|
|
|
|
- </div>
|
|
|
|
- </el-form-item> -->
|
|
|
|
- <template v-for="(sub, subIndex) in com.attrs">
|
|
|
|
- <!-- 文本开始-->
|
|
|
|
- <template v-if="com.type == 'TextArea'">
|
|
|
|
- <template
|
|
|
|
- v-if="
|
|
|
|
- sub.type != 'pager' &&
|
|
|
|
- sub.type != 'constant' &&
|
|
|
|
- sub.type != 'attr' &&
|
|
|
|
- sub.type != 'formual' &&
|
|
|
|
- sub.type != 'sourceData'&&
|
|
|
|
- sub.type !='Directory'
|
|
|
|
- "
|
|
|
|
- >
|
|
|
|
- <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">
|
|
|
|
- <el-input type="textarea" v-model="sub.content"></el-input>
|
|
|
|
- </el-form-item>
|
|
|
|
- </template>
|
|
|
|
-
|
|
|
|
- <template v-if="sub.type == 'formual'">
|
|
|
|
- <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">
|
|
|
|
- <el-input type="textarea" v-model="sub.formula"></el-input>
|
|
|
|
- </el-form-item>
|
|
|
|
- </template>
|
|
|
|
-
|
|
|
|
- <template v-if="sub.type == 'sourceData'">
|
|
|
|
- <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">
|
|
|
|
- {{ formatSourceData(sub.id, sub.formula) }}
|
|
|
|
- </el-form-item>
|
|
|
|
- </template>
|
|
|
|
|
|
+ <div class="editor-attribute" v-if="com != null">
|
|
|
|
+ <el-form>
|
|
|
|
+ <template v-for="(sub, subIndex) in filteredAttrs">
|
|
|
|
+ <template v-if="com.type == 'TextArea'">
|
|
|
|
+ <template v-if="isTextAreaType(sub.type)">
|
|
|
|
+ <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">
|
|
|
|
+ <el-input type="textarea" v-model="sub.content"></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="sub.type == 'formual'">
|
|
|
|
+ <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">
|
|
|
|
+ <el-input type="textarea" v-model="sub.formula"></el-input>
|
|
|
|
+ </el-form-item>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="sub.type == 'sourceData'">
|
|
|
|
+ <el-form-item :label="sub.name + ' (引用名:[' + sub.id + '])'">
|
|
|
|
+ {{ formatSourceData(sub.id, sub.formula) }}
|
|
|
|
+ </el-form-item>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
</template>
|
|
- </el-form>
|
|
|
|
-
|
|
|
|
- <el-dialog
|
|
|
|
- :visible.sync="dialogVisible"
|
|
|
|
- append-to-body
|
|
|
|
- v-el-drag-dialog
|
|
|
|
- width="300"
|
|
|
|
- custom-class="prod-verify"
|
|
|
|
- title="编辑表头"
|
|
|
|
- >
|
|
|
|
- <headerSetting
|
|
|
|
- :headerItemName="headerItemName"
|
|
|
|
- @onSetHeader="onSetHeader"
|
|
|
|
- ></headerSetting>
|
|
|
|
- </el-dialog>
|
|
|
|
- </div>
|
|
|
|
- </template>
|
|
|
|
-
|
|
|
|
- <script>
|
|
|
|
- import headerSetting from "../headerSetting";
|
|
|
|
- import elDragDialog from "@/directive/el-drag-dialog";
|
|
|
|
-
|
|
|
|
- import { getAllCategory, createTemplate, updateTemplate } from "@/api/template";
|
|
|
|
- import { searchSourceDataCategory } from "@/api/sourceData";
|
|
|
|
- import { searchDocumentCategory } from "@/api/document";
|
|
|
|
- import { searchTemplateCategory, searchTemplate } from "@/api/template";
|
|
|
|
- export default {
|
|
|
|
- name: "attributes",
|
|
|
|
- components: {
|
|
|
|
- headerSetting,
|
|
|
|
|
|
+ </template>
|
|
|
|
+ </el-form>
|
|
|
|
+
|
|
|
|
+ <el-dialog
|
|
|
|
+ :visible.sync="dialogVisible"
|
|
|
|
+ append-to-body
|
|
|
|
+ v-el-drag-dialog
|
|
|
|
+ width="300"
|
|
|
|
+ custom-class="prod-verify"
|
|
|
|
+ title="编辑表头"
|
|
|
|
+ >
|
|
|
|
+ <headerSetting
|
|
|
|
+ :headerItemName="headerItemName"
|
|
|
|
+ @onSetHeader="onSetHeader"
|
|
|
|
+ ></headerSetting>
|
|
|
|
+ </el-dialog>
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script>
|
|
|
|
+import headerSetting from "../headerSetting";
|
|
|
|
+import elDragDialog from "@/directive/el-drag-dialog";
|
|
|
|
+import { getAllCategory, createTemplate, updateTemplate } from "@/api/template";
|
|
|
|
+import { searchSourceDataCategory } from "@/api/sourceData";
|
|
|
|
+import { searchDocumentCategory } from "@/api/document";
|
|
|
|
+import { searchTemplateCategory, searchTemplate } from "@/api/template";
|
|
|
|
+
|
|
|
|
+export default {
|
|
|
|
+ name: "attributes",
|
|
|
|
+ components: { headerSetting },
|
|
|
|
+ directives: { elDragDialog },
|
|
|
|
+ emits: ["onRefresh"],
|
|
|
|
+ props: {
|
|
|
|
+ com: {
|
|
|
|
+ type: Object,
|
|
|
|
+ default: () => null,
|
|
},
|
|
},
|
|
- directives: { elDragDialog },
|
|
|
|
- emits: ["onRefresh"],
|
|
|
|
- props: {
|
|
|
|
- com: {
|
|
|
|
- type: Object,
|
|
|
|
- default: () => {
|
|
|
|
- return null;
|
|
|
|
- },
|
|
|
|
|
|
+ },
|
|
|
|
+ watch: {
|
|
|
|
+ com: {
|
|
|
|
+ handler(newVal) {
|
|
|
|
+ if (newVal && newVal.content) {
|
|
|
|
+ this.processContent();
|
|
|
|
+ }
|
|
},
|
|
},
|
|
|
|
+ deep: true,
|
|
},
|
|
},
|
|
- watch: {},
|
|
|
|
- data() {
|
|
|
|
- return {
|
|
|
|
- dialogVisible: false,
|
|
|
|
- activeNames: "0",
|
|
|
|
- categoryList: [],
|
|
|
|
- articleCategoryList: [],
|
|
|
|
- activeHeaderIndex: -1,
|
|
|
|
- headerItemName: "",
|
|
|
|
- props: {
|
|
|
|
- value: "id",
|
|
|
|
- label: "name",
|
|
|
|
- children: "children",
|
|
|
|
- },
|
|
|
|
- };
|
|
|
|
|
|
+ },
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ dialogVisible: false,
|
|
|
|
+ activeNames: "0",
|
|
|
|
+ categoryList: [],
|
|
|
|
+ articleCategoryList: [],
|
|
|
|
+ activeHeaderIndex: -1,
|
|
|
|
+ headerItemName: "",
|
|
|
|
+ props: {
|
|
|
|
+ value: "id",
|
|
|
|
+ label: "name",
|
|
|
|
+ children: "children",
|
|
|
|
+ },
|
|
|
|
+ processedAttrs: [],
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ computed: {
|
|
|
|
+ filteredAttrs() {
|
|
|
|
+ return this.processedAttrs;
|
|
},
|
|
},
|
|
- mounted() {
|
|
|
|
- this.initCategoryList();
|
|
|
|
|
|
+ },
|
|
|
|
+ mounted() {
|
|
|
|
+ this.initCategoryList();
|
|
|
|
+ if (this.com && this.com.content) {
|
|
|
|
+ this.processContent();
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ isTextAreaType(type) {
|
|
|
|
+ return ![
|
|
|
|
+ "pager",
|
|
|
|
+ "constant",
|
|
|
|
+ "attr",
|
|
|
|
+ "formual",
|
|
|
|
+ "sourceData",
|
|
|
|
+ "Directory",
|
|
|
|
+ ].includes(type);
|
|
},
|
|
},
|
|
- methods: {
|
|
|
|
- formatSourceData(id, e) {
|
|
|
|
- var pattern = /\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]/;
|
|
|
|
- var reg = new RegExp(pattern);
|
|
|
|
- let items = e.match(reg);
|
|
|
|
- let data = id + "=" + items[2] + "." + items[3];
|
|
|
|
-
|
|
|
|
- var dataIndex = items[4];
|
|
|
|
- dataIndex = items[4].split(",");
|
|
|
|
- data +=
|
|
|
|
- "." +
|
|
|
|
- String.fromCharCode(65 + parseInt(dataIndex[1])) +
|
|
|
|
- (parseInt(dataIndex[0]) + 1);
|
|
|
|
- return data;
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- onSaveAs(e) {
|
|
|
|
- this.saveAs = true;
|
|
|
|
- this.onSaveTemplate();
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- onChangeCategory(e) {
|
|
|
|
- let _this = this;
|
|
|
|
- _this.com.category_id = e[1];
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- onSaveTemplate(e) {
|
|
|
|
- let _this = this;
|
|
|
|
- /* e.category_id='1' */
|
|
|
|
- let data = JSON.parse(JSON.stringify(e));
|
|
|
|
- data.attrs = JSON.stringify(data.attrs);
|
|
|
|
- data.status = 5;
|
|
|
|
- delete data.category;
|
|
|
|
- if (data.id == undefined || this.saveAs) {
|
|
|
|
- createTemplate(data).then((res) => {
|
|
|
|
- if (res.status != 200) return;
|
|
|
|
- data.id = res.data;
|
|
|
|
- _this.com.id = res.data;
|
|
|
|
- _this.$alert("模板信息保存成功");
|
|
|
|
- _this.$emit("onRefresh");
|
|
|
|
- this.saveAs = false;
|
|
|
|
- });
|
|
|
|
- } else {
|
|
|
|
- updateTemplate(data).then((res) => {
|
|
|
|
- if (res.status != 200) return;
|
|
|
|
- _this.$alert("模板信息更新成功");
|
|
|
|
- _this.$emit("onRefresh");
|
|
|
|
- });
|
|
|
|
|
|
+ extractChineseTemplates(content) {
|
|
|
|
+ const templateRegex = /\{\{(.*?)\}\}/g;
|
|
|
|
+ const chineseRegex = /[\u4e00-\u9fa5]/;
|
|
|
|
+ let match;
|
|
|
|
+ const chineseTemplates = [];
|
|
|
|
+
|
|
|
|
+ while ((match = templateRegex.exec(content)) !== null) {
|
|
|
|
+ if (chineseRegex.test(match[1])) {
|
|
|
|
+ chineseTemplates.push(match[1].trim());
|
|
}
|
|
}
|
|
- },
|
|
|
|
-
|
|
|
|
- /* initCategoryList(){
|
|
|
|
- let _this=this;
|
|
|
|
- searchSourceDataCategory({page:1,pageSize:99,status:''}).then(res=>{
|
|
|
|
- _this.categoryList=res.data.sourcecategories;
|
|
|
|
-
|
|
|
|
- })
|
|
|
|
- }, */
|
|
|
|
- //获取模板分类信息
|
|
|
|
- async initCategoryList() {
|
|
|
|
- let _this = this;
|
|
|
|
- let res = await searchTemplateCategory({
|
|
|
|
- page: 1,
|
|
|
|
- pageSize: 99,
|
|
|
|
- status: 5,
|
|
|
|
- });
|
|
|
|
- if (res.status != 200) return;
|
|
|
|
- _this.categoryList = res.data.dataList ||[];
|
|
|
|
- for (var i = 0; i < _this.categoryList.length; i++) {
|
|
|
|
- _this.categoryList[i].dataList = await _this.getTemplateList(
|
|
|
|
- _this.categoryList[i].id
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return chineseTemplates;
|
|
|
|
+ },
|
|
|
|
+ processContent() {
|
|
|
|
+ if (this.com && this.com.content) {
|
|
|
|
+ const chineseTemplates = this.extractChineseTemplates(this.com.content);
|
|
|
|
+ console.log("Chinese templates:", chineseTemplates);
|
|
|
|
+
|
|
|
|
+ if (this.com.attrs && Array.isArray(this.com.attrs)) {
|
|
|
|
+ this.processedAttrs = this.com.attrs.filter((el) =>
|
|
|
|
+ chineseTemplates.includes(el.id)
|
|
);
|
|
);
|
|
}
|
|
}
|
|
- },
|
|
|
|
-
|
|
|
|
- onModify(index, subIndex, headerIndex) {
|
|
|
|
- this.currentIndex = index;
|
|
|
|
- this.componentIndex = subIndex;
|
|
|
|
- this.activeHeaderIndex = headerIndex;
|
|
|
|
- this.headerItemName =
|
|
|
|
- this.components[index].components[subIndex].attrs.tableHeader[
|
|
|
|
- headerIndex
|
|
|
|
- ];
|
|
|
|
- this.dialogVisible = true;
|
|
|
|
- },
|
|
|
|
- //设置名称
|
|
|
|
- onSetHeader(name) {
|
|
|
|
- if (this.currentIndex >= 0) {
|
|
|
|
- if (this.activeHeaderIndex >= 0) {
|
|
|
|
- this.components[this.currentIndex].components[
|
|
|
|
- this.componentIndex
|
|
|
|
- ].attrs.tableHeader[this.activeHeaderIndex] = name;
|
|
|
|
- } else {
|
|
|
|
- this.components[this.currentIndex].components[
|
|
|
|
- this.componentIndex
|
|
|
|
- ].attrs.tableHeader.push(name);
|
|
|
|
- }
|
|
|
|
|
|
+ } else {
|
|
|
|
+ this.processedAttrs = [];
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ formatSourceData(id, e) {
|
|
|
|
+ const pattern = /\[(.*?)\]\[(.*?)\]\[(.*?)\]\[(.*?)\]/;
|
|
|
|
+ const items = e.match(pattern);
|
|
|
|
+ const dataIndex = items[4].split(",");
|
|
|
|
+ return `${id}=${items[2]}.${items[3]}.${String.fromCharCode(
|
|
|
|
+ 65 + parseInt(dataIndex[1])
|
|
|
|
+ )}${parseInt(dataIndex[0]) + 1}`;
|
|
|
|
+ },
|
|
|
|
+ async onSaveTemplate(e) {
|
|
|
|
+ const data = { ...e, attrs: JSON.stringify(e.attrs), status: 5 };
|
|
|
|
+ delete data.category;
|
|
|
|
+
|
|
|
|
+ if (data.id === undefined || this.saveAs) {
|
|
|
|
+ const res = await createTemplate(data);
|
|
|
|
+ if (res.status === 200) {
|
|
|
|
+ data.id = res.data;
|
|
|
|
+ this.com.id = res.data;
|
|
|
|
+ this.$alert("模板信息保存成功");
|
|
|
|
+ this.$emit("onRefresh");
|
|
|
|
+ this.saveAs = false;
|
|
}
|
|
}
|
|
- this.$emit("onSetComponents", [...this.components]);
|
|
|
|
- this.dialogVisible = false;
|
|
|
|
- },
|
|
|
|
- onInsert(index, subIndex) {
|
|
|
|
- this.currentIndex = index;
|
|
|
|
- this.componentIndex = subIndex;
|
|
|
|
- this.headerItemName = "";
|
|
|
|
- this.dialogVisible = true;
|
|
|
|
- },
|
|
|
|
- //删除表头项
|
|
|
|
- onDeleteHeaderItem(index, subIndex, headerIndex) {
|
|
|
|
- this.components[index].components[subIndex].attrs.tableHeader.splice(
|
|
|
|
- headerIndex,
|
|
|
|
- 1
|
|
|
|
- );
|
|
|
|
- this.$emit("onSetComponents", [...this.components]);
|
|
|
|
- },
|
|
|
|
-
|
|
|
|
- onSetActiveIndex(e) {
|
|
|
|
- if (e == this.activeHeaderIndex) {
|
|
|
|
- this.activeHeaderIndex = -1;
|
|
|
|
|
|
+ } else {
|
|
|
|
+ const res = await updateTemplate(data);
|
|
|
|
+ if (res.status === 200) {
|
|
|
|
+ this.$alert("模板信息更新成功");
|
|
|
|
+ this.$emit("onRefresh");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ async initCategoryList() {
|
|
|
|
+ const res = await searchTemplateCategory({
|
|
|
|
+ page: 1,
|
|
|
|
+ pageSize: 99,
|
|
|
|
+ status: 5,
|
|
|
|
+ });
|
|
|
|
+ if (res.status === 200) {
|
|
|
|
+ this.categoryList = res.data.dataList || [];
|
|
|
|
+ for (const category of this.categoryList) {
|
|
|
|
+ category.dataList = await this.getTemplateList(category.id);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ async getTemplateList(categoryId) {
|
|
|
|
+ const res = await searchTemplate({
|
|
|
|
+ page: 1,
|
|
|
|
+ pageSize: 999,
|
|
|
|
+ category_id: categoryId,
|
|
|
|
+ status: 5,
|
|
|
|
+ });
|
|
|
|
+ if (res.status === 200) {
|
|
|
|
+ return res.data.dataList.map((item) => ({
|
|
|
|
+ ...item,
|
|
|
|
+ attrs: JSON.parse(item.attrs),
|
|
|
|
+ }));
|
|
|
|
+ }
|
|
|
|
+ return [];
|
|
|
|
+ },
|
|
|
|
+ onModify(index, subIndex, headerIndex) {
|
|
|
|
+ this.currentIndex = index;
|
|
|
|
+ this.componentIndex = subIndex;
|
|
|
|
+ this.activeHeaderIndex = headerIndex;
|
|
|
|
+ this.headerItemName =
|
|
|
|
+ this.components[index].components[subIndex].attrs.tableHeader[
|
|
|
|
+ headerIndex
|
|
|
|
+ ];
|
|
|
|
+ this.dialogVisible = true;
|
|
|
|
+ },
|
|
|
|
+ onSetHeader(name) {
|
|
|
|
+ if (this.currentIndex >= 0) {
|
|
|
|
+ const header =
|
|
|
|
+ this.components[this.currentIndex].components[this.componentIndex]
|
|
|
|
+ .attrs.tableHeader;
|
|
|
|
+ if (this.activeHeaderIndex >= 0) {
|
|
|
|
+ header[this.activeHeaderIndex] = name;
|
|
} else {
|
|
} else {
|
|
- this.activeHeaderIndex = e;
|
|
|
|
|
|
+ header.push(name);
|
|
}
|
|
}
|
|
- },
|
|
|
|
- //获取模板列表
|
|
|
|
- async getTemplateList(categoryId) {
|
|
|
|
- let _this = this;
|
|
|
|
- let res = await searchTemplate({
|
|
|
|
- page: 1,
|
|
|
|
- pageSize: 999,
|
|
|
|
- category_id: categoryId,
|
|
|
|
- status: 5,
|
|
|
|
- });
|
|
|
|
- if (res.status != 200) return [];
|
|
|
|
-
|
|
|
|
- let dataList = res.data.dataList.map((item) => {
|
|
|
|
- item.attrs = JSON.parse(item.attrs);
|
|
|
|
- return item;
|
|
|
|
- });
|
|
|
|
- return dataList;
|
|
|
|
- },
|
|
|
|
|
|
+ }
|
|
|
|
+ this.$emit("onSetComponents", [...this.components]);
|
|
|
|
+ this.dialogVisible = false;
|
|
|
|
+ },
|
|
|
|
+ onInsert(index, subIndex) {
|
|
|
|
+ this.currentIndex = index;
|
|
|
|
+ this.componentIndex = subIndex;
|
|
|
|
+ this.headerItemName = "";
|
|
|
|
+ this.dialogVisible = true;
|
|
|
|
+ },
|
|
|
|
+ onDeleteHeaderItem(index, subIndex, headerIndex) {
|
|
|
|
+ this.components[index].components[subIndex].attrs.tableHeader.splice(
|
|
|
|
+ headerIndex,
|
|
|
|
+ 1
|
|
|
|
+ );
|
|
|
|
+ this.$emit("onSetComponents", [...this.components]);
|
|
|
|
+ },
|
|
|
|
+ onSetActiveIndex(e) {
|
|
|
|
+ this.activeHeaderIndex = e === this.activeHeaderIndex ? -1 : e;
|
|
},
|
|
},
|
|
- };
|
|
|
|
- </script>
|
|
|
|
-
|
|
|
|
- <style lang="scss">
|
|
|
|
- @import "./index.scss";
|
|
|
|
- </style>
|
|
|
|
-
|
|
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss">
|
|
|
|
+@import "./index.scss";
|
|
|
|
+</style>
|