You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
5.0 KiB
Vue

<template>
<div>
<el-form
ref="formRef"
:model="form"
:rules="rules"
label-width="100px"
>
<el-row>
<el-col :span="24">
<el-form-item prop="title" label="标题">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="author" label="作者">
<el-input v-model="form.author" placeholder="请输入作者" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="display_time" label="创建时间">
<el-date-picker
v-model="form.display_time"
type="datetime"
placeholder="请选择创建时间"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="importance" label="重要性">
<el-select v-model="form.importance" placeholder="请选择重要性" style="width: 100%;">
<el-option label="重要" value="3" />
<el-option label="良好" value="2" />
<el-option label="一般" value="1" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="pageviews" label="阅读数">
<el-input-number
v-model="form.pageviews"
:min="0"
:max="99999999"
style="width: 100%;"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="content" label="内容">
<editor ref="editorRef" :value="form.content" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="dialong__button--wrap">
<el-button @click="close"></el-button>
<el-button :loading="subLoading" type="primary" @click="setListData"></el-button>
</div>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, ref, unref, PropType } from 'vue'
import Editor from '_c/Editor/index.vue'
import { Message } from '_c/Message'
import { formatTime } from '@/utils'
import { InfoWriteParams, InfoWriteRules } from './types'
import { saveExampApi, getExampDetApi } from '../api'
const requiredRule = {
required: true,
message: '该项为必填项'
}
export default defineComponent({
name: 'IfnoWrite',
components: {
Editor
},
props: {
info: {
type: Object as PropType<any>,
default: () => null
}
},
emits: ['close', 'success'],
setup(props, { emit }) {
const formRef = ref<HTMLElement | null>(null)
const editorRef = ref<HTMLElement | null>(null)
const subLoading = ref<boolean>(false)
const form = reactive<InfoWriteParams>({
id: '', // id
author: '', // 作者
title: '', // 标题
content: '', // 内容
importance: '', // 重要性
display_time: '', // 创建时间
pageviews: 0 // 阅读数
})
const rules = reactive<InfoWriteRules>({
title: [requiredRule],
author: [requiredRule],
content: [requiredRule],
importance: [requiredRule],
display_time: [requiredRule],
pageviews: [requiredRule]
})
async function getDet() {
if (props.info) {
const id = (props.info as any).id
try {
const res = await getExampDetApi({
params: {
id: id
}
})
if (res.code === '0000') {
for (const key in form) {
if (key === 'importance') {
form[key] = res.data[key].toString()
} else {
form[key] = res.data[key]
}
}
}
} catch (e) {
console.log(e)
}
}
}
getDet()
// 新增或者编辑
function setListData() {
const formRefWrap = unref(formRef as any)
const editorRefWrap = unref(editorRef as any)
form.content = editorRefWrap.getHtml()
try {
subLoading.value = true
formRefWrap.validate(async(valid: boolean) => {
if (valid) {
const formData = unref(form)
formData.display_time = formatTime(formData.display_time, 'yyyy-MM-dd HH:mm:ss')
const res = await saveExampApi({
data: formData
})
if (res.code === '0000') {
Message.success(form.id ? '编辑成功' : '新增成功')
emit('success', form.id ? 'edit' : 'add')
}
} else {
console.log('error submit!!')
return false
}
})
} catch (err) {
console.log(err)
} finally {
subLoading.value = false
}
}
function close() {
emit('close')
}
return {
formRef, editorRef,
subLoading,
form,
rules,
setListData,
close,
getDet
}
}
})
</script>
<style>
</style>