Compare commits

..

No commits in common. "d80a5983d461f88ea4b5bb27f6eafe1d1bcbe8fe" and "cf7a8e9cd680c0fd561a30099270be4917d7853d" have entirely different histories.

7 changed files with 229 additions and 1374 deletions

View File

@ -9,10 +9,10 @@ VITE_APP_ENV = 'development'
#VITE_APP_BASE_API = 'http://192.168.12.4:8888/api'
#VITE_APP_BASE_API = 'http://192.168.5.14:9100/gateway'
#VITE_APP_BASE_API = 'http://localhost/api'
VITE_APP_BASE_API = 'http://localhost/api'
#VITE_APP_BASE_API = 'http://localhost:9100/gateway'
VITE_APP_BASE_API = '/api'
#VITE_APP_BASE_API = '/dev-api'

View File

@ -23,7 +23,7 @@ export function editDrawing(data:any) {
//列表
export function drawinglist(params:any) {
return request({
url: `/biz/drawingFile/page`,
url: `/biz/ncCode/page`,
method: 'get',
params
})
@ -45,45 +45,3 @@ export function deleteDrawing(ids:any) {
method: 'delete'
})
}
//生成图纸编号
export function generateDFCode() {
return request({
url: `/biz/drawingFile/generateDFCode`,
method: 'get'
})
}
//导出
export function exportdraFile(params:any) {
return request({
url: `biz/drawingFile/export`,
method: 'get',
responseType: 'blob',
params
})
}
//任务树
export function opertree() {
return request({
url: `biz/ncCode/operationTree`,
method: 'get'
})
}
//查询已上传文件 单文件
export function filelist(fileId:any) {
return request({
url: `sys/file/${fileId}`,
method: 'get'
})
}
//查询已上传文件 多文件
export function multifilelist(fileId:any) {
return request({
url: `sys/file/getFile/${fileId}`,
method: 'get'
})
}

View File

@ -97,7 +97,7 @@ export function exportNccode(params:any) {
return request({
url: `biz/ncCode/export`,
method: 'get',
responseType: 'blob',
params
params,
responseType: 'blob'
})
}

View File

@ -1,7 +1,7 @@
import axios, { type AxiosInstance, type AxiosRequestConfig, type AxiosResponse } from 'axios'
import { useUserStore } from '@/stores/user'
const BASE_API = import.meta.env.VITE_APP_BASE_API
// const BASE_API = import.meta.env.VITE_APP_BASE_API
// API响应结构
interface ApiResponse<T = any> {
@ -116,8 +116,7 @@ async function decryptResponseData(data: string): Promise<any> {
// 创建axios实例
// 后端 API 统一使用 /api 前缀
const service: AxiosInstance = axios.create({
//baseURL:'/api',
baseURL:BASE_API,
baseURL:'/api',
timeout: 30000
})
@ -159,6 +158,7 @@ service.interceptors.response.use(
return response.data
}
const res = response.data
if (res.code !== 200) {

View File

@ -1,846 +0,0 @@
<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="NC代码编号">
<n-input v-model:value="searchForm.ncCode" placeholder="请输入NC代码编号" />
</n-form-item>
<n-form-item label="NC代码名称">
<n-input v-model:value="searchForm.ncName" placeholder="请输入NC代码名称" />
</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 v-if="hasPermission('biz:ncCode:add')" 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 v-if="hasPermission('biz:ncCode:export')" type="success" @click="handleExport" 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="cztype[isstype]"
preset="card"
style="width: 600px"
:mask-closable="false"
>
<n-form
ref="addformRef"
:model="formData"
:rules="addrules"
label-placement="left"
label-width="100"
>
<n-grid :cols="1" :x-gap="24">
<n-gi>
<n-form-item path="ncCode" label="NC代码编号">
<n-input v-model:value="formData.ncCode" placeholder="自动生成" disabled />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item path="ncName" label="NC代码名称">
<n-input v-model:value="formData.ncName" placeholder="请输入NC代码名称" />
</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>
<!--type="textarea"-->
<n-form-item path="ncContent" label="NC代码内容">
<n-input type="textarea" v-model:value="formData.ncContent" placeholder="请输入NC代码内容" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="备注">
<n-input type="textarea" v-model:value="formData.remark" placeholder="请输入备注" />
</n-form-item>
</n-gi>
<!-- <n-gi>
<n-form-item label="工作中心">
<n-input v-model:value="formData.workCenter" placeholder="请输入工作中心" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="设备ID">
<n-input v-model:value="formData.deviceId" placeholder="请输入设备ID" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="设备名称">
<n-input v-model:value="formData.deviceName" placeholder="请输入设备名称" />
</n-form-item>
</n-gi> -->
<!-- <n-gi>
<n-form-item label="下发状态">
<n-radio-group v-model:value="formData.isIssued" 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> -->
<!-- <template v-if="formData.isIssued == 1">
<n-gi>
<n-form-item label="下发时间">
<n-date-picker
v-model:formatted-value="formData.issueTime"
type="datetime"
style="width: 100%;"
clearable
value-format="yyyy-MM-dd HH:mm:ss"
/>
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="下发人">
<n-input v-model:value="formData.issueBy" placeholder="请选择下发人" />
</n-form-item>
</n-gi>
</template> -->
</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: 600px"
:mask-closable="false"
>
<div style="display: flex;padding-bottom: 15px;font-size: 16px;">
<div style="padding: 2px 5px;background: #50a5b7;color: #fff;border-radius: 6px 0 0 6px;">NC代码编号</div>
<div style="padding: 2px 5px;border: 1px solid #50a5b7;border-radius: 0 6px 6px 0;">{{ ncCode }}</div>
</div>
<n-transfer
v-model:value="xfsbvalue"
style="height:500px;"
:options="options"
:render-source-list="renderSourceList"
source-filterable
@update:value="tranupdate"
/>
<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,
} from 'vue'
import {
NTree,
NButton,
NIcon,
NSpace,
NPagination,
NGrid,
useMessage,
useDialog,
NDropdown,
} from 'naive-ui'
import {
SearchOutline,
RefreshOutline,
AddOutline,
ArrowDownCircleOutline,
EllipsisHorizontalOutline
} from '@vicons/ionicons5'
import { useUserStore } from '@/stores/user'
import {
addnccode,
nccodelist,
batchIssue,
editccode,
issuecopy,
generateNccode,
opertree,
exportNccode,
deleteIssue
} from '@/api/nccode'
const dialog = useDialog()
const message = useMessage()
const userStore = useUserStore()
//
const hasPermission = (permission: string) => userStore.hasPermission(permission)
//const ncDispatchRecords = ref<ncCode[]>([])
//
//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 = [
// {
// type: 'selection',
// minWidth:60
// },
{
align:"center",
title:"NC代码编号",
key:"ncCode",
minWidth:150
},
{
align:"center",
title:"NC代码名称",
key:"ncName",
minWidth:150
},
{
align:"center",
title:"NC代码内容",
key:"ncContent",
minWidth:150
},
// {
// align:"center",
// title:"",
// key:"workCenter",
// minWidth:150
// },
// {
// align:"center",
// title:"ID",
// key:"deviceId",
// minWidth:150
// },
// {
// align:"center",
// title:"",
// key:"deviceName",
// 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.isSued== 1){
return '已下发'
}
return '未下发'
}
},
{
align:"center",
title:"下发时间",
key:"issueTime",
minWidth:150
},
{
align:"center",
title:"下发人",
key:"issueName",
minWidth:150
},
{
align:"center",
title:"备注",
key:"remark",
minWidth:150
},
{
align:'center',
title: '操作',
key: 'actions',
width: 260,
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(row)
} },
{ 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: () => {
deleteIssue(row.id).then(() => {
message.success('操作成功')
setTimeout(() => {
search()
},1000)
})
},
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() {
searchForm.ncCode = ''
searchForm.ncName = ''
}
//
function getlist() {
nccodelist(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:'',
ncCode:'', //NC
ncName:'', //NC
ncContent:'', //NC
workCenter:'', //
deviceId:'', //ID
deviceName:'', //
status:1, //1- 0-
// isIssued:1, //1- 0-
// issueTime:null, //
// issueBy:'', //
remark:'' //
})
const addrules = {
ncCode: [
{ required: true, message: '请输入NC代码编号', trigger: 'blur' },
// {
// validator(rule:any,value: any) {
// if(value > pauseform.qcNum){
// return new Error(`${pauseform.qcNum}`)
// }
// return true
// },
// trigger: ['blur']
// }
],
ncName:[
{ required: true, message: '请输入NC代码名称', trigger: 'blur' }
],
ncContent:[
{ required: true, message: '请输入NC代码内容', trigger: 'blur' }
]
}
let isstype = ref<any>(1)
const cztype = reactive<any>({
1:'新增',
2:'编辑',
3:'复制'
})
function addhand(type:any,row?:any) {
addModel.value = true
formData.value?.restoreValidation()
isstype.value = type
if(row){
formData.id = row.id
formData.ncName = row.ncName
formData.ncContent = row.ncContent
formData.workCenter = row.workCenter
formData.deviceId = row.deviceId
formData.deviceName = row.deviceName
formData.status = row.status
// formData.isIssued = row.isIssued
// formData.issueTime = row.issueTime
// formData.issueBy = row.issueBy
formData.remark = row.remark
if(type == 2){
formData.ncCode = row.ncCode
}else{
formData.ncCode = ''
}
}else{
formData.id = ''
formData.ncCode = ''
formData.ncName = ''
formData.ncContent = ''
formData.workCenter = ''
formData.deviceId = ''
formData.deviceName = ''
formData.status = 1
// formData.isIssued = ''
// formData.issueTime = ''
// formData.issueBy = ''
formData.remark = ''
}
if(type == 1 || type == 3){
generateNccode().then(rps => {
formData.ncCode = rps
})
}
}
function addEdi(){
if(isstype.value == 1){
return addnccode(formData)
}
if(isstype.value == 2){
return editccode(formData)
}
formData.id = ''
return issuecopy(formData)
}
function savehand() {
addformRef.value?.validate((e:any) => {
if (!e) {
addEdi().then(() => {
message.success(`${cztype[isstype.value]}成功`)
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){
batchIssue(chearr.value).then(() => {
message.success('操作成功')
})
}else{
message.error('请勾选设备')
}
}
//
//let isstasklist = ref<any>([])
//
//let issequiplist = ref<any>([])
let treeData:any = []
let xfsbvalue = ref<Array<string | number>>([])
let renderSourceList:any = ''
let options = ref<any>([]) //flattenTree(createData())
function flattenTree(list: undefined | any[]) {
const result: any[] = []
function flatten(_list: any[] = []) {
_list.forEach((item) => {
//result.push(item)
if(item.childList){
flatten(item.childList)
}else{
result.push(item)
}
})
}
flatten(list)
return result
}
//
let issueModel = ref(false)
// let issformData = reactive<any>({
// taskid:'',
// equis:''
// })
// const issaddrules = {
// taskid:[
// { required: true, message: '', trigger: 'blur' }
// ],
// equis:[
// { required: true, message: '', trigger: 'blur' }
// ]
// }
let issarr:any[] = []
let ncCode = ref<any>('')
function tranupdate(v:any) {
issarr = []
if(v.length > 0){
v.forEach((n:any) => {
if(n.split('-').length == 3){
issarr.push(n)
}
})
}
}
let ncid = ''
function issuehand(row:any) {
issueModel.value = true
issarr = []
ncid = row.id
ncCode.value = row.code
}
function isssavehand() {
if(issarr.length > 0){
batchIssue({
ncCode:ncid,
ncCodeList:issarr
}).then(() => {
message.success('操作成功')
setTimeout(() => {
getlist()
issueModel.value = false
},1500)
})
}else{
message.warning('请选择设备')
}
}
//
//let selectedIds = ref<any>([])
function handleExport() {
exportNccode({}).then(rps => {
const url = window.URL.createObjectURL(rps)
const link = document.createElement('a')
link.href = url
link.download = 'NC代码数据.xlsx'
link.click()
window.URL.revokeObjectURL(url)
})
}
getlist()
//
// async function handleDispatchRecord(row:ncCode){
// const ncId = row.id
// // ncDispatchRecords.value = await
// }
onMounted(() => {
//
opertree().then(rps => {
treeData = rps
options.value = flattenTree(treeData)
renderSourceList = function (obj:any) {
return h(NTree, {
style: 'margin: 0 4px;',
keyField: 'value',
checkable: true,
selectable: false,
blockLine: true,
checkOnClick: true,
childrenField:'childList',
data: treeData,
cascade:true,
defaultExpandAll:true,
pattern:obj.pattern,
checkedKeys: xfsbvalue.value,
onUpdateCheckedKeys: (checkedKeys:any) => {
obj.onCheck(checkedKeys)
}
})
}
})
//loadDictOptions()
})
</script>
<style scoped>
</style>

View File

@ -10,15 +10,15 @@
label-placement="left"
>
<n-form-item label="图编号">
<n-input v-model:value="searchForm.drawingCode" placeholder="请输入图文编号" />
<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.drawingName" placeholder="请输入图文名称" />
<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-form-item label="图文版本">
<n-input v-model:value="searchForm.drawingVersion" placeholder="请输入图文版本" />
</n-form-item> -->
<n-space>
@ -35,7 +35,7 @@
</div>
<n-space style="margin-bottom: 15px;">
<n-button v-if="hasPermission('biz:drawingFile:add')" type="primary" @click="addhand(1)" size="small">
<n-button type="primary" @click="addhand(1)" size="small">
<template #icon>
<n-icon>
<AddOutline />
@ -51,7 +51,7 @@
</template>
删除
</n-button> -->
<n-button type="success" v-if="hasPermission('biz:drawingFile:export')" @click="handleExport" size="small">
<n-button type="success" @click="issuehand" size="small">
<template #icon>
<n-icon>
<ArrowDownCircleOutline />
@ -75,7 +75,7 @@
@update:checked-row-keys="handleCheck"
/>
<div v-if="pagination.itemCount > pagination.pageSize" class="pagination-container" style="display: flex; justify-content: flex-end; margin-top: 12px">
<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"
@ -110,8 +110,29 @@
>
<n-grid :cols="1" :x-gap="24">
<n-gi>
<n-form-item path="drawingCode" label="图文编号">
<n-input v-model:value="formData.drawingCode" disabled placeholder="自动生成" />
<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>
@ -128,100 +149,23 @@
</n-radio-group>
</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 path="processId" label="工序名称">
<n-select
v-model:value="selval"
filterable
placeholder="请输入工序名称搜索"
:options="yglist"
:loading="loadingRef"
clearable
remote
:clear-filter-after-select="false"
@search="slehand"
@update:value="updatesle"
/>
</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.drawingType" :default-value="1" name="radiogroup">
<n-space>
<n-radio :value="0">
图纸
</n-radio>
<n-radio :value="1">
文件
</n-radio>
</n-space>
</n-radio-group>
</n-form-item>
</n-gi>
<n-gi>
<n-form-item path="fileId" label="上传文件">
<n-form-item path="gxname" label="上传图纸">
<!--:default-file-list="fileList"-->
<!-- <n-upload
:action="URL"
:headers="{
Authorization:TOKEN
}"
<n-upload
action="https://www.mocky.io/v2/5e4bafc63100007100d8b70f"
list-type="image-card"
>
点击上传
</n-upload> -->
<!-- @before-upload ="flchang"
@change="flchang"
@remove="flchang"-->
<n-upload
directory-dnd
auto-upload="false"
:action="URL"
:headers="{
Authorization:TOKEN
}"
:max="20"
v-model:file-list="flist"
@finish="flchang"
>
<n-upload-dragger>
<div>
<n-icon size="40" :depth="3">
<CloudUploadOutline />
</n-icon>
</div>
<n-text style="font-size: 14px">
点击或者拖动文件到该区域来上传
</n-text>
</n-upload-dragger>
</n-upload>
</n-form-item>
</n-gi>
<!-- <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-gi>
</n-grid>
</n-form>
<template #footer>
@ -238,41 +182,61 @@
</n-modal>
<!--下发-->
<n-modal
v-model:show="issueModel"
title="下发"
preset="card"
style="width: 600px"
:mask-closable="false"
>
<div style="display: flex;padding-bottom: 15px;font-size: 16px;">
<div style="padding: 2px 5px;background: #50a5b7;color: #fff;border-radius: 6px 0 0 6px;">图文编号</div>
<div style="padding: 2px 5px;border: 1px solid #50a5b7;border-radius: 0 6px 6px 0;">{{ imgCode }}</div>
</div>
<n-transfer
v-model:value="xfsbvalue"
style="height:500px;"
:options="options"
:render-source-list="renderSourceList"
source-filterable
@update:value="tranupdate"
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"
<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>
@click="isssavehand"
>确认</n-button>
</n-space>
</template>
</n-modal>
</div>
@ -293,10 +257,7 @@ import {
NSpace,
NImage,
NPagination,
NGrid,
NTree,
// NGi,
NTag,
NGrid,
useMessage,
useDialog,
} from 'naive-ui'
@ -305,8 +266,7 @@ import {
SearchOutline,
RefreshOutline,
AddOutline,
ArrowDownCircleOutline,
CloudUploadOutline
ArrowDownCircleOutline
} from '@vicons/ionicons5'
import { useUserStore } from '@/stores/user'
@ -314,21 +274,12 @@ import { useUserStore } from '@/stores/user'
import {
addDrawing,
editDrawing,
drawinglist,
drawingIssue,
deleteDrawing,
generateDFCode,
exportdraFile,
opertree,
//filelist,
multifilelist
drawinglist,
deleteDrawing
} from '@/api/illustrated'
import {
basicProcessPlanApi
} from '@/api/basicProcessPlan'
const URL = `${import.meta.env.VITE_APP_BASE_API}/sys/file/upload`
const dialog = useDialog()
@ -336,8 +287,6 @@ const message = useMessage()
const userStore = useUserStore()
const TOKEN = userStore.token
//
const hasPermission = (permission: string) => userStore.hasPermission(permission)
@ -349,9 +298,9 @@ const hasPermission = (permission: string) => userStore.hasPermission(permission
const searchForm = reactive({
page: 1,
pageSize: 20,
drawingCode:'',
drawingName:'',
drawingVersion:''
ncCode:'',
ncName:'',
status:1
})
@ -368,60 +317,52 @@ const pagination = reactive({
})
const columns = [
{
align:"center",
title:"图文编号",
key:"drawingCode",
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:"drawingName",
// minWidth:150
// },
// {
// align:"center",
// title:"",
// key:"drawingVersion",
// minWidth:150
// },
// {
// align:"center",
// title:"",
// key:"processName",
// minWidth:150
// },
// {
// align:"center",
// title:"",
// key:"processCode",
// minWidth:150
// },
// {
// align:"center",
// title:"",
// key:"materialCode",
// minWidth:150,
// render(row:any) {
// //filePath
// return h(NImage, {width:'50',height:'50',src:'https://07akioni.oss-cn-beijing.aliyuncs.com/07akioni.jpeg'})
// }
// },
// {
// align:"center",
// title:"PLM",
// key:"plmDocId",
// minWidth:150
// },
// {
// align:"center",
// title:"PLM",
// key:"plmVersion",
// minWidth:150
// },
{
align:"center",
title:"状态",
@ -440,7 +381,7 @@ const columns = [
key:"isIssued",
minWidth:150,
render(row:any) {
if(row.isIssued == 1){
if(row.status == 1){
return '已下发'
}
return '未下发'
@ -475,13 +416,13 @@ const columns = [
render(row:any) {
const buttons:any = []
if(hasPermission('biz:drawingFile:issue')){
if(hasPermission('biz:ncCode:issue')){
buttons.push(h(NButton, {
size: 'small',
type:'info',
ghost:true,
onClick: () => {
issuehand(row)
issuehand()
} },
{ default: () => '下发'}
))
@ -498,7 +439,7 @@ const columns = [
// ))
// }
if(hasPermission('biz:drawingFile:edit')){
if(hasPermission('biz:ncCode:edit')){
buttons.push(h(NButton, {
size: 'small',
type:'primary',
@ -509,7 +450,7 @@ const columns = [
{ default: () => '编辑'}
))
}
if(hasPermission('biz:drawingFile:remove')){
if(hasPermission('biz:ncCode:remove')){
buttons.push(h(NButton, {
size: 'small',
type:'error',
@ -517,16 +458,13 @@ const columns = [
onClick: () => {
dialog.warning({
title: '警告',
content: `你确定删除图文编号为:${row.drawingCode}的数据`,
content: `你确定删除NC代码编号为:${row.ncCode}的数据`,
positiveText: '确定',
negativeText: '取消',
//draggable: true,
onPositiveClick: () => {
deleteDrawing(row.id).then(() => {
message.success('操作成功')
setTimeout(() => {
search()
},1000)
})
},
@ -560,9 +498,7 @@ function search() {
//
function reset() {
searchForm.drawingCode = ''
searchForm.drawingName = ''
searchForm.drawingVersion = ''
}
//
@ -590,6 +526,7 @@ function handlePageSizeChange(pageSize: number) {
}
// //
// async function loadDictOptions() {
// //qcCancelLoading = true
@ -599,49 +536,6 @@ function handlePageSizeChange(pageSize: number) {
// }catch {}
// }
//
//
//
let loadingRef = ref(false)
let yglist = ref<any>([])
function slehand(v?:any) {
loadingRef.value = true
basicProcessPlanApi.page({
page: 1,
pageSize: 200,
name: v,
}).then((rps:any) =>{
if(rps.list && rps.list.length > 0){
yglist.value = rps.list.map((n:any) => {
return {
label:n.name,
value:n.id //`${n.id}-${n.code}-${n.name}`
}
})
}
loadingRef.value = false
}).catch(() => {
loadingRef.value = false
})
}
function updatesle(v:any) {
if(v){
//let varr = v.split('-')
formData.processId = v+''
// formData.processRouteStepId = varr[0]
// formData.processCode = varr[1]
// formData.processName = varr[2]
}else{
formData.processId = ''
// formData.processRouteStepId = ''
// formData.processCode = ''
// formData.processName = ''
}
//formData.processRouteStepId = v
}
//
let addModel = ref(false)
@ -650,31 +544,25 @@ const addformRef = ref()
let formData = reactive<any>({
id:'',
drawingCode:'', //
processId:'', //ID
drawingType:0, //0 1
fileId:'', //id
status:1, //1- 0-
// drawingName:'', //
// drawingVersion:'', //
// processCode:'', //
// processName:'', //
// filePath:'', //
// fileName:'', //
// fileSize:'', //
// fileType:'', //
// plmDocId:'', //PLMID
// plmVersion:'', //PLM
// plmStatus:'', //PLM
// isIssued:1, //1- 0-
// issueTime:'', //
// issueBy:'', //
// remark:'' //
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' },
{ required: true, message: '请输入图纸编号', trigger: 'blur' },
// {
// validator(rule:any,value: any) {
// if(value > pauseform.qcNum){
@ -685,105 +573,60 @@ const addrules = {
// trigger: ['blur']
// }
],
processId:[
{ required: true, message: '请选择工序', trigger: 'blur' }
drawingName:[
{ required: true, message: '请输入图纸名称', trigger: 'blur' }
],
fileId:[
{ required: true, message: '请上传文件', trigger: 'blur' }
ncContent:[
{ required: true, message: '请输入NC代码内容', trigger: 'blur' }
]
}
//
let flist = ref<any>([])
function flchang(n:any) {
let v = JSON.parse(n.event.target.responseText)
if(v.data && v.data.id){
formData.fileId = formData.fileId + v.data.id+','
}
console.log(formData.fileId)
}
let isstype = ref<any>(1)
let selval = ref<any>('')
const cztype = reactive<any>({
1:'新增',
2:'编辑'
})
function addhand(type:any,row?:any) {
addModel.value = true
formData.value?.restoreValidation()
isstype.value = type
if(row){
//slehand('')
formData.id = row.id
formData.drawingCode = row.drawingCode
formData.processId = row.processId
formData.drawingType = row.drawingType
formData.fileId = row.fileId+','
selval.value = row.processId
flist.value.splice(0)
multifilelist(row.fileId).then(rps => {
if(rps && rps.length > 0){
// flist.value.push({
// id: rps.id,
// name: rps.originalName,
// status: 'finished', // 'finished'
// url: rps.url, //
// })
flist.value = rps.map((n:any) => {
return {
id: n.id,
name: n.originalName,
status: 'finished', // 'finished'
url: n.url,
}
})
}
})
// 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
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.processId = ''
formData.drawingType = 0
formData.status = 1
formData.fileId = ''
flist.value.splice(0)
// 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 = 1
// formData.remark = ''
generateDFCode().then(rps => {
formData.drawingCode = rps
})
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(){
@ -796,9 +639,8 @@ function addEdi(){
function savehand() {
addformRef.value?.validate((e:any) => {
if (!e) {
formData.fileId = formData.fileId.replace(/,$/,'')
addEdi().then(() => {
message.success(isstype.value == 1?'新增成功':'修改成功')
message.success(isstype.value == 1?'新增':'修改')
setTimeout(() => {
getlist()
addModel.value = false
@ -855,136 +697,37 @@ const issaddrules = {
}
// function renderlabe() {}
// function issuehand() {
// issueModel.value = true
// // if(chearr.value.length > 0){
// // batchIssue(chearr.value).then(() => {
// // message.success('')
// // })
// // }else{
// // message.error('')
// // }
// }
let treeData:any = []
let xfsbvalue = ref<Array<string | number>>([])
let renderSourceList:any = ''
let options = ref<any>([]) //flattenTree(createData())
function flattenTree(list: undefined | any[]) {
const result: any[] = []
function flatten(_list: any[] = []) {
_list.forEach((item) => {
//result.push(item)
if(item.childList){
flatten(item.childList)
}else{
result.push(item)
}
})
}
flatten(list)
return result
}
let issarr:any[] = []
let imgCode = ref<any>('')
function tranupdate(v:any) {
issarr = []
if(v.length > 0){
v.forEach((n:any) => {
if(n.split('-').length == 3){
issarr.push(n)
}
})
}
}
let imgid = ''
function issuehand(row:any) {
function renderlabe() {}
function issuehand() {
issueModel.value = true
issarr = []
imgid = row.id
imgCode.value = row.drawingCode
}
function isssavehand() {
if(issarr.length > 0){
drawingIssue({
id:imgid,
twCode:issarr
}).then(() => {
message.success('操作成功')
setTimeout(() => {
getlist()
issueModel.value = false
},1500)
})
}else{
message.warning('请选择设备')
}
// 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)
// }
// })
// }
function handleExport() {
exportdraFile({}).then(rps => {
const url = window.URL.createObjectURL(rps)
const link = document.createElement('a')
link.href = url
link.download = '图文数据.xlsx'
link.click()
window.URL.revokeObjectURL(url)
function isssavehand() {
issformRef.value?.validate((e:any) => {
if (!e) {
message.success('操作成功')
setTimeout(() => {
getlist()
issueModel.value = false
},1500)
}
})
}
getlist()
onMounted(() => {
//
opertree().then(rps => {
treeData = rps
options.value = flattenTree(treeData)
renderSourceList = function (obj:any) {
return h(NTree, {
style: 'margin: 0 4px;',
keyField: 'value',
checkable: true,
selectable: false,
blockLine: true,
checkOnClick: true,
childrenField:'childList',
data: treeData,
cascade:true,
defaultExpandAll:true,
pattern:obj.pattern,
checkedKeys: xfsbvalue.value,
onUpdateCheckedKeys: (checkedKeys:any) => {
obj.onCheck(checkedKeys)
}
})
}
})
//loadDictOptions()
})

View File

@ -16,7 +16,7 @@ export default defineConfig({
emptyOutDir: true
},
server: {
// host:'192.168.12.11', //true,
host: true,
port: 3000,
proxy: {
'/api': {