You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

600 lines
24 KiB

import { isString } from 'min-dash'
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
/**
* 业务组件
* tableFormBlur 表格表单失去焦点时候获取焦点
* FormBlur 表格失去焦点时候获取焦点
*/
export const tableFormBlurVer = async (headerItem, val, row, index, routeName, formRef, detailData, tableData, callback) => {
try {
if (headerItem?.tableForm?.searchPage && headerItem?.tableForm?.verificationParams) {
if (val && isString(val)) {
if (!headerItem?.tableForm?.multiple && val.indexOf(',') > -1) {
message.alert('该输入框只能输入一条数据')
row[headerItem.field] = ''
return
}
// 校验
const params = ref({})
const params1 = ref({})
const filters: any[] = []
const searchCondition = headerItem.tableForm.searchCondition //获取data.ts参数信息
const verificationParams = headerItem.tableForm.verificationParams //获取data.ts参数信息
// 循环参数设置参数为key:value格式
if (searchCondition && searchCondition.length > 0) {
for (let i = 0; i < searchCondition.length; i++) {
if (searchCondition[i].isMainValue) {
params.value[searchCondition[i].key] =
formRef.formModel[searchCondition[i].value]
? formRef.formModel[searchCondition[i].value]
: detailData
? detailData[searchCondition[i].value]
: row
? row[searchCondition[i].value]
: ''
params1.value[searchCondition[i].key] =
formRef.formModel[searchCondition[i].value]
? formRef.formModel[searchCondition[i].value]
: detailData
? detailData[searchCondition[i].value]
: row
? row[searchCondition[i].value]
: ''
// 是否含有空参数情况
let isNull = false
if (
params.value[searchCondition[i].key] == '' ||
params.value[searchCondition[i].key] == undefined
) {
if(!searchCondition[i].isOptional){ // 添加参数可选可空的判断
isNull = true
}
}
if (isNull) {
message.warning(
searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!'
)
row[headerItem.field] = ''
return
}
if(searchCondition[i].isOptional&&!params.value[searchCondition[i].key]){ // 添加参数可选可空的判断
continue
}
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: formRef.formModel[
searchCondition[i].value
]
? formRef.formModel[searchCondition[i].value]
: detailData
? detailData[searchCondition[i].value]
: row
? row[searchCondition[i].value]
: ''
})
} else if (searchCondition[i].isTableRowValue) {
if (searchCondition[i].required) {
if (row[searchCondition[i].value] == '' || row[searchCondition[i].value] == undefined) {
message.warning(
searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!'
)
row[headerItem.field] = ''
return
}
}
//查询当前table表数据的值
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: row[searchCondition[i].value]
})
params1.value[searchCondition[i].key] = row[searchCondition[i].value]
} else {
// 扩展 转换为筛选条件进行查询
if (searchCondition[i].isSearch) {
if (searchCondition[i].isFormModel) {
//用formModel中的值
if (searchCondition[i].required) {
if (
formRef.formModel[searchCondition[i].value] == '' ||
formRef.formModel[searchCondition[i].value] == undefined
) {
message.warning(
searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!'
)
row[headerItem.field] = ''
return
}
}
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: formRef.formModel[searchCondition[i].value]
})
params1.value[searchCondition[i].key] = formRef.formModel[searchCondition[i].value]
} else {
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: searchCondition[i].value
})
params1.value[searchCondition[i].key] = searchCondition[i].value
}
} else {
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: searchCondition[i].value
})
params1.value[searchCondition[i].key] = searchCondition[i].value
}
}
}
}
if (verificationParams && verificationParams.length > 0) {
// 转换筛选条件所需
for (let i = 0; i < verificationParams.length; i++) {
// 扩展 转换为筛选条件进行查询
if (verificationParams[i].isSearch) {
if (verificationParams[i].isFormModel) {
filters.push({
action: verificationParams[i].action,
column: verificationParams[i].key,
value: formRef.formModel[verificationParams[i].value]
? formRef.formModel[verificationParams[i].value]
: val.trim()
})
verificationParams[i].key1 = verificationParams[i].key + 's'
params1.value[verificationParams[i].key1] =
formRef.formModel[verificationParams[i].value]
? formRef.formModel[verificationParams[i].value]
: val.trim()
} else {
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: searchCondition[i].value
})
verificationParams[i].key1 = verificationParams[i].key + 's'
params1.value[verificationParams[i].key1] = searchCondition[i].value
}
} else {
params[verificationParams[i].key] = verificationParams[i].value
verificationParams[i].key1 = verificationParams[i].key + 's'
params1.value[verificationParams[i].key1] = verificationParams[i].value
}
}
}
console.log(params1.value)
// 判断代码是否存在
if (!headerItem?.tableForm.isRepeat) {
const seen = new Set()
const repeatCode = new Set()
const arr = tableData.map((item) => item[headerItem.field]?.trim())
arr.forEach((item) => {
if (item) {
if (seen.has(item)) {
repeatCode.add(item)
} else {
seen.add(item)
}
}
})
const arr1 = Array.from(repeatCode)
if (arr1.length > 0) {
message.warning(`${arr1.join(',')}${t('ts.已经存在')}`)
row[headerItem.field] = ''
return
}
}
if (filters.length > 0) {
params.value.isSearch = true
params.value.filters = filters
}
const obj = {
by: 'ASC',
pageNo: 1,
pageSize: 20
}
params.value = {
isSearch: params.value.isSearch,
filters: params.value.filters,
...obj
}
const list = ref()
if (headerItem?.tableForm?.multiple) {
const pageApi = row.searchTable?.verificationPage ? row.searchTable?.verificationPage : headerItem.tableForm.verificationPage
await pageApi(params1.value).then(async (res) => {
const arr1 = val.split(',')
const list = ref([])
list.value = res?.length > 0 ? res : []
if (list.value?.length == 0) {
message.alert('暂无数据')
formRef.setValues(setV)
return
}
console.log(arr1)
console.log(list.value)
if (arr1.length != list.value.length) {
const arr2 = list.value.map((item) => item.code)
const str = [
...arr1.filter((item) => !arr2.includes(item)),
...arr2.filter((item) => !arr1.includes(item))
].join(',')
message.alert('代码' + str + '没有找到对应数据')
formRef.setValues(setV)
return
}
callback(list.value)
})
} else {
// 调取包装接口
await headerItem.tableForm.searchPage(params.value).then(async (res) => {
list.value = res?.list?.length > 0 ? res.list.slice(0, 1) : []
// 只查一条数据,多条数据查询默认显示不存在
if (list.value?.length == 0) {
message.alert('代码' + row[headerItem.field] + '没有找到对应数据')
row[headerItem.field] = ''
return
}
callback(list.value)
})
}
}
}
} catch {
message.warning('暂无数据')
row[headerItem.field] = ''
return
}
}
export const FormBlur = async (field, val, routeName, formRef, detailData, formSchema, callback) => {
const setV = {}
setV[field] = ''
try {
if (formSchema.searchPage && formSchema.verificationParams) {
if (!formSchema.multiple) {
//获取data.ts参数信息
const searchCondition = formSchema?.searchCondition || []
//获取失去焦点参数信息
const verificationParams = formSchema?.verificationParams ||
[]
console.log('走新方法啦')
// searchCondition = [...searchCondition, ...verificationParams]
if (val && isString(val)) {
let params = {}
const _searchCondition = {}
const filters: any[] = []
if (searchCondition && searchCondition.length > 0) {
// 转换筛选条件所需
for (let i = 0; i < searchCondition.length; i++) {
// searchCondition.forEach((item) => {
// 查询条件为主表某字段,需要赋值主表数据,数据来源是详情的,赋值需要从row中获取
if (searchCondition[i].isMainValue) {
_searchCondition[searchCondition[i].key] = formRef.formModel[
searchCondition[i].value
]
? formRef.formModel[searchCondition[i].value]
: detailData
? detailData[searchCondition[i].value]
: // : row
// ? row[searchCondition[i].value]
''
// 是否含有空参数情况
let isNull = false
if (
_searchCondition[searchCondition[i].key] == '' ||
_searchCondition[searchCondition[i].key] == undefined
) {
isNull = true
}
if (isNull) {
message.warning(
searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!'
)
formRef.setValues(setV)
return
}
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: formRef.formModel[searchCondition[i].value]
})
}
// else if (searchCondition[i].isTableRowValue) {
// if (searchCondition[i].required) {
// if (row[searchCondition[i].value] == '' || row[searchCondition[i].value] == undefined) {
// message.warning(
// searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!'
// )
// return
// }
// }
// row[searchCondition[i].value]
// //查询当前table表数据的值
// _searchCondition[searchCondition[i].key] = row[searchCondition[i].value]
// }
else {
// 扩展 转换为筛选条件进行查询
if (searchCondition[i].isSearch) {
if (searchCondition[i].isFormModel) {
//用formModel中的值
if (searchCondition[i].required) {
if (
formRef.formModel[searchCondition[i].value] == '' ||
formRef.formModel[searchCondition[i].value] == undefined
) {
message.warning(
searchCondition[i].message ? searchCondition[i].message : '前置条件未选择!'
)
formRef.setValues(setV)
return
}
}
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: formRef.formModel[searchCondition[i].value]
})
} else {
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: searchCondition[i].value
})
}
} else {
filters.push({
action: searchCondition[i].action || '==',
column: searchCondition[i].key,
value: searchCondition[i].value
})
}
}
}
}
if (verificationParams && verificationParams.length > 0) {
// 转换筛选条件所需
for (let i = 0; i < verificationParams.length; i++) {
// 扩展 转换为筛选条件进行查询
if (verificationParams[i].isSearch) {
if (verificationParams[i].isFormModel) {
filters.push({
action: verificationParams[i].action,
column: verificationParams[i].key,
value: formRef.formModel[verificationParams[i].value]
? formRef.formModel[verificationParams[i].value]
: val.trim()
})
} else {
filters.push({
action: verificationParams[i].action,
column: verificationParams[i].key,
value: verificationParams[i].value
})
}
} else {
_searchCondition[verificationParams[i].key] = verificationParams[i].value
}
}
}
console.log(filters)
if (filters.length > 0) {
_searchCondition.isSearch = true
_searchCondition.filters = filters
}
const obj = {
by: 'ASC',
pageNo: 1,
pageSize: 20
}
params = {
isSearch: _searchCondition.isSearch,
filters: _searchCondition.filters,
...obj
}
// console.log(333,params)
if (!formSchema?.multiple && val.indexOf(',') > -1) {
message.alert('该输入框只能输入一条数据')
formRef.setValues(setV)
return
}
await formSchema.searchPage(params).then((res) => {
const arr1 = val.split(',')
const list = ref([])
list.value = res?.list?.length > 0 ? res.list.slice(0, 1) : []
if (list.value?.length == 0) {
message.alert('暂无数据')
formRef.setValues(setV)
return
}
if (arr1.length != list.value.length) {
const arr2 = list.value.map((item) => item.code)
const str = [
...arr1.filter((item) => !arr2.includes(item)),
...arr2.filter((item) => !arr1.includes(item))
].join(',')
message.alert('代码' + str + '没有找到对应数据')
formRef.setValues(setV)
return
}
callback(list.value)
})
}
} else {
if (val && isString(val)) {
await formSchema.verificationPage({
codes: val
}).then((res) => {
const arr1 = val.split(',')
const list = ref([])
list.value = res?.length > 0 ? res : []
if (list.value?.length == 0) {
message.alert('暂无数据')
formRef.setValues(setV)
return
}
console.log(arr1)
console.log(list.value)
if (arr1.length != list.value.length) {
const arr2 = list.value.map((item) => item.code)
const str = [
...arr1.filter((item) => !arr2.includes(item)),
...arr2.filter((item) => !arr1.includes(item))
].join(',')
const cleanedStr = str.replace(/[,]+$/, ''); // 去掉末尾的逗号// 去掉所有非字母和数字的符号
message.alert('代码' + cleanedStr + '没有找到对应数据')
formRef.setValues(setV)
return
}
callback(list.value)
})
}
}
}
} catch {
message.alert('暂无数据')
formRef.setValues(setV)
return
}
}
// 根据下方输入框失去焦点校验信息
export const getListByBottonInput = async (headerItem, val, row, routeName, formRef, detailData, tableData, callback) => {
const tableFormSchemaObj = headerItem?.tableForm
console.log(333, tableFormSchemaObj)
if (tableFormSchemaObj.verificationPage && tableFormSchemaObj.verificationParams) {
if (!val) return;
const params = ref({})
const list = ref([])
const searchCondition1 = headerItem.tableForm.searchCondition //获取data.ts参数信息
const verificationParams = headerItem.tableForm.verificationParams //获取data.ts参数信息
// 循环参数设置参数为key:value格式
if (searchCondition1 && searchCondition1.length > 0) {
for (let i = 0; i < searchCondition1.length; i++) {
if (searchCondition1[i].isMainValue) {
params.value[searchCondition1[i].key] = formRef.formModel[
searchCondition1[i].value
]
? formRef.formModel[searchCondition1[i].value]
: detailData
? detailData[searchCondition1[i].value]
: ''
// 是否含有空参数情况
let isNull = false
if (
params.value[searchCondition1[i].key] == '' ||
params.value[searchCondition1[i].key] == undefined
) {
if(!searchCondition1[i].isOptional){ // 添加参数可选可空的判断
if(!searchCondition1[i].isOptional){ // 添加参数可选可空的判断
isNull = true
}
}
}
if (isNull) {
message.warning(
searchCondition1[i].message ? searchCondition1[i].message : '前置条件未选择!'
)
return
}
} else if (searchCondition1[i].isTableRowValue) {
if (searchCondition1[i].required) {
if (row[searchCondition1[i].value] == '' || row[searchCondition1[i].value] == undefined) {
message.warning(
searchCondition1[i].message ? searchCondition1[i].message : '前置条件未选择!'
)
return
}
}
row[searchCondition1[i].value]
//查询当前table表数据的值
params.value[searchCondition1[i].key] = row[searchCondition1[i].value]
} else {
// 扩展 转换为筛选条件进行查询
if (searchCondition1[i].isSearch) {
if (searchCondition1[i].isFormModel) {
//用formModel中的值
if (searchCondition1[i].required) {
if (
formRef.formModel[searchCondition1[i].value] == '' ||
formRef.formModel[searchCondition1[i].value] == undefined
) {
message.warning(
searchCondition1[i].message ? searchCondition1[i].message : '前置条件未选择!'
)
return
}
}
} else {
params.value[searchCondition1[i].key] = searchCondition1[i].value
}
} else {
params.value[searchCondition1[i].key] = searchCondition1[i].value
}
}
}
}
if (verificationParams && verificationParams.length > 0) {
for (let i = 0; i < verificationParams.length; i++) {
console.log(54565, verificationParams[i].key)
verificationParams[i].key1 = verificationParams[i].key + 's'
params.value[verificationParams[i].key1] = val
}
}
const arr1 = val.split(',').map(item => item.trim())
// 判断代码是否存在
if (!headerItem?.tableForm.isRepeat) {
const repeatCode = []
if (tableData.length > 0) {
tableData.forEach((item) => {
const findIndex = arr1.findIndex(valItem => valItem == item[headerItem.field])
if (findIndex > -1) {
arr1.splice(findIndex, 1)
repeatCode.push(item[headerItem.field])
}
})
}
if (repeatCode.length > 0) {
message.warning(`${t('ts.代码')}${repeatCode.join(',')}${t('ts.已经存在')}`);
return;
}
}
await tableFormSchemaObj.verificationPage(params.value).then(async (res) => {
if(!Array.isArray(res)&&res.list&&Array.isArray(res.list)){
res = res.list
}
list.value = res ? res : []
if (arr1.length != res.length) {
const arr2 = res.map((item) => item[headerItem.tableForm.searchField])
const str = [
...arr1.filter((item) => !arr2.includes(item)),
...arr2.filter((item) => !arr1.includes(item))
].join(',')
console.log(arr1.filter((item) => arr2.includes(item)))
console.log(22, str)
if (str) {
message.alert('代码' + str + '没有找到对应数据')
return
}
}
callback(list.value)
})
return
}
}