Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
06b08eb7
提交
06b08eb7
authored
11月 07, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(qualityins/index.vue): 修改:质检报告_增加编辑操作_增加创建人修改人创建时间列_修复新增表单错误提示合理性
上级
e4295362
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
162 行增加
和
79 行删除
+162
-79
qualityIns.js
src/api/licenses/qualityIns.js
+8
-0
index.vue
src/views/licenses/qualityIns/index.vue
+154
-79
没有找到文件。
src/api/licenses/qualityIns.js
浏览文件 @
06b08eb7
...
@@ -16,6 +16,14 @@ export const postQualityIns = (data) => {
...
@@ -16,6 +16,14 @@ export const postQualityIns = (data) => {
data
data
})
})
}
}
// 修改,质检报告
export
const
putQualityIns
=
(
data
)
=>
{
return
request
({
url
:
'/operation/zzhao/core/proQuality/put'
,
method
:
'PUT'
,
data
})
}
// 料号查询品名
// 料号查询品名
export
const
getProductNameByCode
=
(
prdCode
)
=>
{
export
const
getProductNameByCode
=
(
prdCode
)
=>
{
...
...
src/views/licenses/qualityIns/index.vue
浏览文件 @
06b08eb7
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
<el-button
type=
"primary"
<el-button
type=
"primary"
plain
plain
icon=
"Plus"
icon=
"Plus"
@
click=
"
dialogVisible = true
"
>
@
click=
"
createClick
"
>
新增
新增
</el-button>
</el-button>
</el-col>
</el-col>
...
@@ -52,16 +52,17 @@
...
@@ -52,16 +52,17 @@
v-loading=
"loading"
>
v-loading=
"loading"
>
<el-table-column
prop=
"prdCode"
<el-table-column
prop=
"prdCode"
label=
"料号"
label=
"料号"
width=
"1
8
0"
/>
width=
"1
4
0"
/>
<el-table-column
prop=
"prdName"
<el-table-column
prop=
"prdName"
label=
"产品名称"
/>
label=
"产品名称"
width=
"240"
/>
<el-table-column
prop=
"manufactureBatchNo"
<el-table-column
prop=
"manufactureBatchNo"
label=
"批号"
/>
label=
"批号"
width=
"160"
/>
<el-table-column
prop=
"manufacturersName"
<el-table-column
prop=
"manufacturersName"
label=
"厂家"
/>
label=
"厂家"
/>
<el-table-column
prop=
"qualityUrl"
<el-table-column
prop=
"qualityUrl"
label=
"质量检测报告"
label=
"质量检测报告"
>
width=
"180"
>
<template
#
default=
"
{ row }">
<template
#
default=
"
{ row }">
<el-link
v-if=
"row.qualityUrl"
<el-link
v-if=
"row.qualityUrl"
type=
"primary"
type=
"primary"
...
@@ -72,8 +73,28 @@
...
@@ -72,8 +73,28 @@
</
template
>
</
template
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"shipDate"
<el-table-column
prop=
"shipDate"
label=
"发货时间"
label=
"发货时间"
/>
width=
"180"
/>
<el-table-column
prop=
"createTime"
label=
"创建时间"
>
<
template
#
default=
"{ row }"
>
{{
parseTime
(
row
.
createTime
)
}}
</
template
>
</el-table-column>
<!-- 创建人 -->
<el-table-column
prop=
"createBy"
label=
"创建人"
/>
<!-- 修改者 -->
<el-table-column
prop=
"updateBy"
label=
"修改人"
/>
<el-table-column
label=
"操作"
>
<
template
#
default=
"{ row }"
>
<el-button
type=
"primary"
text
@
click=
"handleEditClick(row)"
>
编辑
</el-button>
</
template
>
</el-table-column>
</el-table>
</el-table>
<!-- 分页 -->
<!-- 分页 -->
<pagination
:total=
"total"
<pagination
:total=
"total"
...
@@ -81,7 +102,7 @@
...
@@ -81,7 +102,7 @@
v-model:limit=
"queryParams.pageSize"
v-model:limit=
"queryParams.pageSize"
@
pagination=
"getList"
/>
@
pagination=
"getList"
/>
<!-- 新增弹窗 -->
<!-- 新增弹窗 -->
<el-dialog
title=
"新增
"
<el-dialog
:title=
"edit ? '编辑' : '新增'
"
v-model=
"dialogVisible"
v-model=
"dialogVisible"
draggable
draggable
overflow
>
overflow
>
...
@@ -126,10 +147,11 @@
...
@@ -126,10 +147,11 @@
ref=
"uploadRef"
ref=
"uploadRef"
class=
"upload-demo"
class=
"upload-demo"
action=
"#"
action=
"#"
accept=
"application/pdf,
image/*
"
accept=
"application/pdf,
.jpg, .jpeg, .png, .webp, .zip, .rar, .7z
"
:http-request=
"httpRequestFn"
:http-request=
"httpRequestFn"
:limit=
"1"
:limit=
"1"
:on-exceed=
"handleExceed"
>
:on-exceed=
"handleExceed"
@
remove=
"handleRemove"
>
<el-button
size=
"small"
<el-button
size=
"small"
type=
"primary"
>
type=
"primary"
>
点击上传
点击上传
...
@@ -147,7 +169,6 @@
...
@@ -147,7 +169,6 @@
</el-button>
</el-button>
</
template
>
</
template
>
</el-dialog>
</el-dialog>
<!-- 图片预览弹窗 -->
<!-- 图片预览弹窗 -->
<el-dialog
v-model=
"imagePreviewVisible"
<el-dialog
v-model=
"imagePreviewVisible"
title=
"质量检测报告预览"
title=
"质量检测报告预览"
...
@@ -167,26 +188,20 @@
...
@@ -167,26 +188,20 @@
</template>
</template>
<
script
setup
>
<
script
setup
>
import
{
getQualityInsPageList
,
uploadFileToOSSAPI
,
postQualityIns
,
getProductNameByCode
}
from
'@/api'
import
{
getQualityInsPageList
,
uploadFileToOSSAPI
,
postQualityIns
,
getProductNameByCode
,
putQualityIns
}
from
'@/api'
import
useUserStore
from
'@/store/modules/user'
import
useUserStore
from
'@/store/modules/user'
import
{
v4
as
uuidv4
}
from
'uuid'
import
{
v4
as
uuidv4
}
from
'uuid'
import
{
getFileTypeExt
,
parseTime
}
from
'@/utils'
import
{
getFileTypeExt
,
parseTime
}
from
'@/utils'
const
{
proxy
}
=
getCurrentInstance
()
const
{
proxy
}
=
getCurrentInstance
()
/*************** 查询列表 ***************/
const
queryParams
=
reactive
({
const
queryParams
=
reactive
({
pageNum
:
1
,
pageNum
:
1
,
pageSize
:
10
,
pageSize
:
10
,
})
})
const
showSearch
=
ref
(
true
)
const
showSearch
=
ref
(
true
)
// 根据料号获取品名
const
getPrdName
=
async
()
=>
{
const
{
data
}
=
await
getProductNameByCode
(
formData
.
prdCode
)
formData
.
prdName
=
data
?.
prdName
||
''
}
const
tableList
=
ref
([])
const
tableList
=
ref
([])
const
total
=
ref
(
0
)
const
total
=
ref
(
0
)
const
loading
=
ref
(
false
)
const
loading
=
ref
(
false
)
...
@@ -207,6 +222,17 @@ const getList = async () => {
...
@@ -207,6 +222,17 @@ const getList = async () => {
}
}
getList
()
getList
()
/*************** 新增/编辑 ***************/
const
dialogVisible
=
ref
(
false
)
const
formData
=
reactive
({
fileList
:
[],
})
// 根据料号获取品名
const
getPrdName
=
async
()
=>
{
const
{
data
}
=
await
getProductNameByCode
(
formData
.
prdCode
)
formData
.
prdName
=
data
?.
prdName
||
''
proxy
.
$refs
.
formRef
.
validateField
(
'prdName'
)
}
const
rules
=
reactive
({
const
rules
=
reactive
({
prdCode
:
[
prdCode
:
[
{
required
:
true
,
message
:
'请输入料号'
,
trigger
:
'blur'
},
{
required
:
true
,
message
:
'请输入料号'
,
trigger
:
'blur'
},
...
@@ -222,64 +248,8 @@ const rules = reactive({
...
@@ -222,64 +248,8 @@ const rules = reactive({
],
],
fileList
:
[
fileList
:
[
{
required
:
true
,
message
:
'请上传质量检测报告'
,
trigger
:
'change'
},
{
required
:
true
,
message
:
'请上传质量检测报告'
,
trigger
:
'change'
},
],
]
})
const
dialogVisible
=
ref
(
false
)
const
formData
=
reactive
({
fileList
:
[],
})
})
// 图片预览相关状态
const
imagePreviewVisible
=
ref
(
false
)
const
previewImageUrl
=
ref
(
''
)
// 判断文件类型
const
isImageFile
=
(
url
)
=>
{
if
(
!
url
)
return
false
const
imageExtensions
=
[
'.png'
,
'.jpg'
,
'.jpeg'
,
'.gif'
,
'.bmp'
,
'.webp'
,
'.svg'
]
return
imageExtensions
.
some
(
ext
=>
url
.
toLowerCase
().
includes
(
ext
))
}
const
isPdfFile
=
(
url
)
=>
{
if
(
!
url
)
return
false
return
url
.
toLowerCase
().
includes
(
'.pdf'
)
}
// 获取链接文本
const
getReportLinkText
=
(
url
)
=>
{
if
(
isImageFile
(
url
))
{
return
'预览图片'
}
else
if
(
isPdfFile
(
url
))
{
return
'查看报告'
}
else
{
return
'查看报告'
}
}
// 处理报告点击事件
const
handleReportClick
=
(
url
)
=>
{
if
(
isImageFile
(
url
))
{
// 图片文件:预览
previewImage
(
url
)
}
else
if
(
isPdfFile
(
url
))
{
// PDF文件:打开新链接
// 把 url 的域名替换掉,改成自己的然后拼接原来的资源路径
const
originDomain
=
import
.
meta
.
env
.
VITE_APP_OSS_ORIGIN_DOMAIN
const
customDomain
=
import
.
meta
.
env
.
VITE_APP_OSS_CUSTOM_DOMAIN
url
=
url
.
replace
(
originDomain
,
customDomain
)
window
.
open
(
url
,
'_blank'
)
}
else
{
// 其他文件类型:默认打开新链接
window
.
open
(
url
,
'_blank'
)
}
}
// 预览图片方法
const
previewImage
=
(
url
)
=>
{
previewImageUrl
.
value
=
url
imagePreviewVisible
.
value
=
true
}
// 取消
// 取消
const
cancelForm
=
()
=>
{
const
cancelForm
=
()
=>
{
dialogVisible
.
value
=
false
dialogVisible
.
value
=
false
...
@@ -287,6 +257,26 @@ const cancelForm = () => {
...
@@ -287,6 +257,26 @@ const cancelForm = () => {
formData
.
fileList
=
[]
formData
.
fileList
=
[]
proxy
.
$refs
.
formRef
.
resetFields
()
proxy
.
$refs
.
formRef
.
resetFields
()
}
}
// 重置表单
const
resetForm
=
()
=>
{
formData
.
fileList
=
[]
edit
.
value
=
false
formData
.
zpqId
=
''
formData
.
prdCode
=
''
formData
.
prdName
=
''
formData
.
manufactureBatchNo
=
''
formData
.
shipDate
=
''
}
// 新增-按钮
const
createClick
=
()
=>
{
resetForm
()
edit
.
value
=
false
dialogVisible
.
value
=
true
nextTick
(()
=>
{
// 清除校验信息
proxy
.
$refs
.
formRef
.
clearValidate
()
})
}
// 提交
// 提交
const
submitForm
=
async
()
=>
{
const
submitForm
=
async
()
=>
{
proxy
.
$refs
.
formRef
.
validate
(
async
(
valid
)
=>
{
proxy
.
$refs
.
formRef
.
validate
(
async
(
valid
)
=>
{
...
@@ -297,16 +287,21 @@ const submitForm = async () => {
...
@@ -297,16 +287,21 @@ const submitForm = async () => {
...
formData
,
...
formData
,
qualityUrl
:
formData
.
fileList
[
0
]?.
url
,
qualityUrl
:
formData
.
fileList
[
0
]?.
url
,
}
}
// 编辑
if
(
edit
.
value
)
{
await
putQualityIns
(
formDataToSubmit
)
}
else
{
await
postQualityIns
(
formDataToSubmit
)
await
postQualityIns
(
formDataToSubmit
)
}
proxy
.
$message
({
proxy
.
$message
({
message
:
'新增成功'
,
message
:
edit
.
value
?
'修改成功'
:
'新增成功'
,
type
:
'success'
,
type
:
'success'
,
})
})
getList
()
getList
()
// 清空表单
// 清空表单
formData
.
fileList
=
[]
formData
.
fileList
=
[]
proxy
.
$refs
.
formRef
.
resetFields
()
proxy
.
$refs
.
formRef
.
resetFields
()
}
else
{
edit
.
value
=
false
}
}
})
})
}
}
...
@@ -332,6 +327,86 @@ const handleExceed = async (files) => {
...
@@ -332,6 +327,86 @@ const handleExceed = async (files) => {
formData
.
fileList
=
[]
formData
.
fileList
=
[]
httpRequestFn
({
file
})
httpRequestFn
({
file
})
}
}
// 编辑状态
const
edit
=
ref
(
false
)
// 编辑-点击
const
handleEditClick
=
(
row
)
=>
{
edit
.
value
=
true
formData
.
zpqId
=
row
.
zpqId
formData
.
prdCode
=
row
.
prdCode
formData
.
prdName
=
row
.
prdName
formData
.
manufactureBatchNo
=
row
.
manufactureBatchNo
formData
.
shipDate
=
row
.
shipDate
formData
.
fileList
=
[{
name
:
row
.
qualityUrl
.
split
(
'/'
).
pop
(),
url
:
row
.
qualityUrl
}]
dialogVisible
.
value
=
true
nextTick
(()
=>
{
proxy
.
$refs
.
formRef
.
validateField
(
'fileList'
)
})
}
// 删除文件
const
handleRemove
=
(
file
,
fileList
)
=>
{
formData
.
fileList
=
fileList
}
/*************** 附件类型/预览 ***************/
// 图片预览相关状态
const
imagePreviewVisible
=
ref
(
false
)
const
previewImageUrl
=
ref
(
''
)
// 判断文件类型
const
isImageFile
=
(
url
)
=>
{
if
(
!
url
)
return
false
const
imageExtensions
=
[
'.png'
,
'.jpg'
,
'.jpeg'
,
'.webp'
]
return
imageExtensions
.
some
(
ext
=>
url
.
toLowerCase
().
includes
(
ext
))
}
const
isPdfFile
=
(
url
)
=>
{
if
(
!
url
)
return
false
return
url
.
toLowerCase
().
includes
(
'.pdf'
)
}
const
isZipFile
=
(
url
)
=>
{
if
(
!
url
)
return
false
const
zipExtensions
=
[
'.zip'
,
'.rar'
,
'.7z'
]
return
zipExtensions
.
some
(
ext
=>
url
.
toLowerCase
().
includes
(
ext
))
}
// 获取链接文本
const
getReportLinkText
=
(
url
)
=>
{
if
(
isImageFile
(
url
))
{
return
'预览图片'
}
else
if
(
isPdfFile
(
url
))
{
return
'查看报告'
}
else
if
(
isZipFile
(
url
))
{
return
'下载压缩包'
}
else
{
return
'查看文件'
}
}
// 处理报告点击事件
const
handleReportClick
=
(
url
)
=>
{
if
(
isImageFile
(
url
))
{
// 图片文件:预览
previewImage
(
url
)
}
else
if
(
isPdfFile
(
url
))
{
// PDF文件:打开新链接
// 把 url 的域名替换掉,改成自己的然后拼接原来的资源路径
const
originDomain
=
import
.
meta
.
env
.
VITE_APP_OSS_ORIGIN_DOMAIN
const
customDomain
=
import
.
meta
.
env
.
VITE_APP_OSS_CUSTOM_DOMAIN
url
=
url
.
replace
(
originDomain
,
customDomain
)
window
.
open
(
url
,
'_blank'
)
}
else
{
// 其他文件类型:默认打开新链接
window
.
open
(
url
,
'_blank'
)
}
}
// 预览图片方法
const
previewImage
=
(
url
)
=>
{
previewImageUrl
.
value
=
url
imagePreviewVisible
.
value
=
true
}
</
script
>
</
script
>
<
style
scoped
<
style
scoped
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论