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