10 changed files with 11258 additions and 14 deletions
-
4.env.dev
-
10986package-lock.json
-
9src/apis/ore.ts
-
4src/components/craft/AddCraftDialog.vue
-
4src/layouts/default.vue
-
1src/router/index.ts
-
9src/router/routes.ts
-
23src/types/ore.d.ts
-
30src/views/craft/index.vue
-
202src/views/ore/index.vue
10986
package-lock.json
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,9 @@ |
|||||
|
import http from 'libs/http' |
||||
|
|
||||
|
export const getOreList = (): Promise<any> => http.get(`/ores/list`) |
||||
|
|
||||
|
export const saveOre = (params: { name: string }): Promise<any> => http.post(`/ores`, params) |
||||
|
|
||||
|
export const editOre = (params: { id: number, name: string }): Promise<any> => http.put(`/ores`, params) |
||||
|
|
||||
|
export const delOre = (ids: string): Promise<any> => http.delete(`/ores/${ids}`) |
@ -0,0 +1,23 @@ |
|||||
|
declare namespace Ore { |
||||
|
interface OreItem { |
||||
|
id: number |
||||
|
oresName: string |
||||
|
createTime: string |
||||
|
updateTime: string |
||||
|
craftsList: CraftTypes.Craft[] |
||||
|
} |
||||
|
|
||||
|
interface AddItem { |
||||
|
name: string |
||||
|
} |
||||
|
|
||||
|
interface EditItem { |
||||
|
id?: number |
||||
|
name: string |
||||
|
} |
||||
|
|
||||
|
interface OreTableList { |
||||
|
list: OreItem[] |
||||
|
total: number |
||||
|
} |
||||
|
} |
@ -0,0 +1,202 @@ |
|||||
|
<script lang="ts" setup> |
||||
|
import { delOre, editOre, getOreList, saveOre } from '@/apis/ore' |
||||
|
import { ElMessage, ElMessageBox } from 'element-plus' |
||||
|
import { onMounted, ref, watch } from 'vue' |
||||
|
import { useRoute, useRouter } from 'vue-router' |
||||
|
|
||||
|
onMounted(() => { |
||||
|
queryOresList() |
||||
|
}) |
||||
|
const tableData = ref<Ore.OreItem[]>([]) |
||||
|
const visible = ref(false) |
||||
|
const oreForm = ref() |
||||
|
const name = ref() |
||||
|
const loading = ref(false) |
||||
|
const selectedList = ref<Ore.OreItem[]>([]) |
||||
|
const showCraftCommponent = ref(false) |
||||
|
const router = useRouter() |
||||
|
const route = useRoute() |
||||
|
const queryOresList = () => { |
||||
|
getOreList().then((res) => { |
||||
|
if (res && res.list) { |
||||
|
tableData.value = res.list |
||||
|
} |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
watch(() => route.path, (newVal) => { |
||||
|
if (newVal === '/ore') { |
||||
|
queryOresList() |
||||
|
} |
||||
|
}) |
||||
|
const onSelectionChange = (rows: Ore.OreItem[]) => { |
||||
|
selectedList.value = rows |
||||
|
} |
||||
|
|
||||
|
const onAddOre = () => { |
||||
|
visible.value = true |
||||
|
} |
||||
|
|
||||
|
const onEditOre = () => { |
||||
|
if (!selectedList.value.length) { |
||||
|
ElMessage.warning('请选择要编辑的数据') |
||||
|
return |
||||
|
} |
||||
|
if (selectedList.value.length !== 1) { |
||||
|
ElMessage.warning('只能编辑一条数据') |
||||
|
return |
||||
|
} |
||||
|
const editItem = selectedList.value[0] |
||||
|
oreForm.value = { ...editItem } |
||||
|
name.value = editItem.oresName |
||||
|
visible.value = true |
||||
|
} |
||||
|
|
||||
|
const onDelOre = () => { |
||||
|
if (!selectedList.value.length) { |
||||
|
ElMessage.warning('请选择要编辑的数据') |
||||
|
return |
||||
|
} |
||||
|
ElMessageBox.confirm( |
||||
|
'确认删除选中的数据吗?', |
||||
|
'确认提示', |
||||
|
{ |
||||
|
confirmButtonText: '确认', |
||||
|
cancelButtonText: '取消', |
||||
|
type: 'warning', |
||||
|
}, |
||||
|
).then(() => { |
||||
|
const ids = selectedList.value.map(item => item.id) |
||||
|
delOre(ids.join(',')).then(() => { |
||||
|
ElMessage.success('删除成功') |
||||
|
queryOresList() |
||||
|
}) |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
const closeDialog = () => { |
||||
|
visible.value = false |
||||
|
} |
||||
|
|
||||
|
const onConfirm = () => { |
||||
|
if (!name.value) { |
||||
|
ElMessage.warning('请输入矿石名称') |
||||
|
return |
||||
|
} |
||||
|
loading.value = true |
||||
|
const params = { |
||||
|
...oreForm.value, |
||||
|
} |
||||
|
let apiFn = null |
||||
|
if (oreForm.value.id) { |
||||
|
params.id = oreForm.value.id |
||||
|
apiFn = editOre |
||||
|
} |
||||
|
else { |
||||
|
apiFn = saveOre |
||||
|
} |
||||
|
params.oresName = name.value |
||||
|
params.name = name.value |
||||
|
apiFn(params).then(() => { |
||||
|
loading.value = false |
||||
|
visible.value = false |
||||
|
name.value = '' |
||||
|
oreForm.value = {} |
||||
|
queryOresList() |
||||
|
}).catch((e) => { |
||||
|
console.error('操作失败==', e) |
||||
|
loading.value = true |
||||
|
}) |
||||
|
} |
||||
|
|
||||
|
const onShowCraft = () => { |
||||
|
if (!selectedList.value.length) { |
||||
|
ElMessage.warning('请选择要查看的数据') |
||||
|
return |
||||
|
} |
||||
|
if (selectedList.value.length !== 1) { |
||||
|
ElMessage.warning('只能查看一条数据的工艺') |
||||
|
return |
||||
|
} |
||||
|
const editItem = selectedList.value[0] |
||||
|
showCraftCommponent.value = true |
||||
|
router.push({ |
||||
|
path: '/ore/craft', |
||||
|
query: { oreId: editItem.id }, |
||||
|
}) |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<template> |
||||
|
<div v-if="route.path === '/ore/craft'"> |
||||
|
<router-view /> |
||||
|
</div> |
||||
|
<div v-else> |
||||
|
<div> |
||||
|
<FtButton @click="onAddOre"> |
||||
|
添加矿石 |
||||
|
</FtButton> |
||||
|
<FtButton @click="onEditOre"> |
||||
|
编辑矿石 |
||||
|
</FtButton> |
||||
|
<FtButton @click="onDelOre"> |
||||
|
删除矿石 |
||||
|
</FtButton> |
||||
|
<FtButton @click="onShowCraft"> |
||||
|
查看工艺 |
||||
|
</FtButton> |
||||
|
</div> |
||||
|
<div> |
||||
|
<el-table :data="tableData" stripe style="width: 100%" @selection-change="onSelectionChange"> |
||||
|
<el-table-column type="selection" width="55" /> |
||||
|
<el-table-column type="index" width="50" /> |
||||
|
<el-table-column prop="oresName" label="矿石名称" /> |
||||
|
<el-table-column prop="craftNames" label="工艺名称"> |
||||
|
<template #default="scoped"> |
||||
|
<div class="craft-tag"> |
||||
|
<el-tag v-for="item in scoped.row.craftsList" :key="item.id" type="info" style="margin-left: 5px;"> |
||||
|
{{ item.name }} |
||||
|
</el-tag> |
||||
|
</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column prop="createTime" label="创建时间" /> |
||||
|
<el-table-column prop="updateTime" label="更新时间" /> |
||||
|
</el-table> |
||||
|
<!-- <FtTable :columns="columns" has-header :btn-list="btnList" :get-data-fn="queryOresList" /> --> |
||||
|
</div> |
||||
|
<FtDialog v-model="visible" title="添加矿石" style="width:35vw; height:30vh"> |
||||
|
<div class="add-content"> |
||||
|
<label>矿石名称:</label> |
||||
|
<span><el-input v-model="name" style="width:200px" /></span> |
||||
|
</div> |
||||
|
<template #footer> |
||||
|
<div class="footer"> |
||||
|
<FtButton @click="closeDialog"> |
||||
|
取消 |
||||
|
</FtButton> |
||||
|
<FtButton :loading="loading" :click-handle="onConfirm"> |
||||
|
确定 |
||||
|
</FtButton> |
||||
|
</div> |
||||
|
</template> |
||||
|
</FtDialog> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<style scoped> |
||||
|
.add-content{ |
||||
|
height: 50px; |
||||
|
display: flex; |
||||
|
align-items: center; |
||||
|
} |
||||
|
.footer{ |
||||
|
display: flex; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
height: 4rem; |
||||
|
} |
||||
|
.craft-tag{ |
||||
|
display: flex; |
||||
|
} |
||||
|
</style> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue