parent
06342737c5
commit
010c3cb947
@ -0,0 +1,71 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="mode === 'add' ? '新增课程体系' : '编辑课程体系'"
|
||||
:visible.sync="innerVisible"
|
||||
width="520px"
|
||||
append-to-body
|
||||
@open="handleOpen"
|
||||
>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="88px">
|
||||
<el-form-item label="所属计划体系" prop="system_id">
|
||||
<el-select v-model="form.system_id" filterable placeholder="请选择计划体系" style="width: 100%;">
|
||||
<el-option v-for="item in systems" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="课程体系" prop="course_type_id">
|
||||
<el-select
|
||||
v-model="form.course_type_id"
|
||||
filterable
|
||||
placeholder="请选择课程体系"
|
||||
style="width: 100%;"
|
||||
@change="(val) => $emit('course-type-change', val)"
|
||||
>
|
||||
<el-option v-for="item in courseTypes" :key="item.id" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input-number v-model="form.sort" :min="1" :max="999" style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer">
|
||||
<el-button @click="innerVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'CourseFormDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, default: false },
|
||||
mode: { type: String, default: 'add' },
|
||||
form: { type: Object, required: true },
|
||||
rules: { type: Object, default: () => ({}) },
|
||||
systems: { type: Array, default: () => [] },
|
||||
courseTypes: { type: Array, default: () => [] }
|
||||
},
|
||||
computed: {
|
||||
innerVisible: {
|
||||
get() { return this.visible },
|
||||
set(val) { this.$emit('update:visible', val) }
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleOpen() {
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.formRef) {
|
||||
this.$refs.formRef.clearValidate()
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
this.$emit('submit')
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -0,0 +1,160 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="地点管理"
|
||||
:visible.sync="innerVisible"
|
||||
width="640px"
|
||||
append-to-body
|
||||
@open="$emit('open')"
|
||||
>
|
||||
<div class="manager-toolbar">
|
||||
<div class="manager-title">地点列表</div>
|
||||
<div class="manager-actions">
|
||||
<el-button size="small" type="primary" @click="openCreate">新增</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :data="list" border size="small">
|
||||
<el-table-column prop="name" label="地点" min-width="220">
|
||||
<template slot-scope="{ row }">{{ row.name }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="100" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<el-tag :type="Number(row.status) === 1 ? 'success' : 'info'">{{ Number(row.status) === 1 ? '启用' : '禁用' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sort" label="排序" width="100" align="center" />
|
||||
<el-table-column label="操作" width="200" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<el-button type="text" size="small" @click="openEdit(row)">编辑</el-button>
|
||||
<el-button type="text" size="small" class="danger-text" @click="$emit('delete', row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<span slot="footer">
|
||||
<el-button @click="innerVisible = false">关闭</el-button>
|
||||
</span>
|
||||
|
||||
<el-dialog
|
||||
:title="editor.mode === 'create' ? '新增地点' : '编辑地点'"
|
||||
:visible.sync="editor.visible"
|
||||
width="420px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form ref="editorRef" :model="editor.form" :rules="editorRules" label-width="80px">
|
||||
<el-form-item label="地点名称" prop="name">
|
||||
<el-input v-model="editor.form.name" placeholder="请输入地点名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="editor.form.status">
|
||||
<el-radio :label="1">启用</el-radio>
|
||||
<el-radio :label="0">禁用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input-number v-model="editor.form.sort" :min="0" :max="9999" style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer">
|
||||
<el-button @click="editor.visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitEditor">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'LocationManagerDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, default: false },
|
||||
list: { type: Array, default: () => [] }
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
editor: {
|
||||
visible: false,
|
||||
mode: 'create',
|
||||
form: {
|
||||
id: '',
|
||||
name: '',
|
||||
status: 1,
|
||||
sort: 0
|
||||
}
|
||||
},
|
||||
editorRules: {
|
||||
name: [{ required: true, message: '请输入地点名称', trigger: 'blur' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
innerVisible: {
|
||||
get() { return this.visible },
|
||||
set(val) { this.$emit('update:visible', val) }
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openCreate() {
|
||||
this.editor.mode = 'create'
|
||||
this.editor.form = { id: '', name: '', status: 1, sort: 0 }
|
||||
this.editor.visible = true
|
||||
this.$nextTick(() => this.$refs.editorRef?.clearValidate?.())
|
||||
},
|
||||
openEdit(row) {
|
||||
this.editor.mode = 'edit'
|
||||
this.editor.form = {
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
status: Number(row.status) === 0 ? 0 : 1,
|
||||
sort: Number(row.sort || 0)
|
||||
}
|
||||
this.editor.visible = true
|
||||
this.$nextTick(() => this.$refs.editorRef?.clearValidate?.())
|
||||
},
|
||||
submitEditor() {
|
||||
this.$refs.editorRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
const payload = {
|
||||
id: this.editor.form.id,
|
||||
name: String(this.editor.form.name || '').trim(),
|
||||
status: Number(this.editor.form.status) === 0 ? 0 : 1,
|
||||
sort: Number(this.editor.form.sort || 0)
|
||||
}
|
||||
if (this.editor.mode === 'create') {
|
||||
this.$emit('add', payload)
|
||||
} else {
|
||||
this.$emit('edit', payload)
|
||||
}
|
||||
this.editor.visible = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.manager-toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.manager-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.manager-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.danger-text {
|
||||
color: #d94b4b;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,160 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="负责人管理"
|
||||
:visible.sync="innerVisible"
|
||||
width="640px"
|
||||
append-to-body
|
||||
@open="$emit('open')"
|
||||
>
|
||||
<div class="manager-toolbar">
|
||||
<div class="manager-title">负责人列表</div>
|
||||
<div class="manager-actions">
|
||||
<el-button size="small" type="primary" @click="openCreate">新增</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table :data="list" border size="small">
|
||||
<el-table-column prop="name" label="负责人" min-width="220">
|
||||
<template slot-scope="{ row }">{{ row.name }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" label="状态" width="100" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<el-tag :type="Number(row.status) === 1 ? 'success' : 'info'">{{ Number(row.status) === 1 ? '启用' : '禁用' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="sort" label="排序" width="100" align="center" />
|
||||
<el-table-column label="操作" width="200" align="center">
|
||||
<template slot-scope="{ row }">
|
||||
<el-button type="text" size="small" @click="openEdit(row)">编辑</el-button>
|
||||
<el-button type="text" size="small" class="danger-text" @click="$emit('delete', row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<span slot="footer">
|
||||
<el-button @click="innerVisible = false">关闭</el-button>
|
||||
</span>
|
||||
|
||||
<el-dialog
|
||||
:title="editor.mode === 'create' ? '新增负责人' : '编辑负责人'"
|
||||
:visible.sync="editor.visible"
|
||||
width="420px"
|
||||
append-to-body
|
||||
>
|
||||
<el-form ref="editorRef" :model="editor.form" :rules="editorRules" label-width="80px">
|
||||
<el-form-item label="负责人" prop="name">
|
||||
<el-input v-model="editor.form.name" placeholder="请输入负责人名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="状态" prop="status">
|
||||
<el-radio-group v-model="editor.form.status">
|
||||
<el-radio :label="1">启用</el-radio>
|
||||
<el-radio :label="0">禁用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input-number v-model="editor.form.sort" :min="0" :max="9999" style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer">
|
||||
<el-button @click="editor.visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="submitEditor">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'OwnerManagerDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, default: false },
|
||||
list: { type: Array, default: () => [] }
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
editor: {
|
||||
visible: false,
|
||||
mode: 'create',
|
||||
form: {
|
||||
id: '',
|
||||
name: '',
|
||||
status: 1,
|
||||
sort: 0
|
||||
}
|
||||
},
|
||||
editorRules: {
|
||||
name: [{ required: true, message: '请输入负责人名称', trigger: 'blur' }]
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
innerVisible: {
|
||||
get() { return this.visible },
|
||||
set(val) { this.$emit('update:visible', val) }
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openCreate() {
|
||||
this.editor.mode = 'create'
|
||||
this.editor.form = { id: '', name: '', status: 1, sort: 0 }
|
||||
this.editor.visible = true
|
||||
this.$nextTick(() => this.$refs.editorRef?.clearValidate?.())
|
||||
},
|
||||
openEdit(row) {
|
||||
this.editor.mode = 'edit'
|
||||
this.editor.form = {
|
||||
id: row.id,
|
||||
name: row.name,
|
||||
status: Number(row.status) === 0 ? 0 : 1,
|
||||
sort: Number(row.sort || 0)
|
||||
}
|
||||
this.editor.visible = true
|
||||
this.$nextTick(() => this.$refs.editorRef?.clearValidate?.())
|
||||
},
|
||||
submitEditor() {
|
||||
this.$refs.editorRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
const payload = {
|
||||
id: this.editor.form.id,
|
||||
name: String(this.editor.form.name || '').trim(),
|
||||
status: Number(this.editor.form.status) === 0 ? 0 : 1,
|
||||
sort: Number(this.editor.form.sort || 0)
|
||||
}
|
||||
if (this.editor.mode === 'create') {
|
||||
this.$emit('add', payload)
|
||||
} else {
|
||||
this.$emit('edit', payload)
|
||||
}
|
||||
this.editor.visible = false
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.manager-toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.manager-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
}
|
||||
|
||||
.manager-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.danger-text {
|
||||
color: #d94b4b;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -0,0 +1,63 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="带班管理"
|
||||
:visible.sync="innerVisible"
|
||||
width="68%"
|
||||
custom-class="overview-dialog"
|
||||
>
|
||||
<div class="manager-toolbar">
|
||||
<div class="manager-header">
|
||||
<div class="manager-title">带班列表</div>
|
||||
<div class="manager-tip">同一课程不同模块可直接编辑</div>
|
||||
</div>
|
||||
<div class="manager-actions">
|
||||
<el-button size="small" type="primary" @click="$emit('open-schedule-form', 'add')">新增带班</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table :data="rows" border :span-method="spanMethod">
|
||||
<el-table-column prop="systemName" label="计划体系" min-width="140" />
|
||||
<el-table-column prop="courseName" label="课程体系" min-width="160" />
|
||||
<el-table-column prop="title" label="课程名称" min-width="180" />
|
||||
<el-table-column prop="moduleName" label="模块/期数" min-width="120" />
|
||||
<el-table-column prop="monthLabel" label="月份" width="90" align="center" />
|
||||
<el-table-column prop="location" label="地点" min-width="120" />
|
||||
<el-table-column prop="owner" label="负责人" min-width="120" />
|
||||
<el-table-column prop="count_text" label="备注" min-width="160" />
|
||||
<el-table-column label="操作" width="160" align="center" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="small" @click="$emit('open-schedule-form', 'edit', scope.row)">编辑</el-button>
|
||||
<el-button type="text" size="small" class="danger-text" @click="$emit('delete-schedule', scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'ScheduleManagerDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, default: false },
|
||||
rows: { type: Array, default: () => [] },
|
||||
spanMethod: { type: Function, default: null }
|
||||
},
|
||||
computed: {
|
||||
innerVisible: {
|
||||
get() { return this.visible },
|
||||
set(val) { this.$emit('update:visible', val) }
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.manager-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 4px;
|
||||
}
|
||||
.manager-tip {
|
||||
font-size: 12px;
|
||||
color: #909399;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,160 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
title="计划体系管理"
|
||||
:visible.sync="innerVisible"
|
||||
width="58%"
|
||||
custom-class="overview-dialog"
|
||||
@open="handleOpen"
|
||||
>
|
||||
<div class="tree-manager">
|
||||
<div class="tree-panel">
|
||||
<div class="manager-toolbar">
|
||||
<div class="manager-title">计划体系树</div>
|
||||
<div class="manager-actions">
|
||||
<el-button size="small" type="primary" @click="$emit('open-system-form', 'add')">新增计划体系</el-button>
|
||||
<el-button size="small" :disabled="!selectedSystem" @click="$emit('open-course-form', { mode: 'add' })">新增课程体系</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tree-wrap">
|
||||
<el-tree
|
||||
ref="tree"
|
||||
:data="treeData"
|
||||
node-key="treeKey"
|
||||
highlight-current
|
||||
default-expand-all
|
||||
:expand-on-click-node="false"
|
||||
@node-click="(data) => $emit('tree-node-select', data)"
|
||||
>
|
||||
<div slot-scope="{ data }" class="tree-node">
|
||||
<div class="tree-node-main">
|
||||
<span :class="['tree-node-tag', data.nodeType === 'system' ? 'system-tag' : 'course-tag']">
|
||||
{{ data.nodeType === 'system' ? '计划体系' : '课程体系' }}
|
||||
</span>
|
||||
<span class="tree-node-label">{{ data.name }}</span>
|
||||
</div>
|
||||
<div class="tree-node-actions">
|
||||
<el-button
|
||||
v-if="data.nodeType === 'system'"
|
||||
type="text"
|
||||
size="mini"
|
||||
@click.stop="$emit('open-course-form', { mode: 'add', row: null, targetSystem: data.raw })"
|
||||
>
|
||||
新增课程体系
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
@click.stop="data.nodeType === 'system' ? $emit('open-system-form', 'edit', data.raw) : $emit('open-course-form', { mode: 'edit', row: data.raw })"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
type="text"
|
||||
size="mini"
|
||||
class="danger-text"
|
||||
@click.stop="data.nodeType === 'system' ? $emit('delete-system', data.raw) : $emit('delete-course', data.raw)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-tree>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="tree-detail-panel">
|
||||
<div class="manager-toolbar">
|
||||
<div class="manager-title">节点信息</div>
|
||||
<div class="manager-actions">
|
||||
<span class="selected-tip">{{ selectedTreeNode ? selectedTreeNode.name : '请在左侧选择节点' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="selectedTreeNode" class="node-detail-card">
|
||||
<div class="node-detail-row">
|
||||
<span class="node-detail-label">类型</span>
|
||||
<span class="node-detail-value">{{ selectedTreeNode.nodeType === 'system' ? '计划体系' : '课程体系' }}</span>
|
||||
</div>
|
||||
<div class="node-detail-row">
|
||||
<span class="node-detail-label">名称</span>
|
||||
<span class="node-detail-value">{{ selectedTreeNode.name }}</span>
|
||||
</div>
|
||||
<div class="node-detail-row">
|
||||
<span class="node-detail-label">年份</span>
|
||||
<span class="node-detail-value">{{ selectedTreeNode.year }}</span>
|
||||
</div>
|
||||
<div class="node-detail-row">
|
||||
<span class="node-detail-label">排序</span>
|
||||
<span class="node-detail-value">{{ selectedTreeNode.sort }}</span>
|
||||
</div>
|
||||
<div v-if="selectedTreeNode.nodeType === 'course'" class="node-detail-row">
|
||||
<span class="node-detail-label">所属计划体系</span>
|
||||
<span class="node-detail-value">{{ selectedTreeNode.systemName }}</span>
|
||||
</div>
|
||||
<div class="node-detail-actions">
|
||||
<el-button
|
||||
v-if="selectedTreeNode.nodeType === 'system'"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="$emit('open-course-form', { mode: 'add', row: null, targetSystem: selectedTreeNode.raw })"
|
||||
>
|
||||
新增课程体系
|
||||
</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
@click="selectedTreeNode.nodeType === 'system' ? $emit('open-system-form', 'edit', selectedTreeNode.raw) : $emit('open-course-form', { mode: 'edit', row: selectedTreeNode.raw })"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
size="small"
|
||||
type="danger"
|
||||
plain
|
||||
@click="selectedTreeNode.nodeType === 'system' ? $emit('delete-system', selectedTreeNode.raw) : $emit('delete-course', selectedTreeNode.raw)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="tree-empty-state">
|
||||
请在左侧树中选择计划体系或课程体系
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'SystemCourseManagerDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, default: false },
|
||||
treeData: { type: Array, default: () => [] },
|
||||
selectedSystem: { type: Object, default: null },
|
||||
selectedTreeNode: { type: Object, default: null },
|
||||
currentKey: { type: String, default: '' }
|
||||
},
|
||||
computed: {
|
||||
innerVisible: {
|
||||
get() { return this.visible },
|
||||
set(val) { this.$emit('update:visible', val) }
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
currentKey() {
|
||||
this.syncCurrentKey()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleOpen() {
|
||||
this.$nextTick(() => this.syncCurrentKey())
|
||||
this.$emit('open')
|
||||
},
|
||||
syncCurrentKey() {
|
||||
if (this.$refs.tree && this.currentKey) {
|
||||
this.$refs.tree.setCurrentKey(this.currentKey)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -0,0 +1,66 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
:title="mode === 'add' ? '新增计划体系' : '编辑计划体系'"
|
||||
:visible.sync="innerVisible"
|
||||
width="520px"
|
||||
append-to-body
|
||||
@open="handleOpen"
|
||||
>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-width="88px">
|
||||
<el-form-item label="年份" prop="year">
|
||||
<el-date-picker
|
||||
v-model="form.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
format="yyyy"
|
||||
placeholder="请选择年份"
|
||||
style="width: 100%;"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="计划体系名称" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入计划体系名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input-number v-model="form.sort" :min="1" :max="999" style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer">
|
||||
<el-button @click="innerVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="handleSubmit">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'SystemFormDialog',
|
||||
props: {
|
||||
visible: { type: Boolean, default: false },
|
||||
mode: { type: String, default: 'add' },
|
||||
form: { type: Object, required: true },
|
||||
rules: { type: Object, default: () => ({}) }
|
||||
},
|
||||
computed: {
|
||||
innerVisible: {
|
||||
get() { return this.visible },
|
||||
set(val) { this.$emit('update:visible', val) }
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleOpen() {
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.formRef) {
|
||||
this.$refs.formRef.clearValidate()
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (!valid) return
|
||||
this.$emit('submit')
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue