Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
提交反馈
为 GitLab 提交贡献
登录
切换导航
P
pica.cloud.web-education-admin
项目
项目
详情
动态
版本
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
成员
成员
收起侧边栏
Close sidebar
动态
分支图
统计图
提交
打开侧边栏
com.pica.cloud.education.frontend
pica.cloud.web-education-admin
提交
146f4f10
提交
146f4f10
编写于
4月 09, 2020
作者:
haochangdi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
实现基本的模板编辑页逻辑
上级
8a3016e6
变更
8
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
567 行增加
和
243 行删除
+567
-243
baseMessage.vue
src/components/education/template/baseMessage.vue
+248
-100
selectRegion.vue
src/components/education/template/selectRegion.vue
+38
-17
selectTemplate.vue
src/components/education/template/selectTemplate.vue
+20
-20
setOrganization.vue
src/components/education/template/setOrganization.vue
+3
-2
stepContent.vue
src/components/education/template/stepContent.vue
+7
-2
templateList.vue
src/components/education/template/templateList.vue
+75
-61
template-editor.vue
src/views/education/template-editor.vue
+111
-32
template-open.vue
src/views/education/template-open.vue
+65
-9
未找到文件。
src/components/education/template/baseMessage.vue
浏览文件 @
146f4f10
...
@@ -8,15 +8,16 @@
...
@@ -8,15 +8,16 @@
label-width=
"150px"
label-width=
"150px"
class=
"basic-form"
class=
"basic-form"
>
>
<el-form-item
label=
"
项目名称:"
prop=
"project
Name"
>
<el-form-item
label=
"
模板名称:"
prop=
"openTemplate
Name"
>
<el-col
:span=
"13"
>
<el-col
:span=
"13"
>
<el-input
<el-input
size=
"small"
size=
"small"
v-model=
"formData.
project
Name"
v-model=
"formData.
openTemplate
Name"
placeholder=
"请输入
项目
名称"
placeholder=
"请输入
模板
名称"
style=
"width:70%;"
style=
"width:70%;"
:disabled=
"disabled"
></el-input>
></el-input>
<span
class=
"word-num"
>
{{
(
formData
.
project
Name
).
replace
(
/
\s
+/g
,
""
).
length
}}
/24
</span>
<span
class=
"word-num"
>
{{
(
formData
.
openTemplate
Name
).
replace
(
/
\s
+/g
,
""
).
length
}}
/24
</span>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
...
@@ -31,6 +32,7 @@
...
@@ -31,6 +32,7 @@
@
input=
"changeOrganizationName"
@
input=
"changeOrganizationName"
@
blur =
"blurName"
@
blur =
"blurName"
@
focus =
"focusName(index)"
@
focus =
"focusName(index)"
:disabled=
"disabled"
></el-input>
></el-input>
<span
class=
"word-num"
>
{{
(
formData
.
organizationNameList
[
index
]).
replace
(
/
\s
+/g
,
""
).
length
}}
/16
</span>
<span
class=
"word-num"
>
{{
(
formData
.
organizationNameList
[
index
]).
replace
(
/
\s
+/g
,
""
).
length
}}
/16
</span>
<img
@
click=
"plusOrg(index)"
class=
"edit-img"
src=
"../../../assets/image/plus.png"
/>
<img
@
click=
"plusOrg(index)"
class=
"edit-img"
src=
"../../../assets/image/plus.png"
/>
...
@@ -46,14 +48,15 @@
...
@@ -46,14 +48,15 @@
</el-popover>
</el-popover>
</el-form-item>
</el-form-item>
<el-form-item
label=
"有效期:"
prop=
"
useTime
"
v-if=
"!projectManger"
>
<el-form-item
label=
"有效期:"
prop=
"
expireDay
"
v-if=
"!projectManger"
>
<el-col
:span=
"13"
>
<el-col
:span=
"13"
>
<el-input
<el-input
size=
"small"
size=
"small"
v-model=
"formData.
useTime
"
v-model=
"formData.
expireDay
"
placeholder=
"请填写1-1000之间的数字"
placeholder=
"请填写1-1000之间的数字"
style=
"width:70%;"
style=
"width:70%;"
oninput =
"value=value.replace(/[^\d]|^[0]/g,'')"
oninput =
"value=value.replace(/[^\d]|^[0]/g,'')"
:disabled=
"disabled"
></el-input>
></el-input>
<span
class=
"day-btn"
>
天
</span>
<span
class=
"day-btn"
>
天
</span>
</el-col>
</el-col>
...
@@ -70,6 +73,7 @@
...
@@ -70,6 +73,7 @@
value-format=
"yyyy-MM-dd HH:mm:ss"
value-format=
"yyyy-MM-dd HH:mm:ss"
:picker-options=
"pickerOptions0"
:picker-options=
"pickerOptions0"
style=
"width: 100%;"
style=
"width: 100%;"
:disabled=
"disabled"
></el-date-picker>
></el-date-picker>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
...
@@ -85,19 +89,22 @@
...
@@ -85,19 +89,22 @@
:picker-options=
"pickerOptions1"
:picker-options=
"pickerOptions1"
default-time=
"23:59:59"
default-time=
"23:59:59"
style=
"width: 100%;"
style=
"width: 100%;"
:disabled=
"disabled"
></el-date-picker>
></el-date-picker>
</el-form-item>
</el-form-item>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
<el-form-item
label=
"所属学科"
prop=
"
xueke
"
>
<el-form-item
label=
"所属学科"
prop=
"
subjectLevelList
"
>
<el-col
:span=
"13"
>
<el-col
:span=
"13"
>
<el-cascader
<el-cascader
class=
"subject-slelct"
class=
"subject-slelct"
v-model=
"formData.
xueke
"
v-model=
"formData.
subjectLevelList
"
:options=
"options"
:options=
"options"
:props=
"
{ checkStrictly: true }"
:props=
"
{ checkStrictly: true }"
@change="handleChange">
</el-cascader>
@change="handleChange"
:disabled="disabled"
>
</el-cascader>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
...
@@ -110,6 +117,7 @@
...
@@ -110,6 +117,7 @@
action=
"#"
action=
"#"
:show-file-list=
"false"
:show-file-list=
"false"
:before-upload=
"beforeUploadListPic"
:before-upload=
"beforeUploadListPic"
:disabled=
"disabled"
>
>
<img
v-if=
"formData.attachmentUrl1"
@
mouseover
.
stop=
"imgMouseOver=true"
:src=
"formData.attachmentUrl1"
class=
"bg-img"
>
<img
v-if=
"formData.attachmentUrl1"
@
mouseover
.
stop=
"imgMouseOver=true"
:src=
"formData.attachmentUrl1"
class=
"bg-img"
>
<img
<img
...
@@ -117,7 +125,7 @@
...
@@ -117,7 +125,7 @@
class=
"bg-img"
class=
"bg-img"
src=
"../../../assets/image/small.png"
src=
"../../../assets/image/small.png"
>
>
<div
class=
"img-delete"
v-show=
"imgMouseOver"
@
click
.
stop=
"deleteImg(1)"
@
mouseout
.
stop=
"imgMouseOver=false"
><i
class=
"el-icon-delete"
></i></div>
<div
class=
"img-delete"
v-show=
"imgMouseOver
&& !disabled
"
@
click
.
stop=
"deleteImg(1)"
@
mouseout
.
stop=
"imgMouseOver=false"
><i
class=
"el-icon-delete"
></i></div>
<div
class=
"limit-text"
>
<div
class=
"limit-text"
>
<p>
尺寸:48*48
</p>
<p>
尺寸:48*48
</p>
<p>
限制大小: 500Kb
</p>
<p>
限制大小: 500Kb
</p>
...
@@ -133,6 +141,7 @@
...
@@ -133,6 +141,7 @@
size=
"small"
size=
"small"
v-model=
"formData.type"
v-model=
"formData.type"
@
change=
"changeCover"
@
change=
"changeCover"
:disabled=
"disabled"
>
>
<el-radio
:label=
"1"
>
图片
</el-radio>
<el-radio
:label=
"1"
>
图片
</el-radio>
<el-radio
:label=
"2"
>
视频
</el-radio>
<el-radio
:label=
"2"
>
视频
</el-radio>
...
@@ -148,6 +157,7 @@
...
@@ -148,6 +157,7 @@
action=
"#"
action=
"#"
:show-file-list=
"false"
:show-file-list=
"false"
:before-upload=
"beforeUploadCoverPic"
:before-upload=
"beforeUploadCoverPic"
:disabled=
"disabled"
>
>
<img
<img
v-if=
"formData.type == 1 && formData.attachmentUrl2"
v-if=
"formData.type == 1 && formData.attachmentUrl2"
...
@@ -169,7 +179,7 @@
...
@@ -169,7 +179,7 @@
class=
"bg-img"
class=
"bg-img"
src=
"../../../assets/image/small.png"
src=
"../../../assets/image/small.png"
>
>
<div
class=
"img-delete"
v-show=
"imgMouseOver2"
@
click
.
stop=
"deleteImg(2)"
@
mouseout
.
stop=
"imgMouseOver2=false"
><i
class=
"el-icon-delete"
></i></div>
<div
class=
"img-delete"
v-show=
"imgMouseOver2
&& !disabled
"
@
click
.
stop=
"deleteImg(2)"
@
mouseout
.
stop=
"imgMouseOver2=false"
><i
class=
"el-icon-delete"
></i></div>
<div
v-show=
"formData.type == 1"
class=
"limit-text"
>
<div
v-show=
"formData.type == 1"
class=
"limit-text"
>
<p>
尺寸:750*420
</p>
<p>
尺寸:750*420
</p>
<p>
限制大小: 2.0 Mb
</p>
<p>
限制大小: 2.0 Mb
</p>
...
@@ -185,28 +195,30 @@
...
@@ -185,28 +195,30 @@
<p
class=
"upload-message"
v-if=
"uploadImgMessage2"
>
请选择封面
</p>
<p
class=
"upload-message"
v-if=
"uploadImgMessage2"
>
请选择封面
</p>
</div>
</div>
<el-form-item
label=
"项目简介:"
prop=
"
project
Intro"
>
<el-form-item
label=
"项目简介:"
prop=
"
openTemplate
Intro"
>
<el-col
:span=
"13"
>
<el-col
:span=
"13"
>
<el-input
<el-input
size=
"small"
size=
"small"
type=
"textarea"
type=
"textarea"
:autosize=
"
{ minRows: 5}"
:autosize=
"
{ minRows: 5}"
placeholder="请输入项目简介"
placeholder="请输入项目简介"
v-model="formData.
project
Intro"
v-model="formData.
openTemplate
Intro"
style="width:83%;"
style="width:83%;"
:disabled="disabled"
>
</el-input>
>
</el-input>
<span
class=
"word-num"
>
{{
(
formData
.
project
Intro
).
replace
(
/
\s
+/g
,
""
).
length
}}
/200
</span>
<span
class=
"word-num"
>
{{
(
formData
.
openTemplate
Intro
).
replace
(
/
\s
+/g
,
""
).
length
}}
/200
</span>
</el-col>
</el-col>
</el-form-item>
</el-form-item>
<el-form-item
label=
"项目详情"
required
prop=
"
richContent"
v-if=
"!projectManger
"
>
<el-form-item
label=
"项目详情"
required
prop=
"
openTemplateDetail"
v-if=
"!projectManger"
:class=
"
{ueitem: disabled}
">
<vue-ueditor-wrap
<vue-ueditor-wrap
ref=
"ueditor"
ref=
"ueditor"
v-model=
"formData.
richContent
"
v-model=
"formData.
openTemplateDetail
"
:destroy=
"false"
:destroy=
"false"
:config=
"ueditorConfig"
:config=
"ueditorConfig"
>
>
</vue-ueditor-wrap>
</vue-ueditor-wrap>
<div
v-if=
"disabled"
class=
"ue-warp"
></div>
</el-form-item>
</el-form-item>
</el-form>
</el-form>
</div>
</div>
...
@@ -220,12 +232,12 @@ import VueUeditorWrap from 'vue-ueditor-wrap'
...
@@ -220,12 +232,12 @@ import VueUeditorWrap from 'vue-ueditor-wrap'
let
vm
=
null
;
let
vm
=
null
;
export
default
{
export
default
{
props
:
{
props
:
{
formData
:
{
//
formData: {
type
:
Object
,
//
type: Object,
default
:()
=>
{
//
default:() => {
return
null
//
return null
}
//
}
},
//
},
projectManger
:
{
projectManger
:
{
type
:
Boolean
,
type
:
Boolean
,
default
:
false
default
:
false
...
@@ -253,35 +265,66 @@ export default {
...
@@ -253,35 +265,66 @@ export default {
visibleName: false, //是否显示机构提示
visibleName: false, //是否显示机构提示
orgListIndex: 1,
orgListIndex: 1,
organizationContent: 'hcd',//机构名称
organizationContent: 'hcd',//机构名称
options: [{
options: [],
value: 'zhinan',
formData: {
label: '指南',
id: "", //开放模板id 26
children: [{
openTemplateName: "", //开放模板名称
value: 'shejiyuanze',
projectBegintime: "", //模板开始时间
label: '设计原则',
projectEndtime: "", //模板结束时间
children: [{
openTemplateIntro: "", //开放模板简介
value: 'yizhi',
type: 1, //封面类型 1图片2视频
label: '一致'
expireDay: "", // 开放有效期
}, {
subjectLevelList: "", //开放模板所属学科lsit
value: 'fankui',
subjectId: '', //开放模板所属学科id
label: '反馈'
subjectName: "", //开放模板所属学科名称
}, {
attachmentUrl1: "",
value: 'xiaolv',
attachmentUrl2: "",
label: '效率'
attachmentUrl3: "",
}, {
attachmentMore1: {
value: 'kekong',
attachmentExt: "",
label: '可控'
attachmentName: "",
}]
attachmentSize: 0
}]
},
}],
attachmentMore2: {
attachmentExt: "",
attachmentName: "",
attachmentSize: 0
},
organizationName: "", // 发起机构名称(多个机构拼接
organizationNameList: [''], //发起机构列表
openTemplateDetail: '' //开放模板详情
},
attachmentModel:[ //基础信息的图片视频
{
attachmentExt: '',// 附件格式
attachmentName: '',//附件名称
attachmentSize:'',//附件大小,
attachmentType: 1,//1:图片 2:视频 3:pdf
attachmentUrl: '',//附件链接
id: '', //关联唯一ID
kind: 1, //1:列表图片 2:封面配置 3:附件配置
openTemplateId: ''//开放模板id
},
{
attachmentExt: '',// 附件格式
attachmentName: '',//附件名称
attachmentSize:'',//附件大小,
attachmentType: 1,//1:图片 2:视频 3:pdf
attachmentUrl: '',//附件链接
id: '', //关联唯一ID
kind: 1, //1:列表图片 2:封面配置 3:附件配置
openTemplateId: ''//开放模板id
}
],
baseobj: {},
pickerOptions0: {
pickerOptions0: {
disabledDate: time => {
disabledDate: time => {
if (
if (
this
.formData.projectEndtime != "" &&
vm
.formData.projectEndtime != "" &&
this
.formData.projectEndtime != null
vm
.formData.projectEndtime != null
) {
) {
return (
return (
time.getTime() > new Date(
this
.formData.projectEndtime).getTime()
time.getTime() > new Date(
vm
.formData.projectEndtime).getTime()
);
);
}
}
}
}
...
@@ -289,7 +332,7 @@ export default {
...
@@ -289,7 +332,7 @@ export default {
pickerOptions1: {
pickerOptions1: {
disabledDate: time => {
disabledDate: time => {
return (
return (
time.getTime() < new Date(
this
.formData.projectBegintime).getTime()
time.getTime() < new Date(
vm
.formData.projectBegintime).getTime()
); //减去一天的时间代表可以选择同一天;
); //减去一天的时间代表可以选择同一天;
}
}
},
},
...
@@ -298,7 +341,7 @@ export default {
...
@@ -298,7 +341,7 @@ export default {
uploadImgMessage: false,
uploadImgMessage: false,
uploadImgMessage2: false,
uploadImgMessage2: false,
id: 1,
id: 1,
richContent
: '',
openTemplateDetail
: '',
ueditorConfig: {
ueditorConfig: {
// 编辑器不自动被内容撑高
// 编辑器不自动被内容撑高
autoFloatEnabled: false,
autoFloatEnabled: false,
...
@@ -333,7 +376,7 @@ export default {
...
@@ -333,7 +376,7 @@ export default {
// }
// }
},
},
rules: {
rules: {
project
Name: [
openTemplate
Name: [
{ required: true, message: "
请输入项目名称
" },
{ required: true, message: "
请输入项目名称
" },
{
{
min: 2,
min: 2,
...
@@ -343,7 +386,7 @@ export default {
...
@@ -343,7 +386,7 @@ export default {
},
},
{ validator: checkProjectStr, trigger: "
blur
" }
{ validator: checkProjectStr, trigger: "
blur
" }
],
],
useTime
: [
expireDay
: [
{ required: true, message: "
请输入有效期
", trigger: "
blur
" },
{ required: true, message: "
请输入有效期
", trigger: "
blur
" },
{ validator: checkUserTime, trigger: "
blur
" }
{ validator: checkUserTime, trigger: "
blur
" }
],
],
...
@@ -361,15 +404,16 @@ export default {
...
@@ -361,15 +404,16 @@ export default {
trigger: "
change
"
trigger: "
change
"
}
}
],
],
xueke
: { required: true, message: "
请选择学科
", trigger: "
change
" },
subjectLevelList
: { required: true, message: "
请选择学科
", trigger: "
change
" },
project
Intro: [
openTemplate
Intro: [
{ required: true, message: "
请填写项目简介
", trigger: "
blur
" },
{ required: true, message: "
请填写项目简介
", trigger: "
blur
" },
{ min: 1, max: 200, message: "
超出可输入的最大长度
", trigger: "
blur
" }
{ min: 1, max: 200, message: "
超出可输入的最大长度
", trigger: "
blur
" }
],
],
richContent
: [
openTemplateDetail
: [
{ required: true, message: '请填写项目详情', trigger: 'blur' }
{ required: true, message: '请填写项目详情', trigger: 'blur' }
]
]
}
},
disabled: false
}
}
},
},
components:{
components:{
...
@@ -377,45 +421,67 @@ export default {
...
@@ -377,45 +421,67 @@ export default {
},
},
created() {
created() {
vm = this;
vm = this;
vm.getSubjectList();
vm.getBaseMessage();
},
},
methods: {
methods: {
// 获取已有的基本信息
getBaseMessage() {
let id = 26; // 开放模板id
// openLoading(vm);
vm.GET(`portal/openTemplate/getOpenTemplateInfo/${id}`).then(res => {
// closeLoading(vm);
if (res.code == "
000000
") {
this.formData = Object.assign(this.formData, res.data.portalOpenTemplateModel);
this.formData.attachmentUrl1 = res.data.attachmentData[0].attachmentUrl;
this.formData.attachmentMore1 = Object.assign(this.formData.attachmentMore1, res.data.attachmentData[0]);
this.formData.attachmentUrl2 = res.data.attachmentData[1].attachmentType == 1 ? res.data.attachmentData[1].attachmentUrl : '';
this.formData.attachmentUrl3 = res.data.attachmentData[1].attachmentType == 2 ? res.data.attachmentData[1].attachmentUrl : '';
this.formData.attachmentMore2 = Object.assign(this.formData.attachmentMore2, res.data.attachmentData[1]);
this.disabled = true;
} else {
vm.$message.info(res.message);
}
});
},
// 增加发起机构
// 增加发起机构
plusOrg(index) {
plusOrg(index) {
this
.formData.organizationNameList.splice(index + 1, 0, '');
vm
.formData.organizationNameList.splice(index + 1, 0, '');
},
},
// 删除发起机构
// 删除发起机构
deleteOrg(index) {
deleteOrg(index) {
this
.formData.organizationNameList.splice(index, 1);
vm
.formData.organizationNameList.splice(index, 1);
},
},
// 机构名称输入
// 机构名称输入
changeOrganizationName() {
changeOrganizationName() {
let textLength =
this
.formData.organizationName.length;
let textLength =
vm
.formData.organizationName.length;
// 机构输入提示显示与否
// 机构输入提示显示与否
this
.visibleName = textLength == 0;
vm
.visibleName = textLength == 0;
},
},
// 离开机构名称焦点
// 离开机构名称焦点
blurName() {
blurName() {
this
.visibleName = false;
vm
.visibleName = false;
setTimeout(() => {
setTimeout(() => {
this
.submitForm("
formData
");
vm
.submitForm("
formData
");
}, 200);
}, 200);
},
},
// 机构名称聚焦
// 机构名称聚焦
focusName(index) {
focusName(index) {
let textLength =
this
.formData.organizationNameList[index].length;
let textLength =
vm
.formData.organizationNameList[index].length;
if (textLength == 0) {
if (textLength == 0) {
this
.orgListIndex = index + 1;
vm
.orgListIndex = index + 1;
this
.visibleName = true;
vm
.visibleName = true;
} else {
} else {
this
.visibleName = false;
vm
.visibleName = false;
}
}
},
},
// 机构选择默认值
// 机构选择默认值
checkDefault() {
checkDefault() {
this.formData.organizationNameList.splice(this.orgListIndex-1, 1, this.organizationContent);
vm.formData.organizationNameList.splice(vm.orgListIndex-1, 1, vm.organizationContent);
this.visibleName = false;
vm.visibleName = false;
},
handleChange(value) {
},
},
handleChange() {},
//上传列表图片
//上传列表图片
beforeUploadListPic(file) {
beforeUploadListPic(file) {
let fileLimit = {
let fileLimit = {
...
@@ -425,20 +491,19 @@ export default {
...
@@ -425,20 +491,19 @@ export default {
more: "
attachmentMore1
",
more: "
attachmentMore1
",
show: "
uploadImgMessage
"
show: "
uploadImgMessage
"
};
};
this
.beforeAvatarUpload(file, fileLimit);
vm
.beforeAvatarUpload(file, fileLimit);
},
},
//上传图片校验
//上传图片校验
beforeAvatarUpload(file, fileLimit) {
beforeAvatarUpload(file, fileLimit) {
let vm = this;
const isJPG = file.type === "
image
/
jpeg
";
const isJPG = file.type === "
image
/
jpeg
";
const isPNG = file.type === "
image
/
png
";
const isPNG = file.type === "
image
/
png
";
const isLt2M = file.size / 1024 / 1024 < fileLimit.size;
const isLt2M = file.size / 1024 / 1024 < fileLimit.size;
if (!isJPG && !isPNG) {
if (!isJPG && !isPNG) {
this
.$message.error("
图片不符合规范,请根据规范上传图片
");
vm
.$message.error("
图片不符合规范,请根据规范上传图片
");
// return;
// return;
}
}
if (!isLt2M) {
if (!isLt2M) {
this
.$message.error("
图片不符合规范,请根据规范上传图片
");
vm
.$message.error("
图片不符合规范,请根据规范上传图片
");
// return;
// return;
}
}
let _img = new FileReader();
let _img = new FileReader();
...
@@ -447,10 +512,10 @@ export default {
...
@@ -447,10 +512,10 @@ export default {
let image = new Image();
let image = new Image();
image.src = theFile.target.result;
image.src = theFile.target.result;
image.onload = function() {
image.onload = function() {
let _
this = this
;
let _
vm = vm
;
if ( false
if ( false
// _
this
.width != fileLimit.width ||
// _
vm
.width != fileLimit.width ||
// _
this
.height != fileLimit.height
// _
vm
.height != fileLimit.height
) {
) {
vm.$message.error("
图片不符合规范,请根据规范上传图片
");
vm.$message.error("
图片不符合规范,请根据规范上传图片
");
} else {
} else {
...
@@ -486,16 +551,16 @@ export default {
...
@@ -486,16 +551,16 @@ export default {
// 删除图片
// 删除图片
deleteImg(type) {
deleteImg(type) {
if (type == 1) {
if (type == 1) {
this
.formData.attachmentUrl1 = "";
vm
.formData.attachmentUrl1 = "";
this
.imgMouseOver = false;
vm
.imgMouseOver = false;
} else {
} else {
this
.formData.attachmentUrl2 = "";
vm
.formData.attachmentUrl2 = "";
this
.imgMouseOver2 = false;
vm
.imgMouseOver2 = false;
}
}
},
},
//改变封面类型
//改变封面类型
changeCover(radio) {
changeCover(radio) {
this
.formData.attachmentUrl2 = "";
vm
.formData.attachmentUrl2 = "";
},
},
//上传封面图片
//上传封面图片
beforeUploadCoverPic(file) {
beforeUploadCoverPic(file) {
...
@@ -508,24 +573,23 @@ export default {
...
@@ -508,24 +573,23 @@ export default {
more: "
attachmentMore2
",
more: "
attachmentMore2
",
show: "
uploadImgMessage2
"
show: "
uploadImgMessage2
"
};
};
if (
this
.formData.type == 1) {
if (
vm
.formData.type == 1) {
this
.beforeAvatarUpload(file, fileLimit);
vm
.beforeAvatarUpload(file, fileLimit);
} else {
} else {
this
.beforeUploadMp4(file);
vm
.beforeUploadMp4(file);
}
}
},
},
//上传mp4
//上传mp4
beforeUploadMp4(file) {
beforeUploadMp4(file) {
console.log(file);
console.log(file);
let vm = this;
const isMP4 = file.type === "
video
/
mp4
";
const isMP4 = file.type === "
video
/
mp4
";
const isLt = file.size / 1024 / 1024 < 500;
const isLt = file.size / 1024 / 1024 < 500;
if (!isLt) {
if (!isLt) {
this
.$message.error("
视频不符合规范,请根据规范上传视频
");
vm
.$message.error("
视频不符合规范,请根据规范上传视频
");
return;
return;
}
}
if (!isMP4) {
if (!isMP4) {
this
.$message.error("
视频不符合规范,请根据规范上传视频
");
vm
.$message.error("
视频不符合规范,请根据规范上传视频
");
} else {
} else {
openLoading(vm);
openLoading(vm);
doUpload(
doUpload(
...
@@ -547,27 +611,53 @@ export default {
...
@@ -547,27 +611,53 @@ export default {
// 点击下一步
// 点击下一步
nextStep() {
nextStep() {
let flag = true;
let flag = true;
if (!
this
.formData.attachmentUrl1) {
if (!
vm
.formData.attachmentUrl1) {
this
.uploadImgMessage = true;
vm
.uploadImgMessage = true;
flag = false;
flag = false;
} else {
} else {
this
.uploadImgMessage = false;
vm
.uploadImgMessage = false;
}
}
if (!
this
.formData.attachmentUrl2) {
if (!
vm
.formData.attachmentUrl2) {
this
.uploadImgMessage2 = true;
vm
.uploadImgMessage2 = true;
flag = false;
flag = false;
} else {
} else {
this
.uploadImgMessage2 = false;
vm
.uploadImgMessage2 = false;
}
}
return this.submitForm('formData') && flag;
// if (vm.submitForm('formData') && flag) {
// console.log('====================================');
// vm.insertOrupdate();
// console.log(this.formData);
// }
// console.log('====================================');
vm.insertOrupdate();
},
// 新增或者更新基本信息
insertOrupdate() {
vm.setSubjectId();
vm.formData.subjectName = vm.setSubjectName();
// 图片或者视频地址
vm.formData.attachmentMore1.attachmentUrl = vm.formData.attachmentUrl1;
vm.formData.attachmentMore2.attachmentUrl = vm.formData.type == 1 ? vm.formData.attachmentUrl2 : vm.formData.attachmentUrl3;
// 封面类型
vm.formData.attachmentMore2.attachmentType = vm.formData.type;
vm.formData.attachmentMore2.kind = 2;
//整合图片视频
vm.attachmentModel[0] = Object.assign(vm.attachmentModel[0],vm.formData.attachmentMore1);
vm.attachmentModel[1] = Object.assign(vm.attachmentModel[1],vm.formData.attachmentMore2);
vm.baseobj.openTemplateModel = vm.formData;
vm.baseobj.attachmentModel = vm.attachmentModel;
openLoading(vm);
vm.POST("
portal
/
openTemplate
/
insertOrUpdate
", vm.baseobj).then(res => {
closeLoading(vm);
if (res.code == "
000000
") {
// 将产生的模板id:openTemplateId传给下一步
this.$emit('next',res.data.openTemplateModel.id);
} else {
vm.$message.info(res.message);
}
});
},
},
//表单校验
//表单校验
submitForm(formName) {
submitForm(formName) {
let flag = null;
let flag = null;
this
.$refs[formName].validate(valid => {
vm
.$refs[formName].validate(valid => {
if (valid) {
if (valid) {
flag = true;
flag = true;
} else {
} else {
...
@@ -582,10 +672,10 @@ export default {
...
@@ -582,10 +672,10 @@ export default {
vm.$message.error('请将富文本填写完整!');
vm.$message.error('请将富文本填写完整!');
return;
return;
}
}
vm.editData.
richContent
= msg;
vm.editData.
openTemplateDetail
= msg;
openLoading(vm);
openLoading(vm);
let req = {
let req = {
richContent: vm.editData.richContent
,
openTemplateDetail: vm.editData.openTemplateDetail
,
id: vm.id
id: vm.id
};
};
vm.$axios
vm.$axios
...
@@ -606,6 +696,48 @@ export default {
...
@@ -606,6 +696,48 @@ export default {
vm.$message.error(error);
vm.$message.error(error);
});
});
},
},
// 获取学科列表
getSubjectList() {
let req = {};
vm.GET("
/
portal
/
openTemplate
/
labelList
", req).then(res => {
if (res.code == '000000') {
vm.changeName(res.data);
vm.options = res.data;
}
});
},
// 优化学科数据的属性名
changeName(obj) {
for (const item of obj) {
item.children = item.subList;
item.label = item.name;
item.value = item.id ? item.id : 10;
if (item.children && Array.isArray(item.children)) {
vm.changeName(item.children);
}
}
},
// 获取学科对应的label
setSubjectName() {
for (const item of vm.options) {
if (item.value == vm.formData.subjectLevelList[0]) {
if (!vm.formData.subjectLevelList[1] || vm.formData.subjectLevelList[1] == 0) {
return item.label;
} else {
for (const j of item.children){
if (j.value == vm.formData.subjectLevelList[1]) {
return j.label;
}
}
}
}
}
},
// 设置学科id
setSubjectId() {
vm.formData.subjectId = (vm.formData.subjectLevelList.length > 1)&& vm.formData.subjectLevelList[1] != 0 ? vm.formData.subjectLevelList[1] : vm.formData.subjectLevelList[0]
}
}
}
}
}
</
script
>
</
script
>
...
@@ -618,7 +750,7 @@ export default {
...
@@ -618,7 +750,7 @@ export default {
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.base-message-wrap
{
.base-message-wrap
{
margin-top
:
2
0px
;
padding-top
:
8
0px
;
.p_label
{
.p_label
{
margin-left
:
56px
;
margin-left
:
56px
;
font-size
:
12px
;
font-size
:
12px
;
...
@@ -718,7 +850,23 @@ export default {
...
@@ -718,7 +850,23 @@ export default {
padding
:
18px
20px
;
padding
:
18px
20px
;
top
:
40px
;
top
:
40px
;
}
}
.ueitem
{
position
:
relative
;
}
.ue-warp
{
position
:
absolute
;
width
:
80%
;
height
:
100%
;
background
:
#F5F7FA
;
opacity
:
0
.5
;
top
:
0
;
z-index
:
1000
;
}
}
.el-form-item__content
{
width
:
100%
;
height
:
100%
;
background
:
red
;
}
}
.popover-content
{
.popover-content
{
position
:
relative
;
position
:
relative
;
...
...
src/components/education/template/selectRegion.vue
浏览文件 @
146f4f10
...
@@ -28,7 +28,7 @@
...
@@ -28,7 +28,7 @@
</el-tree>
</el-tree>
</el-col>
</el-col>
<el-col
:span=
"11"
>
<el-col
:span=
"11"
>
<p
class=
"area-p"
>
<p
class=
"area-p"
@
click=
"getScope('administrative')"
>
项目范围包含下列区域所有机构和人员(
{{
tagsRegion
.
length
}}
)
项目范围包含下列区域所有机构和人员(
{{
tagsRegion
.
length
}}
)
</p>
</p>
<el-tag
<el-tag
...
@@ -70,7 +70,7 @@ export default {
...
@@ -70,7 +70,7 @@ export default {
},
},
treeData
:
[],
treeData
:
[],
tagsRegion
:
[],
tagsRegion
:
[],
projectId
:
640
projectId
:
173
}
}
},
},
created
()
{
created
()
{
...
@@ -105,7 +105,7 @@ export default {
...
@@ -105,7 +105,7 @@ export default {
this
.
treeData
=
[];
this
.
treeData
=
[];
this
.
treeData
[
0
]
=
administrativeAll
;
this
.
treeData
[
0
]
=
administrativeAll
;
this
.
setTreeData
(
administrative
);
this
.
setTreeData
(
administrative
);
this
.
getCheckedTree
();
//
this.getCheckedTree();
}
}
});
});
},
},
...
@@ -149,12 +149,11 @@ export default {
...
@@ -149,12 +149,11 @@ export default {
halfCheckedTree
halfCheckedTree
);
);
//重构内容
//重构内容
this
.
allSelectedKeys
=
allSelectedKeys
;
this
.
allSelectedKeys
=
allSelectedKeys
;
this
.
initCheckList
(
allSelectedKeys
);
this
.
initCheckList
(
allSelectedKeys
);
//console.log("allSelectedKeys", allSelectedKeys);
//console.log("allSelectedKeys", allSelectedKeys);
//改变行政范围后,更新设定机构和设定人员
//改变行政范围后,更新设定机构和设定人员
this
.
updateOrganizationAndPerson
(
allSelectedKeys
);
//
this.updateOrganizationAndPerson(allSelectedKeys);
this
.
updatedTree
=
true
;
this
.
updatedTree
=
true
;
},
},
//v2.2教培更新
//v2.2教培更新
...
@@ -192,18 +191,21 @@ export default {
...
@@ -192,18 +191,21 @@ export default {
}
}
},
},
//行政范围改变更新设定机构
//行政范围改变更新设定机构
updateOrganizationAndPerson
(
allSelectedKeys
)
{
// updateOrganizationAndPerson(allSelectedKeys) {
console
.
log
(
'=========================updateOrganizationAndPerson'
)
// console.log('====================================');
this
.
tableOrganization
=
[];
// console.log(allSelectedKeys);
this
.
tablePerson
=
[];
// console.log('====================================');
this
.
lookedOrganization
=
[];
// console.log('=========================updateOrganizationAndPerson')
this
.
changedOrganization
=
[];
// this.tableOrganization = [];
this
.
changedOrganization2
=
[];
// this.tablePerson = [];
},
// this.lookedOrganization = [];
getCheckedKeys
()
{
// this.changedOrganization = [];
console
.
log
(
'=========================getCheckedKeys'
)
// this.changedOrganization2 = [];
console
.
log
(
this
.
$refs
.
tree
.
getCheckedKeys
());
// },
},
// getCheckedKeys() {
// console.log('=========================getCheckedKeys')
// console.log(this.$refs.tree.getCheckedKeys());
// },
//添加子节点
//添加子节点
append
(
data
,
node
)
{
append
(
data
,
node
)
{
console
.
log
(
'=========================append'
)
console
.
log
(
'=========================append'
)
...
@@ -264,6 +266,25 @@ export default {
...
@@ -264,6 +266,25 @@ export default {
}
}
console
.
log
(
treeKeyList
);
console
.
log
(
treeKeyList
);
this
.
$refs
.
tree
.
setCheckedKeys
(
treeKeyList
);
this
.
$refs
.
tree
.
setCheckedKeys
(
treeKeyList
);
},
//设定的行政范围内容
getScope
(
type
)
{
console
.
log
(
'========================getScope'
);
let
scope
=
""
;
let
arr
=
[];
for
(
let
i
=
0
;
i
<
this
.
tagsRegion
.
length
;
i
++
)
{
scope
+=
this
.
tagsRegion
[
i
].
key
;
arr
.
push
(
this
.
tagsRegion
[
i
].
key
)
if
(
i
<
this
.
tagsRegion
.
length
-
1
)
{
scope
+=
"|"
;
}
}
if
(
scope
==
""
)
{
return
null
;
}
this
.
$emit
(
'setRegion'
,
arr
);
return
scope
;
}
}
}
}
}
}
...
...
src/components/education/template/selectTemplate.vue
浏览文件 @
146f4f10
...
@@ -205,6 +205,12 @@ import Sortable from "sortablejs";
...
@@ -205,6 +205,12 @@ import Sortable from "sortablejs";
let
vm
=
null
;
let
vm
=
null
;
export
default
{
export
default
{
props
:
{
openTemplateId
:
{
type
:
String
|
Number
,
deault
:
0
}
},
data
()
{
data
()
{
let
checkNormalInt
=
(
rule
,
value
,
callback
)
=>
{
let
checkNormalInt
=
(
rule
,
value
,
callback
)
=>
{
const
val
=
parseFloat
(
value
);
const
val
=
parseFloat
(
value
);
...
@@ -216,7 +222,6 @@ export default {
...
@@ -216,7 +222,6 @@ export default {
}
}
};
};
return
{
return
{
idTypeProject
:
""
,
customError
:
{
customError
:
{
standard
:
{
standard
:
{
className
:
""
,
className
:
""
,
...
@@ -239,8 +244,6 @@ export default {
...
@@ -239,8 +244,6 @@ export default {
error
:
""
error
:
""
}
}
},
},
projectId
:
null
,
fileList
:
[],
//选择项目组件 数据
//选择项目组件 数据
optionsComponent
:
[],
optionsComponent
:
[],
optionsCertificate
:
[],
optionsCertificate
:
[],
...
@@ -248,9 +251,9 @@ export default {
...
@@ -248,9 +251,9 @@ export default {
component
:
[],
component
:
[],
configure
:
2
,
configure
:
2
,
certificate
:
""
,
certificate
:
""
,
courseRequire
:
0
,
//
0:不控制 1:按课程时长配置要求
courseRequire
:
0
,
//
模板内课程的完成是否受学习时长控制:0否1是
passExamCount
:
""
,
passExamCount
:
""
,
//模板中最高考试门数限制:passType=2时有值
passAverageScore
:
""
,
passAverageScore
:
""
,
//门数限制下考试成绩的平均分限制:passType=2时有值
passTotalLearnTime
:
""
passTotalLearnTime
:
""
},
},
tagsComponent
:
[],
tagsComponent
:
[],
...
@@ -259,8 +262,8 @@ export default {
...
@@ -259,8 +262,8 @@ export default {
showStorage
:
false
,
showStorage
:
false
,
//考试数据
//考试数据
formExam
:
{
formExam
:
{
certificateType
:
1
,
certificateType
:
1
,
//模板证书类型:1单证书2多证书
passType
:
1
,
passType
:
1
,
//模板通过标准类型:1所有组件通过,2根据平均分设定,3根据项目内学习时长设定
exam
:
[
exam
:
[
{
{
examCount
:
1
,
examCount
:
1
,
...
@@ -298,7 +301,8 @@ export default {
...
@@ -298,7 +301,8 @@ export default {
{
required
:
false
,
trigger
:
"change"
,
validator
:
checkNormalInt
}
{
required
:
false
,
trigger
:
"change"
,
validator
:
checkNormalInt
}
],
],
showRules1
:
[{
required
:
true
,
message
:
"请输入门数"
,
trigger
:
"blur"
}]
showRules1
:
[{
required
:
true
,
message
:
"请输入门数"
,
trigger
:
"blur"
}]
}
},
disabled
:
true
};
};
},
},
computed
:
{
computed
:
{
...
@@ -306,7 +310,6 @@ export default {
...
@@ -306,7 +310,6 @@ export default {
},
},
created
()
{
created
()
{
vm
=
this
;
vm
=
this
;
(
this
.
projectId
=
vm
.
getUrlSearch
(
window
.
location
.
href
,
"projectId"
)),
this
.
getComponentInfo
();
this
.
getComponentInfo
();
vm
.
idType
=
localStorage
.
getItem
(
"storageIdType"
);
vm
.
idType
=
localStorage
.
getItem
(
"storageIdType"
);
},
},
...
@@ -360,13 +363,8 @@ export default {
...
@@ -360,13 +363,8 @@ export default {
//查询组件证书信息
//查询组件证书信息
getComponentInfo
()
{
getComponentInfo
()
{
console
.
log
(
'=================getComponentInfo'
);
console
.
log
(
'=================getComponentInfo'
);
let
param
=
{};
let
projectIdValue
=
vm
.
projectId
;
if
(
projectIdValue
==
null
)
{
projectIdValue
=
0
;
}
vm
vm
.
GET
(
"portal/
portalInfo/getComponentInfo/"
+
projectIdValue
,
param
)
.
GET
(
"portal/
openTemplate/getAllComponent"
)
.
then
(
res
=>
{
.
then
(
res
=>
{
if
(
res
.
code
==
"000000"
)
{
if
(
res
.
code
==
"000000"
)
{
//console.log(res);
//console.log(res);
...
@@ -392,7 +390,7 @@ export default {
...
@@ -392,7 +390,7 @@ export default {
}
}
});
});
},
},
//项目组件信息 暂存/完成
//项目组件信息 暂存/完成
1暂存2保存3发布
componentDraft
(
type
)
{
componentDraft
(
type
)
{
console
.
log
(
'=================componentDraft'
);
console
.
log
(
'=================componentDraft'
);
let
param
=
{
let
param
=
{
...
@@ -400,7 +398,7 @@ export default {
...
@@ -400,7 +398,7 @@ export default {
componentIds
:
operationData
.
getComponent
(
vm
.
tagsComponent
),
componentIds
:
operationData
.
getComponent
(
vm
.
tagsComponent
),
// certificateId: this.formComponent.certificate,
// certificateId: this.formComponent.certificate,
certificateId
:
[],
certificateId
:
[],
projectId
:
this
.
project
Id
,
openTemplateId
:
this
.
openTemplate
Id
,
type
:
type
,
type
:
type
,
status
:
this
.
projectStatus
,
status
:
this
.
projectStatus
,
certificateType
:
this
.
formExam
.
passType
==
2
?
2
:
1
,
certificateType
:
this
.
formExam
.
passType
==
2
?
2
:
1
,
...
@@ -431,7 +429,7 @@ export default {
...
@@ -431,7 +429,7 @@ export default {
certificateId
:
ruleData
[
o
].
certificateId
,
certificateId
:
ruleData
[
o
].
certificateId
,
certificateName
:
ruleData
[
o
].
certificateName
,
certificateName
:
ruleData
[
o
].
certificateName
,
examCount
:
ruleData
[
o
].
examCount
,
examCount
:
ruleData
[
o
].
examCount
,
portalProjectId
:
this
.
project
Id
,
openTemplateId
:
this
.
openTemplate
Id
,
rangeMax
:
ruleData
[
o
].
rangeMax
,
rangeMax
:
ruleData
[
o
].
rangeMax
,
rangeMin
:
ruleData
[
o
].
rangeMin
rangeMin
:
ruleData
[
o
].
rangeMin
};
};
...
@@ -446,7 +444,7 @@ export default {
...
@@ -446,7 +444,7 @@ export default {
}
}
}
}
}
}
vm
.
POST
(
"portal/
portalInfo
/componentDraft"
,
param
).
then
(
res
=>
{
vm
.
POST
(
"portal/
openTemplate
/componentDraft"
,
param
).
then
(
res
=>
{
console
.
log
(
res
);
console
.
log
(
res
);
vm
.
$message
({
vm
.
$message
({
message
:
res
.
message
,
message
:
res
.
message
,
...
@@ -550,6 +548,7 @@ export default {
...
@@ -550,6 +548,7 @@ export default {
vm
.
$message
(
"至少配置1个证书"
);
vm
.
$message
(
"至少配置1个证书"
);
}
}
},
},
// 选择证书
updateCertificate
(
index
)
{
updateCertificate
(
index
)
{
// console.log('optionsCertificate',vm.optionsCertificate,'index',index,'item',vm.formExam.exam[index])
// console.log('optionsCertificate',vm.optionsCertificate,'index',index,'item',vm.formExam.exam[index])
for
(
let
i
=
0
;
i
<
vm
.
optionsCertificate
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
vm
.
optionsCertificate
.
length
;
i
++
)
{
...
@@ -623,6 +622,7 @@ export default {
...
@@ -623,6 +622,7 @@ export default {
}
}
}
}
.select-manager-wrap
{
.select-manager-wrap
{
padding-top
:
64px
;
.mleft60
{
.mleft60
{
margin-left
:
60px
;
margin-left
:
60px
;
}
}
...
...
src/components/education/template/setOrganization.vue
浏览文件 @
146f4f10
...
@@ -177,7 +177,8 @@ export default {
...
@@ -177,7 +177,8 @@ export default {
formOrganization
:
{
formOrganization
:
{
name
:
""
,
name
:
""
,
administrativeId
:
"0"
,
administrativeId
:
"0"
,
administrativeIdList
:
[
"0"
],
// administrativeIdList: ["0"],
administrativeIdList
:[
110
],
level
:
"-1"
,
level
:
"-1"
,
chechAll
:
true
,
chechAll
:
true
,
pageNum
:
1
,
pageNum
:
1
,
...
@@ -339,7 +340,7 @@ export default {
...
@@ -339,7 +340,7 @@ export default {
},
},
//获取地区select
//获取地区select
getRegionOption
()
{
getRegionOption
()
{
console
.
log
(
'=========================getRegionOption'
)
console
.
log
(
'=========================getRegionOption'
)
let
req
=
{};
let
req
=
{};
openLoading
(
vm
);
openLoading
(
vm
);
vm
.
GET
(
"basic-data/position/provinces"
,
req
).
then
(
res
=>
{
vm
.
GET
(
"basic-data/position/provinces"
,
req
).
then
(
res
=>
{
...
...
src/components/education/template/stepContent.vue
浏览文件 @
146f4f10
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
<
template
>
<
template
>
<div
class=
"step-content-compontent"
>
<div
class=
"step-content-compontent"
>
<el-row
class=
"step-content"
>
<el-row
class=
"step-content"
>
<el-col
:span=
"1
4
"
>
<el-col
:span=
"1
2
"
>
<el-steps
:active=
"active"
simple
class
>
<el-steps
:active=
"active"
simple
class
>
<span
class=
"step-num"
v-bind:class=
"
{ 'on-step': active==0 }">1
</span>
<span
class=
"step-num"
v-bind:class=
"
{ 'on-step': active==0 }">1
</span>
<el-step
title=
"基础信息"
></el-step>
<el-step
title=
"基础信息"
></el-step>
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
<el-step
title=
"选择项目组件"
>
3
</el-step>
<el-step
title=
"选择项目组件"
>
3
</el-step>
</el-steps>
</el-steps>
</el-col>
</el-col>
<el-col
:span=
"
5
"
:offset=
"5"
>
<el-col
:span=
"
7
"
:offset=
"5"
>
<el-button
v-if=
"!fished"
size=
"small"
type=
"primary"
@
click=
"nextStep"
>
下一步
</el-button>
<el-button
v-if=
"!fished"
size=
"small"
type=
"primary"
@
click=
"nextStep"
>
下一步
</el-button>
<el-button
v-if=
"fished"
size=
"small"
type=
"primary"
@
click=
"complete"
>
完成
</el-button>
<el-button
v-if=
"fished"
size=
"small"
type=
"primary"
@
click=
"complete"
>
完成
</el-button>
</el-col>
</el-col>
...
@@ -49,6 +49,11 @@ export default {
...
@@ -49,6 +49,11 @@ export default {
<
style
lang=
"scss"
>
<
style
lang=
"scss"
>
.step-content-compontent
{
.step-content-compontent
{
background
:
#fff
;
background
:
#fff
;
z-index
:
1001
;
background
:
#fff
;
position
:
fixed
;
right
:
30px
;
left
:
285px
;
.step-content
{
.step-content
{
overflow
:
hidden
;
overflow
:
hidden
;
height
:
60px
;
height
:
60px
;
...
...
src/components/education/template/templateList.vue
浏览文件 @
146f4f10
...
@@ -4,8 +4,8 @@
...
@@ -4,8 +4,8 @@
<div
class=
"list-wrap"
>
<div
class=
"list-wrap"
>
<div
class=
"template-content"
:class=
"
{clicked: item.isclick}" v-for="(item,index) of list" :key="index" @click="check(item,index)">
<div
class=
"template-content"
:class=
"
{clicked: item.isclick}" v-for="(item,index) of list" :key="index" @click="check(item,index)">
<div
class=
"title-wrap"
>
<div
class=
"title-wrap"
>
<div
class=
"title-icon"
>
神经内科
</div>
<div
class=
"title-icon"
>
{{
item
.
subjectName
}}
</div>
<div
class=
"title"
>
国家基本公共卫生服务项目国家基本公共卫生
</div>
<div
class=
"title"
>
{{
item
.
openTemplateName
}}
</div>
<div
class=
"sj"
v-if=
"item.isclick"
>
<div
class=
"sj"
v-if=
"item.isclick"
>
<i
class=
"el-icon-check"
></i>
<i
class=
"el-icon-check"
></i>
</div>
</div>
...
@@ -13,21 +13,21 @@
...
@@ -13,21 +13,21 @@
<div
class=
"main"
>
<div
class=
"main"
>
<div
class=
"main-title"
>
套餐内容包含:
</div>
<div
class=
"main-title"
>
套餐内容包含:
</div>
<ul
class=
"clase-list"
>
<ul
class=
"clase-list"
>
<li
class=
"clase-item"
>
<li
class=
"clase-item"
v-if=
"item.courseCount"
>
<span
class=
"icon"
></span>
<span
class=
"icon"
></span>
<i
class=
"icon-message"
>
7
节课程
</i>
<i
class=
"icon-message"
>
{{
item
.
courseCount
}}
节课程
</i>
</li>
</li>
<li
class=
"clase-item"
>
<li
class=
"clase-item"
v-if=
"item.beforeExamCount"
>
<span
class=
"icon"
></span>
<span
class=
"icon"
></span>
<i
class=
"icon-message"
>
7节课程
</i>
<i
class=
"icon-message"
>
{{
item
.
beforeExamCount
}}
次摸底考试
</i>
</li>
</li>
<li
class=
"clase-item"
>
<li
class=
"clase-item"
v-if=
"item.afterExamCount"
>
<span
class=
"icon"
></span>
<span
class=
"icon"
></span>
<i
class=
"icon-message"
>
7节7节课程课程
</i>
<i
class=
"icon-message"
>
{{
tem
.
afterExamCount
}}
次结业考试
<i
v-if=
"item.existCertificate "
>
(通过获结业证书)
</i>
</i>
</li>
</li>
<li
class=
"clase-item"
>
<li
class=
"clase-item"
>
<span
class=
"icon"
></span>
<span
class=
"icon"
></span>
<i
class=
"icon-message"
>
7节7节课程课程
</i>
<i
class=
"icon-message"
>
实时在线项目数据报告
</i>
</li>
</li>
</ul>
</ul>
</div>
</div>
...
@@ -50,20 +50,24 @@
...
@@ -50,20 +50,24 @@
</div>
</div>
<el-dialog
title=
"项目详情"
:visible
.
sync=
"dialogTableVisible"
class=
"dialog-list-wrap"
>
<el-dialog
title=
"项目详情"
:visible
.
sync=
"dialogTableVisible"
class=
"dialog-list-wrap"
>
<div
class=
"dialog-line"
></div>
<div
class=
"dialog-line"
></div>
<div
class=
"dialog-title"
>
国家基本公共卫生服务项目国家基本公共卫生
</div>
<div
class=
"dialog-title"
>
{{
detailObj
.
openTemplateName
}}
</div>
<div
class=
"dialog-message"
>
<div
class=
"dialog-message"
>
<div
class=
"dm-title"
>
<div
class=
"dm-title"
>
<div
class=
"dm-line"
></div>
<div
class=
"dm-line"
></div>
<div
class=
"dm-msg"
>
基本信息
</div>
<div
class=
"dm-msg"
>
基本信息
</div>
</div>
</div>
<div
class=
"dm-main"
>
<div
class=
"dm-main"
>
<div
class=
"mian-list"
>
<div
class=
"mian-list"
v-if=
"detailObj.openTemplateIntro"
>
<div
class=
"dm-name"
>
内容有效期:
</div>
<div
class=
"dm-name"
>
内容有效期:
</div>
<div
class=
"dm-nr"
>
30天
</div>
<div
class=
"dm-nr"
>
{{
detailObj
.
openTemplateIntro
}}
天
</div>
</div>
<div
class=
"mian-list"
v-if=
"detailObj.subjectName"
>
<div
class=
"dm-name"
>
项目学科:
</div>
<div
class=
"dm-nr"
>
{{
detailObj
.
subjectName
}}
</div>
</div>
</div>
<div
class=
"mian-list"
>
<div
class=
"mian-list"
v-if=
"detailObj.organizationName"
>
<div
class=
"dm-name"
>
已参加的机构:
</div>
<div
class=
"dm-name"
>
已参加的机构:
</div>
<div
class=
"dm-nr"
>
已参加的机构已参加的机构
</div>
<div
class=
"dm-nr"
>
{{
detailObj
.
organizationName
}}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
...
@@ -72,13 +76,14 @@
...
@@ -72,13 +76,14 @@
<div
class=
"dm-line"
></div>
<div
class=
"dm-line"
></div>
<div
class=
"dm-msg"
>
项目简介
</div>
<div
class=
"dm-msg"
>
项目简介
</div>
</div>
</div>
<div
class=
"jjs-main"
>
项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介项目简介
</div>
<div
class=
"jjs-main"
>
{{
detailObj
.
openTemplateIntro
}}
</div>
</div>
</div>
<div
class=
"dialog-xq"
>
<div
class=
"dialog-xq"
>
<div
class=
"dm-title"
>
<div
class=
"dm-title"
>
<div
class=
"dm-line"
></div>
<div
class=
"dm-line"
></div>
<div
class=
"dm-msg"
>
项目详情
</div>
<div
class=
"dm-msg"
>
项目详情
</div>
</div>
</div>
<div
class=
"xq-main"
v-html=
"detailObj.openTemplateDetail"
></div>
</div>
</div>
</el-dialog>
</el-dialog>
...
@@ -88,67 +93,68 @@
...
@@ -88,67 +93,68 @@
</
template
>
</
template
>
<
script
>
<
script
>
import
{
openLoading
,
closeLoading
}
from
"../../../utils/utils"
;
let
vm
=
null
;
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
list
:
[
list
:
[],
{
detailObj
:
{},
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
},
{
isclick
:
false
}
],
dialogTableVisible
:
false
dialogTableVisible
:
false
}
}
},
},
created
()
{},
created
()
{
vm
=
this
;
vm
.
getTemplateList
();
},
methods
:
{
methods
:
{
// 选中
// 选中
check
(
item
,
index
)
{
check
(
item
,
index
)
{
item
.
isclick
=
true
;
this
.
list
[
index
]
.
isclick
=
true
;
for
(
let
i
=
0
;
i
<
this
.
list
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
this
.
list
.
length
;
i
++
)
{
if
(
i
!=
index
)
{
if
(
i
!=
index
)
{
this
.
list
[
i
].
isclick
=
false
vm
.
list
[
i
].
isclick
=
false
}
}
}
}
vm
.
$emit
(
'checkFn'
,
item
.
id
);
},
},
// 获取详情
// 获取详情
getDetail
()
{
getDetail
(
item
)
{
//
this
.
dialogTableVisible
=
true
;
this
.
dialogTableVisible
=
true
;
openLoading
(
vm
);
vm
.
GET
(
`portal/openTemplateProject/getOpenTemplateInfoForList/
${
item
.
id
}
`
)
.
then
(
res
=>
{
closeLoading
(
vm
);
if
(
res
.
code
==
"000000"
)
{
vm
.
detailObj
=
res
.
data
;
}
else
{
vm
.
$message
.
info
(
res
.
message
);
}
})
.
catch
((
err
)
=>
{
closeLoading
(
vm
);
vm
.
$message
.
warning
(
'请稍后重试'
);
});
},
getTemplateList
()
{
openLoading
(
vm
);
vm
.
GET
(
`portal/openTemplateProject/getOpenTemplateList`
)
.
then
(
res
=>
{
closeLoading
(
vm
);
if
(
res
.
code
==
"000000"
)
{
for
(
const
item
of
res
.
data
.
list
)
{
item
.
isclick
=
false
;
}
this
.
list
=
res
.
data
.
list
;
}
else
{
vm
.
$message
.
info
(
res
.
message
);
}
})
.
catch
((
err
)
=>
{
closeLoading
(
vm
);
vm
.
$message
.
warning
(
'请稍后重试'
);
});
}
}
}
}
}
}
...
@@ -405,6 +411,14 @@ export default {
...
@@ -405,6 +411,14 @@ export default {
.dialog-xq
{
.dialog-xq
{
margin-top
:
40px
;
margin-top
:
40px
;
padding-bottom
:
30px
;
padding-bottom
:
30px
;
.xq-main
{
margin-left
:
17px
;
margin-top
:
16px
;
color
:
#676869
;
img
{
max-height
:
720px
;
}
}
}
}
}
}
}
}
...
...
src/views/education/template-editor.vue
浏览文件 @
146f4f10
<
template
>
<
template
>
<div
class=
"template-editor-wrap"
>
<div
class=
"template-editor-wrap"
>
<bread-crumb
:curmbFirst=
"curmbFirst"
:curmbSecond=
"curmbSecond"
:curmbThird=
"curmbThird"
></bread-crumb>
<bread-crumb
:curmbFirst=
"curmbFirst"
:curmbSecond=
"curmbSecond"
:curmbThird=
"curmbThird"
></bread-crumb>
<div
class=
"add-content screenSet"
id=
"screenSet"
>
<div
class=
"add-content screenSet"
id=
"screenSet"
v-if=
"editor"
>
<div
class=
"top-lin"
></div>
<step-content
<step-content
:active=
"active"
:active=
"active"
:fished=
"fished"
:fished=
"fished"
@
nextStep=
"nextStep"
@
nextStep=
"nextStep"
@
complete=
"complete"
@
complete=
"complete"
/>
/>
<!-- 基础组件 -->
<!-- 基础组件 -->
<base-message
<base-message
ref=
"baseMessage"
ref=
"baseMessage"
v-if=
"active == 0 && formData"
v-if=
"active == 0 && formData"
:formData=
"formData"
:projectManger=
"projectManger"
:projectManger=
"projectManger"
@
next=
"next"
/>
/>
<!-- 选择项目组件 -->
<!-- 选择项目组件 -->
<select-template
v-if=
"active == 1"
/>
<select-template
ref=
"selectTemplate"
v-if=
"active == 1"
:openTemplateId=
"openTemplateId"
/>
<!-- 选择行政区 -->
<!-- 选择行政区 -->
<!--
<select-region
v-if=
"active == 1"
></select-region>
-->
<!--
<select-region
v-if=
"active == 1"
></select-region>
-->
...
@@ -27,6 +31,23 @@
...
@@ -27,6 +31,23 @@
<!-- 设定机构 -->
<!-- 设定机构 -->
<!--
<set-Organization
v-if=
"active == 0"
></set-Organization>
-->
<!--
<set-Organization
v-if=
"active == 0"
></set-Organization>
-->
</div>
</div>
<div
class=
"add-content screenSet"
id=
"screenSet"
v-else
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClick"
>
<el-tab-pane
label=
"基础信息"
name=
"first"
>
<base-message
ref=
"baseMessage"
:projectManger=
"projectManger"
@
next=
"next"
/>
</el-tab-pane>
<el-tab-pane
label=
"选中组件"
name=
"second"
>
<select-template
ref=
"selectTemplate"
:openTemplateId=
"openTemplateId"
/>
</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -47,34 +68,54 @@ export default {
...
@@ -47,34 +68,54 @@ export default {
fished
:
false
,
fished
:
false
,
projectManger
:
false
,
projectManger
:
false
,
formData
:
{
formData
:
{
projectName
:
""
,
openTemplateName
:
""
,
//开放模板名称
projectBegintime
:
""
,
projectBegintime
:
""
,
//模板开始时间
projectEndtime
:
""
,
projectEndtime
:
""
,
//模板结束时间
projectIntro
:
""
,
openTemplateIntro
:
""
,
//开放模板简介
type
:
1
,
type
:
1
,
//封面类型 1图片2视频
useTime
:
""
,
expireDay
:
""
,
// 开放有效期
xueke
:
""
,
subjectId
:
""
,
//开放模板所属学科ID
subjectName
:
""
,
//开放模板所属学科名称
attachmentUrl1
:
""
,
attachmentUrl1
:
""
,
attachmentUrl2
:
""
,
attachmentUrl2
:
""
,
attachmentUrl3
:
""
,
attachmentUrl3
:
""
,
attachmentMore1
:
{},
attachmentMore1
:
{},
attachmentMore2
:
{},
attachmentMore2
:
{},
scopeType
:
0
,
organizationName
:
""
,
// 发起机构名称(多个机构拼接
organizationName
:
""
,
organizationNameList
:
[
''
],
//发起机构列表
organizationNameList
:
[
''
],
openTemplateDetail
:
''
//开放模板详情
sendOption
:
1
,
receiveOption
:
1
,
visibleFlag
:
1
,
learnableFlag
:
2
,
authorityType
:
1
,
allowLearn
:
2
,
richContent
:
''
},
},
attachmentModel
:[
//基础信息的图片视频
{
attachmentExt
:
''
,
// 附件格式
attachmentName
:
''
,
//附件名称
attachmentSize
:
''
,
//附件大小,
attachmentType
:
1
,
//1:图片 2:视频 3:pdf
attachmentUrl
:
''
,
//附件链接
id
:
''
,
//关联唯一ID
kind
:
1
,
//1:列表图片 2:封面配置 3:附件配置
openTemplateId
:
''
//开放模板id
},
{
attachmentExt
:
''
,
// 附件格式
attachmentName
:
''
,
//附件名称
attachmentSize
:
''
,
//附件大小,
attachmentType
:
1
,
//1:图片 2:视频 3:pdf
attachmentUrl
:
''
,
//附件链接
id
:
''
,
//关联唯一ID
kind
:
1
,
//1:列表图片 2:封面配置 3:附件配置
openTemplateId
:
''
//开放模板id
}
],
baseobj
:
{},
formTemplate
:
{
formTemplate
:
{
component
:
[],
component
:
[],
configure
:
2
,
configure
:
2
,
certificate
:
""
certificate
:
""
}
},
openTemplateId
:
26
,
activeName
:
'first'
,
editor
:
true
// 是否为编辑状态
}
}
},
},
components
:
{
components
:
{
...
@@ -85,28 +126,66 @@ export default {
...
@@ -85,28 +126,66 @@ export default {
selectRegion
,
selectRegion
,
setOrganization
setOrganization
},
},
created
()
{},
created
()
{
this
.
fished
=
this
.
active
==
0
?
false
:
true
},
methods
:
{
methods
:
{
//
下一步
//
用于存储基本信息
nextStep
()
{
nextStep
()
{
// let flag = this.$refs.baseMessage.nextStep();
if
(
this
.
active
==
0
)
{
// if (!flag) {
let
flag
=
this
.
$refs
.
baseMessage
.
nextStep
();
// return;
// }
this
.
active
++
;
if
(
this
.
active
==
1
)
{
this
.
fished
=
true
;
}
}
},
},
// 下一步
next
(
openTemplateId
)
{
this
.
openTemplateId
=
openTemplateId
;
this
.
active
=
1
;
this
.
fished
=
true
;
},
complete
()
{
complete
()
{
console
.
log
(
'完成'
);
console
.
log
(
'完成'
);
//1暂存2保存3发布
this
.
$refs
.
selectTemplate
.
componentDraft
(
3
);
},
handleClick
()
{
}
}
}
}
}
}
</
script
>
</
script
>
<
style
>
.template-editor-wrap
.el-tabs__header
{
z-index
:
1001
;
background
:
#fff
;
position
:
fixed
;
right
:
30px
;
left
:
285px
;
}
.template-editor-wrap
.el-tabs__item
{
width
:
240px
;
text-align
:
center
;
margin-right
:
20px
;
height
:
64px
;
line-height
:
64px
;
font-size
:
16px
;
font-family
:
PingFangSC-Medium
,
PingFang
SC
;
font-weight
:
500
;
color
:
rgba
(
48
,
49
,
51
,
1
);
}
</
style
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
.template-editor-wrap
{
.template-editor-wrap
{
.top-lin
{
position
:
fixed
;
height
:
30px
;
background
:
#F0F2F5
;
right
:
30px
;
left
:
285px
;
z-index
:
1001
;
top
:
125px
;
}
.add-content
{
.add-content
{
background
:
#fff
;
background
:
#fff
;
}
}
...
...
src/views/education/template-open.vue
浏览文件 @
146f4f10
...
@@ -2,7 +2,8 @@
...
@@ -2,7 +2,8 @@
<div
class=
"template-open-wrap"
>
<div
class=
"template-open-wrap"
>
<bread-crumb
:curmbFirst=
"curmbFirst"
:curmbSecond=
"curmbSecond"
:curmbThird=
"curmbThird"
></bread-crumb>
<bread-crumb
:curmbFirst=
"curmbFirst"
:curmbSecond=
"curmbSecond"
:curmbThird=
"curmbThird"
></bread-crumb>
<div
class=
"add-content screenSet"
id=
"screenSet"
style=
"pos"
>
<div
class=
"add-content screenSet"
id=
"screenSet"
>
<div
class=
"top-lin"
></div>
<el-row
class=
"step-content"
>
<el-row
class=
"step-content"
>
<el-col
:span=
"14"
>
<el-col
:span=
"14"
>
<el-steps
:active=
"active"
simple
class
>
<el-steps
:active=
"active"
simple
class
>
...
@@ -15,12 +16,13 @@
...
@@ -15,12 +16,13 @@
</el-steps>
</el-steps>
</el-col>
</el-col>
<el-col
:span=
"5"
:offset=
"5"
>
<el-col
:span=
"5"
:offset=
"5"
>
<el-button
v-if=
"active!==2"
size=
"small"
type=
"primary"
@
click=
"nextStep"
>
下一步
</el-button>
<el-button
v-if=
"!canNext"
size=
"small"
type=
"info"
plain
>
下一步
</el-button>
<el-button
v-if=
"active!==2 && canNext"
size=
"small"
type=
"primary"
@
click=
"nextStep"
>
下一步
</el-button>
<el-button
v-if=
"active==2"
size=
"small"
type=
"primary"
@
click=
"complete"
>
完成
</el-button>
<el-button
v-if=
"active==2"
size=
"small"
type=
"primary"
@
click=
"complete"
>
完成
</el-button>
</el-col>
</el-col>
</el-row>
</el-row>
<div
v-if=
"active == 0"
class=
"tpl-main"
>
<div
v-if=
"active == 0"
class=
"tpl-main"
>
<template-list></template-list>
<template-list
@
checkFn=
"checkFn"
></template-list>
</div>
</div>
<!-- 模板列表 -->
<!-- 模板列表 -->
...
@@ -34,13 +36,13 @@
...
@@ -34,13 +36,13 @@
/>
/>
<!-- 选择学员 -->
<!-- 选择学员 -->
<div
class=
"
second
-step"
v-else-if=
"active === 2"
>
<div
class=
"
three
-step"
v-else-if=
"active === 2"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClickTabs"
>
<el-tabs
v-model=
"activeName"
@
tab-click=
"handleClickTabs"
>
<el-tab-pane
label=
"设定行政范围"
name=
"first"
>
<el-tab-pane
label=
"设定行政范围"
name=
"first"
>
<select-region></select-region>
<select-region
@
setRegion=
"setRegion"
></select-region>
</el-tab-pane>
</el-tab-pane>
<el-tab-pane
label=
"设定机构"
name=
"second"
>
<el-tab-pane
label=
"设定机构"
name=
"second"
>
<set-Organization></set-Organization>
<set-Organization
></set-Organization>
</el-tab-pane>
</el-tab-pane>
</el-tabs>
</el-tabs>
</div>
</div>
...
@@ -57,6 +59,7 @@ import setOrganization from "../../components/education/template/setOrganization
...
@@ -57,6 +59,7 @@ import setOrganization from "../../components/education/template/setOrganization
import
templateList
from
"../../components/education/template/templateList"
;
import
templateList
from
"../../components/education/template/templateList"
;
import
{
openLoading
,
closeLoading
}
from
"../../utils/utils"
;
import
{
openLoading
,
closeLoading
}
from
"../../utils/utils"
;
import
*
as
commonUtil
from
"../../utils/utils"
;
import
*
as
commonUtil
from
"../../utils/utils"
;
let
vm
=
null
;
export
default
{
export
default
{
data
()
{
data
()
{
return
{
return
{
...
@@ -95,7 +98,10 @@ export default {
...
@@ -95,7 +98,10 @@ export default {
configure
:
2
,
configure
:
2
,
certificate
:
""
certificate
:
""
},
},
activeName
:
"first"
activeName
:
"first"
,
canNext
:
false
,
openTemplateId
:
''
,
r
:
[]
//设定行政范围和设定机构相互影响的行政范围
}
}
},
},
components
:
{
components
:
{
...
@@ -106,7 +112,9 @@ export default {
...
@@ -106,7 +112,9 @@ export default {
setOrganization
,
setOrganization
,
templateList
templateList
},
},
created
()
{},
created
()
{
vm
=
this
;
},
mounted
()
{
mounted
()
{
commonUtil
.
resizeHeight
();
commonUtil
.
resizeHeight
();
},
},
...
@@ -128,6 +136,35 @@ export default {
...
@@ -128,6 +136,35 @@ export default {
//切换tabs
//切换tabs
handleClickTabs
(
tab
,
event
)
{
handleClickTabs
(
tab
,
event
)
{
// this.activeName = tab.name;
// this.activeName = tab.name;
},
// 模板列表选中
checkFn
(
id
)
{
this
.
canNext
=
true
;
this
.
openTemplateId
=
id
;
},
//选中模板后点击下一步时检测(机构和进行中的项目)
checkSelectTemplate
()
{
openLoading
(
vm
);
vm
.
GET
(
`portal/openTemplateProject/checkAfterSelectOneOpenTemplate/
${
vm
.
openTemplateId
}
`
)
.
then
(
res
=>
{
closeLoading
(
vm
);
if
(
res
.
code
==
"000000"
)
{
console
.
log
()
}
else
{
vm
.
$message
.
info
(
res
.
message
);
}
})
.
catch
((
err
)
=>
{
closeLoading
(
vm
);
vm
.
$message
.
warning
(
'请稍后重试'
);
});
},
// 设定行政范围和设定机构范围相互影响
setRegion
(
r
)
{
this
.
r
=
r
;
console
.
log
(
'===================================='
);
console
.
log
(
r
);
console
.
log
(
'===================================='
);
}
}
}
}
}
}
...
@@ -135,7 +172,25 @@ export default {
...
@@ -135,7 +172,25 @@ export default {
<
style
lang=
"scss"
>
<
style
lang=
"scss"
>
.template-open-wrap
{
.template-open-wrap
{
.el-step.is-simple
:not
(
:last-of-type
)
.el-step__title
{
max-width
:
100%
;
}
.top-lin
{
position
:
fixed
;
height
:
30px
;
background
:
#F0F2F5
;
right
:
30px
;
left
:
285px
;
z-index
:
1001
;
top
:
125px
;
}
.step-content
{
.step-content
{
background
:
#fff
;
z-index
:
1001
;
background
:
#fff
;
position
:
fixed
;
right
:
30px
;
left
:
285px
;
overflow
:
hidden
;
overflow
:
hidden
;
height
:
60px
;
height
:
60px
;
// margin-top: 66px;
// margin-top: 66px;
...
@@ -189,7 +244,8 @@ export default {
...
@@ -189,7 +244,8 @@ export default {
.add-content
{
.add-content
{
background
:
#fff
;
background
:
#fff
;
}
}
.second-step
{
.three-step
{
padding-top
:
64px
;
margin
:
10px
0
0
20px
;
margin
:
10px
0
0
20px
;
.area-p
{
.area-p
{
margin-bottom
:
15px
;
margin-bottom
:
15px
;
...
...
写
预览
Markdown
格式
0%
请重试
or
附加一个文件
附加文件
取消
您添加了
0
人
到此讨论。请谨慎行事。
先完成此消息的编辑!
取消
想要评论请
注册
或
登录