This commit is contained in:
andy 2026-07-24 17:51:39 +08:00
parent 5e8bcd2114
commit 97fa422b21

View File

@ -0,0 +1,743 @@
<template>
<div class="page-container">
<!-- 用户列表 -->
<n-card class="user-list-card" size="small">
<!-- 搜索表单 -->
<div class="search-form">
<n-form
inline
:model="searchForm"
label-placement="left"
>
<n-form-item label="图纸编号">
<n-input v-model:value="searchForm.ncCode" placeholder="请输入图纸编号" />
</n-form-item>
<n-form-item label="图纸名称">
<n-input v-model:value="searchForm.ncName" placeholder="请输入图纸名称" />
</n-form-item>
<n-form-item label="工序编码">
<n-input v-model:value="searchForm.ncName" placeholder="请输入工序编码" />
</n-form-item>
<n-space>
<n-button type="primary" @click="search">
<template #icon><n-icon><SearchOutline /></n-icon></template>
搜索
</n-button>
<n-button @click="reset">
<template #icon><n-icon><RefreshOutline /></n-icon></template>
重置
</n-button>
</n-space>
</n-form>
</div>
<n-space style="margin-bottom: 15px;">
<n-button type="primary" @click="addhand(1)" size="small">
<template #icon>
<n-icon>
<AddOutline />
</n-icon>
</template>
新增
</n-button>
<!-- <n-button type="error" @click="delhand" size="small">
<template #icon>
<n-icon>
<ArrowDownCircleOutline />
</n-icon>
</template>
删除
</n-button> -->
<n-button type="success" @click="issuehand" size="small">
<template #icon>
<n-icon>
<ArrowDownCircleOutline />
</n-icon>
</template>
导出
</n-button>
</n-space>
<!-- 表格 -->
<n-data-table
:columns="columns"
size="small"
striped
:data="datalist"
:bordere="false"
:single-line="false"
:loading="loading"
remote
:row-key="rowKey"
@update:checked-row-keys="handleCheck"
/>
<div class="pagination-container" style="display: flex; justify-content: flex-end; margin-top: 12px">
<n-pagination
v-model:page="pagination.page"
v-model:page-size="pagination.pageSize"
:item-count="pagination.itemCount"
:page-sizes="[10, 20, 50, 100]"
show-size-picker
show-quick-jumper
@update:page="handlePageChange"
@update:page-size="handlePageSizeChange"
>
<template #prefix>
{{ pagination.itemCount }}
</template>
</n-pagination>
</div>
</n-card>
<n-modal
v-model:show="addModel"
:title="isstype.value == 1?'新增':'修改'"
preset="card"
style="width: 500px"
:mask-closable="false"
>
<n-form
ref="addformRef"
:model="formData"
:rules="addrules"
label-placement="left"
label-width="80"
>
<n-grid :cols="1" :x-gap="24">
<n-gi>
<n-form-item path="drawingCode" label="图纸编号">
<n-input v-model:value="formData.drawingCode" placeholder="请输入图纸编号" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item path="drawingName" label="图纸名称">
<n-input v-model:value="formData.drawingName" placeholder="请输入图纸名称" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="图纸版本">
<n-input v-model:value="formData.drawingVersion" placeholder="请输入图纸版本" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="工序名称">
<n-input v-model:value="formData.processName" placeholder="请选择工序" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="PLM文档">
<n-input v-model:value="formData.plmDocId" placeholder="请选择PLM文档" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="状态">
<n-radio-group v-model:value="formData.status" :default-value="1" name="radiogroup">
<n-space>
<n-radio :value="1">
启用
</n-radio>
<n-radio :value="0">
禁用
</n-radio>
</n-space>
</n-radio-group>
</n-form-item>
</n-gi>
<n-gi>
<n-form-item path="gxname" label="上传图纸">
<!--:default-file-list="fileList"-->
<n-upload
action="https://www.mocky.io/v2/5e4bafc63100007100d8b70f"
list-type="image-card"
>
点击上传
</n-upload>
</n-form-item>
</n-gi>
<n-gi>
<n-form-item path="gxname" label="备注">
<n-input type="textarea" v-model:value="formData.remark" placeholder="请输入备注" />
</n-form-item>
</n-gi>
</n-grid>
</n-form>
<template #footer>
<n-space justify="end">
<n-button @click="addModel = false">取消</n-button>
<n-button
type="primary"
@click="savehand"
>确认</n-button>
</n-space>
</template>
</n-modal>
<!--下发-->
<n-modal
v-model:show="issueModel"
title="下发"
preset="card"
style="width: 500px"
:mask-closable="false"
>
<n-form
ref="issformRef"
:model="issformData"
:rules="issaddrules"
label-placement="top"
label-width="100"
>
<n-grid :cols="1" :x-gap="24">
<n-gi>
<n-form-item path="taskid" label="下发任务">
<n-select
:disabled="false"
:render-label="renderlabe"
v-model:value="issformData.taskid"
placeholder="请选择下发任务"
:options="isstasklist"
/>
</n-form-item>
<n-form-item path="equis" label="下发设备">
<n-select
:disabled="false"
:render-label="renderlabe"
v-model:value="issformData.equis"
placeholder="请选择下发设备"
:options="issequiplist"
/>
</n-form-item>
</n-gi>
<!-- <n-gi>
<n-form-item path="ncName" label="下发代码">
<n-input v-model:value="formData.ncName" placeholder="请输入NC代码名称" />
</n-form-item>
</n-gi> -->
</n-grid>
</n-form>
<template #footer>
<n-space justify="end">
<n-button @click="issueModel = false">取消</n-button>
<n-button
type="primary"
@click="isssavehand"
>确认</n-button>
</n-space>
</template>
</n-modal>
</div>
</template>
<script setup lang="ts">
import {
ref,
reactive,
h,
onMounted,
watch,
} from 'vue'
import {
NButton,
NIcon,
NSpace,
NImage,
NPagination,
NGrid,
// NGi,
NTag,
useMessage,
useDialog,
//type FormInst,
} from 'naive-ui'
import {
SearchOutline,
RefreshOutline,
AddOutline,
ArrowDownCircleOutline
} from '@vicons/ionicons5'
import { useUserStore } from '@/stores/user'
//import { dictDataApi } from '@/api/org'
import {
addDrawing,
editDrawing,
drawinglist,
drawingIssue,
deleteDrawing
} from '@/api/illustrated'
const dialog = useDialog()
const message = useMessage()
const userStore = useUserStore()
//
const hasPermission = (permission: string) => userStore.hasPermission(permission)
//
//const qcAssingStatusOptions = ref<{ label: string; value: any;class:any }[]>([])
// ==================== ====================
const searchForm = reactive({
page: 1,
pageSize: 20,
ncCode:'',
ncName:'',
status:1
})
// ==================== ====================
const datalist = ref<any>([])
const loading = ref(false)
//
const pagination = reactive({
page: 1,
pageSize: 20,
itemCount: 0
})
const columns = [
{
align:"center",
title:"图纸编号",
key:"materialName",
minWidth:150
},
{
align:"center",
title:"图纸名称",
key:"materialCode",
minWidth:150
},
{
align:"center",
title:"图纸版本",
key:"assingCode",
minWidth:150
},
{
align:"center",
title:"工序名称",
key:"materialCode",
minWidth:150
},
{
align:"center",
title:"工序编码",
key:"assingCode",
minWidth:150
},
{
align:"center",
title:"图纸缩略图",
key:"materialCode",
minWidth:150,
render(row:any) {
return h(NImage, {width:'50',height:'50',src:'https://07akioni.oss-cn-beijing.aliyuncs.com/07akioni.jpeg'})
}
},
{
align:"center",
title:"PLM文档",
key:"assingCode",
minWidth:150
},
{
align:"center",
title:"状态",
key:"status",
minWidth:150,
render(row:any) {
if(row.status == 1){
return '启用'
}
return '禁用'
}
},
{
align:"center",
title:"是否下发",
key:"isIssued",
minWidth:150,
render(row:any) {
if(row.status == 1){
return '已下发'
}
return '未下发'
}
},
{
align:"center",
title:"下发时间",
key:"issueTime",
minWidth:150
},
{
align:"center",
title:"下发人",
key:"issueBy",
minWidth:150
},
{
align:"center",
title:"备注",
key:"remark",
minWidth:150
},
{
align:'center',
title: '操作',
key: 'actions',
width: 220,
fixed: 'right',
render(row:any) {
const buttons:any = []
if(hasPermission('biz:ncCode:issue')){
buttons.push(h(NButton, {
size: 'small',
type:'info',
ghost:true,
onClick: () => {
issuehand()
} },
{ default: () => '下发'}
))
}
// if(hasPermission('biz:nccode:add')){
// buttons.push(h(NButton, {
// size: 'small',
// type:'warning',
// ghost:true,
// onClick: () => {
// addhand(3,row)
// }},
// { default: () => ''}
// ))
// }
if(hasPermission('biz:ncCode:edit')){
buttons.push(h(NButton, {
size: 'small',
type:'primary',
ghost:true,
onClick: () => {
addhand(2,row)
} },
{ default: () => '编辑'}
))
}
if(hasPermission('biz:ncCode:remove')){
buttons.push(h(NButton, {
size: 'small',
type:'error',
ghost:true,
onClick: () => {
dialog.warning({
title: '警告',
content: `你确定删除NC代码编号为:${row.ncCode}的数据`,
positiveText: '确定',
negativeText: '取消',
//draggable: true,
onPositiveClick: () => {
deleteDrawing(row.id).then(() => {
message.success('操作成功')
})
},
onNegativeClick: () => {
}
})
} },
{ default: () => '删除'}
))
}
return buttons.length > 0 ? h(NSpace, {justify:'center'}, { default: () => buttons }) : '-'
}
}
]
//
function search() {
pagination.page = 1
searchForm.page = 1
searchForm.pageSize = 20
getlist()
}
//
function reset() {
}
//
function getlist() {
drawinglist(searchForm).then((rps:any) => {
datalist.value = rps.list
pagination.itemCount = rps.total
})
}
function handlePageChange(page: number) {
pagination.page = page
searchForm.page = page
getlist()
}
function handlePageSizeChange(pageSize: number) {
pagination.pageSize = pageSize
pagination.page = 1
searchForm.page = 1
searchForm.pageSize = pageSize
getlist()
}
// //
// async function loadDictOptions() {
// //qcCancelLoading = true
// try {
// const data = await dictDataApi.listByType('assing_status')
// qcAssingStatusOptions.value = data.map(d => ({ label: d.dictLabel, value: (Number(d.dictValue) || d.dictValue),class:d.listClass }))
// }catch {}
// }
//
let addModel = ref(false)
const addformRef = ref()
let formData = reactive<any>({
id:'',
drawingCode:'', //
drawingName:'', //
drawingVersion:'', //
processRouteStepId:'', //ID
processCode:'', //
processName:'', //
filePath:'', //
fileName:'', //
fileSize:'', //
fileType:'', //
plmDocId:'', //PLMID
plmVersion:'', //PLM
plmStatus:'', //PLM
status:1, //1- 0-
remark:'' //
})
const addrules = {
drawingCode: [
{ required: true, message: '请输入图纸编号', trigger: 'blur' },
// {
// validator(rule:any,value: any) {
// if(value > pauseform.qcNum){
// return new Error(`${pauseform.qcNum}`)
// }
// return true
// },
// trigger: ['blur']
// }
],
drawingName:[
{ required: true, message: '请输入图纸名称', trigger: 'blur' }
],
ncContent:[
{ required: true, message: '请输入NC代码内容', trigger: 'blur' }
]
}
let isstype = ref<any>(1)
const cztype = reactive<any>({
1:'新增',
2:'编辑'
})
function addhand(type:any,row?:any) {
addModel.value = true
formData.value?.restoreValidation()
isstype.value = type
if(row){
formData.id = row.id
formData.drawingCode = row.drawingCode
formData.drawingName = row.drawingName
formData.drawingVersion = row.drawingVersion
formData.processRouteStepId = row.processRouteStepId
formData.processCode = row.processCode
formData.processName = row.processName
formData.filePath = row.filePath
formData.fileName = row.fileName
formData.fileSize = row.fileSize
formData.fileType = row.fileType
formData.plmDocId = row.plmDocId
formData.plmVersion = row.plmVersion
formData.plmStatus = row.plmStatus
formData.status = row.status
formData.remark = row.remark
}else{
formData.id = ''
formData.drawingCode = ''
formData.drawingName = ''
formData.drawingVersion = ''
formData.processRouteStepId = ''
formData.processCode = ''
formData.processName = ''
formData.filePath = ''
formData.fileName = ''
formData.fileSize = ''
formData.fileType = ''
formData.plmDocId = ''
formData.plmVersion = ''
formData.plmStatus = ''
formData.status = ''
formData.remark = ''
}
}
function addEdi(){
if(isstype.value == 1){
return addDrawing(formData)
}
return editDrawing(formData)
}
function savehand() {
addformRef.value?.validate((e:any) => {
if (!e) {
addEdi().then(() => {
message.success(isstype.value == 1?'新增':'修改')
setTimeout(() => {
getlist()
addModel.value = false
},1500)
})
}
})
}
//
function rowKey(row:any) {
return row.id
}
let chearr = ref<any>([])
function handleCheck(v:any) {
chearr.value = v
console.log(v)
}
//
// function delhand() {
// if(chearr.value.length > 0){
// drawingIssue(chearr.value).then(() => {
// message.success('')
// })
// }else{
// message.error('')
// }
// }
//
let isstasklist = ref<any>([])
//
let issequiplist = ref<any>([])
//
let issueModel = ref(false)
let issformData = reactive<any>({
taskid:'',
equis:''
})
const issaddrules = {
taskid:[
{ required: true, message: '请选择下发任务', trigger: 'blur' }
],
equis:[
{ required: true, message: '请选择下发设备', trigger: 'blur' }
]
}
function renderlabe() {}
function issuehand() {
issueModel.value = true
// if(chearr.value.length > 0){
// batchIssue(chearr.value).then(() => {
// message.success('')
// })
// }else{
// message.error('')
// }
}
const issformRef = ref()
function isssavehand() {
issformRef.value?.validate((e:any) => {
if (!e) {
message.success('操作成功')
setTimeout(() => {
getlist()
issueModel.value = false
},1500)
}
})
}
getlist()
onMounted(() => {
//loadDictOptions()
})
</script>
<style scoped>
</style>