yn_digital_gadgets_web/src/views/basicManage/planProfessional/index.vue

179 lines
6.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<!-- 计划专业管理 -->
<ComTable
ref="comTableRef"
:form-columns="formColumns"
:table-columns="tableColumns"
:load-data="listPlanProfessionalAPI"
:show-toolbar="true"
:show-action="true"
:action-columns="actionColumns"
:default-query-params="{
category: 0, // 0计划专业 1业务类型 2计划类别
}"
>
<!-- 工具栏插槽 -->
<template #toolbar>
<ComButton type="primary" icon="Plus" @click="onHandleAdd">新建计划专业</ComButton>
</template>
</ComTable>
<ComDialog :dialog-config="dialogConfig" @closeDialogOuter="onCloseDialogOuter">
<template #outerContent>
<el-form
size="large"
label-width="auto"
:model="addAndEditForm"
ref="addAndEditFormRef"
:rules="addAndEditRules"
>
<el-form-item label="计划专业名称" prop="planMajorName">
<el-input
clearable
maxlength="50"
show-word-limit
placeholder="请输入计划专业名称"
v-model.trim="addAndEditForm.planMajorName"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
type="textarea"
maxlength="200"
show-word-limit
placeholder="请输入备注"
v-model="addAndEditForm.remark"
:autosize="{ minRows: 4, maxRows: 8 }"
/>
</el-form-item>
</el-form>
<el-row class="common-btn-row">
<ComButton plain type="info" @click="onHandleCancel">取消</ComButton>
<ComButton @click="onHandleSave">保存</ComButton>
</el-row>
</template>
</ComDialog>
</div>
</template>
<script setup name="Position">
import { ref, nextTick } from 'vue'
import {
listPlanProfessionalAPI,
addPlanProfessionalAPI,
delPlanProfessionalAPI,
updatePlanProfessionalAPI,
} from '@/api/basicManage/planProfessional'
import { bus, BUS_EVENTS } from '@/utils/bus'
import config from './config'
import ComTable from '@/components/ComTable/index.vue'
import ComButton from '@/components/ComButton/index.vue'
import ComDialog from '@/components/ComDialog/index.vue'
const { formColumns, tableColumns, dialogConfig } = config
const { proxy } = getCurrentInstance()
const addAndEditFormRef = ref(null)
const comTableRef = ref(null)
const editId = ref(null)
// 定义初始表单数据函数
const getInitFormData = () => ({
planMajorName: '',
remark: '',
category: 0,
})
const addAndEditForm = ref(getInitFormData())
const addAndEditRules = ref({
planMajorName: [{ required: true, message: '请输入计划专业名称', trigger: 'blur' }],
})
const actionColumns = [
{
label: '编辑',
type: 'primary',
link: true,
handler: (row) => {
const { planMajorId, planMajorName, remark } = row
editId.value = planMajorId
dialogConfig.outerTitle = '编辑计划专业'
dialogConfig.outerVisible = true
// 使用 nextTick 确保在弹框渲染、表单组件挂载后再赋值
nextTick(() => {
addAndEditForm.value.planMajorName = planMajorName
addAndEditForm.value.remark = remark
})
},
},
{
label: '删除',
type: 'danger',
link: true,
handler: (row) => {
proxy.$modal.confirm('是否确认删除该计划专业?').then(async () => {
const result = await delPlanProfessionalAPI({
planMajorId: row.planMajorId,
})
if (result.code === 200) {
proxy.$modal.msgSuccess('删除成功')
comTableRef.value?.refresh() // 刷新表格
bus.emit(BUS_EVENTS.REFRESH_OPTIONS, 'majorTypeCategoryOptions') // 刷新专业下拉缓存
}
})
},
},
]
// 新增
const onHandleAdd = () => {
editId.value = null
dialogConfig.outerTitle = '新建计划专业'
dialogConfig.outerVisible = true
// 重置表单数据
addAndEditForm.value = getInitFormData()
// 清除之前的校验信息
nextTick(() => {
addAndEditFormRef.value?.clearValidate()
})
}
// 取消
const onHandleCancel = () => {
addAndEditFormRef?.value?.resetFields() // 重置表单
dialogConfig.outerVisible = false
}
// 保存
const onHandleSave = async () => {
try {
await addAndEditFormRef.value.validate()
const API = editId.value ? updatePlanProfessionalAPI : addPlanProfessionalAPI
const params = JSON.parse(JSON.stringify(addAndEditForm.value))
editId.value ? (params.planMajorId = editId.value) : null
const result = await API(params)
if (result.code === 200) {
proxy.$modal.msgSuccess(editId.value ? '编辑成功' : '新增成功')
addAndEditFormRef.value.resetFields() // 重置表单
dialogConfig.outerVisible = false
comTableRef.value?.refresh() // 刷新表格
bus.emit(BUS_EVENTS.REFRESH_OPTIONS, 'majorTypeCategoryOptions') // 刷新专业下拉缓存
}
} catch (error) {
console.error('表单校验失败或请求错误:', error)
return Promise.reject(error)
}
}
const onCloseDialogOuter = (visible) => {
dialogConfig.outerVisible = visible
if (!visible) {
addAndEditFormRef.value?.resetFields()
}
}
</script>