安全管理以及质量管理下的模块增删改查功能
This commit is contained in:
parent
96251e4c81
commit
498899c1a9
26
src/api/quality_accept.ts
Normal file
26
src/api/quality_accept.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量验收列表
|
||||
export function qualityacceptLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_accept/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量验收
|
||||
export function qualityacceptAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_accept/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量验收
|
||||
export function qualityacceptEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_accept/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量验收
|
||||
export function qualityacceptDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_accept/delete', params })
|
||||
}
|
||||
|
||||
// 质量验收详情
|
||||
export function qualityacceptDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_accept/detail', params })
|
||||
}
|
26
src/api/quality_accident.ts
Normal file
26
src/api/quality_accident.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量事故列表
|
||||
export function qualityaccidentLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_accident/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量事故
|
||||
export function qualityaccidentAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_accident/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量事故
|
||||
export function qualityaccidentEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_accident/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量事故
|
||||
export function qualityaccidentDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_accident/delete', params })
|
||||
}
|
||||
|
||||
// 质量事故详情
|
||||
export function qualityaccidentDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_accident/detail', params })
|
||||
}
|
26
src/api/quality_check.ts
Normal file
26
src/api/quality_check.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量检查列表
|
||||
export function qualitycheckLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_check/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量检查
|
||||
export function qualitycheckAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_check/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量检查
|
||||
export function qualitycheckEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_check/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量检查
|
||||
export function qualitycheckDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_check/delete', params })
|
||||
}
|
||||
|
||||
// 质量检查详情
|
||||
export function qualitycheckDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_check/detail', params })
|
||||
}
|
26
src/api/quality_check_nature.ts
Normal file
26
src/api/quality_check_nature.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 检查性质列表
|
||||
export function qualitychecknatureLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_check_nature/lists', params })
|
||||
}
|
||||
|
||||
// 添加检查性质
|
||||
export function qualitychecknatureAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_check_nature/add', params })
|
||||
}
|
||||
|
||||
// 编辑检查性质
|
||||
export function qualitychecknatureEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_check_nature/edit', params })
|
||||
}
|
||||
|
||||
// 删除检查性质
|
||||
export function qualitychecknatureDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_check_nature/delete', params })
|
||||
}
|
||||
|
||||
// 检查性质详情
|
||||
export function qualitychecknatureDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_check_nature/detail', params })
|
||||
}
|
26
src/api/quality_detection.ts
Normal file
26
src/api/quality_detection.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量检测列表
|
||||
export function qualitydetectionLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_detection/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量检测
|
||||
export function qualitydetectionAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_detection/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量检测
|
||||
export function qualitydetectionEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_detection/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量检测
|
||||
export function qualitydetectionDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_detection/delete', params })
|
||||
}
|
||||
|
||||
// 质量检测详情
|
||||
export function qualitydetectionDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_detection/detail', params })
|
||||
}
|
26
src/api/quality_detection_temp.ts
Normal file
26
src/api/quality_detection_temp.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量检测模板列表
|
||||
export function qualitydetectiontempLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_detection_temp/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量检测模板
|
||||
export function qualitydetectiontempAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_detection_temp/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量检测模板
|
||||
export function qualitydetectiontempEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_detection_temp/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量检测模板
|
||||
export function qualitydetectiontempDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_detection_temp/delete', params })
|
||||
}
|
||||
|
||||
// 质量检测模板详情
|
||||
export function qualitydetectiontempDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_detection_temp/detail', params })
|
||||
}
|
26
src/api/quality_event.ts
Normal file
26
src/api/quality_event.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量事件列表
|
||||
export function qualityeventLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_event/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量事件
|
||||
export function qualityeventAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_event/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量事件
|
||||
export function qualityeventEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_event/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量事件
|
||||
export function qualityeventDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_event/delete', params })
|
||||
}
|
||||
|
||||
// 质量事件详情
|
||||
export function qualityeventDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_event/detail', params })
|
||||
}
|
26
src/api/quality_mbo.ts
Normal file
26
src/api/quality_mbo.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量目标列表
|
||||
export function qualitymboLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_mbo/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量目标
|
||||
export function qualitymboAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_mbo/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量目标
|
||||
export function qualitymboEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_mbo/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量目标
|
||||
export function qualitymboDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_mbo/delete', params })
|
||||
}
|
||||
|
||||
// 质量目标详情
|
||||
export function qualitymboDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_mbo/detail', params })
|
||||
}
|
26
src/api/quality_modify.ts
Normal file
26
src/api/quality_modify.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量整改列表
|
||||
export function qualitymodifyLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_modify/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量整改
|
||||
export function qualitymodifyAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_modify/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量整改
|
||||
export function qualitymodifyEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_modify/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量整改
|
||||
export function qualitymodifyDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_modify/delete', params })
|
||||
}
|
||||
|
||||
// 质量整改详情
|
||||
export function qualitymodifyDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_modify/detail', params })
|
||||
}
|
26
src/api/quality_professional_category.ts
Normal file
26
src/api/quality_professional_category.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 专业类别列表
|
||||
export function professionalcategoryLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_professional_category/lists', params })
|
||||
}
|
||||
|
||||
// 添加专业类别
|
||||
export function professionalcategoryAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_professional_category/add', params })
|
||||
}
|
||||
|
||||
// 编辑专业类别
|
||||
export function professionalcategoryEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_professional_category/edit', params })
|
||||
}
|
||||
|
||||
// 删除专业类别
|
||||
export function professionalcategoryDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_professional_category/delete', params })
|
||||
}
|
||||
|
||||
// 专业类别详情
|
||||
export function professionalcategoryDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_professional_category/detail', params })
|
||||
}
|
26
src/api/quality_specification.ts
Normal file
26
src/api/quality_specification.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量规范列表
|
||||
export function qualityspecificationLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_specification/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量规范
|
||||
export function qualityspecificationAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_specification/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量规范
|
||||
export function qualityspecificationEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_specification/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量规范
|
||||
export function qualityspecificationDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_specification/delete', params })
|
||||
}
|
||||
|
||||
// 质量规范详情
|
||||
export function qualityspecificationDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_specification/detail', params })
|
||||
}
|
26
src/api/quality_supervise.ts
Normal file
26
src/api/quality_supervise.ts
Normal file
@ -0,0 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 质量监督列表
|
||||
export function qualitysuperviseLists(params: any) {
|
||||
return request.get({ url: '/quality.quality_supervise/lists', params })
|
||||
}
|
||||
|
||||
// 添加质量监督
|
||||
export function qualitysuperviseAdd(params: any) {
|
||||
return request.post({ url: '/quality.quality_supervise/add', params })
|
||||
}
|
||||
|
||||
// 编辑质量监督
|
||||
export function qualitysuperviseEdit(params: any) {
|
||||
return request.post({ url: '/quality.quality_supervise/edit', params })
|
||||
}
|
||||
|
||||
// 删除质量监督
|
||||
export function qualitysuperviseDelete(params: any) {
|
||||
return request.post({ url: '/quality.quality_supervise/delete', params })
|
||||
}
|
||||
|
||||
// 质量监督详情
|
||||
export function qualitysuperviseDetail(params: any) {
|
||||
return request.get({ url: '/quality.quality_supervise/detail', params })
|
||||
}
|
@ -1,25 +0,0 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全规范列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全规范
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全规范
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全规范
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
}
|
||||
|
||||
// 安全规范详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
}
|
25
src/api/safety_emergency_plan.ts
Normal file
25
src/api/safety_emergency_plan.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import request from '@/utils/request'
|
||||
// 应急预案列表
|
||||
export function safetyemergencyplanLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_emergency_plan/lists', params })
|
||||
}
|
||||
|
||||
// 添加应急预案
|
||||
export function safetyemergencyplanAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_emergency_plan/add', params })
|
||||
}
|
||||
|
||||
// 编辑应急预案
|
||||
export function safetyemergencyplanEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_emergency_plan/edit', params })
|
||||
}
|
||||
|
||||
// 删除应急预案
|
||||
export function safetyemergencyplanDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_emergency_plan/delete', params })
|
||||
}
|
||||
|
||||
// 应急预案详情
|
||||
export function safetyemergencyplanDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_emergency_plan/detail', params })
|
||||
}
|
@ -1,25 +1,25 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全规范列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
// 安全评估列表
|
||||
export function safetyevaluateLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_evaluate/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全规范
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
// 添加安全评估
|
||||
export function safetyevaluateAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_evaluate/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全规范
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
// 编辑安全评估
|
||||
export function safetyevaluateEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_evaluate/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全规范
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
// 删除安全评估
|
||||
export function safetyevaluateDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_evaluate/delete', params })
|
||||
}
|
||||
|
||||
// 安全规范详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
// 安全评估详情
|
||||
export function safetyevaluateDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_evaluate/detail', params })
|
||||
}
|
@ -1,25 +1,26 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全规范列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
export function safetyeventLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_event/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全规范
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
export function safetyeventAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_event/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全规范
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
export function safetyeventEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_event/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全规范
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
export function safetyeventDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_event/delete', params })
|
||||
}
|
||||
|
||||
|
||||
// 安全规范详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
export function safetyeventDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_event/detail', params })
|
||||
}
|
@ -1,25 +1,25 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全规范列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
// 危险源列表
|
||||
export function safetyhazardLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_hazard/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全规范
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
// 添加危险源
|
||||
export function safetyhazardAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_hazard/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全规范
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
// 编辑危险源
|
||||
export function safetyhazardEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_hazard/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全规范
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
// 删除危险源
|
||||
export function safetyhazardDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_hazard/delete', params })
|
||||
}
|
||||
|
||||
// 安全规范详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
// 危险源详情
|
||||
export function safetyhazardDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_hazard/detail', params })
|
||||
}
|
@ -1,25 +1,25 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全规范列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
// 安全生产月表列表
|
||||
export function safetyproductmonthLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_product_month/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全规范
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
// 添加安全生产月表
|
||||
export function safetyproductmonthAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_product_month/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全规范
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
// 编辑安全生产月表
|
||||
export function safetyproductmonthEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_product_month/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全规范
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
// 删除安全生产月表
|
||||
export function safetyproductmonthDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_product_month/delete', params })
|
||||
}
|
||||
|
||||
// 安全规范详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
// 安全生产月表详情
|
||||
export function safetyproductmonthDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_product_month/detail', params })
|
||||
}
|
@ -1,25 +1,25 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全规范列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
// 安全演练列表
|
||||
export function safetyrehearsalLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_rehearsal/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全规范
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
// 添加安全演练
|
||||
export function safetyrehearsalAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_rehearsal/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全规范
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
// 编辑安全演练
|
||||
export function safetyrehearsalEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_rehearsal/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全规范
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
// 删除安全演练
|
||||
export function safetyrehearsalDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_rehearsal/delete', params })
|
||||
}
|
||||
|
||||
// 安全规范详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
// 安全演练详情
|
||||
export function safetyrehearsalDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_rehearsal/detail', params })
|
||||
}
|
@ -1,25 +1,25 @@
|
||||
import request from '@/utils/request'
|
||||
// 安全监督列表
|
||||
export function apireturnedLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/lists', params })
|
||||
export function safetysuperviseLists(params: any) {
|
||||
return request.get({ url: '/safety.safety_supervise/lists', params })
|
||||
}
|
||||
|
||||
// 添加安全监督
|
||||
export function apireturnedAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/add', params })
|
||||
export function safetysuperviseAdd(params: any) {
|
||||
return request.post({ url: '/safety.safety_supervise/add', params })
|
||||
}
|
||||
|
||||
// 编辑安全监督
|
||||
export function apireturnedEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/edit', params })
|
||||
export function safetysuperviseEdit(params: any) {
|
||||
return request.post({ url: '/safety.safety_supervise/edit', params })
|
||||
}
|
||||
|
||||
// 删除安全监督
|
||||
export function apireturnedDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_standard/delete', params })
|
||||
export function safetysuperviseDelete(params: any) {
|
||||
return request.post({ url: '/safety.safety_supervise/delete', params })
|
||||
}
|
||||
|
||||
// 安全监督详情
|
||||
export function apireturnedDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_standard/detail', params })
|
||||
export function safetysuperviseDetail(params: any) {
|
||||
return request.get({ url: '/safety.safety_supervise/detail', params })
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<div> <el-card>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
||||
<el-tab-pane label="处理意见" name="first" class="demo-tabs-a">
|
||||
<div>当前步骤: 发起工单</div>
|
||||
@ -7,7 +8,7 @@
|
||||
<div>送审步骤: 技术处理</div>
|
||||
<div class="userlist">
|
||||
<div>指定处理人:</div>
|
||||
<div v-for="item in userlist" class="userlist-con">
|
||||
<div v-for="item in userlist1" class="userlist-con">
|
||||
<img src="@/assets/images/no_perms.png" alt="" />
|
||||
{{ item.name }}
|
||||
</div>
|
||||
@ -18,16 +19,17 @@
|
||||
|
||||
<div class="flex user">
|
||||
<div>流程抄送:</div>
|
||||
<div>0人</div>
|
||||
<div>{{ userlist1.length }}人</div>
|
||||
<div @click="dialogVisible = true"><img src="@/assets/images/no_perms.png" alt="" /></div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="流程日志" name="second">暂无流程日志!</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
|
||||
<el-dialog v-model="dialogVisible" title="人员选择器" width="30%" :before-close="handleClose">
|
||||
<div>
|
||||
<el-radio-group v-model="isCollapse" style="margin-bottom: 20px">
|
||||
<el-radio-group v-model="isCollapse" style="margin-bottom: 20px" @change="clckuser">
|
||||
<el-radio-button :label="1">全部人员</el-radio-button>
|
||||
<el-radio-button :label="2">按部门筛选</el-radio-button>
|
||||
<el-radio-button :label="3">按岗位筛选</el-radio-button>
|
||||
@ -36,50 +38,116 @@
|
||||
<div v-if="isCollapse == 1" style="margin-bottom: 20px">
|
||||
<el-input v-model="content" clearable placeholder="搜索人员" />
|
||||
<div style="margin-top: 20px">
|
||||
<el-radio-group v-model="radio">
|
||||
<el-radio :label="3">
|
||||
<div class="radio-con">
|
||||
<div class="radioa">
|
||||
<img src="@/assets/images/no_perms.png" alt="" />
|
||||
<el-checkbox-group v-model="vallist">
|
||||
|
||||
<div v-for="(item, i) in uesrlist" :key="i" class="radiolist">
|
||||
<el-checkbox :label="item">
|
||||
<div class="radio-con">
|
||||
<div class="radioa">
|
||||
<img :src="item.avatar" alt="" />
|
||||
</div>
|
||||
<div class="radiob">
|
||||
<div class="radiob_a">{{ item.name }}</div>
|
||||
<div class="radiob_b">
|
||||
<text v-if="item.org_name.length > 0">{{ item.org_name }}</text>
|
||||
<text v-if="item.dept_name.length > 0">/{{ item.dept_name }}</text>
|
||||
<text v-if="item.job_name.length > 0">/{{ item.job_name }}</text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="radiob">
|
||||
<div class="radiob_a">test</div>
|
||||
<div class="radiob_b">企管宝/市场部/市场员</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-radio><br />
|
||||
</el-radio-group>
|
||||
</el-checkbox>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="isCollapse == 2">
|
||||
<div v-for="item in companylist">
|
||||
<div class="lad">{{ item.name1 }}</div>
|
||||
<div class="lad">
|
||||
<div>{{ item.name2 }}</div>
|
||||
<div>{{ item.name2 }}</div>
|
||||
<div>{{ item.name2 }}</div>
|
||||
<div>{{ item.name2 }}</div>
|
||||
<div v-if="isshow">
|
||||
<div v-for="(item, i) in deparmetlist" :key="i">
|
||||
<div class="lad">{{ i }}</div>
|
||||
<div class="lads">
|
||||
<div class="flex " v-for="(items, k) in item" style="justify-content: space-between;" @click="deparmetclck(items)">
|
||||
<div>{{ items.name }}</div>
|
||||
<div class="Collapsebj">{{ items.admin_num }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
|
||||
|
||||
<!-- <el-input v-model="content" clearable placeholder="搜索人员" style="margin-bottom: 20px;" /> -->
|
||||
|
||||
<el-checkbox-group v-model="vallist">
|
||||
<div v-for="(item, i) in deparmetlist1" :key="i" class="radiolist">
|
||||
<el-checkbox :label="item">
|
||||
<div class="radio-con">
|
||||
<div class="radioa">
|
||||
<img :src="item.avatar" alt="" />
|
||||
</div>
|
||||
<div class="radiob">
|
||||
<div class="radiob_a">{{ item.name }}</div>
|
||||
<div class="radiob_b">
|
||||
<text v-if="item.org_name.length > 0">{{ item.org_name }}</text>
|
||||
<text v-if="item.dept_name.length > 0">/{{ item.dept_name }}</text>
|
||||
<text v-if="item.job_name.length > 0">/{{ item.job_name }}</text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-checkbox>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div v-if="isCollapse == 3">
|
||||
<div>11</div>
|
||||
<div>111</div>
|
||||
<div>11</div>
|
||||
<div>11</div>
|
||||
<div v-if="isshow1">
|
||||
<div class="lads ">
|
||||
<div class="flex " v-for="(item, j) in jobslist" :key="j" style="justify-content: space-between;" @click="gwclck(item)">
|
||||
<div>{{ item.name }}</div>
|
||||
<div class="Collapsebj">{{ item.admin_num }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<!-- <el-input v-model="content" clearable placeholder="搜索人员" style="margin-bottom: 20px;" /> -->
|
||||
|
||||
<el-checkbox-group v-model="vallist">
|
||||
|
||||
<div v-for="(item, i) in jobslist1" :key="i" class="radiolist">
|
||||
<el-checkbox :label="item">
|
||||
<div class="radio-con">
|
||||
<div class="radioa">
|
||||
<img :src="item.avatar" alt="" />
|
||||
</div>
|
||||
<div class="radiob">
|
||||
<div class="radiob_a">{{ item.name }}</div>
|
||||
<div class="radiob_b">
|
||||
<text v-if="item.org_name.length > 0">{{ item.org_name }}</text>
|
||||
<text v-if="item.dept_name.length > 0">/{{ item.dept_name }}</text>
|
||||
<text v-if="item.job_name.length > 0">/{{ item.job_name }}</text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-checkbox>
|
||||
</div>
|
||||
</el-checkbox-group>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="dialogVisible = false"> 已选 </el-button>
|
||||
<el-button type="primary" @click="userclick"> {{ vallist.length > 0 ? '已选' : '未选' }}
|
||||
<text v-if="vallist.length > 0">{{ vallist.length }}</text> </el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
|
||||
import { computed, nextTick, onMounted, reactive, shallowRef, watch } from 'vue'
|
||||
import { getAdminsByAll, getAllDept, getAllJobs, getAdminsByDept, getAdminsByJob } from '@/api/common'
|
||||
const active = ref(0);
|
||||
|
||||
const isCollapse = ref(1);
|
||||
@ -93,7 +161,16 @@ console.log(props.list)
|
||||
// list.splice(0, list.length, ...props.list)
|
||||
const activeName = ref('first')
|
||||
const content = ref('')
|
||||
const userlist = reactive([{ name: 1 }, { name: 1 }, { name: 1 }, { name: 1 }]);
|
||||
const userlist1 = reactive([{ name: 1 }, { name: 1 }, { name: 1 }, { name: 1 }]);
|
||||
|
||||
const uesrlist = reactive([]);
|
||||
const deparmetlist = reactive({})
|
||||
const deparmetlist1 = reactive([])
|
||||
const jobslist = reactive({})
|
||||
const jobslist1 = reactive([])
|
||||
const isshow = ref(true);
|
||||
const isshow1 = ref(true);
|
||||
const vallist = ref([])
|
||||
const companylist = reactive([
|
||||
{
|
||||
name1: "哈哈公司",
|
||||
@ -111,6 +188,78 @@ const companylist = reactive([
|
||||
const next = () => {
|
||||
if (active.value++ > 2) active.value = 0;
|
||||
};
|
||||
|
||||
//人员选择器切换点击
|
||||
const clckuser = (e) => {
|
||||
|
||||
isshow.value = true
|
||||
isshow1.value = true
|
||||
}
|
||||
|
||||
//获取选择的数据
|
||||
const userclick = () => {
|
||||
dialogVisible.value = false
|
||||
// console.log(vallist.value, 9999999999999)
|
||||
userlist1.forEach((user, index) => {
|
||||
Object.assign(user, vallist.value);
|
||||
});
|
||||
|
||||
}
|
||||
// 获取全部人员
|
||||
const getlist = () => {
|
||||
getAdminsByAll().then((res) => {
|
||||
// console.log(res)
|
||||
Object.assign(uesrlist, res)
|
||||
})
|
||||
}
|
||||
|
||||
//获取所有部门
|
||||
const deparmet = () => {
|
||||
getAllDept().then((res) => {
|
||||
console.log(res)
|
||||
Object.assign(deparmetlist, res)
|
||||
})
|
||||
}
|
||||
//获取部门下的人员
|
||||
const deparmetclck = (item: { id: any }) => {
|
||||
console.log(item)
|
||||
getAdminsByDept({ 'dept_id': item.id }).then((res) => {
|
||||
if (res.length > 0) {
|
||||
Object.assign(deparmetlist1, res)
|
||||
isshow.value = false
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
//获取岗位
|
||||
|
||||
const Jobs = () => {
|
||||
getAllJobs().then((res) => {
|
||||
console.log(res)
|
||||
Object.assign(jobslist, res)
|
||||
})
|
||||
}
|
||||
|
||||
//获取岗位下的人员
|
||||
const gwclck = (item: { id: any }) => {
|
||||
|
||||
getAdminsByJob({ 'job_id': item.id }).then((res) => {
|
||||
if (res.length > 0) {
|
||||
Object.assign(jobslist1, res)
|
||||
isshow1.value = false
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
getlist()
|
||||
deparmet()
|
||||
Jobs()
|
||||
})
|
||||
|
||||
const dialogVisible = ref(false);
|
||||
const handleClose = (done: () => void) => {
|
||||
done();
|
||||
@ -129,6 +278,32 @@ const handleClose = (done: () => void) => {
|
||||
}
|
||||
}
|
||||
|
||||
.radiolist {
|
||||
height: 50px;
|
||||
// border: 1px solid red;
|
||||
margin-bottom: 5px;
|
||||
|
||||
.radio-con {
|
||||
display: flex;
|
||||
|
||||
width: 500px;
|
||||
|
||||
.radioa {
|
||||
display: flex;
|
||||
justify-items: center;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.userlist {
|
||||
display: flex;
|
||||
|
||||
@ -153,25 +328,42 @@ const handleClose = (done: () => void) => {
|
||||
}
|
||||
}
|
||||
|
||||
.radio-con {
|
||||
display: flex;
|
||||
width: 500px;
|
||||
|
||||
.radioa {
|
||||
img {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.lad {
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #f7f7f7;
|
||||
|
||||
div {
|
||||
padding: 10px 0;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.Collapsebj {
|
||||
background-color: #3e8ef7;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
border-radius: 6px;
|
||||
color: #f7f7f7;
|
||||
}
|
||||
}
|
||||
|
||||
.lads {
|
||||
padding: 10px 0;
|
||||
|
||||
|
||||
div {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.Collapsebj {
|
||||
background-color: #3e8ef7;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
border-radius: 6px;
|
||||
color: #f7f7f7;
|
||||
}
|
||||
}
|
||||
</style>
|
167
src/views/qualitycontrol/quality_accept/detail.vue
Normal file
167
src/views/qualitycontrol/quality_accept/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
279
src/views/qualitycontrol/quality_accept/edit.vue
Normal file
279
src/views/qualitycontrol/quality_accept/edit.vue
Normal file
@ -0,0 +1,279 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="验收日期" prop="accept_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.accept_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择验收日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="验收类型" prop="type">
|
||||
<el-input v-model="formData.type" clearable placeholder="请输入验收类型" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="验收工程师" prop="engineer">
|
||||
<el-input v-model="formData.engineer" clearable placeholder="请输入验收工程师" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="验收内容" prop="content">
|
||||
<el-input v-model="formData.content" clearable placeholder="请输入验收内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualityacceptAdd, qualityacceptEdit, qualityacceptDetail } from '@/api/quality_accept'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量目标表' : '新增质量目标表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
project_id: "",
|
||||
accept_date: "",
|
||||
type: '',
|
||||
file: '',
|
||||
engineer: "",
|
||||
content: "",
|
||||
remark: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualityacceptDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualityacceptEdit(data)
|
||||
: await qualityacceptAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
148
src/views/qualitycontrol/quality_accept/index.vue
Normal file
148
src/views/qualitycontrol/quality_accept/index.vue
Normal file
@ -0,0 +1,148 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="验收类型" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.type" clearable placeholder="请输入验收类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="验收工程师" prop="engineer">
|
||||
<el-input class="w-[280px]" v-model="queryParams.engineer" clearable placeholder="请输入验收工程师" />
|
||||
</el-form-item>
|
||||
<el-form-item label="验收日期" prop="publish_dep">
|
||||
<el-date-picker v-model="queryParams.accept_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择验收日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_accept/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_accept/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="验收类型" prop="type" show-overflow-tooltip />
|
||||
<el-table-column label="验收日期" prop="accept_date" show-overflow-tooltip />
|
||||
<el-table-column label="验收内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="规范附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_accept/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_accept/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_accept/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualityacceptLists, qualityacceptDelete, qualityacceptDetail } from '@/api/quality_accept'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
accept_date: '',
|
||||
engineer: '',
|
||||
type: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualityacceptLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualityacceptDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualityacceptDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualityacceptDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_accident/detail.vue
Normal file
167
src/views/qualitycontrol/quality_accident/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
303
src/views/qualitycontrol/quality_accident/edit.vue
Normal file
303
src/views/qualitycontrol/quality_accident/edit.vue
Normal file
@ -0,0 +1,303 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目编码" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="事故类型" prop="type">
|
||||
<el-input v-model="formData.type" clearable placeholder="请输入事故类型" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生日期" prop="require">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="设备事故" prop="device_accident">
|
||||
<el-input v-model="formData.device_accident" clearable placeholder="请输入设备事故" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="承包商人员" prop="contractor_user">
|
||||
<el-input v-model="formData.contractor_user" clearable placeholder="请输入承包商人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="非本企业人员" prop="our_company_user">
|
||||
<el-input v-model="formData.our_company_user" clearable placeholder="请输入非本企业人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="本企业人员" prop="not_our_company_user">
|
||||
<el-input v-model="formData.not_our_company_user" clearable placeholder="请输入本企业人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualityaccidentAdd, qualityaccidentEdit, qualityaccidentDetail } from '@/api/quality_accident'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑安全事故表' : '新增安全事故表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: "",
|
||||
name: "",
|
||||
happen_date: "",
|
||||
type: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
device_accident: "",
|
||||
contractor_user: "",
|
||||
not_our_company_user: "",
|
||||
our_company_user: "",
|
||||
content: "",
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualityaccidentDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualityaccidentEdit(data)
|
||||
: await qualityaccidentAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
153
src/views/qualitycontrol/quality_accident/index.vue
Normal file
153
src/views/qualitycontrol/quality_accident/index.vue
Normal file
@ -0,0 +1,153 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
|
||||
|
||||
<el-form-item label="事故类型" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.device_accident" clearable placeholder="请输入事故类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设备事故" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.device_accident" clearable placeholder="请输入设备事故" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="发生日期" prop="require">
|
||||
<el-date-picker class="w-[280px]" v-model="queryParams.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_accident/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_accident/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="发生时间" prop="happen_date" show-overflow-tooltip />
|
||||
<el-table-column label="事故类型" prop="type" show-overflow-tooltip />
|
||||
<el-table-column label="设备事故" prop="device_accident" show-overflow-tooltip />
|
||||
<el-table-column label="承包商人员" prop="contractor_user" show-overflow-tooltip />
|
||||
<el-table-column label="非本企业人员" prop="not_our_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="本企业人员" prop="our_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_accident/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_accident/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualityaccidentLists, qualityaccidentDelete, qualityaccidentDetail } from '@/api/quality_accident'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
|
||||
happen_date: '',
|
||||
device_accident: '',
|
||||
type: '',
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualityaccidentLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualityaccidentDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualityaccidentDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualityaccidentDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_check/detail.vue
Normal file
167
src/views/qualitycontrol/quality_check/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
286
src/views/qualitycontrol/quality_check/edit.vue
Normal file
286
src/views/qualitycontrol/quality_check/edit.vue
Normal file
@ -0,0 +1,286 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input v-model="formData.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查日期" prop="check_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.check_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择检查日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改期限" prop="modify_term">
|
||||
<el-input v-model="formData.modify_term" clearable placeholder="请输入整改期限" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input v-model="formData.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查单位" prop="check_unit">
|
||||
<el-input v-model="formData.check_unit" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改单位" prop="modify_unit">
|
||||
<el-input v-model="formData.modify_unit" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input v-model="formData.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查项" prop="check_item">
|
||||
<el-input v-model="formData.check_item" clearable placeholder="请输入检查项" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="质量隐患" prop="quality_hazards">
|
||||
<el-input v-model="formData.quality_hazards" clearable placeholder="请输入质量隐患" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查结果" prop="check_result">
|
||||
<el-input v-model="formData.check_result" clearable placeholder="请输入检查结果" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitycheckAdd, qualitycheckEdit, qualitycheckDetail } from '@/api/quality_check'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量检查表' : '新增质量检查表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
check_date: '',
|
||||
check_user: '',
|
||||
check_unit: '',
|
||||
check_item: '',
|
||||
check_result: '',
|
||||
modify_unit: '',
|
||||
resp_user: '',
|
||||
modify_term: '',
|
||||
|
||||
check_nature: '',
|
||||
quality_hazards: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
project_name.value = data.project_name
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitycheckDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitycheckEdit(data)
|
||||
: await qualitycheckAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
156
src/views/qualitycontrol/quality_check/index.vue
Normal file
156
src/views/qualitycontrol/quality_check/index.vue
Normal file
@ -0,0 +1,156 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查单位" prop="check_unit">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_unit" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="整改单位" prop="modify_unit">
|
||||
<el-input class="w-[280px]" v-model="queryParams.modify_unit" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_check/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_check/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="检查性质" prop="check_nature" show-overflow-tooltip />
|
||||
<el-table-column label="检查日期" prop="check_date" show-overflow-tooltip />
|
||||
<el-table-column label="整改期限" prop="modify_term" show-overflow-tooltip />
|
||||
<el-table-column label="检查人" prop="check_user" show-overflow-tooltip />
|
||||
<el-table-column label="检查单位" prop="check_unit" show-overflow-tooltip />
|
||||
<el-table-column label="整改单位" prop="modify_unit" show-overflow-tooltip />
|
||||
<el-table-column label="检查项" prop="check_item" show-overflow-tooltip />
|
||||
<el-table-column label="质量隐患" prop="quality_hazards" show-overflow-tooltip />
|
||||
<el-table-column label="检查结果" prop="check_result" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_check/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_check/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_check/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitycheckLists, qualitycheckDelete, qualitycheckDetail } from '@/api/quality_check'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
check_nature: '',
|
||||
check_user: '',
|
||||
check_unit: '',
|
||||
modify_unit: '',
|
||||
resp_user: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitycheckLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualitycheckDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualitycheckDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualitycheckDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_check_nature/detail.vue
Normal file
167
src/views/qualitycontrol/quality_check_nature/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
202
src/views/qualitycontrol/quality_check_nature/edit.vue
Normal file
202
src/views/qualitycontrol/quality_check_nature/edit.vue
Normal file
@ -0,0 +1,202 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="检查性质名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入检查性质名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="创建人" prop="user">
|
||||
<el-input v-model="formData.user" clearable placeholder="请输入创建人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="说明" prop="illustrate">
|
||||
<el-input v-model="formData.illustrate" type="textarea" clearable placeholder="请输入说明" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="创建日期" prop="date">
|
||||
<el-date-picker v-model="formData.date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择创建日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitychecknatureAdd, qualitychecknatureEdit, qualitychecknatureDetail } from '@/api/quality_check_nature'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑检查性质表' : '新增检查性质表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
user: "",
|
||||
illustrate: "",
|
||||
date: '',
|
||||
name: "",
|
||||
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitychecknatureDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitychecknatureEdit(data)
|
||||
: await qualitychecknatureAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
145
src/views/qualitycontrol/quality_check_nature/index.vue
Normal file
145
src/views/qualitycontrol/quality_check_nature/index.vue
Normal file
@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
|
||||
<el-form-item label="检查性质名称" prop="name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入检查性质名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="创建人" prop="user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.user" clearable placeholder="请输入发布部门" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_check_nature/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_check_nature/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="检查性质名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="创建人" prop="user" show-overflow-tooltip />
|
||||
<el-table-column label="说明" prop="illustrate" show-overflow-tooltip />
|
||||
<el-table-column label="创建日期" prop="date" show-overflow-tooltip />
|
||||
|
||||
|
||||
<!-- <el-table-column label="规范附件" prop="file" show-overflow-tooltip /> -->
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_check_nature/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_check_nature/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_check_nature/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitychecknatureLists, qualitychecknatureDelete, qualitychecknatureDetail } from '@/api/quality_check_nature'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
user: '',
|
||||
name: '',
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitychecknatureLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualitychecknatureDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualitychecknatureDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualitychecknatureDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_detection/detail.vue
Normal file
167
src/views/qualitycontrol/quality_detection/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
355
src/views/qualitycontrol/quality_detection/edit.vue
Normal file
355
src/views/qualitycontrol/quality_detection/edit.vue
Normal file
@ -0,0 +1,355 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检测任务" prop="detection_task">
|
||||
<el-input v-model="formData.detection_task" clearable placeholder="请输入检测任务" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="所属阶段" prop="owning_stage">
|
||||
<el-input v-model="formData.owning_stage" clearable placeholder="请输入所属阶段" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input v-model="formData.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="标准工期" prop="standard_duration">
|
||||
<el-input v-model="formData.standard_duration" clearable placeholder="请输入标准工期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="计划开始时间" prop="scheduled_start_time">
|
||||
<el-date-picker v-model="formData.scheduled_start_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划开始时间">
|
||||
</el-date-picker>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="计划结束时间" prop="scheduled_end_time">
|
||||
<el-date-picker v-model="formData.scheduled_end_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择计划结束时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="是否完成" prop="complete">
|
||||
<el-input v-model="formData.complete" clearable placeholder="请输入是否完成" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="实际开始时间" prop="actual_start_time">
|
||||
<el-date-picker v-model="formData.actual_start_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择实际开始时间">
|
||||
</el-date-picker>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="实际结束时间" prop="actual_end_time">
|
||||
<el-date-picker v-model="formData.actual_end_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择实际结束时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资料编号" prop="document_number">
|
||||
<el-input v-model="formData.document_number" clearable placeholder="请输入资料编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资料名称" prop="document_name">
|
||||
<el-input v-model="formData.document_name" clearable placeholder="请输入资料名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="文件稿本" prop="document_manuscript">
|
||||
<el-input v-model="formData.document_manuscript" clearable placeholder="请输入文件稿本" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="是否归档" prop="archiving">
|
||||
<el-input v-model="formData.archiving" clearable placeholder="请输入是否归档" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资料内容要求" prop="data_content_requirements">
|
||||
<el-input v-model="formData.data_content_requirements" clearable placeholder="请输入资料内容要求" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检测情况" prop="detection_situation">
|
||||
<el-input v-model="formData.detection_situation" clearable placeholder="请输入检测情况" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" clearable type="textarea" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitydetectionAdd, qualitydetectionEdit, qualitydetectionDetail } from '@/api/quality_detection'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量检测表' : '新增质量检测表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
project_id: "",
|
||||
detection_task: "",
|
||||
owning_stage: "",
|
||||
resp_user: "",
|
||||
standard_duration: "",
|
||||
scheduled_start_time: "",
|
||||
scheduled_end_time: "",
|
||||
complete: "",
|
||||
actual_start_time: "",
|
||||
actual_end_time: "",
|
||||
document_number: "",
|
||||
document_name: "",
|
||||
document_manuscript: "",
|
||||
archiving: "",
|
||||
data_content_requirements: "",
|
||||
detection_situation: "",
|
||||
remark: "",
|
||||
file: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitydetectionDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitydetectionEdit(data)
|
||||
: await qualitydetectionAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
170
src/views/qualitycontrol/quality_detection/index.vue
Normal file
170
src/views/qualitycontrol/quality_detection/index.vue
Normal file
@ -0,0 +1,170 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="检测任务" prop="detection_task">
|
||||
<el-input class="w-[280px]" v-model="queryParams.detection_task" clearable placeholder="请输入检测任务" />
|
||||
</el-form-item>
|
||||
<el-form-item label="所属阶段" prop="owning_stage">
|
||||
<el-input class="w-[280px]" v-model="queryParams.owning_stage" clearable placeholder="请输入所属阶段" />
|
||||
</el-form-item>
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="标准工期" prop="standard_duration">
|
||||
<el-input class="w-[280px]" v-model="queryParams.standard_duration" clearable placeholder="请输入标准工期" />
|
||||
</el-form-item>
|
||||
<el-form-item label="资料编号" prop="document_number">
|
||||
<el-input class="w-[280px]" v-model="queryParams.document_number" clearable placeholder="请输入资料编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="资料名称" prop="document_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.document_name" clearable placeholder="请输入资料名称" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_detection/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_detection/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="检测任务" prop="detection_task" show-overflow-tooltip />
|
||||
<el-table-column label="所属阶段" prop="owning_stage" show-overflow-tooltip />
|
||||
<el-table-column label="责任人" prop="resp_user" show-overflow-tooltip />
|
||||
<el-table-column label="计划开始时间" prop="scheduled_start_time" show-overflow-tooltip />
|
||||
<el-table-column label="计划结束时间" prop="scheduled_end_time" show-overflow-tooltip />
|
||||
<el-table-column label="是否完成" prop="complete" show-overflow-tooltip />
|
||||
<el-table-column label="实际开始时间" prop="actual_start_time" show-overflow-tooltip />
|
||||
<el-table-column label="实际结束时间" prop="actual_end_time" show-overflow-tooltip />
|
||||
<el-table-column label="资料编号" prop="document_number" show-overflow-tooltip />
|
||||
<el-table-column label="资料名称" prop="document_name" show-overflow-tooltip />
|
||||
<el-table-column label="文件稿本" prop="document_manuscript" show-overflow-tooltip />
|
||||
<el-table-column label="是否归档" prop="archiving" show-overflow-tooltip />
|
||||
<el-table-column label="资料内容要求" prop="data_content_requirements" show-overflow-tooltip />
|
||||
<el-table-column label="检测情况" prop="detection_situation" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
|
||||
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_detection/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_detection/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_detection/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitydetectionLists, qualitydetectionDelete, qualitydetectionDetail } from '@/api/quality_detection'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
standard_duration: '',
|
||||
document_number: '',
|
||||
document_name: '',
|
||||
resp_user: '',
|
||||
owning_stage: '',
|
||||
detection_task: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitydetectionLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualitydetectionDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualitydetectionDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualitydetectionDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_detection_temp/detail.vue
Normal file
167
src/views/qualitycontrol/quality_detection_temp/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
260
src/views/qualitycontrol/quality_detection_temp/edit.vue
Normal file
260
src/views/qualitycontrol/quality_detection_temp/edit.vue
Normal file
@ -0,0 +1,260 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="质量检测节点" prop="node">
|
||||
<el-select class="flex-1" v-model="formData.node" clearable placeholder="请选择质量检测节点">
|
||||
<el-option v-for="(item, index) in dictData.quality_detection_node" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="序号" prop="serial_number">
|
||||
<el-input v-model="formData.serial_number" clearable placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="标准工期" prop="standard_duration">
|
||||
<el-input v-model="formData.standard_duration" clearable placeholder="请输入标准工期" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitydetectiontempAdd, qualitydetectiontempEdit, qualitydetectiontempDetail } from '@/api/quality_detection_temp'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
|
||||
const project_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量检测模板表' : '新增质量检测模板表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
node: "",
|
||||
serial_number: "",
|
||||
standard_duration: '',
|
||||
file: '',
|
||||
remark: "",
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitydetectiontempDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitydetectiontempEdit(data)
|
||||
: await qualitydetectiontempAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
150
src/views/qualitycontrol/quality_detection_temp/index.vue
Normal file
150
src/views/qualitycontrol/quality_detection_temp/index.vue
Normal file
@ -0,0 +1,150 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="序号" prop="serial_number">
|
||||
<el-input class="w-[280px]" v-model="queryParams.serial_number" clearable placeholder="请输入序号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="质量检测节点" prop="node">
|
||||
<el-select v-model="queryParams.node" clearable placeholder="请选择质量检测节点">
|
||||
<el-option v-for="(item, index) in dictData.quality_detection_node" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_detection_temp/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_detection_temp/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="质量检测节点" prop="project_name" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.quality_detection_node" :value="row.node" />
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="序号" prop="serial_number" show-overflow-tooltip />
|
||||
<el-table-column label="标准工期" prop="standard_duration" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
|
||||
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_detection_temp/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_detection_temp/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_detection_temp/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitydetectiontempLists, qualitydetectiontempDelete, qualitydetectiontempDetail } from '@/api/quality_detection_temp'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
serial_number: '',
|
||||
node: '',
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('quality_detection_node')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitydetectiontempLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = awaitqualitydetectiontempDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
awaitqualitydetectiontempDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = awaitqualitydetectiontempDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_event/detail.vue
Normal file
167
src/views/qualitycontrol/quality_event/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
280
src/views/qualitycontrol/quality_event/edit.vue
Normal file
280
src/views/qualitycontrol/quality_event/edit.vue
Normal file
@ -0,0 +1,280 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="事件名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入事件名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="事件类型" prop="type">
|
||||
<el-input v-model="formData.type" clearable placeholder="请输入事件类型" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="happen_date">
|
||||
<el-date-picker v-model="formData.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualityeventAdd, qualityeventEdit, qualityeventDetail } from '@/api/quality_event'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量事件表' : '新增质量事件表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
project_id: "",
|
||||
name: "",
|
||||
type: "",
|
||||
happen_date: '',
|
||||
file: '',
|
||||
content: "",
|
||||
remark: "",
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualityeventDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualityeventEdit(data)
|
||||
: await qualityeventAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
147
src/views/qualitycontrol/quality_event/index.vue
Normal file
147
src/views/qualitycontrol/quality_event/index.vue
Normal file
@ -0,0 +1,147 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="事件名称" prop="name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入事件名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="事件类型" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.type" clearable placeholder="请输入事件类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发生日期" prop="happen_date">
|
||||
<el-date-picker class="w-[280px]" v-model="queryParams.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_event/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_event/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="事件名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="事件类型" prop="type" show-overflow-tooltip />
|
||||
<el-table-column label="发生日期" prop="happen_date" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_event/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_event/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_event/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualityeventLists, qualityeventDelete, qualityeventDetail } from '@/api/quality_event'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
happen_date: '',
|
||||
name: '',
|
||||
type: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualityeventLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualityeventDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualityeventDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualityeventDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_mbo/detail.vue
Normal file
167
src/views/qualitycontrol/quality_mbo/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
278
src/views/qualitycontrol/quality_mbo/edit.vue
Normal file
278
src/views/qualitycontrol/quality_mbo/edit.vue
Normal file
@ -0,0 +1,278 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工程名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入工程名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="目标" prop="target">
|
||||
<el-input v-model="formData.target" clearable placeholder="请输入目标" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="基本要求" prop="basic_requirements">
|
||||
<el-input v-model="formData.basic_requirements" clearable placeholder="请输入基本要求" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="目标规范" prop="target_specification">
|
||||
<el-input v-model="formData.target_specification" type="textarea" clearable placeholder="请输入目标规范" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="合格率" prop="pass_rate">
|
||||
<el-input v-model="formData.pass_rate" type="number" clearable placeholder="请输入合格率" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="允许偏差" prop="allowable_deviation">
|
||||
<el-input v-model="formData.allowable_deviation" type="number" clearable placeholder="请输入允许偏差" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitymboAdd, qualitymboEdit, qualitymboDetail } from '@/api/quality_mbo'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量目标表' : '新增质量目标表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
project_id: "",
|
||||
target: "",
|
||||
basic_requirements: "",
|
||||
target_specification: '',
|
||||
file: '',
|
||||
allowable_deviation: "",
|
||||
pass_rate: "",
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitymboDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitymboEdit(data)
|
||||
: await qualitymboAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
137
src/views/qualitycontrol/quality_mbo/index.vue
Normal file
137
src/views/qualitycontrol/quality_mbo/index.vue
Normal file
@ -0,0 +1,137 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="目标" prop="target">
|
||||
<el-input class="w-[280px]" v-model="queryParams.target" clearable placeholder="请输入目标" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_mbo/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_mbo/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="工程名称" prop="target" show-overflow-tooltip />
|
||||
<el-table-column label="合格率" prop="pass_rate" show-overflow-tooltip />
|
||||
<el-table-column label="目标规范" prop="target_specification" show-overflow-tooltip />
|
||||
<el-table-column label="基本要求" prop="basic_requirements" show-overflow-tooltip />
|
||||
<el-table-column label="允许偏差" prop="allowable_deviation" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_mbo/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_mbo/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_mbo/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitymboLists, qualitymboDelete, qualitymboDetail } from '@/api/quality_mbo'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
target: '',
|
||||
|
||||
|
||||
})
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitymboLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualitymboDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualitymboDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualitymboDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_modify/detail.vue
Normal file
167
src/views/qualitycontrol/quality_modify/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
290
src/views/qualitycontrol/quality_modify/edit.vue
Normal file
290
src/views/qualitycontrol/quality_modify/edit.vue
Normal file
@ -0,0 +1,290 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input v-model="formData.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查日期" prop="check_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.check_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择检查日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改期限" prop="modify_term">
|
||||
<el-input v-model="formData.modify_term" clearable placeholder="请输入整改期限" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input v-model="formData.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查单位" prop="check_unit">
|
||||
<el-input v-model="formData.check_unit" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改单位" prop="modify_unit">
|
||||
<el-input v-model="formData.modify_unit" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input v-model="formData.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="抄送人" prop="copy_user">
|
||||
<el-input v-model="formData.copy_user" clearable placeholder="请输入抄送人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查项" prop="check_item">
|
||||
<el-input v-model="formData.check_item" clearable placeholder="请输入检查项" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="质量隐患" prop="quality_hazards">
|
||||
<el-input v-model="formData.quality_hazards" clearable placeholder="请输入质量隐患" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查结果" prop="check_result">
|
||||
<el-input v-model="formData.check_result" clearable placeholder="请输入检查结果" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitymodifyAdd, qualitymodifyEdit, qualitymodifyDetail } from '@/api/quality_modify'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量整改表' : '新增质量整改表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
check_date: '',
|
||||
check_user: '',
|
||||
check_unit: '',
|
||||
check_item: '',
|
||||
check_result: '',
|
||||
modify_unit: '',
|
||||
resp_user: '',
|
||||
modify_term: '',
|
||||
copy_user: '',
|
||||
check_nature: '',
|
||||
quality_hazards: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
project_name.value = data.project_name
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitymodifyDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitymodifyEdit(data)
|
||||
: await qualitymodifyAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
160
src/views/qualitycontrol/quality_modify/index.vue
Normal file
160
src/views/qualitycontrol/quality_modify/index.vue
Normal file
@ -0,0 +1,160 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查单位" prop="check_unit">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_unit" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="整改单位" prop="modify_unit">
|
||||
<el-input class="w-[280px]" v-model="queryParams.modify_unit" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="抄送人" prop="resp_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.copy_user" clearable placeholder="请输入抄送人" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_modify/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_modify/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="检查性质" prop="check_nature" show-overflow-tooltip />
|
||||
<el-table-column label="检查日期" prop="check_date" show-overflow-tooltip />
|
||||
<el-table-column label="整改期限" prop="modify_term" show-overflow-tooltip />
|
||||
<el-table-column label="检查人" prop="check_user" show-overflow-tooltip />
|
||||
<el-table-column label="抄送人" prop="copy_user" show-overflow-tooltip />
|
||||
<el-table-column label="检查单位" prop="check_unit" show-overflow-tooltip />
|
||||
<el-table-column label="整改单位" prop="modify_unit" show-overflow-tooltip />
|
||||
<el-table-column label="检查项" prop="check_item" show-overflow-tooltip />
|
||||
<el-table-column label="质量隐患" prop="quality_hazards" show-overflow-tooltip />
|
||||
<el-table-column label="检查结果" prop="check_result" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_modify/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_modify/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_modify/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitymodifyLists, qualitymodifyDelete, qualitymodifyDetail } from '@/api/quality_modify'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
check_nature: '',
|
||||
check_user: '',
|
||||
check_unit: '',
|
||||
modify_unit: '',
|
||||
resp_user: '',
|
||||
copy_user: ''
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitymodifyLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualitymodifyDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualitymodifyDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualitymodifyDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
207
src/views/qualitycontrol/quality_professional_category/edit.vue
Normal file
207
src/views/qualitycontrol/quality_professional_category/edit.vue
Normal file
@ -0,0 +1,207 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="分类名称" prop="classify_name" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="formData.classify_name" clearable placeholder="请输入分类名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { professionalcategoryAdd, professionalcategoryEdit, professionalcategoryDetail } from '@/api/quality_professional_category'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑专业类别表' : '新增专业类别表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
remark: "",
|
||||
classify_name: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await professionalcategoryDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await professionalcategoryEdit(data)
|
||||
: await professionalcategoryAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
138
src/views/qualitycontrol/quality_professional_category/index.vue
Normal file
138
src/views/qualitycontrol/quality_professional_category/index.vue
Normal file
@ -0,0 +1,138 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="分类名" prop="classify_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.classify_name" clearable placeholder="请输入分类名" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_professional_category/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_professional_category/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="分类名" prop="classify_name" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
|
||||
|
||||
|
||||
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_professional_category/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_professional_category/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_professional_category/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { professionalcategoryLists, professionalcategoryDelete, professionalcategoryDetail } from '@/api/quality_professional_category'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
classify_name: ''
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: professionalcategoryLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await professionalcategoryDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await professionalcategoryDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await professionalcategoryDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_specification/detail.vue
Normal file
167
src/views/qualitycontrol/quality_specification/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
261
src/views/qualitycontrol/quality_specification/edit.vue
Normal file
261
src/views/qualitycontrol/quality_specification/edit.vue
Normal file
@ -0,0 +1,261 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="规范名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入规范名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="规范类别" prop="type">
|
||||
<el-input v-model="formData.type" clearable placeholder="请输入规范类别" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发布部门" prop="release_dept">
|
||||
<el-input v-model="formData.release_dept" clearable placeholder="请输入发布部门" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发布时间" prop="release_date">
|
||||
<el-date-picker v-model="formData.release_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发布时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualityspecificationAdd, qualityspecificationEdit, qualityspecificationDetail } from '@/api/quality_specification'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量规范表' : '新增质量规范表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
release_dept: "",
|
||||
content: "",
|
||||
file: '',
|
||||
name: "",
|
||||
type: "",
|
||||
release_date: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualityspecificationDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualityspecificationEdit(data)
|
||||
: await qualityspecificationAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
145
src/views/qualitycontrol/quality_specification/index.vue
Normal file
145
src/views/qualitycontrol/quality_specification/index.vue
Normal file
@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="规范类别" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.type" clearable placeholder="请输入规范类别" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规范名称" prop="name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入规范名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发布部门" prop="release_dept">
|
||||
<el-input class="w-[280px]" v-model="queryParams.release_dept" clearable placeholder="请输入发布部门" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['quality.quality_specification/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_specification/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="规范名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="规范类别" prop="type" show-overflow-tooltip />
|
||||
<el-table-column label="发布部门" prop="release_dept" show-overflow-tooltip />
|
||||
<el-table-column label="发布时间" prop="release_date" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="规范附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['quality.quality_specification/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['quality.quality_specification/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['quality.quality_specification/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualityspecificationLists, qualityspecificationDelete, qualityspecificationDetail } from '@/api/quality_specification'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
release_dept: '',
|
||||
name: '',
|
||||
type: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualityspecificationLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualityspecificationDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualityspecificationDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualityspecificationDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
167
src/views/qualitycontrol/quality_supervise/detail.vue
Normal file
167
src/views/qualitycontrol/quality_supervise/detail.vue
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
<template>
|
||||
<div class="detail-popup">
|
||||
<popup ref="popupRef" title="安全规范详情" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-form ref="formRef" :model="formData" label-width="160px">
|
||||
<el-card class="mb-2">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="组织名称">
|
||||
{{ formData.org_name }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门名称">
|
||||
{{ formData.dept_name
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范名称">
|
||||
{{ formData.name
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范类别">
|
||||
{{ formData.type
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="发布部门">
|
||||
{{ formData.publish_dep
|
||||
|
||||
}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="内容">
|
||||
{{ formData.content }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="规范附件">
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
</popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="customdetail">
|
||||
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { apiCustomDetail } from '@/api/custom'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import type { PropType } from 'vue'
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const formDataannex = reactive([])
|
||||
const datas = reactive({
|
||||
provinceOptions: [],
|
||||
cityOptions: [],
|
||||
areaOptions: [],
|
||||
});
|
||||
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
Object.assign(formData, data)
|
||||
|
||||
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apiCustomDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
popupRef.value?.close()
|
||||
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = () => {
|
||||
console.log('1111111')
|
||||
popupRef.value?.open()
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.tit {
|
||||
font-size: 1.2em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
</style>
|
266
src/views/qualitycontrol/quality_supervise/edit.vue
Normal file
266
src/views/qualitycontrol/quality_supervise/edit.vue
Normal file
@ -0,0 +1,266 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="project_name" @click="showDialog = true">
|
||||
<el-input v-model="project_name" readonly clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生日期" prop="happen_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
<el-upload accept=".pdf" class="upload-demo" :show-file-list="false" aria-hidden="true" :headers="{ Token: userStore.token }" :action="base_url + '/upload/file'" :on-success="handleAvatarSuccess_four" ref="upload">
|
||||
<el-button type="primary">
|
||||
上传
|
||||
</el-button>
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import { qualitysuperviseAdd, qualitysuperviseEdit, qualitysuperviseDetail } from '@/api/quality_supervise'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { isEmail, isIdCard, isPhone } from '@/utils/validate'
|
||||
import type { PropType } from 'vue'
|
||||
import configs from "@/config"
|
||||
import useUserStore from "@/stores/modules/user";
|
||||
const protype = reactive([])
|
||||
const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
uploadFile
|
||||
) => {
|
||||
if (response.code == 0) {
|
||||
ElMessage.error(response.msg);
|
||||
return;
|
||||
}
|
||||
formDataannex.push(
|
||||
{ uri: response.data.uri, name: response.data.name }
|
||||
|
||||
|
||||
);
|
||||
};
|
||||
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
}
|
||||
defineProps({
|
||||
dictData: {
|
||||
type: Object as PropType<Record<string, any[]>>,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
showDialog.value = false;
|
||||
};
|
||||
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑质量监督表' : '新增质量监督表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
project_id: "",
|
||||
happen_date: "",
|
||||
file: '',
|
||||
content: "",
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 表单验证
|
||||
const formRules = reactive<any>({
|
||||
|
||||
})
|
||||
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
};
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
project_name.value = data.project_name;
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await qualitysuperviseDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
}
|
||||
|
||||
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await qualitysuperviseEdit(data)
|
||||
: await qualitysuperviseAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
||||
//打开弹窗
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
const handleClose = () => {
|
||||
emit('close')
|
||||
}
|
||||
|
||||
|
||||
|
||||
defineExpose({
|
||||
open,
|
||||
setFormData,
|
||||
getDetail
|
||||
})
|
||||
</script>
|
141
src/views/qualitycontrol/quality_supervise/index.vue
Normal file
141
src/views/qualitycontrol/quality_supervise/index.vue
Normal file
@ -0,0 +1,141 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="发生日期" prop="type">
|
||||
<el-date-picker class="flex-1 !flex" v-model="queryParams.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['safety.safety_standard/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['safety.safety_standard/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="发生日期" prop="happen_date" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="规范附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['safety.safety_standard/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['safety.safety_standard/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button v-perms="['safety.safety_standard/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
<pagination v-model="pager" @change="getLists" />
|
||||
</div>
|
||||
</el-card>
|
||||
<edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" />
|
||||
<detail-popup v-if="showDtail" ref="detailRef" :dict-data="dictData" @close="showDtail = false" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { qualitysuperviseLists, qualitysuperviseDelete, qualitysuperviseDetail } from '@/api/quality_supervise'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
import feedback from '@/utils/feedback'
|
||||
import EditPopup from './edit.vue'
|
||||
import DetailPopup from './detail.vue'
|
||||
const detailRef = shallowRef<InstanceType<typeof DetailPopup>>()
|
||||
const editRef = shallowRef<InstanceType<typeof EditPopup>>()
|
||||
// 是否显示编辑框
|
||||
const showEdit = ref(false)
|
||||
const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
happen_date: '',
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
// 选中数据
|
||||
const selectData = ref<any[]>([])
|
||||
|
||||
// 表格选择后回调事件
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
}
|
||||
|
||||
// 获取字典数据
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: qualitysuperviseLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
// 添加
|
||||
const handleAdd = async () => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('add')
|
||||
}
|
||||
|
||||
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await qualitysuperviseDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
editRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await qualitysuperviseDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await qualitysuperviseDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
detailRef.value?.setFormData(res)
|
||||
}
|
||||
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
@ -1,84 +1,87 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目编码" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="事故名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入事件名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="事故类型" prop="type">
|
||||
<el-input v-model="formData.type" clearable placeholder="请输入事故类型" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.happen_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="设备事故" prop="device_accident">
|
||||
<el-input v-model="formData.device_accident" clearable placeholder="请输入设备事故" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="承包商人员" prop="contractor_user">
|
||||
<el-input v-model="formData.contractor_user" clearable placeholder="请输入承包商人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="非本企业人员" prop="our_company_user">
|
||||
<el-input v-model="formData.our_company_user" clearable placeholder="请输入非本企业人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="本企业人员" prop="not_our_company_user">
|
||||
<el-input v-model="formData.not_our_company_user" clearable placeholder="请输入本企业人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +92,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +101,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +115,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyaccidentAdd, safetyaccidentEdit, safetyaccidentDetail } from '@/api/safety_accident'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +131,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +154,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +169,53 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全事故表' : '新增安全事故表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_id: "",
|
||||
name: "",
|
||||
happen_time: "",
|
||||
type: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
device_accident: "",
|
||||
contractor_user: "",
|
||||
not_our_company_user: "",
|
||||
our_company_user: "",
|
||||
content: "",
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +227,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,7 +237,7 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
@ -298,18 +251,17 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyaccidentDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +271,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyaccidentEdit(data)
|
||||
: await safetyaccidentAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +289,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,19 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
<el-form-item label="事故类型" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.device_accident" clearable placeholder="请输入事故类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
<el-form-item label="设备事故" prop="type">
|
||||
<el-input class="w-[280px]" v-model="queryParams.device_accident" clearable placeholder="请输入设备事故" />
|
||||
</el-form-item>
|
||||
<el-form-item label="事故名称" prop="name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入事故名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker class="w-[280px]" v-model="queryParams.happen_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +23,42 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_accident/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_accident/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="事故名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="发生时间" prop="happen_time" show-overflow-tooltip />
|
||||
<el-table-column label="事故类型" prop="type" show-overflow-tooltip />
|
||||
<el-table-column label="设备事故" prop="device_accident" show-overflow-tooltip />
|
||||
<el-table-column label="承包商人员" prop="contractor_user" show-overflow-tooltip />
|
||||
<el-table-column label="非本企业人员" prop="not_our_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="本企业人员" prop="our_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_accident/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_accident/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +76,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyaccidentLists, safetyaccidentDelete, safetyaccidentDetail } from '@/api/safety_accident'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,9 +91,10 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
|
||||
name: '',
|
||||
happen_time: '',
|
||||
device_accident: '',
|
||||
type: '',
|
||||
})
|
||||
|
||||
|
||||
@ -106,7 +111,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyaccidentLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +126,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyaccidentDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +136,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyaccidentDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyaccidentDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -2,83 +2,131 @@
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-form-item label="项目编码" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-form-item label="检查名称" prop="check_name">
|
||||
<el-input v-model="formData.check_name" clearable placeholder="请输入检查名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查日期" prop="check_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.check_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择检查日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input v-model="formData.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查单位" prop="check_company">
|
||||
<el-input v-model="formData.check_company" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查区域" prop="check_area">
|
||||
<el-input v-model="formData.check_area" clearable placeholder="请输入检查区域" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查项" prop="check_item">
|
||||
<el-input v-model="formData.check_item" clearable placeholder="请输入检查项" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input v-model="formData.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查结果" prop="check_result">
|
||||
<el-input v-model="formData.check_result" clearable placeholder="请输入检查结果" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改单位" prop="modify_company">
|
||||
<el-input v-model="formData.modify_company" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改期限" prop="modify_term">
|
||||
<el-input v-model="formData.modify_term" clearable placeholder="请输入整改期限" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input v-model="formData.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="风险等级" prop="risk_level">
|
||||
<el-input v-model="formData.risk_level" clearable placeholder="请输入风险等级" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="安全隐患" prop="safety_hazard">
|
||||
<el-input v-model="formData.safety_hazard" clearable placeholder="请输入安全隐患" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="质量隐患" prop="quality_hazard">
|
||||
<el-input v-model="formData.quality_hazard" clearable placeholder="请输入质量隐患" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="子表" prop="sub_table">
|
||||
<el-input v-model="formData.sub_table" clearable placeholder="请输入子表" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +137,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +146,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +160,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetycheckAdd, safetycheckEdit, safetycheckDetail } from '@/api/safety_check'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +176,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +199,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +214,61 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全检查表' : '新增安全检查表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
check_name: '',
|
||||
check_date: '',
|
||||
check_user: '',
|
||||
check_company: '',
|
||||
check_area: '',
|
||||
check_item: '',
|
||||
check_result: '',
|
||||
modify_company: '',
|
||||
resp_user: '',
|
||||
risk_level: '',
|
||||
safety_hazard: '',
|
||||
modify_term: '',
|
||||
remark: '',
|
||||
file: '',
|
||||
check_nature: '',
|
||||
quality_hazard: '',
|
||||
sub_table: '',
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +280,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,7 +290,7 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
@ -298,18 +304,15 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
project_name.value = data.project_name
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetycheckDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +322,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetycheckEdit(data)
|
||||
: await safetycheckAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -338,10 +341,8 @@ const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
getlist()
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,23 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="检查名称" prop="check_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_name" clearable placeholder="请输入检查名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查单位" prop="check_company">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_company" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查区域" prop="check_area">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_area" clearable placeholder="请输入检查区域" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查日期" prop="check_date">
|
||||
<el-date-picker class="w-[280px]" v-model="queryParams.check_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择检查日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +27,50 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_check/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_check/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="检查名称" prop="check_name" show-overflow-tooltip />
|
||||
<el-table-column label="检查日期" prop="check_date" show-overflow-tooltip />
|
||||
<el-table-column label="整改期限" prop="modify_term" show-overflow-tooltip />
|
||||
<el-table-column label="检查人" prop="check_user" show-overflow-tooltip />
|
||||
<el-table-column label="检查单位" prop="check_company" show-overflow-tooltip />
|
||||
<el-table-column label="整改单位" prop="modify_company" show-overflow-tooltip />
|
||||
<el-table-column label="责任人" prop="resp_user" show-overflow-tooltip />
|
||||
<el-table-column label="检查区域" prop="check_area" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="风险等级" prop="risk_level" show-overflow-tooltip />
|
||||
<el-table-column label="检查项" prop="check_item" show-overflow-tooltip />
|
||||
<el-table-column label="安全隐患" prop="safety_hazard" show-overflow-tooltip />
|
||||
<el-table-column label="检查性质" prop="check_nature" show-overflow-tooltip />
|
||||
<el-table-column label="检查结果" prop="check_result" show-overflow-tooltip />
|
||||
<el-table-column label="质量隐患" prop="quality_hazard" show-overflow-tooltip />
|
||||
<el-table-column label="子表" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_check/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_check/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +88,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetycheckLists, safetycheckDelete, safetycheckDetail } from '@/api/safety_check'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,9 +103,11 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
|
||||
check_name: '',
|
||||
check_date: '',
|
||||
check_company: '',
|
||||
check_user: '',
|
||||
check_area: '',
|
||||
})
|
||||
|
||||
|
||||
@ -106,7 +124,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetycheckLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +139,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetycheckDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +149,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetycheckDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetycheckDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -1,84 +1,55 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="formData.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +60,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +69,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +83,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyemergencyplanAdd, safetyemergencyplanEdit, safetyemergencyplanDetail } from '@/api/safety_emergency_plan'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +99,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +122,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +137,49 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑应急预案表' : '新增应急预案表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_id: "",
|
||||
name: "",
|
||||
happen_date: "",
|
||||
content: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +191,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,13 +201,16 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
@ -298,18 +218,14 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyemergencyplanDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +235,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyemergencyplanEdit(data)
|
||||
: await safetyemergencyplanAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +253,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,14 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="queryParams.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="queryParams.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +18,36 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_emergency_plan/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_emergency_plan/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="所属项目" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="发生时间" prop="happen_date" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_emergency_plan/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_emergency_plan/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +65,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyemergencyplanLists, safetyemergencyplanDelete, safetyemergencyplanDetail } from '@/api/safety_emergency_plan'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +80,8 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
name: '',
|
||||
happen_date: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +99,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyemergencyplanLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +114,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyemergencyplanDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +124,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyemergencyplanDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyemergencyplanDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -1,84 +1,55 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="formData.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +60,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +69,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +83,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyevaluateAdd, safetyevaluateEdit, safetyevaluateDetail } from '@/api/safety_evaluate'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +99,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +122,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +137,49 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全评估表' : '新增安全评估表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_id: "",
|
||||
name: "",
|
||||
happen_date: "",
|
||||
content: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +191,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,13 +201,16 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
@ -298,18 +218,14 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyevaluateDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +235,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyevaluateEdit(data)
|
||||
: await safetyevaluateAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +253,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,14 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="queryParams.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="queryParams.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +18,36 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_evaluate/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_evaluate/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="所属项目" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="发生时间" prop="happen_date" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_evaluate/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_evaluate/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +65,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyevaluateLists, safetyevaluateDelete, safetyevaluateDetail } from '@/api/safety_evaluate'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +80,8 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
name: '',
|
||||
happen_date: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +99,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyevaluateLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +114,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyevaluateDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +124,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyevaluateDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyevaluateDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -1,84 +1,42 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="formData.happen_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +47,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +56,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +70,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyeventAdd, safetyeventEdit, safetyeventDetail } from '@/api/safety_event'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +86,11 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +106,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +121,32 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
}
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑应急预案表' : '新增应急预案表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_id: '',
|
||||
name: "",
|
||||
happen_time: "",
|
||||
content: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +158,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,32 +168,25 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyeventDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +196,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyeventEdit(data)
|
||||
: await safetyeventAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -338,10 +215,7 @@ const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,14 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="事件名称" prop="name">
|
||||
<el-input v-model="queryParams.name" clearable placeholder="请输入事件名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="queryParams.happen_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +18,37 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_event/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_event/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="事件名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="发生时间" prop="happen_time" show-overflow-tooltip />
|
||||
<el-table-column label="事件内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_event/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_event/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +66,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyeventLists, safetyeventDelete, safetyeventDetail } from '@/api/safety_event'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +81,9 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
|
||||
name: '',
|
||||
happen_time: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +101,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyeventLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +116,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyeventDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +126,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyeventDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyeventDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -2,83 +2,117 @@
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="填报单位" prop="fill_company">
|
||||
<el-input v-model="formData.fill_company" clearable placeholder="请输入填报单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="施工单位负责人" prop="construction_company_user">
|
||||
<el-input v-model="formData.construction_company_user" clearable placeholder="请输入施工单位负责人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="监理单位负责人" prop="supervision_company_user">
|
||||
<el-input v-model="formData.supervision_company_user" clearable placeholder="请输入监理单位负责人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="建设单位负责人" prop="build_company_user">
|
||||
<el-input v-model="formData.build_company_user" clearable placeholder="请输入建设单位负责人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="危险源" prop="source">
|
||||
<el-input v-model="formData.source" clearable placeholder="请输入危险源" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="可能发生事故" prop="accident">
|
||||
<el-input v-model="formData.accident" clearable placeholder="请输入可能发生事故" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="风险等级" prop="risk_level">
|
||||
<el-input v-model="formData.risk_level" clearable placeholder="请输入风险等级" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="管控层级" prop="control_level">
|
||||
<el-input v-model="formData.control_level" clearable placeholder="请输入管控层级" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="主责部门" prop="department">
|
||||
<el-input v-model="formData.department" clearable placeholder="请输入主责部门" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="主要人员" prop="users">
|
||||
<el-input v-model="formData.users" clearable placeholder="请输入主要人员" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="技术措施" prop="technical_measure">
|
||||
<el-input v-model="formData.technical_measure" clearable placeholder="请输入技术措施" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="管理措施" prop="manage_measure">
|
||||
<el-input v-model="formData.manage_measure" clearable placeholder="请输入管理措施" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="应急措施" prop="emergency_measure">
|
||||
<el-input v-model="formData.emergency_measure" clearable placeholder="请输入应急措施" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +123,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +132,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +146,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyhazardAdd, safetyhazardEdit, safetyhazardDetail } from '@/api/safety_hazard'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +162,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +185,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +200,63 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑危险源表' : '新增危险源表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
file: '',
|
||||
remark: '',
|
||||
|
||||
emergency_measure: '',
|
||||
manage_measure: '',
|
||||
technical_measure: '',
|
||||
users: '',
|
||||
department: '',
|
||||
control_level: '',
|
||||
risk_level: '',
|
||||
accident: '',
|
||||
|
||||
source: '',
|
||||
|
||||
build_company_user: '',
|
||||
supervision_company_user: '',
|
||||
|
||||
construction_company_user: '',
|
||||
fill_company: '',
|
||||
project_id: '',
|
||||
dept_id: '',
|
||||
org_id: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +268,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,7 +278,7 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
@ -298,18 +292,17 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
project_name.value = data.project_name
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyhazardDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +312,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyhazardEdit(data)
|
||||
: await safetyhazardAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +330,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,11 +2,26 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
|
||||
|
||||
<el-form-item label="填报单位" prop="fill_company">
|
||||
<el-input class="w-[280px]" v-model="queryParams.fill_company" clearable placeholder="请输入填报单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
|
||||
|
||||
|
||||
<el-form-item label="施工单位负责人" prop="construction_company_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.construction_company_user" clearable placeholder="请输入施工单位负责人" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="监理单位负责人" prop="supervision_company_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.supervision_company_user" clearable placeholder="请输入监理单位负责人" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="建设单位负责人" prop="build_company_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.build_company_user" clearable placeholder="请输入建设单位负责人" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
@ -17,42 +32,50 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_hazard/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_hazard/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="填报单位" prop="fill_company" show-overflow-tooltip />
|
||||
<el-table-column label="施工单位负责人" prop="construction_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="监理单位负责人" prop="supervision_company_user" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="建设单位负责人" prop="build_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="危险源" prop="source" show-overflow-tooltip />
|
||||
<el-table-column label="可能发生事故" prop="accident" show-overflow-tooltip />
|
||||
<el-table-column label="风险等级" prop="control_level" show-overflow-tooltip />
|
||||
<el-table-column label="管控层级" prop="build_company_user" show-overflow-tooltip />
|
||||
<el-table-column label="主责部门" prop="department" show-overflow-tooltip />
|
||||
<el-table-column label="主要人员" prop="users" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="技术措施" prop="technical_measure" show-overflow-tooltip />
|
||||
<el-table-column label="管理措施" prop="manage_measure" show-overflow-tooltip />
|
||||
<el-table-column label="应急措施" prop="emergency_measure" show-overflow-tooltip />
|
||||
|
||||
|
||||
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_hazard/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_hazard/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
<el-button v-perms="['safety.safety_hazard/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
@ -72,7 +95,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyhazardLists, safetyhazardDelete, safetyhazardDetail } from '@/api/safety_hazard'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +110,10 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
fill_company: '',
|
||||
construction_company_user: '',
|
||||
supervision_company_user: '',
|
||||
build_company_user: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +131,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyhazardLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +146,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyhazardDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +156,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyhazardDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyhazardDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -2,83 +2,111 @@
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-form-item label="项目编码" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input v-model="formData.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查日期" prop="check_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.check_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择检查日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改期限" prop="modify_term">
|
||||
<el-input v-model="formData.modify_term" clearable placeholder="请输入整改期限" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input v-model="formData.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查单位" prop="check_company">
|
||||
<el-input v-model="formData.check_company" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改单位" prop="modify_company">
|
||||
<el-input v-model="formData.modify_company" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input v-model="formData.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查项" prop="check_item">
|
||||
<el-input v-model="formData.check_item" clearable placeholder="请输入检查项" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="安全隐患" prop="safety_hazard">
|
||||
<el-input v-model="formData.safety_hazard" clearable placeholder="请输入安全隐患" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="检查结果" prop="check_result">
|
||||
<el-input v-model="formData.check_result" clearable placeholder="请输入检查结果" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="整改人" prop="modify_user">
|
||||
<el-input v-model="formData.modify_user" clearable placeholder="请输入整改人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +117,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,49 +126,25 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
</popup>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetymodifyAdd, safetymodifyEdit, safetymodifyDetail } from '@/api/safety_check'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +157,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +180,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +195,59 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全整改表' : '新增安全整改表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
org_id: '',
|
||||
dept_id: '',
|
||||
project_id: '',
|
||||
check_name: '',
|
||||
check_date: '',
|
||||
check_user: '',
|
||||
check_company: '',
|
||||
check_item: '',
|
||||
check_result: '',
|
||||
modify_company: '',
|
||||
resp_user: '',
|
||||
modify_user: '',
|
||||
safety_hazard: '',
|
||||
modify_term: '',
|
||||
remark: '',
|
||||
file: '',
|
||||
check_nature: '',
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +259,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,7 +269,7 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
@ -298,18 +283,17 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetymodifyDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +303,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetymodifyEdit(data)
|
||||
: await safetymodifyAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +321,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -1,15 +1,35 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline label-width="auto">
|
||||
|
||||
|
||||
<el-form-item label="检查人" prop="check_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_user" clearable placeholder="请输入检查人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查单位" prop="check_company">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_company" clearable placeholder="请输入检查单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查性质" prop="check_nature">
|
||||
<el-input class="w-[280px]" v-model="queryParams.check_nature" clearable placeholder="请输入检查性质" />
|
||||
</el-form-item>
|
||||
<el-form-item label="整改期限" prop="modify_term">
|
||||
<el-input class="w-[280px]" v-model="queryParams.modify_term" clearable placeholder="请输入整改期限" />
|
||||
</el-form-item>
|
||||
<el-form-item label="整改单位" prop="modify_company">
|
||||
<el-input class="w-[280px]" v-model="queryParams.modify_company" clearable placeholder="请输入整改单位" />
|
||||
</el-form-item>
|
||||
<el-form-item label="整改人" prop="modify_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.modify_user" clearable placeholder="请输入整改人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="责任人" prop="resp_user">
|
||||
<el-input class="w-[280px]" v-model="queryParams.resp_user" clearable placeholder="请输入责任人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="检查日期" prop="check_date">
|
||||
<el-date-picker class="w-[280px]" v-model="queryParams.check_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择检查日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
@ -17,44 +37,46 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_modify/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_modify/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目编码" prop="project_code" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="检查日期" prop="check_date" show-overflow-tooltip />
|
||||
<el-table-column label="整改期限" prop="modify_term" show-overflow-tooltip />
|
||||
<el-table-column label="检查人" prop="check_user" show-overflow-tooltip />
|
||||
<el-table-column label="检查单位" prop="check_company" show-overflow-tooltip />
|
||||
<el-table-column label="整改单位" prop="modify_company" show-overflow-tooltip />
|
||||
<el-table-column label="责任人" prop="resp_user" show-overflow-tooltip />
|
||||
<el-table-column label="整改人" prop="modify_user" show-overflow-tooltip />
|
||||
<el-table-column label="检查项" prop="check_item" show-overflow-tooltip />
|
||||
<el-table-column label="安全隐患" prop="safety_hazard" show-overflow-tooltip />
|
||||
<el-table-column label="检查性质" prop="check_nature" show-overflow-tooltip />
|
||||
<el-table-column label="检查结果" prop="check_result" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_modify/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_modify/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +94,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetymodifyLists, safetymodifyDelete, safetymodifyDetail } from '@/api/safety_check'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +109,14 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
check_nature: '',
|
||||
check_date: '',
|
||||
check_user: '',
|
||||
check_company: '',
|
||||
modify_term: '',
|
||||
modify_company: '',
|
||||
modify_user: '',
|
||||
resp_user: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +134,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetymodifyLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +149,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetymodifyDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +159,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetymodifyDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetymodifyDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -1,82 +1,72 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="750px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="月份" prop="month">
|
||||
<el-input v-model="formData.month" type="number" clearable placeholder="请输入月份" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="负责人" prop="resp_user">
|
||||
<el-input v-model="formData.resp_user" clearable placeholder="请输入负责人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="分类" prop="classify">
|
||||
<el-input v-model="formData.classify" clearable placeholder="请输入分类" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="隐患数量" prop="hazard_num">
|
||||
<el-input v-model="formData.hazard_num" type="number" clearable placeholder="请输入隐患数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="数据统计" prop="data_statistics">
|
||||
<el-input v-model="formData.data_statistics" type="number" clearable placeholder="请输入数据统计" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="本月重点工作" prop="current_important_work">
|
||||
<el-input v-model="formData.current_important_work" clearable placeholder="请输入本月重点工作" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="下一阶段重点工作计划" prop="next_important_work">
|
||||
<el-input v-model="formData.next_important_work" type="textarea" clearable placeholder="请输入下一阶段重点工作计划" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="需报告说明或协调的事项" prop="item">
|
||||
<el-input v-model="formData.item" type="textarea" clearable placeholder="请输入需报告说明或协调的事项" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
@ -89,7 +79,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +88,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +102,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyproductmonthAdd, safetyproductmonthEdit, safetyproductmonthDetail } from '@/api/safety_product_month'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +118,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +141,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +156,54 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全生产月表' : '新增安全生产月表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_id: "",
|
||||
month: "",
|
||||
resp_user: "",
|
||||
classify: "",
|
||||
hazard_num: "",
|
||||
data_statistics: "",
|
||||
current_important_work: "",
|
||||
next_important_work: "",
|
||||
item: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +215,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,13 +225,16 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
@ -298,18 +242,14 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyproductmonthDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +259,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyproductmonthEdit(data)
|
||||
: await safetyproductmonthAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +277,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,14 +2,13 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item label="负责人" prop="resp_user">
|
||||
<el-input v-model="queryParams.resp_user" clearable placeholder="请输入负责人" />
|
||||
</el-form-item>
|
||||
<el-form-item label="月份" prop="month">
|
||||
<el-input v-model="queryParams.month" type="number" clearable placeholder="请输入月份" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
<el-button @click="resetParams">重置</el-button>
|
||||
@ -17,44 +16,41 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_product_month/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_product_month/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="月份" prop="month" show-overflow-tooltip />
|
||||
<el-table-column label="负责人" prop="resp_user" show-overflow-tooltip />
|
||||
<el-table-column label="分类" prop="classify" show-overflow-tooltip />
|
||||
<el-table-column label="隐患数量" prop="hazard_num" show-overflow-tooltip />
|
||||
<el-table-column label="数据统计" prop="data_statistics" show-overflow-tooltip />
|
||||
<el-table-column label="本月重点工作" width="155" prop="current_important_work" show-overflow-tooltip />
|
||||
<el-table-column label="下一阶段重点工作计划" width="165" prop="next_important_work" show-overflow-tooltip />
|
||||
<el-table-column label="需报告说明或协调的事项" width="185" prop="item" show-overflow-tooltip />
|
||||
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_product_month/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_product_month/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +68,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyproductmonthLists, safetyproductmonthDelete, safetyproductmonthDetail } from '@/api/safety_product_month'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +83,8 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
month: '',
|
||||
resp_user: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +102,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyproductmonthLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +117,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyproductmonthDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +127,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyproductmonthDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyproductmonthDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -1,84 +1,55 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_id" @click="showDialog = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="内容" prop="content">
|
||||
<el-input v-model="formData.content" type="textarea" clearable placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="formData.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +60,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +69,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +83,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyrehearsalAdd, safetyrehearsalEdit, safetyrehearsalDetail } from '@/api/safety_rehearsal'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +99,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +122,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +137,49 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全演练表' : '新增安全评估表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_id: "",
|
||||
name: "",
|
||||
happen_date: "",
|
||||
content: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +191,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,13 +201,16 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
@ -298,18 +218,14 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
project_code.value = data.project_code
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetyrehearsalDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +235,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetyrehearsalEdit(data)
|
||||
: await safetyrehearsalAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +253,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,14 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="名称" prop="name">
|
||||
<el-input v-model="queryParams.name" clearable placeholder="请输入名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker v-model="queryParams.happen_date" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +18,36 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_rehearsal/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_rehearsal/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="所属项目" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="发生时间" prop="happen_date" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_rehearsal/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_rehearsal/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +65,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetyrehearsalLists, safetyrehearsalDelete, safetyrehearsalDetail } from '@/api/safety_rehearsal'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,8 +80,8 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
name: '',
|
||||
happen_date: '',
|
||||
|
||||
})
|
||||
|
||||
@ -106,7 +99,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetyrehearsalLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +114,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyrehearsalDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +124,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetyrehearsalDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetyrehearsalDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -198,7 +198,10 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -214,7 +217,7 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
@ -19,13 +19,13 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_standard/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_standard/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
@ -38,21 +38,21 @@
|
||||
<el-table-column label="规范名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="规范类别" prop="type" show-overflow-tooltip />
|
||||
<el-table-column label="发布部门" prop="publish_dep" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="内容" prop="content" show-overflow-tooltip />
|
||||
|
||||
|
||||
<el-table-column label="规范附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_standard/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_standard/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
<!-- <el-button v-perms="['safety.safety_standard/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -1,84 +1,58 @@
|
||||
<template>
|
||||
<div class="edit-popup">
|
||||
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose">
|
||||
<el-steps :active="active" align-center style="margin-bottom: 20px;">
|
||||
<el-step title="商务部发起" />
|
||||
<el-step title="商务总监" />
|
||||
<el-step title="财务经理" />
|
||||
<el-step title="总经理" />
|
||||
</el-steps>
|
||||
<popup ref="popupRef" :title="popupTitle" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
|
||||
|
||||
<el-form ref="formRef" :model="formData" label-width="auto" :rules="formRules">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customer_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-input v-model="custom_name" @click="showDialog = true" clearable placeholder="请选择客户" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款日期" prop="return_date">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.return_date" clearable type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目名称" prop="contract_id" @click="showDialog1 = true">
|
||||
<el-input v-model="project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="项目编码" prop="contract_id">
|
||||
<el-input v-model="project_code" clearable placeholder="请输入项目编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同编号" prop="contract_no">
|
||||
<el-input v-model="contract_no" clearable placeholder="请输入合同编号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同名称" prop="contract_name">
|
||||
<el-input v-model="contract_name" clearable placeholder="请输入合同名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款原因" prop="reason">
|
||||
<el-input v-model="formData.reason" type='textarea' clearable placeholder="请输入退款原因" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款金额" prop="amount">
|
||||
<el-input v-model="formData.amount" clearable placeholder="请输入退款金额" @input="amountinput" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="金额大写" prop="amount_daxie">
|
||||
<el-input v-model="formData.amount_daxie" readonly clearable placeholder="请输入金额大写" />
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款方式" prop="contacts">
|
||||
<el-select class="flex-1" v-model="formData.refund_type" clearable placeholder="请选择退款方式">
|
||||
<el-option v-for="(item, index) in dictData.refund_type" :key="index" :label="item.name" :value="parseInt(item.value)" />
|
||||
<el-col :span="24">
|
||||
<el-form-item label="组织名称" prop="org_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.org_id" clearable placeholder="请选择组织" @change="deptrmt">
|
||||
<el-option v-for="(item, index) in list1" :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="退款人" prop="refunder">
|
||||
<el-input v-model="formData.refunder" readonly clearable placeholder="请输入退款人" />
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="部门名称" prop="dept_id" :rules="[{ required: true, message: '不可为空', trigger: 'blur' }]">
|
||||
<el-select v-model="formData.dept_id" clearable placeholder="请选择部门">
|
||||
<el-option v-for="( item, index ) in list2 " :key="index" :label="item.name" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="监督名称" prop="name">
|
||||
<el-input v-model="formData.name" clearable placeholder="请输入监督名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目名称" prop="project_name">
|
||||
<el-input v-model="formData.project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker class="flex-1 !flex" v-model="formData.happen_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="设备事故" prop="device_accident">
|
||||
<el-input v-model="formData.device_accident" clearable placeholder="请输入设备事故" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="formData.remark" type="textarea" clearable placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
|
||||
<el-form-item label="附件" prop="field127">
|
||||
@ -89,7 +63,7 @@
|
||||
</el-upload>
|
||||
|
||||
<div>
|
||||
<div v-for="(item, index) in formDataannex" style="margin-left: 5px;display: block;">
|
||||
<div v-for="( item, index ) in formDataannex " style="margin-left: 5px;display: block;">
|
||||
<a style="margin-left: 10px; color: #4a5dff; align-self: flex-start" :href="item.uri" target="_blank">{{ item.name }}</a>
|
||||
<span style="cursor: pointer;margin-left: 5px;" @click="delFileFn(index)">x</span>
|
||||
</div>
|
||||
@ -98,34 +72,11 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div style="margin: 20px 0;">客户收款信息</div>
|
||||
|
||||
<el-row :gutter="10">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款账号" prop="collection_acccount" @click="showDialog2 = true">
|
||||
<el-input v-model="formData.collection_acccount" clearable placeholder="请输入收款账号" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="收款银行" prop="collection_bank">
|
||||
<el-input v-model="formData.collection_bank" clearable placeholder="请输入收款银行" />
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog v-model="showDialog" title="选择客户" width="70%">
|
||||
<customDialog @customEvent="customEvent"></customDialog>
|
||||
<el-dialog v-model="showDialog" title="选择项目" width="70%">
|
||||
<porjectDialog @customEvent="customEvent"></porjectDialog>
|
||||
</el-dialog>
|
||||
<el-dialog v-model="showDialog1" title="选择合同" width="70%">
|
||||
<salescontractDialog @customEvent="customEvent1"></salescontractDialog>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
@ -135,12 +86,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="projectEdit">
|
||||
import customDialog from '@/components/custom-dialog/index.vue'
|
||||
import porjectDialog from '@/components/project/index.vue'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import salescontractDialog from '@/components/salescontract/index.vue'
|
||||
|
||||
import { apirefundapplyAdd, apirefundapplyEdit, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetysuperviseAdd, safetysuperviseEdit, safetysuperviseDetail } from '@/api/safety_supervise'
|
||||
import { toChinesNum } from "@/utils/util";
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
@ -153,14 +102,14 @@ const base_url = configs.baseUrl + configs.urlPrefix
|
||||
const userStore = useUserStore();
|
||||
const active = ref(0)
|
||||
const formDataannex = reactive([])
|
||||
const contract_name = ref('')
|
||||
const list1 = reactive([])
|
||||
const list2 = reactive([])
|
||||
const showDialog = ref(false)
|
||||
const project_name = ref('')
|
||||
const project_code = ref('')
|
||||
const project_amount = ref('')
|
||||
const contract_no = ref('')
|
||||
const custom_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -176,31 +125,7 @@ const handleAvatarSuccess_four = (
|
||||
|
||||
);
|
||||
};
|
||||
//验证
|
||||
const checkPhone = (rule: any, value: any, callback: (arg0: Error) => any) => {
|
||||
|
||||
if (value && !/^1\d{10}$/.test(value)) {
|
||||
callback(new Error('请输入正确的手机号码'));
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
}
|
||||
const userEmail = (rule: any, value: string, callback: (arg0: Error | undefined) => void) => {
|
||||
|
||||
// const mailReg = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/
|
||||
// // if (!value) {
|
||||
// // return callback(new Error('邮箱不能为空'))
|
||||
// // }
|
||||
|
||||
|
||||
if (value && !mailReg.test(value)) {
|
||||
callback(new Error('请输入正确的邮箱格式'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
|
||||
};
|
||||
// 删除上传的文件
|
||||
const delFileFn = (index: number) => {
|
||||
formDataannex.splice(index, 1)
|
||||
@ -215,54 +140,50 @@ const emit = defineEmits(['success', 'close'])
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
const mode = ref('add')
|
||||
const amount_daxie = ref('')
|
||||
const showDialog = ref(false)
|
||||
const showDialog1 = ref(false)
|
||||
|
||||
//获取值
|
||||
const customEvent = (e: any) => {
|
||||
formData.customer_id = e.id;
|
||||
custom_name.value = e.name;
|
||||
formData.project_id = e.id;
|
||||
project_name.value = e.name;
|
||||
project_code.value = e.project_code
|
||||
showDialog.value = false;
|
||||
};
|
||||
const customEvent1 = (e: any) => {
|
||||
formData.contract_id = e.id;
|
||||
project_name.value = e.project_name;
|
||||
project_code.value = e.project_code;
|
||||
contract_name.value = e.contract_name;
|
||||
contract_no.value = e.contract_code
|
||||
showDialog1.value = false;
|
||||
};
|
||||
|
||||
//获取所有组织
|
||||
const getlist = () => {
|
||||
getAll().then((res) => {
|
||||
Object.assign(list1, res)
|
||||
|
||||
|
||||
//监听输入
|
||||
const amountinput = (e) => {
|
||||
// console.log(e)
|
||||
if (e && e > 0) {
|
||||
formData.amount_daxie = toChinesNum(e)
|
||||
}
|
||||
})
|
||||
}
|
||||
//获取部门
|
||||
const deptrmt = (e) => {
|
||||
getlist1(e)
|
||||
}
|
||||
//获取所有部门
|
||||
const getlist1 = (id: any) => {
|
||||
deptAll({ 'org_id': id }).then((res) => {
|
||||
Object.assign(list2, res)
|
||||
})
|
||||
}
|
||||
|
||||
// 弹窗标题
|
||||
const popupTitle = computed(() => {
|
||||
return mode.value == 'edit' ? '编辑退款申请表' : '新增退款申请表'
|
||||
return mode.value == 'edit' ? '编辑安全监督表' : '新增安全监督表'
|
||||
})
|
||||
|
||||
// 表单数据
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
customer_id: "",
|
||||
contract_id: "",
|
||||
approve_id: 0,
|
||||
refund_date: "",
|
||||
reason: "",
|
||||
amount: 0,
|
||||
amount_daxie: "",
|
||||
refund_type: "",
|
||||
refunder: userInfo.name,
|
||||
return_total_amount: "",
|
||||
return_desc: "",
|
||||
collection_bank: "",
|
||||
collection_acccount: ""
|
||||
project_name: "",
|
||||
name: "",
|
||||
happen_time: "",
|
||||
device_accident: "",
|
||||
content: "",
|
||||
file: '',
|
||||
remark: "",
|
||||
dept_id: '',
|
||||
org_id: "",
|
||||
|
||||
})
|
||||
|
||||
|
||||
@ -274,9 +195,9 @@ const formRules = reactive<any>({
|
||||
|
||||
// 获取详情
|
||||
const setFormData = async (data: Record<any, any>) => {
|
||||
if (data.return_desc && data.return_desc.length > 0) {
|
||||
if (data.return_desc.includes(",")) {
|
||||
const arry1 = data.return_desc.split(',').map((item: any, index: any) => {
|
||||
if (data.file && data.file.length > 0) {
|
||||
if (data.file.includes(",")) {
|
||||
const arry1 = data.file.split(',').map((item: any, index: any) => {
|
||||
return {
|
||||
name: `文件${index + 1}`,
|
||||
uri: item
|
||||
@ -284,32 +205,29 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
});
|
||||
Object.assign(formDataannex, arry1)
|
||||
} else {
|
||||
const arry1 = [{ name: `文件1`, uri: data.return_desc }]
|
||||
const arry1 = [{ name: `文件1`, uri: data.file }]
|
||||
Object.assign(formDataannex, arry1)
|
||||
console.log(formDataannex)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
for (const key in formData) {
|
||||
if (data[key] != null && data[key] != undefined) {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
custom_name.value = data.custom.name
|
||||
project_name.value = data.project.name
|
||||
project_code.value = data.project.project_code
|
||||
project_amount.value = data.contract.amount
|
||||
contract_name.value = data.contract.contract_name;
|
||||
contract_no.value = data.contract.contract_code
|
||||
|
||||
|
||||
|
||||
}
|
||||
const getDetail = async (row: Record<string, any>) => {
|
||||
const data = await apirefundapplyDetail({
|
||||
const data = await safetysuperviseDetail({
|
||||
id: row.id
|
||||
})
|
||||
setFormData(data)
|
||||
@ -319,16 +237,16 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.return_desc = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
console.log(formRef.value?.validate(), '22222222')
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
||||
|
||||
const data = { ...formData }
|
||||
mode.value == 'edit'
|
||||
? await apirefundapplyEdit(data)
|
||||
: await apirefundapplyAdd(data)
|
||||
? await safetysuperviseEdit(data)
|
||||
: await safetysuperviseAdd(data)
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
@ -337,11 +255,8 @@ const handleSubmit = async () => {
|
||||
const open = (type = 'add') => {
|
||||
mode.value = type
|
||||
popupRef.value?.open()
|
||||
getlist()
|
||||
|
||||
getAllProjectTypes().then((res) => {
|
||||
|
||||
protype.splice(0, protype.length, ...res);
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭回调
|
||||
|
@ -2,13 +2,21 @@
|
||||
<div>
|
||||
<el-card class="!border-none mb-4" shadow="never">
|
||||
<el-form class="mb-[-16px]" :model="queryParams" inline>
|
||||
<el-form-item label="合同编号" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_no" clearable placeholder="请输入合同编号" />
|
||||
|
||||
<el-form-item label="监督名称" prop="name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.name" clearable placeholder="请输入监督名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="合同名称" prop="project_role_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.contract_name" clearable placeholder="请输入合同名称" />
|
||||
<el-form-item label="项目名称" prop="project_name">
|
||||
<el-input class="w-[280px]" v-model="queryParams.project_name" clearable placeholder="请输入项目名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设备事故" prop="device_accident">
|
||||
<el-input class="w-[280px]" v-model="queryParams.device_accident" clearable placeholder="请输入设备事故" />
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="发生时间" prop="require">
|
||||
<el-date-picker class="w-[280px]" v-model="queryParams.happen_time" clearable type="date" value-format="YYYY-MM-DD" placeholder="选择发生时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="resetPage">查询</el-button>
|
||||
@ -17,44 +25,37 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_event/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_event/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
<div class="mt-4">
|
||||
<el-table :data="pager.lists" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="退款单号" prop="project_name" show-overflow-tooltip />
|
||||
<el-table-column label="客户名称" prop="project_code" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_role_name" show-overflow-tooltip />
|
||||
<el-table-column label="合同编号" prop="admin_name" show-overflow-tooltip />
|
||||
<el-table-column label="退款原因" prop="reason" show-overflow-tooltip />
|
||||
<el-table-column label="退款日期" prop="refund_date" show-overflow-tooltip />
|
||||
<el-table-column label="退款金额" prop="amount" show-overflow-tooltip />
|
||||
<el-table-column label="退款方式" prop="refund_type" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<dict-value :options="dictData.refund_type" :value="row.refund_type" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款人" prop="refunder" show-overflow-tooltip />
|
||||
<el-table-column label="组织名称" prop="org_name" show-overflow-tooltip />
|
||||
<el-table-column label="部门名称" prop="dept_name" show-overflow-tooltip />
|
||||
<el-table-column label="项目名称" prop="project_name" show-overflow-tooltip />
|
||||
<!-- <el-table-column label="项目编码" prop="project_code" show-overflow-tooltip /> -->
|
||||
<el-table-column label="监督名称" prop="name" show-overflow-tooltip />
|
||||
<el-table-column label="发生时间" prop="happen_time" show-overflow-tooltip />
|
||||
<el-table-column label="设备事故" prop="device_accident" show-overflow-tooltip />
|
||||
<el-table-column label="备注" prop="remark" show-overflow-tooltip />
|
||||
<el-table-column label="附件" prop="file" show-overflow-tooltip />
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_event/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_event/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -72,7 +73,7 @@
|
||||
<script lang="ts" setup name="projectLists">
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { useDictData } from '@/hooks/useDictOptions'
|
||||
import { apirefundapplyLists, apirefundapplyDelete, apirefundapplyDetail } from '@/api/refund'
|
||||
import { safetysuperviseLists, safetysuperviseDelete, safetysuperviseDetail } from '@/api/safety_supervise'
|
||||
import { timeFormat } from '@/utils/util'
|
||||
import { getAllProjectTypes } from '@/api/projecttype'
|
||||
const protype = reactive([])
|
||||
@ -87,9 +88,10 @@ const showDtail = ref(false)
|
||||
|
||||
// 查询条件
|
||||
const queryParams = reactive({
|
||||
contract_no: '',
|
||||
contract_name: '',
|
||||
|
||||
name: '',
|
||||
happen_time: '',
|
||||
device_accident: '',
|
||||
project_name: '',
|
||||
})
|
||||
|
||||
|
||||
@ -106,7 +108,7 @@ const handleSelectionChange = (val: any[]) => {
|
||||
const { dictData } = useDictData('refund_type')
|
||||
// 分页相关
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
fetchFun: apirefundapplyLists,
|
||||
fetchFun: safetysuperviseLists,
|
||||
params: queryParams
|
||||
})
|
||||
|
||||
@ -121,7 +123,7 @@ const handleAdd = async () => {
|
||||
// 编辑
|
||||
const handleEdit = async (data: any) => {
|
||||
console.log(data.id)
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetysuperviseDetail({ id: data.id })
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
editRef.value?.open('edit')
|
||||
@ -131,11 +133,11 @@ const handleEdit = async (data: any) => {
|
||||
// 删除
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
await feedback.confirm('确定要删除?')
|
||||
await apirefundapplyDelete({ id })
|
||||
await safetysuperviseDelete({ id })
|
||||
getLists()
|
||||
}
|
||||
const handledetail = async (data: any) => {
|
||||
let res = await apirefundapplyDetail({ id: data.id })
|
||||
let res = await safetysuperviseDetail({ id: data.id })
|
||||
showDtail.value = true
|
||||
await nextTick()
|
||||
detailRef.value?.open()
|
||||
|
@ -117,7 +117,6 @@ const project_name = ref('')
|
||||
import { deptAll } from '@/api/org/department'
|
||||
import { getAll } from '@/api/org/organization'
|
||||
const userInfo = userStore.userInfo
|
||||
console.log(userInfo, '222222')
|
||||
// 上传文件
|
||||
const handleAvatarSuccess_four = (
|
||||
response,
|
||||
@ -226,7 +225,10 @@ const setFormData = async (data: Record<any, any>) => {
|
||||
formData[key] = data[key]
|
||||
}
|
||||
}
|
||||
|
||||
if (data.dept_id) {
|
||||
getlist1(data.dept_id
|
||||
)
|
||||
}
|
||||
|
||||
project_name.value = data.project_name
|
||||
|
||||
@ -243,7 +245,7 @@ const getDetail = async (row: Record<string, any>) => {
|
||||
// 提交按钮
|
||||
const handleSubmit = async () => {
|
||||
if (formDataannex.length > 0) {
|
||||
formData.file = formDataannex.map((item: any) => item.uri).toString()
|
||||
formData.file = JSON.stringify(formDataannex.map((item: any) => item.uri))
|
||||
}
|
||||
|
||||
await formRef.value?.validate()
|
||||
|
@ -17,13 +17,13 @@
|
||||
</el-form>
|
||||
</el-card>
|
||||
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
|
||||
<el-button v-perms="['refund.refund/add']" type="primary" @click="handleAdd">
|
||||
<el-button v-perms="['safety.safety_target/add']" type="primary" @click="handleAdd">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
<el-button v-perms="['safety.safety_target/delete']" :disabled="!selectData.length" @click="handleDelete(selectData)">
|
||||
删除
|
||||
</el-button>
|
||||
|
||||
@ -47,15 +47,15 @@
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button v-perms="['refund.refund/edit']" type="primary" link @click="handleEdit(row)">
|
||||
<el-button v-perms="['safety.safety_target/edit']" type="primary" link @click="handleEdit(row)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
<el-button v-perms="['safety.safety_target/delete']" type="danger" link @click="handleDelete(row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
<el-button v-perms="['refund.refund/detail']" link @click="handledetail(row)">
|
||||
<!-- <el-button v-perms="['safety.safety_target/detail']" link @click="handledetail(row)">
|
||||
详情
|
||||
</el-button>
|
||||
</el-button> -->
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
Loading…
x
Reference in New Issue
Block a user