Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
corporateCulture-qd
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王立鹏
corporateCulture-qd
Commits
d5d48e53
Commit
d5d48e53
authored
Mar 05, 2026
by
lijiabin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【需求 20331】 chore: 删除无用文件代码
parent
1eca796d
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
0 additions
and
893 deletions
+0
-893
colnumForm.tsx
src/layoutCulture/components/colnumForm.tsx
+0
-213
interviewForm.tsx
src/layoutCulture/components/interviewForm.tsx
+0
-201
postForm.tsx
src/layoutCulture/components/postForm.tsx
+0
-120
practiceForm.tsx
src/layoutCulture/components/practiceForm.tsx
+0
-172
publishDialog.vue
src/layoutCulture/components/publishDialog.vue
+0
-187
No files found.
src/layoutCulture/components/colnumForm.tsx
deleted
100644 → 0
View file @
1eca796d
import
{
ArticleTypeEnum
,
BooleanFlag
,
ReleaseStatusTypeEnum
,
SendTypeEnum
}
from
'@/constants'
import
UploadFile
from
'@/components/common/UploadFile/index.vue'
import
{
useResetData
}
from
'@/hooks'
import
type
{
TagItemDto
}
from
'@/api/tag/types'
import
{
useColumnStore
}
from
'@/stores/column'
import
{
storeToRefs
}
from
'pinia'
import
SelectTags
from
'@/components/common/SelectTags/index.vue'
import
type
{
AddOrUpdateColumnForm
,
AddOrUpdateColumnDto
}
from
'@/api/article/types'
import
{
push
}
from
'notivue'
export
default
defineComponent
((
_
,
{
expose
})
=>
{
const
columnStore
=
useColumnStore
()
const
{
columnList
}
=
storeToRefs
(
columnStore
)
console
.
log
(
columnList
.
value
)
const
[
form
,
resetForm
]
=
useResetData
<
AddOrUpdateColumnForm
>
({
title
:
''
,
content
:
''
,
faceUrl
:
''
,
imgUrl
:
''
,
releaseStatus
:
ReleaseStatusTypeEnum
.
PUBLISH
,
mainTagId
:
''
,
tagList
:
[],
sendType
:
SendTypeEnum
.
IMMEDIATE
,
sendTime
:
''
,
isRelateColleague
:
BooleanFlag
.
NO
,
relateColumnId
:
undefined
,
type
:
ArticleTypeEnum
.
COLUMN
,
isRecommend
:
BooleanFlag
.
NO
,
})
const
formRef
=
ref
<
InstanceType
<
typeof
ElForm
>>
()
const
rules
=
{
title
:
[{
required
:
true
,
message
:
'请输入专栏标题'
,
trigger
:
'blur'
}],
content
:
[{
required
:
true
,
message
:
'请输入专栏内容'
,
trigger
:
'blur'
}],
releaseStatus
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
mainTagId
:
[{
required
:
true
,
message
:
'请选择主标签'
,
trigger
:
'blur'
}],
sendType
:
[{
required
:
true
,
message
:
'请选择发布类型'
,
trigger
:
'blur'
}],
sendTime
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
relateColumnId
:
[
{
required
:
true
,
message
:
'请选择专栏栏目'
,
trigger
:
'blur'
,
type
:
'number'
,
min
:
1
},
],
isRecommend
:
[{
required
:
true
,
message
:
'请选择是否推荐'
,
trigger
:
'blur'
}],
imgUrl
:
[{
required
:
true
,
message
:
'请上传图片'
,
trigger
:
'blur'
}],
}
const
transformForm
=
(
releaseStatus
:
ReleaseStatusTypeEnum
):
AddOrUpdateColumnDto
=>
{
return
{
...
form
.
value
,
releaseStatus
,
faceUrl
:
form
.
value
.
imgUrl
?.
split
(
','
).
filter
(
Boolean
)[
0
]
||
''
,
tagList
:
[
form
.
value
.
mainTagId
,
...
form
.
value
.
tagList
].
map
((
tag
,
index
)
=>
{
return
{
sort
:
index
,
tagId
:
Number
(
tag
),
}
}),
}
}
// 检验并且获取表单数据
const
getValidatedFormData
=
async
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
try
{
await
formRef
.
value
?.
validate
()
return
transformForm
(
releaseStatus
)
}
catch
(
error
)
{
console
.
log
(
error
)
push
.
warning
(
'请检查输入内容'
)
return
null
}
}
const
filterTagsFn
=
(
allTags
:
TagItemDto
[])
=>
{
// 引用了form.value.mainTagId
return
allTags
.
filter
((
tag
)
=>
tag
.
id
!==
Number
(
form
.
value
.
mainTagId
))
}
const
resetFields
=
()
=>
{
formRef
.
value
?.
resetFields
()
resetForm
()
}
expose
({
getValidatedFormData
,
resetFields
,
})
return
()
=>
(
<
div
>
<
el
-
form
ref=
{
formRef
}
model=
{
form
.
value
}
label
-
width=
"auto"
label
-
position=
"right"
rules=
{
rules
}
>
<
el
-
form
-
item
label=
"标题"
prop=
"title"
>
<
el
-
input
v
-
model=
{
form
.
value
.
title
}
placeholder=
"请输入实践标题"
maxlength=
{
200
}
show
-
word
-
limit
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"内容"
prop=
"content"
>
<
el
-
input
v
-
model=
{
form
.
value
.
content
}
type=
"textarea"
placeholder=
"请输入专栏内容"
rows=
{
6
}
maxlength=
{
1000
}
show
-
word
-
limit
class=
"content-input"
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"图片"
prop=
"imgUrl"
>
{
/* @ts-ignore */
}
<
UploadFile
v
-
model=
{
form
.
value
.
imgUrl
}
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"专栏栏目选择"
prop=
"relateColumnId"
>
<
el
-
select
v
-
model=
{
form
.
value
.
relateColumnId
}
placeholder=
"请选择专栏栏目"
>
{
columnList
.
value
.
map
((
item
)
=>
(
<
el
-
option
value=
{
item
.
id
}
label=
{
item
.
title
}
></
el
-
option
>
))
}
</
el
-
select
>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"主标签"
prop=
"mainTagId"
>
{
{
// @ts-ignore
default
:
()
=>
<
SelectTags
v
-
model=
{
form
.
value
.
mainTagId
}
/>,
label
:
()
=>
(
// <el-tooltip content="主标签最多选1个" placement="top">
<
span
class=
"cursor-pointer"
>
主标签
{
/* <el-icon class="ml-1">
<InfoFilled />
</el-icon> */
}
</
span
>
// </el-tooltip>
),
}
}
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"副标签"
>
{
{
default
:
()
=>
(
// @ts-ignore
<
SelectTags
v
-
model=
{
form
.
value
.
tagList
}
filterTagsFn=
{
filterTagsFn
}
maxSelectedTags=
{
3
}
/>
),
label
:
()
=>
(
// <el-tooltip content="副标签最多选3个" placement="top">
<
span
class=
"cursor-pointer"
>
副标签
{
/* <el-icon class="ml-1">
<InfoFilled />
</el-icon> */
}
</
span
>
// </el-tooltip>
),
}
}
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"是否同步同事吧"
prop=
"isRelateColleague"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
isRelateColleague
}
>
<
el
-
radio
value=
{
BooleanFlag
.
YES
}
class=
"radio-item scheduled"
>
是
</
el
-
radio
>
<
el
-
radio
value=
{
BooleanFlag
.
NO
}
class=
"radio-item scheduled"
>
否
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"是否推荐"
prop=
"isRecommend"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
isRecommend
}
class=
"radio-group"
>
<
el
-
radio
value=
{
BooleanFlag
.
YES
}
class=
"radio-item immediate"
>
是
</
el
-
radio
>
<
el
-
radio
value=
{
BooleanFlag
.
NO
}
class=
"radio-item scheduled"
>
否
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"发布类型"
prop=
"sendType"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
sendType
}
class=
"radio-group"
>
<
el
-
radio
value=
{
SendTypeEnum
.
IMMEDIATE
}
class=
"radio-item immediate"
>
立即发布
</
el
-
radio
>
<
el
-
radio
value=
{
SendTypeEnum
.
SCHEDULED
}
class=
"radio-item scheduled"
>
定时发布
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
{
form
.
value
.
sendType
===
SendTypeEnum
.
SCHEDULED
&&
(
<
el
-
form
-
item
label=
"发布时间"
prop=
"sendTime"
>
<
el
-
date
-
picker
class=
"ml-2"
v
-
model=
{
form
.
value
.
sendTime
}
type=
"datetime"
placeholder=
"请选择发布时间"
// 不能选现在
disabled
-
date=
{
(
time
:
Date
)
=>
{
return
time
.
getTime
()
<
Date
.
now
()
-
1000
*
60
*
60
*
24
}
}
value
-
format=
"X"
style=
{
{
width
:
'250px'
}
}
/>
</
el
-
form
-
item
>
)
}
</
el
-
form
>
</
div
>
)
})
src/layoutCulture/components/interviewForm.tsx
deleted
100644 → 0
View file @
1eca796d
import
{
ArticleTypeEnum
,
BooleanFlag
,
ReleaseStatusTypeEnum
,
SendTypeEnum
}
from
'@/constants'
import
UploadFile
from
'@/components/common/UploadFile/index.vue'
import
{
useResetData
}
from
'@/hooks'
import
{
useInterviewStore
}
from
'@/stores/interview'
import
{
storeToRefs
}
from
'pinia'
import
type
{
AddOrUpdateInterviewDto
,
AddOrUpdateInterviewForm
}
from
'@/api/article/types'
import
type
{
TagItemDto
}
from
'@/api/tag/types'
import
{
push
}
from
'notivue'
export
default
defineComponent
((
_
,
{
expose
})
=>
{
const
interviewStore
=
useInterviewStore
()
const
{
interviewList
}
=
storeToRefs
(
interviewStore
)
const
[
form
,
resetForm
]
=
useResetData
<
AddOrUpdateInterviewForm
>
({
title
:
''
,
content
:
''
,
faceUrl
:
''
,
imgUrl
:
''
,
releaseStatus
:
ReleaseStatusTypeEnum
.
PUBLISH
,
mainTagId
:
''
,
tagList
:
[],
sendType
:
SendTypeEnum
.
IMMEDIATE
,
sendTime
:
''
,
type
:
ArticleTypeEnum
.
INTERVIEW
,
relateColumnId
:
undefined
,
isRecommend
:
BooleanFlag
.
NO
,
})
const
formRef
=
ref
<
InstanceType
<
typeof
ElForm
>>
()
const
rules
=
{
title
:
[{
required
:
true
,
message
:
'请输入专访标题'
,
trigger
:
'blur'
}],
content
:
[{
required
:
true
,
message
:
'请输入专访内容'
,
trigger
:
'blur'
}],
releaseStatus
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
mainTagId
:
[{
required
:
true
,
message
:
'请选择主标签'
,
trigger
:
'blur'
}],
sendType
:
[{
required
:
true
,
message
:
'请选择发布类型'
,
trigger
:
'blur'
}],
sendTime
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
relateColumnId
:
[
{
required
:
true
,
message
:
'请选择专访栏目'
,
trigger
:
'blur'
,
type
:
'number'
,
min
:
1
},
],
isRecommend
:
[{
required
:
true
,
message
:
'请选择是否推荐'
,
trigger
:
'blur'
}],
imgUrl
:
[{
required
:
true
,
message
:
'请上传图片'
,
trigger
:
'blur'
}],
}
const
transformForm
=
(
releaseStatus
:
ReleaseStatusTypeEnum
):
AddOrUpdateInterviewDto
=>
{
return
{
...
form
.
value
,
releaseStatus
,
faceUrl
:
form
.
value
.
imgUrl
?.
split
(
','
).
filter
(
Boolean
)[
0
]
||
''
,
tagList
:
[
form
.
value
.
mainTagId
,
...
form
.
value
.
tagList
].
map
((
tag
,
index
)
=>
{
return
{
sort
:
index
,
tagId
:
Number
(
tag
),
}
}),
}
}
// 检验并且获取表单数据
const
getValidatedFormData
=
async
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
try
{
await
formRef
.
value
?.
validate
()
return
transformForm
(
releaseStatus
)
}
catch
(
error
)
{
console
.
log
(
error
)
push
.
warning
(
'请检查输入内容'
)
return
null
}
}
const
filterTagsFn
=
(
allTags
:
TagItemDto
[])
=>
{
// 引用了form.value.mainTagId
return
allTags
.
filter
((
tag
)
=>
tag
.
id
!==
Number
(
form
.
value
.
mainTagId
))
}
const
resetFields
=
()
=>
{
formRef
.
value
?.
resetFields
()
resetForm
()
}
expose
({
getValidatedFormData
,
resetFields
,
})
return
()
=>
(
<
div
>
<
el
-
form
ref=
{
formRef
}
model=
{
form
.
value
}
label
-
width=
"auto"
label
-
position=
"right"
rules=
{
rules
}
>
<
el
-
form
-
item
label=
"标题"
prop=
"title"
>
<
el
-
input
v
-
model=
{
form
.
value
.
title
}
placeholder=
"请输入实践标题"
maxlength=
{
200
}
show
-
word
-
limit
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"内容"
prop=
"content"
>
<
el
-
input
v
-
model=
{
form
.
value
.
content
}
type=
"textarea"
placeholder=
"请输入专访内容"
rows=
{
6
}
maxlength=
{
1000
}
show
-
word
-
limit
class=
"content-input"
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"图片"
prop=
"imgUrl"
>
{
/* @ts-ignore */
}
<
UploadFile
v
-
model=
{
form
.
value
.
imgUrl
}
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"专访栏目选择"
prop=
"relateColumnId"
>
<
el
-
select
v
-
model=
{
form
.
value
.
relateColumnId
}
placeholder=
"请选择专访栏目"
>
{
interviewList
.
value
.
map
((
item
)
=>
(
<
el
-
option
value=
{
item
.
id
}
label=
{
item
.
title
}
/>
))
}
</
el
-
select
>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"主标签"
prop=
"mainTagId"
>
{
{
// @ts-ignore
default
:
()
=>
<
SelectTags
v
-
model=
{
form
.
value
.
mainTagId
}
/>,
label
:
()
=>
(
// <el-tooltip content="主标签最多选1个" placement="top">
<
span
class=
"cursor-pointer"
>
主标签
{
/* <el-icon class="ml-1">
<InfoFilled />
</el-icon> */
}
</
span
>
// </el-tooltip>
),
}
}
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"副标签"
>
{
{
default
:
()
=>
(
// @ts-ignore
<
SelectTags
v
-
model=
{
form
.
value
.
tagList
}
filterTagsFn=
{
filterTagsFn
}
maxSelectedTags=
{
3
}
/>
),
label
:
()
=>
(
// <el-tooltip content="副标签最多选3个" placement="top">
<
span
class=
"cursor-pointer"
>
副标签
{
/* <el-icon class="ml-1">
<InfoFilled />
</el-icon> */
}
</
span
>
// </el-tooltip>
),
}
}
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"是否推荐"
prop=
"isRecommend"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
isRecommend
}
class=
"radio-group"
>
<
el
-
radio
value=
{
BooleanFlag
.
YES
}
class=
"radio-item immediate"
>
是
</
el
-
radio
>
<
el
-
radio
value=
{
BooleanFlag
.
NO
}
class=
"radio-item scheduled"
>
否
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"发布类型"
prop=
"sendType"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
sendType
}
class=
"radio-group"
>
<
el
-
radio
value=
{
SendTypeEnum
.
IMMEDIATE
}
class=
"radio-item immediate"
>
立即发布
</
el
-
radio
>
<
el
-
radio
value=
{
SendTypeEnum
.
SCHEDULED
}
class=
"radio-item scheduled"
>
定时发布
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
{
form
.
value
.
sendType
===
SendTypeEnum
.
SCHEDULED
&&
(
<
el
-
form
-
item
label=
"发布时间"
prop=
"sendTime"
>
<
el
-
date
-
picker
class=
"ml-2"
v
-
model=
{
form
.
value
.
sendTime
}
type=
"datetime"
placeholder=
"请选择发布时间"
// 不能选现在
disabled
-
date=
{
(
time
:
Date
)
=>
{
return
time
.
getTime
()
<
Date
.
now
()
-
1000
*
60
*
60
*
24
}
}
value
-
format=
"X"
style=
{
{
width
:
'250px'
}
}
/>
</
el
-
form
-
item
>
)
}
</
el
-
form
>
</
div
>
)
})
src/layoutCulture/components/postForm.tsx
deleted
100644 → 0
View file @
1eca796d
import
{
ArticleTypeEnum
,
ReleaseStatusTypeEnum
,
SendTypeEnum
}
from
'@/constants'
import
UploadFile
from
'@/components/common/UploadFile/index.vue'
import
{
useResetData
}
from
'@/hooks'
import
type
{
AddOrUpdatePostDto
}
from
'@/api'
import
{
push
}
from
'notivue'
export
default
defineComponent
(
(
_
,
{
expose
})
=>
{
const
[
form
,
resetForm
]
=
useResetData
<
AddOrUpdatePostDto
>
({
title
:
''
,
content
:
''
,
faceUrl
:
''
,
imgUrl
:
''
,
releaseStatus
:
ReleaseStatusTypeEnum
.
PUBLISH
,
type
:
ArticleTypeEnum
.
POST
,
sendType
:
SendTypeEnum
.
IMMEDIATE
,
sendTime
:
''
,
})
const
formRef
=
ref
<
InstanceType
<
typeof
ElForm
>>
()
const
rules
=
{
title
:
[{
required
:
true
,
message
:
'请输入帖子标题'
,
trigger
:
'blur'
}],
content
:
[{
required
:
true
,
message
:
'请输入帖子内容'
,
trigger
:
'blur'
}],
sendType
:
[{
required
:
true
,
message
:
'请选择发布类型'
,
trigger
:
'blur'
}],
sendTime
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
}
const
transformForm
=
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
return
{
...
form
.
value
,
releaseStatus
,
faceUrl
:
form
.
value
.
imgUrl
?.
split
(
','
).
filter
(
Boolean
)[
0
]
||
''
,
}
}
const
getValidatedFormData
=
async
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
try
{
await
formRef
.
value
?.
validate
()
return
transformForm
(
releaseStatus
)
}
catch
(
error
)
{
console
.
log
(
error
)
push
.
warning
(
'请检查输入内容'
)
return
null
}
}
const
resetFields
=
()
=>
{
formRef
.
value
?.
resetFields
()
resetForm
()
}
expose
({
getValidatedFormData
,
resetFields
,
})
return
()
=>
(
<
div
>
<
el
-
form
ref=
{
formRef
}
model=
{
form
.
value
}
label
-
width=
"auto"
label
-
position=
"right"
rules=
{
rules
}
>
<
el
-
form
-
item
label=
"标题"
prop=
"title"
>
<
el
-
input
v
-
model=
{
form
.
value
.
title
}
placeholder=
"请输入帖子标题"
maxlength=
{
30
}
show
-
word
-
limit
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"内容"
prop=
"content"
>
<
el
-
input
v
-
model=
{
form
.
value
.
content
}
type=
"textarea"
placeholder=
"良言良语,快乐无限;恶语恶言,伤心伤肝。请简述发帖内容,或点击长文章编辑格式"
rows=
{
6
}
maxlength=
{
255
}
show
-
word
-
limit
class=
"content-input"
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"图片"
prop=
"faceUrl"
>
{
/* @ts-ignore */
}
<
UploadFile
v
-
model=
{
form
.
value
.
imgUrl
}
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"发布类型"
prop=
"sendType"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
sendType
}
class=
"radio-group"
>
<
el
-
radio
value=
{
SendTypeEnum
.
IMMEDIATE
}
class=
"radio-item immediate"
>
立即发布
</
el
-
radio
>
<
el
-
radio
value=
{
SendTypeEnum
.
SCHEDULED
}
class=
"radio-item scheduled"
>
定时发布
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
{
form
.
value
.
sendType
===
SendTypeEnum
.
SCHEDULED
&&
(
<
el
-
form
-
item
label=
"发布时间"
prop=
"sendTime"
>
<
el
-
date
-
picker
class=
"w-full"
v
-
model=
{
form
.
value
.
sendTime
}
type=
"datetime"
placeholder=
"请选择发布时间"
// 不能选现在
disabled
-
date=
{
(
time
:
Date
)
=>
{
return
time
.
getTime
()
<
Date
.
now
()
-
1000
*
60
*
60
*
24
}
}
value
-
format=
"X"
style=
{
{
width
:
'250px'
}
}
/>
</
el
-
form
-
item
>
)
}
</
el
-
form
>
</
div
>
)
},
{
name
:
'PostForm'
,
},
)
src/layoutCulture/components/practiceForm.tsx
deleted
100644 → 0
View file @
1eca796d
import
{
ReleaseStatusTypeEnum
,
SendTypeEnum
}
from
'@/constants'
import
UploadFile
from
'@/components/common/UploadFile/index.vue'
import
SelectTags
from
'@/components/common/SelectTags/index.vue'
import
{
useResetData
}
from
'@/hooks'
import
type
{
TagItemDto
}
from
'@/api/tag/types'
import
type
{
AddOrUpdatePracticeDto
}
from
'@/api/practice/types'
import
{
push
}
from
'notivue'
export
default
defineComponent
((
_
,
{
expose
})
=>
{
const
[
form
,
resetForm
]
=
useResetData
<
AddOrUpdatePracticeDto
>
({
title
:
''
,
content
:
''
,
faceUrl
:
''
,
imgUrl
:
''
,
releaseStatus
:
ReleaseStatusTypeEnum
.
PUBLISH
,
mainTagId
:
''
,
tagList
:
[],
sendType
:
SendTypeEnum
.
IMMEDIATE
,
sendTime
:
''
,
})
const
formRef
=
ref
<
InstanceType
<
typeof
ElForm
>>
()
const
rules
=
{
title
:
[{
required
:
true
,
message
:
'请输入实践标题'
,
trigger
:
'blur'
}],
content
:
[{
required
:
true
,
message
:
'请输入实践内容'
,
trigger
:
'blur'
}],
releaseStatus
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
mainTagId
:
[{
required
:
true
,
message
:
'请选择主标签'
,
trigger
:
'blur'
}],
sendType
:
[{
required
:
true
,
message
:
'请选择发布类型'
,
trigger
:
'blur'
}],
sendTime
:
[{
required
:
true
,
message
:
'请选择发布时间'
,
trigger
:
'blur'
}],
}
const
transformForm
=
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
return
{
...
form
.
value
,
releaseStatus
,
faceUrl
:
form
.
value
.
imgUrl
.
split
(
','
)[
0
],
tagList
:
[
form
.
value
.
mainTagId
,
...
form
.
value
.
tagList
].
map
((
tag
,
index
)
=>
{
return
{
sort
:
index
,
tagId
:
Number
(
tag
),
}
}),
}
}
// 检验并且获取表单数据
const
getValidatedFormData
=
async
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
try
{
await
formRef
.
value
?.
validate
()
return
transformForm
(
releaseStatus
)
}
catch
(
error
)
{
console
.
log
(
error
)
push
.
warning
(
'请检查输入内容'
)
return
null
}
}
const
filterTagsFn
=
(
allTags
:
TagItemDto
[])
=>
{
// 引用了form.value.mainTagId
return
allTags
.
filter
((
tag
)
=>
tag
.
id
!==
Number
(
form
.
value
.
mainTagId
))
}
const
resetFields
=
()
=>
{
formRef
.
value
?.
resetFields
()
resetForm
()
}
expose
({
getValidatedFormData
,
resetFields
,
})
return
()
=>
(
<
div
>
<
el
-
form
ref=
{
formRef
}
model=
{
form
.
value
}
label
-
width=
"auto"
label
-
position=
"right"
rules=
{
rules
}
>
<
el
-
form
-
item
label=
"标题"
prop=
"title"
>
<
el
-
input
v
-
model=
{
form
.
value
.
title
}
placeholder=
"请输入实践标题"
maxlength=
{
200
}
show
-
word
-
limit
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"内容"
prop=
"content"
>
<
el
-
input
v
-
model=
{
form
.
value
.
content
}
type=
"textarea"
placeholder=
"分享你的企业文化实践实例"
rows=
{
6
}
maxlength=
{
2000
}
show
-
word
-
limit
class=
"content-input"
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"图片"
>
{
/* @ts-ignore */
}
<
UploadFile
v
-
model=
{
form
.
value
.
imgUrl
}
/>
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"主标签"
prop=
"mainTagId"
>
{
{
// @ts-ignore
default
:
()
=>
<
SelectTags
v
-
model=
{
form
.
value
.
mainTagId
}
/>,
label
:
()
=>
(
// <el-tooltip content="主标签最多选1个" placement="top">
<
span
class=
"cursor-pointer"
>
主标签
{
/* <el-icon class="ml-1">
<InfoFilled />
</el-icon> */
}
</
span
>
// </el-tooltip>
),
}
}
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"副标签"
>
{
{
default
:
()
=>
(
// @ts-ignore
<
SelectTags
v
-
model=
{
form
.
value
.
tagList
}
filterTagsFn=
{
filterTagsFn
}
maxSelectedTags=
{
3
}
/>
),
label
:
()
=>
(
// <el-tooltip content="副标签最多选3个" placement="top">
<
span
class=
"cursor-pointer"
>
副标签
{
/* <el-icon class="ml-1">
<InfoFilled />
</el-icon> */
}
</
span
>
// </el-tooltip>
),
}
}
</
el
-
form
-
item
>
<
el
-
form
-
item
label=
"发布类型"
prop=
"sendType"
>
<
el
-
radio
-
group
v
-
model=
{
form
.
value
.
sendType
}
class=
"radio-group"
>
<
el
-
radio
value=
{
SendTypeEnum
.
IMMEDIATE
}
class=
"radio-item immediate"
>
立即发布
</
el
-
radio
>
<
el
-
radio
value=
{
SendTypeEnum
.
SCHEDULED
}
class=
"radio-item scheduled"
>
定时发布
</
el
-
radio
>
</
el
-
radio
-
group
>
</
el
-
form
-
item
>
{
form
.
value
.
sendType
===
SendTypeEnum
.
SCHEDULED
&&
(
<
el
-
form
-
item
label=
"发布时间"
prop=
"sendTime"
>
<
el
-
date
-
picker
class=
"ml-2"
v
-
model=
{
form
.
value
.
sendTime
}
type=
"datetime"
placeholder=
"请选择发布时间"
// 不能选现在
disabled
-
date=
{
(
time
:
Date
)
=>
{
return
time
.
getTime
()
<
Date
.
now
()
-
1000
*
60
*
60
*
24
}
}
value
-
format=
"X"
style=
{
{
width
:
'250px'
}
}
/>
</
el
-
form
-
item
>
)
}
</
el
-
form
>
</
div
>
)
})
src/layoutCulture/components/publishDialog.vue
deleted
100644 → 0
View file @
1eca796d
<
template
>
<el-dialog
v-model=
"dialogVisible"
:title=
"dialogTitle"
:close-on-click-modal=
"false"
width=
"500px"
class=
"post-dialog"
:lock-scroll=
"true"
align-center
@
closed=
"handleClosed"
>
<div
v-loading=
"loading"
class=
"bg-white/95 rounded-16px p-24px backdrop-blur-10px"
>
<!--
<keep-alive>
-->
<component
:is=
"currentFormComp"
ref=
"formComponentRef"
/>
<!--
</keep-alive>
-->
<!-- 底部按钮 -->
<div
class=
"flex justify-end gap-1"
>
<el-button
class=
"rounded-lg"
@
click=
"handleClosed"
>
取消
</el-button>
<el-button
class=
"rounded-lg"
@
click=
"handleSubmit(ReleaseStatusTypeEnum.DRAFT)"
>
存草稿
</el-button>
<el-button
type=
"primary"
@
click=
"handleSubmit(ReleaseStatusTypeEnum.PUBLISH)"
class=
"px-6 py-2 bg-blue-500 hover:bg-blue-600 rounded-lg text-white text-sm font-medium shadow-sm hover:shadow-md transition-all duration-200"
>
发布
</el-button>
</div>
</div>
</el-dialog>
</
template
>
<
script
setup
lang=
"ts"
>
import
type
{
Component
}
from
'vue'
// 如果 你已经按需引入了 那么写 这个就会有css bug 所以 这里不写 就是你如果写这个的话 那么 他不会引入css
// import { ElDialog } from 'element-plus'
// import { Plus } from '@element-plus/icons-vue'
import
{
addOrUpdateArticle
,
addOrUpdatePractice
}
from
'@/api'
import
{
ArticleTypeEnum
,
ReleaseStatusTypeEnum
}
from
'@/constants'
import
LoadingComponent
from
'@/components/common/LoadingComponent/index.vue'
import
{
push
}
from
'notivue'
interface
ApiMap
{
[
ArticleTypeEnum
.
VIDEO
]:
typeof
addOrUpdateArticle
[
ArticleTypeEnum
.
QUESTION
]:
typeof
addOrUpdateArticle
[
ArticleTypeEnum
.
POST
]:
typeof
addOrUpdateArticle
[
ArticleTypeEnum
.
PRACTICE
]:
typeof
addOrUpdatePractice
[
ArticleTypeEnum
.
COLUMN
]:
typeof
addOrUpdateArticle
[
ArticleTypeEnum
.
INTERVIEW
]:
typeof
addOrUpdateArticle
}
interface
TypeConfig
<
T
extends
ArticleTypeEnum
>
{
title
:
string
component
:
Component
api
?:
ApiMap
[
T
]
}
const
typeMap
:
{
[
key
in
ArticleTypeEnum
]:
TypeConfig
<
key
>
}
=
{
[
ArticleTypeEnum
.
VIDEO
]:
{
title
:
'视频'
,
component
:
defineAsyncComponent
({
loader
:
()
=>
import
(
'./postForm.tsx'
),
delay
:
200
,
loadingComponent
:
LoadingComponent
,
}),
},
[
ArticleTypeEnum
.
QUESTION
]:
{
title
:
'问题'
,
component
:
defineAsyncComponent
({
loader
:
()
=>
import
(
'./postForm.tsx'
),
delay
:
200
,
loadingComponent
:
LoadingComponent
,
}),
},
[
ArticleTypeEnum
.
POST
]:
{
title
:
'帖子'
,
component
:
defineAsyncComponent
({
loader
:
async
()
=>
{
const
start
=
Date
.
now
()
const
comp
=
await
import
(
'./postForm.tsx'
)
const
cost
=
Date
.
now
()
-
start
console
.
log
(
'cost'
,
cost
)
const
min
=
1000
// 最低 200ms
if
(
cost
<
min
)
{
await
new
Promise
((
r
)
=>
setTimeout
(
r
,
min
-
cost
))
}
return
comp
},
delay
:
200
,
loadingComponent
:
LoadingComponent
,
}),
api
:
addOrUpdateArticle
,
},
[
ArticleTypeEnum
.
PRACTICE
]:
{
title
:
'实践'
,
component
:
defineAsyncComponent
({
loader
:
()
=>
import
(
'./practiceForm.tsx'
),
delay
:
200
,
loadingComponent
:
LoadingComponent
,
}),
api
:
addOrUpdatePractice
,
},
[
ArticleTypeEnum
.
COLUMN
]:
{
title
:
'专栏'
,
component
:
defineAsyncComponent
({
loader
:
()
=>
import
(
'./colnumForm.tsx'
),
delay
:
200
,
loadingComponent
:
LoadingComponent
,
}),
api
:
addOrUpdateArticle
,
},
[
ArticleTypeEnum
.
INTERVIEW
]:
{
title
:
'专访'
,
component
:
defineAsyncComponent
({
loader
:
()
=>
import
(
'./interviewForm.tsx'
),
delay
:
200
,
loadingComponent
:
LoadingComponent
,
}),
api
:
addOrUpdateArticle
,
},
}
const
dialogTitle
=
computed
(()
=>
'发布'
+
typeMap
[
articleType
.
value
].
title
)
export
interface
BaseFormExpose
{
resetFields
:
()
=>
void
getValidatedFormData
:
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
Promise
<
unknown
>
}
const
formComponentRef
=
useTemplateRef
<
BaseFormExpose
>
(
'formComponentRef'
)
const
currentFormComp
=
computed
(()
=>
{
return
typeMap
[
articleType
.
value
].
component
})
const
dialogVisible
=
ref
(
false
)
const
articleType
=
ref
<
ArticleTypeEnum
>
(
ArticleTypeEnum
.
PRACTICE
)
const
loading
=
ref
(
false
)
// 打开弹窗
const
open
=
(
type
:
ArticleTypeEnum
)
=>
{
articleType
.
value
=
type
dialogVisible
.
value
=
true
}
// 关闭弹窗
const
close
=
()
=>
{
dialogVisible
.
value
=
false
formComponentRef
?.
value
?.
resetFields
()
}
const
handleClosed
=
()
=>
{
dialogVisible
.
value
=
false
formComponentRef
.
value
?.
resetFields
()
}
const
handleSubmit
=
async
(
releaseStatus
:
ReleaseStatusTypeEnum
)
=>
{
loading
.
value
=
true
try
{
const
formData
=
(
await
formComponentRef
.
value
?.
getValidatedFormData
(
releaseStatus
))
as
any
if
(
!
formData
)
return
console
.
log
(
formData
)
await
typeMap
[
articleType
.
value
].
api
?.({
...
formData
,
})
push
.
success
(
'发布成功'
)
// 这里可以添加发布逻辑
close
()
}
catch
(
error
)
{
console
.
log
(
error
)
}
finally
{
loading
.
value
=
false
}
}
// 暴露方法给父组件
defineExpose
({
open
,
close
,
})
</
script
>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment