|
@@ -1,16 +1,117 @@
|
|
|
<template>
|
|
|
- <div class="manage-root">
|
|
|
+ <div class="manage-root create-article">
|
|
|
<Header/>
|
|
|
<breadcrumb :breadcrumbList="breadcrumbList" class="breadcrumb-box"></breadcrumb>
|
|
|
- <div class="manage-root-contain" :style="{height:tableHeight+'px'}">
|
|
|
- <el-form :model="articleForm" :rules="articleRules" ref="articleForm" label-width="100px" class="registerForm">
|
|
|
- </el-form>
|
|
|
+ <div class="manage-root-contain">
|
|
|
+ <div class="manage-root-contain-inner" :style="{height:tableHeight+'px'}">
|
|
|
+ <el-form :inline="true" :model="articleForm" :rules="articleRules" ref="articleForm" label-width="100px" class="registerForm" label-position="top">
|
|
|
+ <el-form-item label="标题" prop="title" class="title-box">
|
|
|
+ <el-input v-model="articleForm.title" autocomplete="off" placeholder="请输入标题" @blur="handleTrim('articleForm','title')" >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="来源" prop="source" class="source-box">
|
|
|
+ <el-input v-model="articleForm.source" autocomplete="off" placeholder="请输入来源" @blur="handleTrim('articleForm','source')" >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="Page" prop="page" class="page-box">
|
|
|
+ <el-input v-model="articleForm.page" autocomplete="off" placeholder="请输入" type="number" :min="1">
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <template v-if="type==='cn'">
|
|
|
+ <Editor
|
|
|
+ id="article-cn"
|
|
|
+ v-model="articleForm.articleCn"
|
|
|
+ :init="init"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <label class="item-label">课文读音</label>
|
|
|
+ <div class="article-mp3-box">
|
|
|
+ <ul v-if="articleForm.articleMp3.length>0" class="article-mp3-list">
|
|
|
+ <li v-for="(item,index) in articleForm.articleMp3" :key="index">
|
|
|
+ <a><svg-icon :icon-class="'mp3'" class="icon-logo"></svg-icon><span>{{item.name}}</span></a>
|
|
|
+ <i class="el-icon-error" @click="handleDelResource(index)"></i>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ <upload :class="['article-mp3']" :datafileList="articleForm.articleMp3" :changeFillId="handleAvatarSuccess" :fileName="'articleMp3'" uploadType="mp3" tips=' ' :filleNumber="1" :showList="true" />
|
|
|
+ <el-button type="primary" size="small" @click="handleSubtitle" :loading="subtitleLoading" v-if="!substitleReault">生成字幕</el-button>
|
|
|
+ <el-button size="small" @click="handleSubtitle" :loading="subtitleLoading" v-else>重新生成</el-button>
|
|
|
+ <p class="error-tips"><svg-icon icon-class="error-warning-line"></svg-icon>生成失败</p>
|
|
|
+ </div>
|
|
|
+ <el-input
|
|
|
+ style="width: 100%"
|
|
|
+ type="textarea"
|
|
|
+ :autosize="{ minRows: 20 }"
|
|
|
+ placeholder="请输入文章"
|
|
|
+ v-model="articleForm.articleEn"
|
|
|
+ @blur="onBlur(articleForm, 'articleEn')"
|
|
|
+ ></el-input>
|
|
|
+ <el-form :model="articleRecourseForm" :rules="articleResourceRules" ref="articleResourceForm" label-width="80px" class="registerForm" style="margin-top:16px">
|
|
|
+ <el-form-item label="生词" prop="newWordList">
|
|
|
+ <el-button type="primary" size="small" plain class="add-btn"><i class="el-icon-plus"></i> 添加生词</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="短语" prop="newWordList">
|
|
|
+ <el-button type="primary" size="small" plain class="add-btn"><i class="el-icon-plus"></i> 添加短语</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="注释" prop="newWordList">
|
|
|
+ <el-button type="primary" size="small" plain class="add-btn"><i class="el-icon-plus"></i> 添加注释</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="图片" prop="pictureList">
|
|
|
+ <upload :datafileList="articleRecourseForm.pictureList" :changeFillId="handleAvatarSuccess" :uploadType="'image'" :fileName="'pictureList'" :filleNumber="99" tips="支持上传jpg、png格式图片,单张大小不超过2mb" :showList="true" />
|
|
|
+ <ul v-if="articleRecourseForm.pictureList.length>0" class="resource-list">
|
|
|
+ <li v-for="(itemR,indexR) in articleRecourseForm.pictureList" :key="indexR">
|
|
|
+ <div>
|
|
|
+ <el-image
|
|
|
+ :src="itemR.url"
|
|
|
+ fit="contain" style="width:40px;height:40px;margin-right:12px"
|
|
|
+ :preview-src-list="[itemR.url]">
|
|
|
+ </el-image>
|
|
|
+ <span>{{itemR.name}}</span>
|
|
|
+ <svg-icon icon-class="download" style="cursor: pointer;" @click="handleDownloadPic(itemR.url)"></svg-icon>
|
|
|
+ </div>
|
|
|
+ <i class="el-icon-delete" @click="handleDelPicture(indexR)"></i>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </el-form-item>
|
|
|
+ <el-divider></el-divider>
|
|
|
+ <el-form-item label="讲解教师" prop="teacher">
|
|
|
+ <el-input v-model="articleRecourseForm.teacher" autocomplete="off" placeholder="请输入" @blur="handleTrim('articleRecourseForm','teacher')" >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="讲解内容" prop="explanContent">
|
|
|
+ <upload :datafileList="articleRecourseForm.explanContent" :changeFillId="handleAvatarSuccess" :uploadType="'video&radio'" :fileName="'explanContent'" :filleNumber="99" tips="支持上传mp3, wav格式音频文件及 mp4, mov格式视频文件,音频大小不超过50mb,视频大小不超过 500mb。" :showList="true" />
|
|
|
+ <ul v-if="articleRecourseForm.explanContent.length>0" class="resource-list">
|
|
|
+ <li v-for="(itemR,indexR) in articleRecourseForm.explanContent" :key="indexR">
|
|
|
+ <a @click="handlePreview(itemR)"><svg-icon :icon-class="itemR.type" class="icon-logo"></svg-icon><span>{{itemR.name}}</span></a>
|
|
|
+ <i class="el-icon-delete" @click="handleDelExplanContent(indexR)"></i>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ </template>
|
|
|
+ </div>
|
|
|
<div class="save-btn">
|
|
|
<el-button type="primary" size="small" @click="handleSaveArticle('articleForm')" :loading="loading">保存</el-button>
|
|
|
<el-button size="small" @click="onCancel('articleForm')">取消</el-button>
|
|
|
</div>
|
|
|
<el-button type="primary" size="small" class="preview-btn">预览</el-button>
|
|
|
</div>
|
|
|
+ <el-dialog
|
|
|
+ :visible.sync="resourceFlag"
|
|
|
+ :show-close="true"
|
|
|
+ :close-on-click-modal="false"
|
|
|
+ :modal-append-to-body="false"
|
|
|
+ width="1000px"
|
|
|
+ class="login-dialog"
|
|
|
+ v-if="resourceFlag">
|
|
|
+ <iframe
|
|
|
+ :src="resourceUrl"
|
|
|
+ width="100%"
|
|
|
+ height="600px"
|
|
|
+ ></iframe>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -20,13 +121,50 @@
|
|
|
import Header from "../../../components/Header.vue";
|
|
|
import Breadcrumb from '../../../components/Breadcrumb.vue';
|
|
|
import { getLogin } from "@/api/ajax";
|
|
|
+import tinymce from "tinymce/tinymce";
|
|
|
+import Editor from "@tinymce/tinymce-vue";
|
|
|
+import "tinymce/icons/default/icons";
|
|
|
+import "tinymce/themes/silver";
|
|
|
+// 引入富文本编辑器主题的js和css
|
|
|
+import "tinymce/themes/silver/theme.min";
|
|
|
+import "tinymce/skins/ui/oxide/skin.min.css";
|
|
|
+// 扩展插件
|
|
|
+// import "tinymce/plugins/"
|
|
|
+import "tinymce/plugins/image";
|
|
|
+import "tinymce/plugins/link";
|
|
|
+import "tinymce/plugins/code";
|
|
|
+import "tinymce/plugins/table";
|
|
|
+import "tinymce/plugins/lists";
|
|
|
+import "tinymce/plugins/wordcount"; // 字数统计插件
|
|
|
+import "tinymce/plugins/media"; // 插入视频插件
|
|
|
+import "tinymce/plugins/template"; // 模板插件
|
|
|
+import "tinymce/plugins/fullscreen";
|
|
|
+import "tinymce/plugins/paste";
|
|
|
+import "tinymce/plugins/preview";
|
|
|
+import "tinymce/plugins/contextmenu";
|
|
|
+import "tinymce/plugins/textcolor";
|
|
|
+import "tinymce/plugins/colorpicker";
|
|
|
+import Upload from "../../../components/Upload.vue"
|
|
|
+const Base64 = require("js-base64").Base64;
|
|
|
+import { mapState } from 'vuex';
|
|
|
|
|
|
export default {
|
|
|
//import引入的组件需要注入到对象中才能使用
|
|
|
- components: { Header, Breadcrumb },
|
|
|
+ components: { Header, Breadcrumb, Editor, Upload },
|
|
|
props: {},
|
|
|
data() {
|
|
|
//这里存放数据
|
|
|
+ const validatePage = (rule, value, callback) => {
|
|
|
+ if (value === null) {
|
|
|
+ callback();
|
|
|
+ } else {
|
|
|
+ if (value<1) {
|
|
|
+ callback(new Error('Page不能小于1'));
|
|
|
+ } else {
|
|
|
+ callback();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
return {
|
|
|
id:this.$route.query.id?this.$route.query.id:'',
|
|
|
type:this.$route.query.type?this.$route.query.type:'cn',
|
|
@@ -62,6 +200,9 @@ export default {
|
|
|
articleCn: '', // 中文文章
|
|
|
articleEn: '', // 英文文章
|
|
|
articleMp3: [], // 课文音频
|
|
|
+ articleMp3_id: '', // 音频文件id
|
|
|
+ },
|
|
|
+ articleRecourseForm:{
|
|
|
newWordList: [], // 生词
|
|
|
pharseList: [], // 短语
|
|
|
annotationList: [], // 注释
|
|
@@ -70,20 +211,41 @@ export default {
|
|
|
explanContent: [], // 讲解内容
|
|
|
},
|
|
|
articleRules:{
|
|
|
-
|
|
|
- }
|
|
|
+ title:[
|
|
|
+ { required: true, message: '请输入标题', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ source:[
|
|
|
+ { required: true, message: '请输入来源', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ page:[
|
|
|
+ { validator: validatePage, trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ articleResourceRules:{
|
|
|
+ teacher:[
|
|
|
+ { required: true, message: '请输入讲解教师', trigger: 'blur' }
|
|
|
+ ],
|
|
|
+ explanContent: [
|
|
|
+ { type: 'array', required: true, message: '请上传讲解内容', trigger: 'change' }
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ init: null,
|
|
|
+ subtitleLoading: false, //生成字幕loading
|
|
|
+ substitleReault: false,
|
|
|
+ resourceUrl: '', // 课节资源预览地址
|
|
|
+ resourceFlag: false,
|
|
|
}
|
|
|
},
|
|
|
//计算属性 类似于data概念
|
|
|
computed: {
|
|
|
-
|
|
|
+ ...mapState(['file_preview_url']),
|
|
|
},
|
|
|
//监控data中数据变化
|
|
|
watch: {},
|
|
|
//方法集合
|
|
|
methods: {
|
|
|
getTableHeight() {
|
|
|
- let tableH = 132; //距离页面下方的高度
|
|
|
+ let tableH = 236; //距离页面下方的高度
|
|
|
let tableHeightDetil = window.innerHeight - tableH;
|
|
|
if (tableHeightDetil <= 300) {
|
|
|
this.tableHeight = 300;
|
|
@@ -98,20 +260,160 @@ export default {
|
|
|
handleSaveArticle(formName){
|
|
|
this.$refs[formName].validate((valid) => {
|
|
|
if (valid) {
|
|
|
-
|
|
|
+
|
|
|
} else {
|
|
|
return false;
|
|
|
}
|
|
|
});
|
|
|
- }
|
|
|
+ this.$refs.articleResourceForm.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 去掉前后空格
|
|
|
+ handleTrim(form,fild){
|
|
|
+ this[form][fild] = this[form][fild].trim()
|
|
|
+ },
|
|
|
+ handleAvatarSuccess(fileList,name) {
|
|
|
+ if(name==='articleMp3'){
|
|
|
+ this.articleForm.articleMp3 = fileList
|
|
|
+ this.articleForm.articleMp3_id = fileList[0]&&fileList[0].response&&fileList[0].response.file_info_list&&fileList[0].response.file_info_list[0]?fileList[0].response.file_info_list[0].file_id:''
|
|
|
+ }else if(name==='pictureList'){
|
|
|
+ fileList.forEach(item=>{
|
|
|
+ if(item.response&&item.response.file_info_list&&item.response.file_info_list[0]){
|
|
|
+ item.name = item.response.file_info_list[0].file_name
|
|
|
+ item.file_id = item.response.file_info_list[0].file_id
|
|
|
+ item.url = item.response.file_info_list[0].file_url
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.articleRecourseForm.pictureList = fileList
|
|
|
+ }else if(name==='explanContent'){
|
|
|
+ fileList.forEach(item=>{
|
|
|
+ if(item.response&&item.response.file_info_list&&item.response.file_info_list[0]){
|
|
|
+ let index = item.response.file_info_list[0].file_name.lastIndexOf('.');
|
|
|
+ item.name = item.response.file_info_list[0].file_name
|
|
|
+ let type = item.response.file_info_list[0].file_name.substring(index + 1).toLowerCase()
|
|
|
+ item.type = this.handleJudgeType(type)
|
|
|
+ item.file_id = item.response.file_info_list[0].file_id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ this.articleRecourseForm.explanContent = fileList
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+ // 判断文件类型
|
|
|
+ handleJudgeType(type){
|
|
|
+ let finalType = ''
|
|
|
+ if(type==='wav'){
|
|
|
+ finalType = 'mp3'
|
|
|
+ }else if(type==='png'||type==='jpg'||type==='jpeg'){
|
|
|
+ finalType = 'jpg'
|
|
|
+ }else if(type==='avi'||type==='wmv'||type==='mpeg'||type==='mov'){
|
|
|
+ finalType = 'mp4'
|
|
|
+ }else if(type==='rar'||type==='jar'||type==='arj'||type==='z'||type==='jar'){
|
|
|
+ finalType = 'zip'
|
|
|
+ }else if(type==='docx'){
|
|
|
+ finalType = 'doc'
|
|
|
+ }else if(type==='xls'){
|
|
|
+ finalType = 'xlsx'
|
|
|
+ }else if(type==='pptx'){
|
|
|
+ finalType = 'ppt'
|
|
|
+ }else{
|
|
|
+ finalType = type
|
|
|
+ }
|
|
|
+ return finalType
|
|
|
+ },
|
|
|
+ // 删除资源文件
|
|
|
+ handleDelResource(i){
|
|
|
+ this.$confirm("确定删除吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ this.articleForm.articleMp3.splice(i, 1);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleDelPicture(i){
|
|
|
+ this.$confirm("确定删除吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ this.articleRecourseForm.pictureList.splice(i, 1);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleDelExplanContent(i){
|
|
|
+ this.$confirm("确定删除吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ type: "warning",
|
|
|
+ }).then(() => {
|
|
|
+ this.articleRecourseForm.explanContent.splice(i, 1);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ // 生成字幕
|
|
|
+ handleSubtitle(){
|
|
|
+ this.subtitleLoading = true
|
|
|
+ this.substitleReault = true
|
|
|
+ },
|
|
|
+ // 下载图片
|
|
|
+ handleDownloadPic(url){
|
|
|
+ window.open(url, "_blank");
|
|
|
+ },
|
|
|
+ // 预览文件
|
|
|
+ handlePreview(item){
|
|
|
+ let MethodName = '/FileServer/GetFileInfo'
|
|
|
+ let data = {
|
|
|
+ file_id: item.file_id
|
|
|
+ }
|
|
|
+ getLogin(MethodName, data)
|
|
|
+ .then((res) => {
|
|
|
+ if(res.status===1){
|
|
|
+ let path =
|
|
|
+ `${this.file_preview_url}/onlinePreview?url=` +
|
|
|
+ Base64.encode(res.file_url);
|
|
|
+ this.resourceUrl = path;
|
|
|
+ this.resourceFlag = true
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ },
|
|
|
},
|
|
|
//生命周期 - 创建完成(可以访问当前this实例)
|
|
|
created() {
|
|
|
this.getTableHeight()
|
|
|
+ let lang_url = "";
|
|
|
+ let language = "";
|
|
|
+ let skin_url =
|
|
|
+ process.env.NODE_ENV == "development"
|
|
|
+ ? "/tinymce/skins/ui/oxide"
|
|
|
+ : window.g.zh_CN_URL + "/tinymce/skins/ui/oxide";
|
|
|
+
|
|
|
+ lang_url =
|
|
|
+ process.env.NODE_ENV == "development"
|
|
|
+ ? "/tinymce/langs/zh_CN.js"
|
|
|
+ : window.g.zh_CN_URL + "/tinymce/langs/zh_CN.js";
|
|
|
+ language = "zh_CN";
|
|
|
+
|
|
|
+ this.init = {
|
|
|
+ language_url: lang_url,
|
|
|
+ language: language,
|
|
|
+ skin_url: skin_url,
|
|
|
+ height: 600,
|
|
|
+ plugins: "link lists image code table wordcount preview",
|
|
|
+ toolbar:
|
|
|
+ "preview bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat",
|
|
|
+ branding: false,
|
|
|
+ }; //富文本初始化
|
|
|
},
|
|
|
//生命周期 - 挂载完成(可以访问DOM元素)
|
|
|
mounted() {
|
|
|
-
|
|
|
+ tinymce.init({
|
|
|
+ selector: `#article-cn`,
|
|
|
+ });
|
|
|
},
|
|
|
//生命周期-创建之前
|
|
|
beforeCreated() { },
|
|
@@ -136,11 +438,15 @@ export default {
|
|
|
}
|
|
|
.manage-root-contain{
|
|
|
margin: 56px 24px 24px;
|
|
|
+ height: calc(100vh - 132px);
|
|
|
border-radius: 4px;
|
|
|
background: #FFF;
|
|
|
- overflow-y: auto;
|
|
|
padding: 24px 24px 80px 24px;
|
|
|
+ display: block;
|
|
|
position: relative;
|
|
|
+ &-inner{
|
|
|
+ overflow-y: auto;
|
|
|
+ }
|
|
|
.save-btn,.preview-btn{
|
|
|
position: absolute;
|
|
|
bottom: 24px;
|
|
@@ -150,5 +456,168 @@ export default {
|
|
|
right: 24px;
|
|
|
left: auto;
|
|
|
}
|
|
|
+
|
|
|
+}
|
|
|
+.el-form--inline{
|
|
|
+ display: flex;
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.title-box{
|
|
|
+ flex: 1;
|
|
|
+ .el-input{
|
|
|
+ width: 100%;
|
|
|
+ }
|
|
|
+}
|
|
|
+.source-box{
|
|
|
+ .el-input{
|
|
|
+ width: 205px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.page-box{
|
|
|
+ .el-input{
|
|
|
+ width: 190px;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+.item-label{
|
|
|
+ color: #4E5969;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 400;
|
|
|
+ line-height: 22px;
|
|
|
+}
|
|
|
+.article-mp3-box{
|
|
|
+ display: flex;
|
|
|
+ height: 32px;
|
|
|
+ align-items: center;
|
|
|
+ margin: 8px 0 20px 0;
|
|
|
+}
|
|
|
+.article-mp3{
|
|
|
+ width: 82px;
|
|
|
+ height: 32px;
|
|
|
+ &-has{
|
|
|
+ width: 320px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.article-mp3-list{
|
|
|
+ list-style: none;
|
|
|
+ margin: 0;
|
|
|
+ padding: 0;
|
|
|
+ display: inline-block;
|
|
|
+ width: 226px;
|
|
|
+ li{
|
|
|
+ padding: 5px 12px;
|
|
|
+ height: 32px;
|
|
|
+ border-radius: 2px 0px 0px 2px;
|
|
|
+ background: #F2F3F5;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ a{
|
|
|
+ color: #1D2129;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ flex: 1;
|
|
|
+ span{
|
|
|
+ overflow:hidden;
|
|
|
+ text-overflow:ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+ flex: 1;
|
|
|
+ display: block;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 22px;
|
|
|
+ }
|
|
|
+ .svg-icon{
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ margin-right: 4px;
|
|
|
+ color: #1D2129;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .el-icon-error{
|
|
|
+ color: #4E5969;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-left: 4px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.error-tips{
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 500;
|
|
|
+ line-height: 22px;
|
|
|
+ color: #F53F3F;
|
|
|
+ margin-left: 16px;
|
|
|
+ .svg-icon{
|
|
|
+ width: 12px;
|
|
|
+ height: 12px;
|
|
|
+ margin-right: 4px;
|
|
|
+ }
|
|
|
+}
|
|
|
+.resource-list{
|
|
|
+ list-style: none;
|
|
|
+ margin: 12px 0;
|
|
|
+ padding: 0;
|
|
|
+ li{
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 16px;
|
|
|
+ a,>div{
|
|
|
+ width: 360px;
|
|
|
+ padding: 7px 12px;
|
|
|
+ background: #F7F8FA;
|
|
|
+ border-radius: 2px;
|
|
|
+ color: #1D2129;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ span{
|
|
|
+ overflow:hidden;
|
|
|
+ text-overflow:ellipsis;
|
|
|
+ white-space: nowrap;
|
|
|
+ flex: 1;
|
|
|
+ display: block;
|
|
|
+ font-size: 14px;
|
|
|
+ line-height: 22px;
|
|
|
+ }
|
|
|
+ .svg-icon{
|
|
|
+ width: 16px;
|
|
|
+ height: 16px;
|
|
|
+ margin-right: 8px;
|
|
|
+ color: #4E5969;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .el-icon-delete{
|
|
|
+ color: #4E5969;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-left: 12px;
|
|
|
+ &:hover{
|
|
|
+ color: #165DFF;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ >div{
|
|
|
+ display: flex;
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+.add-btn{
|
|
|
+ padding: 2px 12px;
|
|
|
+ border-radius: 2px;
|
|
|
+ border: 1px solid #165DFF;
|
|
|
+ color: #165DFF;
|
|
|
+ font-size: 12px;
|
|
|
+ font-weight: 400;
|
|
|
+ line-height: 20px;
|
|
|
+ background: #FFF;
|
|
|
+ .el-icon-plus{
|
|
|
+ margin-right: 8px;
|
|
|
+ }
|
|
|
+ &:hover{
|
|
|
+ background: #FFF;
|
|
|
+ color: #165DFF;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|
|
|
+<style lang="scss">
|
|
|
+.create-article{
|
|
|
+ .el-divider{
|
|
|
+ width: 600px;
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|