init: 管理会计OS初始代码
包含前后端完整代码: - 前端:Vue3+Vite+ElementPlus - 后端:FastAPI+SQLAlchemy - 模块:驾驶舱/KPI/战略地图/预警/预算/成本/预测/改善行动 - 当前版本:v1.0.0
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
<template>
|
||||
<div>
|
||||
<div style="display:flex;justify-content:space-between;margin-bottom:16px;">
|
||||
<h3>战略地图</h3>
|
||||
<el-button type="primary" @click="showForm=true;form={}">新建地图</el-button>
|
||||
</div>
|
||||
<el-table :data="maps" style="width:100%">
|
||||
<el-table-column prop="title" label="地图名称" min-width="200" />
|
||||
<el-table-column prop="version" label="版本" width="80" />
|
||||
<el-table-column prop="status" label="状态" width="80">
|
||||
<template #default="{ row }">{{ row.status === "published" ? "已发布" : "草稿" }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="created_at" label="创建时间" width="180" />
|
||||
<el-table-column label="操作" width="250">
|
||||
<template #default="{ row }">
|
||||
<el-button size="small" @click='goCanvas(row.id)'>画布</el-button>
|
||||
<el-button size="small" @click='editMap(row)'>编辑</el-button>
|
||||
<el-button size="small" @click='goVersion(row.id)'>版本</el-button>
|
||||
<el-button size="small" type="danger" @click="deleteMap(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 新建/编辑弹窗 -->
|
||||
<el-dialog v-model="showForm" :title="editingMap ? '编辑地图' : '新建战略地图'" width="500">
|
||||
<el-form :model="form" label-width="100px">
|
||||
<el-form-item label="地图名称"><el-input v-model="form.title" /></el-form-item>
|
||||
<el-form-item label="版本号"><el-input v-model="form.version" placeholder="v1.0" /></el-form-item>
|
||||
<el-form-item label="创建方式" v-if="!editingMap">
|
||||
<el-radio-group v-model="createMode">
|
||||
<el-radio value="blank">空白地图</el-radio>
|
||||
<el-radio value="template">快速模板(4维度+预设目标)</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="showForm=false">取消</el-button>
|
||||
<el-button type="primary" @click="saveMap">保存</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from "vue"
|
||||
import { useRouter } from "vue-router"
|
||||
import { ElMessage, ElMessageBox } from "element-plus"
|
||||
import { mapApi } from "../api/index"
|
||||
|
||||
const router = useRouter()
|
||||
const maps = ref<any[]>([])
|
||||
const showForm = ref(false)
|
||||
const editingMap = ref<any>(null)
|
||||
const form = ref<any>({})
|
||||
const createMode = ref("blank")
|
||||
|
||||
async function load() {
|
||||
try { const r: any = await mapApi.list(); maps.value = r.data || [] } catch (e) {}
|
||||
}
|
||||
|
||||
function goCanvas(id: number) { router.push('/maps/canvas/' + id) }
|
||||
function goVersion(id: number) { router.push('/maps/versions/' + id) }
|
||||
|
||||
async function saveMap() {
|
||||
try {
|
||||
if (editingMap.value) {
|
||||
await mapApi.update(editingMap.value.id, form.value)
|
||||
ElMessage.success("已更新")
|
||||
} else if (createMode.value === "template") {
|
||||
await mapApi.createWithTemplate ? await mapApi.createWithTemplate(form.value) : await mapApi.create(form.value)
|
||||
ElMessage.success("模板地图已创建")
|
||||
} else {
|
||||
await mapApi.create(form.value)
|
||||
ElMessage.success("创建成功")
|
||||
}
|
||||
showForm.value = false
|
||||
editingMap.value = null
|
||||
load()
|
||||
} catch (e) {
|
||||
ElMessage.error("操作失败")
|
||||
}
|
||||
}
|
||||
|
||||
function editMap(map: any) {
|
||||
editingMap.value = map
|
||||
form.value = { title: map.title, version: map.version }
|
||||
showForm.value = true
|
||||
}
|
||||
|
||||
function handleClick(path: string) { window.location.href = path }
|
||||
async function deleteMap(map: any) {
|
||||
try {
|
||||
await ElMessageBox.confirm(`确定删除「${map.title}」?`)
|
||||
await mapApi.delete ? await mapApi.delete(map.id) : ElMessage.warning("当前API不支持删除")
|
||||
ElMessage.success("已删除")
|
||||
load()
|
||||
} catch (e: any) {
|
||||
if (e !== "cancel") ElMessage.error("删除失败")
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(load)
|
||||
</script>
|
||||
Reference in New Issue
Block a user