|
|
@@ -1,4 +1,4 @@
|
|
|
-import { computed, type Ref, ref } from 'vue'
|
|
|
+import { computed, type Ref, ref, watch } from 'vue'
|
|
|
|
|
|
import { getPackageListByTaskTypeApi } from '@/services/modules/information'
|
|
|
import type {
|
|
|
@@ -16,20 +16,13 @@ import type { PackageRuleTaskTypeItem, TaskTypeItem } from '@/services/modules/t
|
|
|
|
|
|
import type {
|
|
|
DynamicFormState,
|
|
|
- FieldValue,
|
|
|
+ SingleSelectChangeEvent,
|
|
|
TaskFieldConfigViewItem,
|
|
|
TaskFieldOption,
|
|
|
} from './useTaskForm'
|
|
|
import { isMultipleSelectDrugField, serializeTaskFieldOptions } from './useTaskForm'
|
|
|
import { useTaskFormFields } from './useTaskFormFields'
|
|
|
|
|
|
-export interface SingleSelectChangeEvent {
|
|
|
- previousValue: FieldValue
|
|
|
- value: string
|
|
|
- label: string
|
|
|
- selectedItem: TaskFieldOption
|
|
|
-}
|
|
|
-
|
|
|
interface UseTaskSelectHandlersOptions {
|
|
|
taskTypeId: Ref<string>
|
|
|
form: Ref<DynamicFormState>
|
|
|
@@ -41,7 +34,7 @@ const MEETING_TASK_TYPE_IDS = new Set(['1', '2', '3', '4', '64'])
|
|
|
const SURVEY_TARGET_TASK_TYPE_IDS = new Set(['14', '31', '37'])
|
|
|
const HOSPITAL_OR_PHARMACY_TASK_TYPE_IDS = new Set(['75', '76'])
|
|
|
const ENTITY_SELECTOR_URL = '/pages-common/entity-selector/index'
|
|
|
-const PHARMACY_AUTOFILL_FIELD_ALIASES = ['pharmacyType', 'address', 'shengshiqu']
|
|
|
+const PHARMACY_AUTOFILL_FIELD_ALIASES = ['pharmacyType', 'address', 'shengshiqu', 'entId']
|
|
|
const HOSPITAL_AUTOFILL_FIELD_ALIASES = [
|
|
|
'city',
|
|
|
'address',
|
|
|
@@ -49,6 +42,7 @@ const HOSPITAL_AUTOFILL_FIELD_ALIASES = [
|
|
|
'ownerType',
|
|
|
'website',
|
|
|
'bedNumber',
|
|
|
+ 'entId',
|
|
|
]
|
|
|
const COMPANY_AUTOFILL_FIELD_ALIASES = [
|
|
|
'address',
|
|
|
@@ -61,6 +55,7 @@ const COMPANY_AUTOFILL_FIELD_ALIASES = [
|
|
|
'gsjj',
|
|
|
'jyys',
|
|
|
'registerAddress',
|
|
|
+ 'entId',
|
|
|
]
|
|
|
|
|
|
const PACKAGE_DEPENDENT_FIELD_ALIASES: Readonly<Record<string, readonly string[]>> = {
|
|
|
@@ -125,16 +120,15 @@ export const useTaskSelectHandlers = ({
|
|
|
getFieldFormValue,
|
|
|
getFieldFormValueByAlias,
|
|
|
getFieldValueByAlias,
|
|
|
- setFieldFormValue,
|
|
|
setFieldFormValueByAlias,
|
|
|
setFieldTextByAlias,
|
|
|
- clearFieldValue,
|
|
|
clearFieldValueByAlias,
|
|
|
clearFieldValuesByAlias,
|
|
|
setFieldOptions,
|
|
|
- setFieldOptionsByAlias,
|
|
|
} = useTaskFormFields({ form, taskFieldConfigList })
|
|
|
|
|
|
+ const fieldOptionsRequestVersions = new Map<string, number>()
|
|
|
+
|
|
|
const openEntitySelector = <T>(
|
|
|
alias: string,
|
|
|
eventName: string,
|
|
|
@@ -172,15 +166,24 @@ export const useTaskSelectHandlers = ({
|
|
|
|
|
|
if (!field) return
|
|
|
|
|
|
+ fieldOptionsRequestVersions.set(field.id, (fieldOptionsRequestVersions.get(field.id) ?? 0) + 1)
|
|
|
setFieldOptions(field, [])
|
|
|
}
|
|
|
|
|
|
- const loadFieldOptions = async (
|
|
|
+ const loadLatestFieldOptions = async (
|
|
|
field: TaskFieldConfigViewItem,
|
|
|
loader: () => Promise<TaskFieldOption[]>
|
|
|
): Promise<boolean> => {
|
|
|
+ const requestVersion = (fieldOptionsRequestVersions.get(field.id) ?? 0) + 1
|
|
|
+
|
|
|
+ fieldOptionsRequestVersions.set(field.id, requestVersion)
|
|
|
+
|
|
|
const options = await loader()
|
|
|
- if (!taskFieldConfigList.value.includes(field)) return false
|
|
|
+ const isCurrentField = taskFieldConfigList.value.includes(field)
|
|
|
+
|
|
|
+ if (fieldOptionsRequestVersions.get(field.id) !== requestVersion || !isCurrentField) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
|
|
|
setFieldOptions(field, options)
|
|
|
return true
|
|
|
@@ -222,6 +225,7 @@ export const useTaskSelectHandlers = ({
|
|
|
}
|
|
|
|
|
|
const otcScoreList = ref<PackageRuleTaskTypeItem[]>([])
|
|
|
+ let otcScoreRequestVersion = 0
|
|
|
|
|
|
const normalizeScore = (value: unknown): number => {
|
|
|
const score = Number(value)
|
|
|
@@ -229,6 +233,23 @@ export const useTaskSelectHandlers = ({
|
|
|
return Number.isFinite(score) && score >= 0 ? score : 0
|
|
|
}
|
|
|
|
|
|
+ const normalizeScoreLimit = (value: unknown): number | null => {
|
|
|
+ if (value === undefined || value === null || value === '') return null
|
|
|
+
|
|
|
+ const score = Number(value)
|
|
|
+
|
|
|
+ return Number.isFinite(score) && score >= 0 ? score : null
|
|
|
+ }
|
|
|
+
|
|
|
+ watch(
|
|
|
+ taskTypeId,
|
|
|
+ () => {
|
|
|
+ otcScoreRequestVersion += 1
|
|
|
+ otcScoreList.value = []
|
|
|
+ },
|
|
|
+ { flush: 'sync' }
|
|
|
+ )
|
|
|
+
|
|
|
const otcQuantityField = computed(() => {
|
|
|
return findFieldByAlias('entCount')
|
|
|
})
|
|
|
@@ -258,7 +279,7 @@ export const useTaskSelectHandlers = ({
|
|
|
const taskType = taskTypes.value.find((item) => String(item.id) === String(serviceId))
|
|
|
|
|
|
if (taskType) {
|
|
|
- return normalizeScore(taskType.taskScoreEnd)
|
|
|
+ return normalizeScoreLimit(taskType.taskScoreEnd) ?? Number.POSITIVE_INFINITY
|
|
|
}
|
|
|
|
|
|
const serviceField = findFieldByAlias('realTaskTypeId')
|
|
|
@@ -266,7 +287,7 @@ export const useTaskSelectHandlers = ({
|
|
|
(item) => String(item.value) === String(serviceId)
|
|
|
)
|
|
|
|
|
|
- return normalizeScore(selectedOption?.taskScoreEnd)
|
|
|
+ return normalizeScoreLimit(selectedOption?.taskScoreEnd) ?? Number.POSITIVE_INFINITY
|
|
|
})
|
|
|
|
|
|
const otcRawEstimatedScore = computed(() => otcQuantity.value * otcUnitScore.value)
|
|
|
@@ -294,7 +315,7 @@ export const useTaskSelectHandlers = ({
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
- const loaded = await loadFieldOptions(field, async () => {
|
|
|
+ const loaded = await loadLatestFieldOptions(field, async () => {
|
|
|
const res = await getPackageListByTaskTypeApi(trainingTypeId)
|
|
|
|
|
|
return serializeTaskFieldOptions(res.data)
|
|
|
@@ -380,7 +401,7 @@ export const useTaskSelectHandlers = ({
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
- return loadFieldOptions(field, () => getListDrugTable(packageId))
|
|
|
+ return loadLatestFieldOptions(field, () => getListDrugTable(packageId))
|
|
|
}
|
|
|
if (field.alias === 'realTaskTypeId') {
|
|
|
const drugsValue = getFieldFormValueByAlias('drugs')
|
|
|
@@ -466,11 +487,19 @@ export const useTaskSelectHandlers = ({
|
|
|
*/
|
|
|
if (taskTypeId.value === '47' && field.alias === 'scorePackage') {
|
|
|
otcScoreList.value = []
|
|
|
+ const requestVersion = ++otcScoreRequestVersion
|
|
|
|
|
|
try {
|
|
|
const res = await getPackageRuleTaskTypeApi(event.value)
|
|
|
- otcScoreList.value = Array.isArray(res.data) ? res.data : []
|
|
|
+
|
|
|
+ if (requestVersion === otcScoreRequestVersion) {
|
|
|
+ otcScoreList.value = Array.isArray(res.data) ? res.data : []
|
|
|
+ }
|
|
|
} catch (error) {
|
|
|
+ if (requestVersion !== otcScoreRequestVersion) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
otcScoreList.value = []
|
|
|
console.error('获取OTC服务积分规则失败:', error)
|
|
|
}
|
|
|
@@ -490,7 +519,7 @@ export const useTaskSelectHandlers = ({
|
|
|
return false
|
|
|
}
|
|
|
|
|
|
- return loadFieldOptions(field, () => getListDrugTable(packageId))
|
|
|
+ return loadLatestFieldOptions(field, () => getListDrugTable(packageId))
|
|
|
}
|
|
|
|
|
|
return true
|
|
|
@@ -542,6 +571,7 @@ export const useTaskSelectHandlers = ({
|
|
|
setFieldTextByAlias('ownerType', selectedHospitalItem.yyxz)
|
|
|
setFieldTextByAlias('website', selectedHospitalItem.website)
|
|
|
setFieldTextByAlias('bedNumber', selectedHospitalItem.ybczs)
|
|
|
+ setFieldTextByAlias('entId', selectedHospitalItem.id)
|
|
|
}
|
|
|
|
|
|
const setCompanyNameSelectEvent = (selectedCompanyItem: DistributionItem | string) => {
|
|
|
@@ -570,6 +600,7 @@ export const useTaskSelectHandlers = ({
|
|
|
setFieldTextByAlias('gsjj', selectedCompanyItem.gsjj)
|
|
|
setFieldTextByAlias('jyys', selectedCompanyItem.jyys)
|
|
|
setFieldTextByAlias('registerAddress', selectedCompanyItem.gszcd)
|
|
|
+ setFieldTextByAlias('entId', selectedCompanyItem.id)
|
|
|
}
|
|
|
return {
|
|
|
handleSingleSelectBeforeOpen,
|
|
|
@@ -578,19 +609,5 @@ export const useTaskSelectHandlers = ({
|
|
|
otcEstimatedScore,
|
|
|
otcLargestTotal,
|
|
|
otcIsScoreOverLimit,
|
|
|
-
|
|
|
- /**
|
|
|
- * 以下方法可按需在页面或其他业务逻辑中使用。
|
|
|
- */
|
|
|
- findFieldByAlias,
|
|
|
- getFieldFormValue,
|
|
|
- getFieldFormValueByAlias,
|
|
|
- getFieldValueByAlias,
|
|
|
- setFieldFormValue,
|
|
|
- setFieldFormValueByAlias,
|
|
|
- clearFieldValue,
|
|
|
- clearFieldValueByAlias,
|
|
|
- setFieldOptions,
|
|
|
- setFieldOptionsByAlias,
|
|
|
}
|
|
|
}
|