@ -3,283 +3,161 @@
<!--
模块type : introduce | form | forms | column | columns | history
-- >
< el -dialog title = "模块管理"
: visible . sync = "visible"
: width = "dialogWidth"
custom - class = "module"
: close - on - click - modal = "false"
: before - close = "close" >
< el -dialog title = "模块管理" :visible.sync ="visible" :width ="dialogWidth" custom -class = " module "
: close - on - click - modal = "false" : before - close = "close" >
< template v-if ="data.type === 'introduce'" >
< el -table class = "module-table"
: data = "data.list"
header - align = "center"
row - key = "id" >
< el -table -column type = "index"
width = "60"
label = "序号"
align = "center" > < / e l - t a b l e - c o l u m n >
< el -table class = "module-table" :data ="data.list" header -align = " center " row -key = " id " >
< el -table -column type = "index" width = "60" label = "序号" align = "center" > < / e l - t a b l e - c o l u m n >
< el -table -column v -for = " ( item , i ) in data.forms "
: key = "i"
: prop = "item.prop"
: label = "item.label"
min - width = "130"
align = "center" >
< el -table -column v -for = " ( item , i ) in data.forms " :key ="i" :prop ="item.prop" :label ="item.label"
min - width = "130" align = "center" >
< template slot -scope = " scope " >
< div v -if = " item.type = = = ' link ' & & scope.row.link "
class = "link-wrap" >
< div v-if ="item.type === 'link' && scope.row.link" class="link-wrap" >
< span > { { scope . row . link . linkName } } < / span >
< / div >
< template v -else -if = " item.type = = = ' upload ' " >
< img v -if = " scope.row.pic "
: src = "scope.row.pic"
class = "upload-pic" >
< div class = "upload-none"
v - else >
< img v-if ="scope.row.pic" :src="scope.row.pic" class="upload-pic" >
< div class = "upload-none" v-else >
< i class = "el-icon-picture-outline" > < / i >
< / div >
< / template >
< div v -else -if = " item.type = = = ' editor ' " v-html ="scope.row[item.prop]" > < / div >
< div v -else -if = " item.type = = = ' editor ' " v-html ="scope.row[item.prop]" > < / div >
< p v-else > {{ scope.row [ item.prop ] }} < / p >
< / template >
< / e l - t a b l e - c o l u m n >
< el -table -column label = "操作"
: width = "data.sort ? 150 : 100"
align = "center" >
< el -table -column label = "操作" : width = "data.sort ? 150 : 100" align = "center" >
< template slot -scope = " scope " >
< div class = "flex a-center" >
< el -switch v -model = " scope.row.isEnable "
: active - value = "1"
: inactive - value = "0" >
< el -switch v-model ="scope.row.isEnable" :active-value="1" :inactive-value="0" >
< / e l - s w i t c h >
< i class = "el-icon-edit-outline del"
@ click = "editIntro(scope.row, scope.$index)" > < / i >
< i class = "el-icon-edit-outline del" @ click = "editIntro(scope.row, scope.$index)" > < / i >
< template v-if ="data.sort" >
< i v -if = " scope. $ index ! = data.list.length - 1 "
class = "el-icon-bottom del"
@ click = "sort(1, scope.$index)" > < / i >
< i v -if = " scope. $ index "
class = "el-icon-top del"
@ click = "sort(0, scope.$index)" > < / i >
< i v -if = " scope. $ index ! = data.list.length - 1 " class = "el-icon-bottom del"
@ click = "sort(1, scope.$index)" > < / i >
< i v-if ="scope.$index" class="el-icon-top del" @click="sort(0, scope.$index)" > < / i >
< / template >
< i class = "el-icon-delete del"
@ click = "delRow(data.list, scope.$index)" > < / i >
< i class = "el-icon-delete del" @ click = "delRow(data.list, scope.$index)" > < / i >
< / div >
< / template >
< / e l - t a b l e - c o l u m n >
< / e l - t a b l e >
< div class = "plus" >
< i class = "el-icon-circle-plus-outline"
@ click = "addRow" > < / i >
< i class = "el-icon-circle-plus-outline" @click ="addRow" > < / i >
< / div >
< / template >
< el -form v -else -if = " data.type = = = ' form ' | | data.type = = = ' forms ' "
ref = "form"
: model = "data.form"
: rules = "rules"
: label - width = "data.labelWidth" >
< el -form -item v -for = " ( item , i ) in data.forms "
: key = "i"
: prop = "item.prop"
: label = "item.label" >
< el -input v -if = " item.type = = = ' input ' "
v - model = "data.form[item.prop]"
placeholder = "请输入"
maxlength = "100" > < / e l - i n p u t >
< el -input v -if = " item.type = = = ' textarea ' "
v - model = "data.form[item.prop]"
type = "textarea"
placeholder = "请输入"
maxlength = "300" > < / e l - i n p u t >
< div v -if = " item.type = = = ' upload ' | | item.type = = = ' video ' | | item.type = = = ' media ' "
class = "uploader-wrap" >
< el -upload v -if = " item.type = = = ' upload ' "
class = "uploader"
accept = ".jpg,.png,.jpeg,.gif"
: on - change = "res => changeFile(res, data.form)"
: show - file - list = "false"
: headers = "headers"
: action = "api.upload" >
< img v -if = " data.form.pic & & ! isVideo ( data.form.mediaType ) "
: src = "data.form.pic"
class = "avatar" >
< div class = "uploader-default"
v - else >
< el -form v -else -if = " data.type = = = ' form ' | | data.type = = = ' forms ' " ref = "form" :model ="data.form" :rules ="rules"
: label - width = "data.labelWidth" >
< el -form -item v-for ="(item, i) in data.forms" :key="i" :prop="item.prop" :label="item.label" >
< el -input v -if = " item.type = = = ' input ' " v -model = " data.form [ item.prop ] " placeholder = "请输入"
maxlength = "100" > < / e l - i n p u t >
< el -input v -if = " item.type = = = ' textarea ' " v -model = " data.form [ item.prop ] " type = "textarea" placeholder = "请输入"
maxlength = "300" > < / e l - i n p u t >
< div v-if ="item.type === 'upload' || item.type === 'video' || item.type === 'media'" class="uploader-wrap" >
< el -upload v -if = " item.type = = = ' upload ' " class = "uploader" accept = ".jpg,.png,.jpeg,.gif"
: on - change = "res => changeFile(res, data.form)" : show - file - list = "false" : headers = "headers"
: action = "api.upload" >
< img v-if ="data.form.pic && !isVideo(data.form.mediaType)" :src="data.form.pic" class="avatar" >
< div class = "uploader-default" v-else >
< i class = "el-icon-plus" > < / i >
< p > 上传图片 < / p >
< / div >
< div slot = "tip"
class = "el-upload__tip" >
< div slot = "tip" class = "el-upload__tip" >
< p > 只支持 . jpg , . png格式 < / p >
< / div >
< / e l - u p l o a d >
< el -upload v -if = " item.type = = = ' video ' "
accept = ".mp4,.mov,.avi"
: on - success = "res => uploadSuccess(res, data.form, item)"
: before - remove = "beforeRemove"
: on - remove = "(file, fileList) => handleRemove(file, fileList, data.form, item.prop)"
: file - list = "fileList"
: headers = "headers"
: action = "api.upload" >
< el -upload v -if = " item.type = = = ' video ' " accept = ".mp4,.mov,.avi"
: on - success = "res => uploadSuccess(res, data.form, item)" : before - remove = "beforeRemove"
: on - remove = "(file, fileList) => handleRemove(file, fileList, data.form, item.prop)" : file - list = "fileList"
: headers = "headers" : action = "api.upload" >
< el -button > 上传视频 < / e l - b u t t o n >
< div slot = "tip"
class = "el-upload__tip" >
< div slot = "tip" class = "el-upload__tip" >
< p > 请上传大小1G以内的视频 < / p >
< / div >
< / e l - u p l o a d >
<!-- 图片视频都可上传 -- >
< el -upload v -if = " item.type = = = ' media ' "
: on - success = "res => uploadSuccess(res, data.form, item)"
: before - remove = "beforeRemove"
: on - remove = "(file, fileList) => handleRemove(file, fileList, data.form, item.prop)"
: file - list = "fileList"
: headers = "headers"
: action = "api.upload" >
< el -upload v -if = " item.type = = = ' media ' " : on -success = " res = > uploadSuccess ( res , data . form , item ) "
: before - remove = "beforeRemove"
: on - remove = "(file, fileList) => handleRemove(file, fileList, data.form, item.prop)" : file - list = "fileList"
: headers = "headers" : action = "api.upload" >
< el -button > 上传资源 < / e l - b u t t o n >
< / e l - u p l o a d >
< i v -if = " ! item.required "
class = "el-icon-delete del"
@ click = "data.form[item.prop] = ''" > < / i >
< i v-if ="!item.required" class="el-icon-delete del" @click="data.form[item.prop] = ''" > < / i >
< / div >
< div v -if = " item.type = = = ' link ' "
class = "flex" >
< el -input class = "m-r-10"
v - model = "data.form.link.linkName" > < / e l - i n p u t >
< div v-if ="item.type === 'link'" class="flex" >
< el -input class = "m-r-10" v-model ="data.form.link.linkName" > < / el -input >
< el -button @click ="toLink(data.form)" > 设置链接 < / el -button >
< / div >
< Editor v -if = " item.type = = = ' editor ' "
api - key = 'rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda'
v - model = "data.form[item.prop]"
: init = "editorConfig" / >
< Editor v -if = " item.type = = = ' editor ' " api -key = ' rnk6zw9v267xqz7pf98twt1vmrvltmd436je7a642pckltda '
v - model = "data.form[item.prop]" : init = "editorConfig" / >
< / e l - f o r m - i t e m >
< / e l - f o r m >
< el -form v -else -if = " data.type = = = ' column ' | | data.type = = = ' columns ' "
ref = "form"
: model = "data.form"
: rules = "columnRules"
label - width = "100px" >
< el -form -item prop = "site"
label = "站点选择" >
< el -select v -model = " data.form.site "
@ change = "siteChange" >
< el -option v -for = " item in $ refs.link.sites "
: key = "item.id"
: label = "item.siteName"
: value = "item.id" >
< el -form v -else -if = " data.type = = = ' column ' | | data.type = = = ' columns ' " ref = "form" :model ="data.form"
: rules = "columnRules" label - width = "100px" >
< el -form -item prop = "site" label = "站点选择" >
< el -select v-model ="data.form.site" @change="siteChange" >
< el -option v-for ="item in $refs.link.sites" :key="item.id" :label="item.siteName" :value="item.id" >
< / e l - o p t i o n >
< / e l - s e l e c t >
< / e l - f o r m - i t e m >
< el -form -item prop = "column"
label = "关联栏目" >
< el -cascader ref = "links"
v - model = "data.form.column"
: options = "columns"
: props = "columnProps"
clearable
@ change = "columnChange" > < / e l - c a s c a d e r >
< el -form -item prop = "column" label = "关联栏目" >
< el -cascader ref = "links" v -model = " data.form.column " :options ="columns" :props ="columnProps" clearable
@ change = "columnChange" > < / e l - c a s c a d e r >
< / e l - f o r m - i t e m >
< el -form -item label = "文章展示数量" >
< el -select v-model ="data.form.articleNum" >
< el -option v -for = " item in articleNums "
: key = "item.id"
: label = "item.name"
: value = "item.id" >
< el -option v-for ="item in articleNums" :key="item.id" :label="item.name" :value="item.id" >
< / e l - o p t i o n >
< / e l - s e l e c t >
< / e l - f o r m - i t e m >
< el -form -item label = "栏目标题" >
< el -radio v -model = " data.form.columnTitle "
: label = "1"
@ change = "columnTitleChange" > 默认读取关联栏目 < / e l - r a d i o >
< el -radio v-model ="data.form.columnTitle" :label="1" @change="columnTitleChange" > 默认读取关联栏目 < / el -radio >
< div class = "radio-wrap" >
< el -radio v -model = " data.form.columnTitle "
: label = "2"
@ change = "columnTitleChange" > < / e l - r a d i o >
< el -input v -model = " data.form.columnTitleCustom "
: disabled = "data.form.columnTitle == 1"
size = "small"
maxlength = "100" > < / e l - i n p u t >
< el -radio v-model ="data.form.columnTitle" :label="2" @change="columnTitleChange" > < / el -radio >
< el -input v -model = " data.form.columnTitleCustom " : disabled = "data.form.columnTitle == 1" size = "small"
maxlength = "100" > < / e l - i n p u t >
< / div >
< / e l - f o r m - i t e m >
< / e l - f o r m >
< template v -else -if = " data.type = = = ' history ' " >
< el -table class = "module-table"
: data = "data.list"
header - align = "center"
row - key = "id" >
< el -table -column type = "index"
width = "60"
label = "序号"
align = "center" > < / e l - t a b l e - c o l u m n >
< el -table -column prop = "title"
label = "标题"
min - width = "140"
align = "center" >
< el -table class = "module-table" :data ="data.list" header -align = " center " row -key = " id " >
< el -table -column type = "index" width = "60" label = "序号" align = "center" > < / e l - t a b l e - c o l u m n >
< el -table -column prop = "title" label = "标题" min -width = " 140 " align = "center" >
< template slot -scope = " scope " >
< el -input v -model = " scope.row.title "
placeholder = "请输入"
maxlength = "100" > < / e l - i n p u t >
< el -input v-model ="scope.row.title" placeholder="请输入" maxlength="100" > < / el -input >
< / template >
< / e l - t a b l e - c o l u m n >
< el -table -column label = "操作"
width = "100"
align = "center" >
< el -table -column label = "操作" width = "100" align = "center" >
< template slot -scope = " scope " >
< div class = "flex a-center" >
< el -switch v -model = " scope.row.isEnable "
: active - value = "1"
: inactive - value = "0" >
< el -switch v-model ="scope.row.isEnable" :active-value="1" :inactive-value="0" >
< / e l - s w i t c h >
< i class = "el-icon-edit-outline del"
@ click = "editHistory(scope.row, scope.$index)" > < / i >
< i class = "el-icon-delete del"
@ click = "delRow(data.list, scope.$index)" > < / i >
< i class = "el-icon-edit-outline del" @ click = "editHistory(scope.row, scope.$index)" > < / i >
< i class = "el-icon-delete del" @ click = "delRow(data.list, scope.$index)" > < / i >
< / div >
< / template >
< / e l - t a b l e - c o l u m n >
< / e l - t a b l e >
< div class = "plus" >
< i class = "el-icon-circle-plus-outline"
@ click = "addRow" > < / i >
< i class = "el-icon-circle-plus-outline" @click ="addRow" > < / i >
< / div >
< / template >
< span slot = "footer"
class = "dialog-footer" >
< span slot = "footer" class = "dialog-footer" >
< el -button @ click = "$emit('update:visible', false)" > 取消 < / e l - b u t t o n >
< el -button type = "primary"
@ click = "moduleSubmit" > 确定 < / e l - b u t t o n >
< el -button type = "primary" @click ="moduleSubmit" > 确定 < / el -button >
< / span >
< / e l - d i a l o g >
< Link ref = "link"
: data . sync = "linkForm"
: visible . sync = "linkVisible"
@ linkSubmit = "linkSubmit" / >
< Content :data.sync ="data"
: visible . sync = "contentVisible"
@ contentSubmit = "contentSubmit" / >
< History :data.sync ="data"
: list . sync = "historyData"
: form . sync = "data.form"
: visible . sync = "historyVisible"
@ historySubmit = "historySubmit" / >
< Link ref = "link" :data.sync ="linkForm" :visible.sync ="linkVisible" @linkSubmit ="linkSubmit" / >
< Content :data.sync ="data" :visible.sync ="contentVisible" @contentSubmit ="contentSubmit" / >
< History :data.sync ="data" :list.sync ="historyData" :form.sync ="data.form" :visible.sync ="historyVisible"
@ historySubmit = "historySubmit" / >
<!-- 剪裁组件弹窗 -- >
< el -dialog title = "图片裁剪"
append - to - body
: visible . sync = "cropperModel"
width = "1100px"
: close - on - click - modal = "false" >
< Cropper ref = "cropper"
: img - file . sync = "file"
: is - upload = "isUpload"
: fixed = "fixed"
: fixedNumber . sync = "fixedNumber"
: autoCropWidth = "autoCropWidth"
: autoCropHeight = "autoCropHeight"
@ upload = "customUpload" / >
< el -dialog title = "图片裁剪" append -to -body :visible.sync ="cropperModel" width = "1100px" :close-on-click-modal ="false" >
< Cropper ref = "cropper" :img-file.sync ="file" :is-upload ="isUpload" :fixed ="fixed" :fixedNumber.sync ="fixedNumber"
: autoCropWidth = "autoCropWidth" : autoCropHeight = "autoCropHeight" : dataType = "data.type" @ upload = "customUpload" / >
< / e l - d i a l o g >
< / div >
< / template >
@ -432,7 +310,7 @@ export default {
this . articleNums = nums
}
form && form . site && this . siteChange ( form . site )
this . dialogWidth = dialogWidth || '8 00px'
this . dialogWidth = dialogWidth || '10 00px'
} ,
/ / 站 点 切 换 回 调
siteChange ( siteId ) {
@ -651,11 +529,12 @@ export default {
< / script >
< style lang = "scss" scoped >
. radio - wrap {
display : flex ;
align - items : center ;
. el - input {
width : 200 px ;
margin - left : - 40 px ;
}
display : flex ;
align - items : center ;
. el - input {
width : 200 px ;
margin - left : - 40 px ;
}
}
< / style >