修改界面
This commit is contained in:
parent
6fdf336b9e
commit
bbc9ad13fe
@ -46,6 +46,16 @@ interface ServiceItem {
|
|||||||
type: ServiceMethodType
|
type: ServiceMethodType
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const SERVICE_SELECTOR_ROWS: string[][] = [
|
||||||
|
['0', '2', '3', '4'],
|
||||||
|
['6', '7', '10', '8', '9', '11', '12', '13'],
|
||||||
|
['37', '38', '39', '40'],
|
||||||
|
['21', '22', '23', '24', '25', '26'],
|
||||||
|
['15', '16', '17', '18', '19', '20'],
|
||||||
|
['29', '30', '31', '32', '33', '34', '35', '36'],
|
||||||
|
['41', '42', '43', '44']
|
||||||
|
]
|
||||||
|
|
||||||
interface DetailRow {
|
interface DetailRow {
|
||||||
id: string
|
id: string
|
||||||
code: string
|
code: string
|
||||||
@ -162,6 +172,12 @@ const serviceDict = computed<ServiceItem[]>(() => {
|
|||||||
const serviceById = computed(() => new Map(serviceDict.value.map(item => [item.id, item])))
|
const serviceById = computed(() => new Map(serviceDict.value.map(item => [item.id, item])))
|
||||||
const serviceIdByCode = computed(() => new Map(serviceDict.value.map(item => [item.code, item.id])))
|
const serviceIdByCode = computed(() => new Map(serviceDict.value.map(item => [item.code, item.id])))
|
||||||
const serviceIdSignature = computed(() => serviceDict.value.map(item => item.id).join('|'))
|
const serviceIdSignature = computed(() => serviceDict.value.map(item => item.id).join('|'))
|
||||||
|
const serviceSelectorRows = computed(() => {
|
||||||
|
const available = new Set(serviceDict.value.map(item => item.id))
|
||||||
|
return SERVICE_SELECTOR_ROWS
|
||||||
|
.map(row => row.filter(id => available.has(id)))
|
||||||
|
.filter(row => row.length > 0)
|
||||||
|
})
|
||||||
const fixedBudgetRow: Pick<DetailRow, 'id' | 'code' | 'name'> = { id: 'fixed-budget-c', code: '', name: t('htZxFw.subtotal') }
|
const fixedBudgetRow: Pick<DetailRow, 'id' | 'code' | 'name'> = { id: 'fixed-budget-c', code: '', name: t('htZxFw.subtotal') }
|
||||||
|
|
||||||
/** 判断是否固定汇总行(小计行)。 */
|
/** 判断是否固定汇总行(小计行)。 */
|
||||||
@ -1276,7 +1292,7 @@ onActivated(async () => {
|
|||||||
<template>
|
<template>
|
||||||
<TooltipProvider>
|
<TooltipProvider>
|
||||||
<div class="h-full min-h-0 flex flex-col gap-2">
|
<div class="h-full min-h-0 flex flex-col gap-2">
|
||||||
<ServiceCheckboxSelector :services="serviceDict" :model-value="selectedIds"
|
<ServiceCheckboxSelector :services="serviceDict" :service-rows="serviceSelectorRows" :model-value="selectedIds"
|
||||||
@update:model-value="handleServiceSelectionChange" />
|
@update:model-value="handleServiceSelectionChange" />
|
||||||
|
|
||||||
<div class="rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col overflow-hidden">
|
<div class="rounded-lg border bg-card xmMx flex min-h-0 flex-1 flex-col overflow-hidden">
|
||||||
|
|||||||
@ -321,7 +321,7 @@ const buildDefaultRows = (projectCountValue = getTargetProjectCount()): DetailRo
|
|||||||
consultCategoryFactor: null,
|
consultCategoryFactor: null,
|
||||||
majorFactor: null,
|
majorFactor: null,
|
||||||
workStageFactor: 1,
|
workStageFactor: 1,
|
||||||
workRatio: 100,
|
workRatio: 1,
|
||||||
budgetFee: null,
|
budgetFee: null,
|
||||||
budgetFeeBasic: null,
|
budgetFeeBasic: null,
|
||||||
budgetFeeOptional: null,
|
budgetFeeOptional: null,
|
||||||
@ -403,7 +403,7 @@ const buildInvestScaleSingleTotalRow = (
|
|||||||
typeof fromDb?.consultCategoryFactor === 'number' ? fromDb.consultCategoryFactor : getDefaultConsultCategoryFactor(),
|
typeof fromDb?.consultCategoryFactor === 'number' ? fromDb.consultCategoryFactor : getDefaultConsultCategoryFactor(),
|
||||||
majorFactor: typeof fromDb?.majorFactor === 'number' ? fromDb.majorFactor : getSingleTotalMajorFactorDefault(),
|
majorFactor: typeof fromDb?.majorFactor === 'number' ? fromDb.majorFactor : getSingleTotalMajorFactorDefault(),
|
||||||
workStageFactor: typeof fromDb?.workStageFactor === 'number' ? fromDb.workStageFactor : 1,
|
workStageFactor: typeof fromDb?.workStageFactor === 'number' ? fromDb.workStageFactor : 1,
|
||||||
workRatio: typeof fromDb?.workRatio === 'number' ? fromDb.workRatio : 100,
|
workRatio: typeof fromDb?.workRatio === 'number' ? fromDb.workRatio : 1,
|
||||||
budgetFee: null,
|
budgetFee: null,
|
||||||
budgetFeeBasic: null,
|
budgetFeeBasic: null,
|
||||||
budgetFeeOptional: null,
|
budgetFeeOptional: null,
|
||||||
|
|||||||
@ -310,7 +310,7 @@ const buildDefaultRows = (projectCountValue = getTargetProjectCount()): DetailRo
|
|||||||
consultCategoryFactor: null,
|
consultCategoryFactor: null,
|
||||||
majorFactor: null,
|
majorFactor: null,
|
||||||
workStageFactor: 1,
|
workStageFactor: 1,
|
||||||
workRatio: 100,
|
workRatio: 1,
|
||||||
budgetFee: null,
|
budgetFee: null,
|
||||||
budgetFeeBasic: null,
|
budgetFeeBasic: null,
|
||||||
budgetFeeOptional: null,
|
budgetFeeOptional: null,
|
||||||
|
|||||||
@ -10,6 +10,7 @@ interface ServiceItem {
|
|||||||
|
|
||||||
const props = defineProps<{
|
const props = defineProps<{
|
||||||
services: ServiceItem[]
|
services: ServiceItem[]
|
||||||
|
serviceRows?: string[][]
|
||||||
modelValue: string[]
|
modelValue: string[]
|
||||||
}>()
|
}>()
|
||||||
|
|
||||||
@ -19,6 +20,25 @@ const emit = defineEmits<{
|
|||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
|
||||||
const selectedSet = computed(() => new Set(props.modelValue))
|
const selectedSet = computed(() => new Set(props.modelValue))
|
||||||
|
const serviceById = computed(() => new Map(props.services.map(item => [item.id, item])))
|
||||||
|
const groupedRows = computed(() => {
|
||||||
|
const rows = Array.isArray(props.serviceRows) ? props.serviceRows : []
|
||||||
|
if (rows.length === 0) return [] as ServiceItem[][]
|
||||||
|
|
||||||
|
const used = new Set<string>()
|
||||||
|
const grouped = rows
|
||||||
|
.map(row => row.map(id => serviceById.value.get(id)).filter((item): item is ServiceItem => Boolean(item)))
|
||||||
|
.map(row => row.filter(item => {
|
||||||
|
if (used.has(item.id)) return false
|
||||||
|
used.add(item.id)
|
||||||
|
return true
|
||||||
|
}))
|
||||||
|
.filter(row => row.length > 0)
|
||||||
|
|
||||||
|
const leftovers = props.services.filter(item => !used.has(item.id))
|
||||||
|
if (leftovers.length > 0) grouped.push(leftovers)
|
||||||
|
return grouped
|
||||||
|
})
|
||||||
|
|
||||||
const toggleService = (id: string, checked: boolean) => {
|
const toggleService = (id: string, checked: boolean) => {
|
||||||
const next = new Set(props.modelValue)
|
const next = new Set(props.modelValue)
|
||||||
@ -45,21 +65,27 @@ const clearAll = () => {
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="rounded-md border p-1.5">
|
<div class="rounded-md border p-1.5">
|
||||||
<div class="flex flex-wrap items-start gap-1">
|
<div v-if="groupedRows.length > 0" class="flex flex-col gap-1.5">
|
||||||
<label
|
<div
|
||||||
v-for="item in props.services"
|
v-for="(row, rowIndex) in groupedRows"
|
||||||
:key="item.id"
|
:key="`service-row-${rowIndex}`"
|
||||||
class="inline-flex w-fit max-w-full cursor-pointer items-start gap-1.5 rounded-md border px-2 py-1 text-[11px] leading-4 hover:bg-muted/60"
|
class="flex flex-wrap items-start gap-1"
|
||||||
>
|
>
|
||||||
<input
|
<label
|
||||||
type="checkbox"
|
v-for="item in row"
|
||||||
class="mt-0.5"
|
:key="item.id"
|
||||||
:checked="selectedSet.has(item.id)"
|
class="inline-flex w-fit max-w-full cursor-pointer items-start gap-1.5 rounded-md border px-2 py-1 text-[11px] leading-4 hover:bg-muted/60"
|
||||||
@change="toggleService(item.id, ($event.target as HTMLInputElement).checked)"
|
>
|
||||||
/>
|
<input
|
||||||
<span class="text-muted-foreground shrink-0">{{ item.code }}</span>
|
type="checkbox"
|
||||||
<span class="text-foreground break-words">{{ item.name }}</span>
|
class="mt-0.5"
|
||||||
</label>
|
:checked="selectedSet.has(item.id)"
|
||||||
|
@change="toggleService(item.id, ($event.target as HTMLInputElement).checked)"
|
||||||
|
/>
|
||||||
|
<span class="text-muted-foreground shrink-0">{{ item.code }}</span>
|
||||||
|
<span class="text-foreground break-words">{{ item.name }}</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="props.services.length === 0" class="px-2 py-4 text-center text-xs text-muted-foreground">
|
<div v-if="props.services.length === 0" class="px-2 py-4 text-center text-xs text-muted-foreground">
|
||||||
{{ t('serviceSelector.empty') }}
|
{{ t('serviceSelector.empty') }}
|
||||||
|
|||||||
@ -707,8 +707,8 @@ watch(canUseLandScale, enabled => {
|
|||||||
|
|
||||||
.quick-calc-layout {
|
.quick-calc-layout {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: minmax(0, 1.45fr) minmax(340px, 0.95fr);
|
grid-template-columns: minmax(0, 1.02fr) minmax(420px, 1.34fr);
|
||||||
gap: 10px;
|
gap: 12px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
}
|
}
|
||||||
@ -724,6 +724,34 @@ watch(canUseLandScale, enabled => {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.quick-calc-panel--form {
|
||||||
|
position: relative;
|
||||||
|
border-color: var(--qc-border);
|
||||||
|
background:
|
||||||
|
radial-gradient(circle at 84% -12%, color-mix(in srgb, hsl(var(--destructive)) 22%, transparent) 0%, transparent 46%),
|
||||||
|
radial-gradient(circle at -8% 108%, color-mix(in srgb, hsl(var(--destructive)) 14%, transparent) 0%, transparent 44%),
|
||||||
|
linear-gradient(160deg, color-mix(in srgb, var(--card) 95%, white) 0%, color-mix(in srgb, var(--card) 86%, var(--muted)) 100%);
|
||||||
|
box-shadow:
|
||||||
|
0 22px 44px color-mix(in srgb, hsl(var(--destructive)) 12%, transparent),
|
||||||
|
0 12px 28px color-mix(in srgb, var(--foreground) 10%, transparent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.quick-calc-panel--form::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
height: 3px;
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
color-mix(in srgb, hsl(var(--destructive)) 58%, white) 0%,
|
||||||
|
color-mix(in srgb, hsl(var(--destructive)) 26%, transparent) 35%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
.quick-calc-panel__header {
|
.quick-calc-panel__header {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: flex-start;
|
align-items: flex-start;
|
||||||
@ -1166,7 +1194,7 @@ watch(canUseLandScale, enabled => {
|
|||||||
|
|
||||||
.quick-calc-panel--form .quick-calc-form {
|
.quick-calc-panel--form .quick-calc-form {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
padding: 8px;
|
padding: 10px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1193,8 +1221,11 @@ watch(canUseLandScale, enabled => {
|
|||||||
|
|
||||||
.quick-calc-panel--form .quick-calc-form-section {
|
.quick-calc-panel--form .quick-calc-form-section {
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
padding: 8px 10px;
|
padding: 10px 12px;
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
|
background:
|
||||||
|
linear-gradient(180deg, color-mix(in srgb, white 30%, transparent) 0%, transparent 100%),
|
||||||
|
color-mix(in srgb, var(--card) 94%, var(--muted));
|
||||||
}
|
}
|
||||||
|
|
||||||
.quick-calc-form-section__header {
|
.quick-calc-form-section__header {
|
||||||
@ -1335,7 +1366,11 @@ watch(canUseLandScale, enabled => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.quick-calc-panel--form .quick-calc-field__readonly--emphasis {
|
.quick-calc-panel--form .quick-calc-field__readonly--emphasis {
|
||||||
font-size: 14px;
|
font-size: 18px;
|
||||||
|
font-weight: 800;
|
||||||
|
color: color-mix(in srgb, hsl(var(--destructive)) 88%, var(--foreground));
|
||||||
|
letter-spacing: 0.015em;
|
||||||
|
text-shadow: 0 1px 0 color-mix(in srgb, white 65%, transparent);
|
||||||
}
|
}
|
||||||
|
|
||||||
.quick-calc-form-hint {
|
.quick-calc-form-hint {
|
||||||
|
|||||||
@ -583,7 +583,7 @@ export const enUS = {
|
|||||||
consultCategoryFactor: 'Consult Category Factor',
|
consultCategoryFactor: 'Consult Category Factor',
|
||||||
majorFactor: 'Major Factor',
|
majorFactor: 'Major Factor',
|
||||||
workStageFactor: 'Work Stage Factor (Draft/Review)',
|
workStageFactor: 'Work Stage Factor (Draft/Review)',
|
||||||
workRatio: 'Work Ratio (%)',
|
workRatio: 'Service Budget Composition Ratio and Quantity Ratio',
|
||||||
total: 'Total',
|
total: 'Total',
|
||||||
remark: 'Remark',
|
remark: 'Remark',
|
||||||
majorGroup: 'Major Code and Major Name'
|
majorGroup: 'Major Code and Major Name'
|
||||||
|
|||||||
@ -582,7 +582,7 @@ export const zhCN = {
|
|||||||
consultCategoryFactor: '咨询分类系数',
|
consultCategoryFactor: '咨询分类系数',
|
||||||
majorFactor: '专业系数',
|
majorFactor: '专业系数',
|
||||||
workStageFactor: '工作环节系数(编审系数)',
|
workStageFactor: '工作环节系数(编审系数)',
|
||||||
workRatio: '工作占比(%)',
|
workRatio: '服务预算构成比率与数量比',
|
||||||
total: '合计',
|
total: '合计',
|
||||||
remark: '说明',
|
remark: '说明',
|
||||||
majorGroup: '专业编码以及工程专业名称'
|
majorGroup: '专业编码以及工程专业名称'
|
||||||
|
|||||||
@ -96,10 +96,14 @@ const activeComponent = computed(() => {
|
|||||||
|
|
||||||
const sideWidthStyle = computed(() => ({ width: 'var(--app-typeline-side-w)' }))
|
const sideWidthStyle = computed(() => ({ width: 'var(--app-typeline-side-w)' }))
|
||||||
const itemGapStyle = computed(() => ({ gap: 'var(--app-typeline-gap)' }))
|
const itemGapStyle = computed(() => ({ gap: 'var(--app-typeline-gap)' }))
|
||||||
|
const axisColStyle = computed(() => ({ width: 'var(--app-typeline-dot)' }))
|
||||||
const dotStyle = computed(() => ({ width: 'var(--app-typeline-dot)', height: 'var(--app-typeline-dot)' }))
|
const dotStyle = computed(() => ({ width: 'var(--app-typeline-dot)', height: 'var(--app-typeline-dot)' }))
|
||||||
const dotInnerStyle = computed(() => ({ width: 'var(--app-typeline-dot-inner)', height: 'var(--app-typeline-dot-inner)' }))
|
const dotInnerStyle = computed(() => ({ width: 'var(--app-typeline-dot-inner)', height: 'var(--app-typeline-dot-inner)' }))
|
||||||
const labelStyle = computed(() => ({ fontSize: 'var(--app-typeline-label-font)', lineHeight: 'var(--app-typeline-label-line)' }))
|
const labelStyle = computed(() => ({ fontSize: 'var(--app-typeline-label-font)', lineHeight: 'var(--app-typeline-label-line)' }))
|
||||||
const lineStyle = computed(() => ({ left: 'var(--app-typeline-line-left)' }))
|
const connectorStyle = computed(() => ({
|
||||||
|
height: 'var(--app-typeline-arrow-shaft-h)',
|
||||||
|
width: 'var(--app-typeline-arrow-line-w)'
|
||||||
|
}))
|
||||||
|
|
||||||
const copyBtnText = ref(t('typeLine.copy'))
|
const copyBtnText = ref(t('typeLine.copy'))
|
||||||
const sheetOpen = ref(false)
|
const sheetOpen = ref(false)
|
||||||
@ -107,6 +111,34 @@ const sheetOpen = ref(false)
|
|||||||
let copyBtnTimer: ReturnType<typeof setTimeout> | null = null
|
let copyBtnTimer: ReturnType<typeof setTimeout> | null = null
|
||||||
let titleOverflowRafId: number | null = null
|
let titleOverflowRafId: number | null = null
|
||||||
|
|
||||||
|
const copyTextWithFallback = async (text: string) => {
|
||||||
|
if (!text) return false
|
||||||
|
|
||||||
|
if (typeof navigator !== 'undefined' && navigator.clipboard?.writeText) {
|
||||||
|
await navigator.clipboard.writeText(text)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof document === 'undefined') return false
|
||||||
|
|
||||||
|
const textarea = document.createElement('textarea')
|
||||||
|
textarea.value = text
|
||||||
|
textarea.setAttribute('readonly', 'true')
|
||||||
|
textarea.style.position = 'fixed'
|
||||||
|
textarea.style.top = '-9999px'
|
||||||
|
textarea.style.left = '-9999px'
|
||||||
|
textarea.style.opacity = '0'
|
||||||
|
document.body.appendChild(textarea)
|
||||||
|
|
||||||
|
try {
|
||||||
|
textarea.focus()
|
||||||
|
textarea.select()
|
||||||
|
textarea.setSelectionRange(0, textarea.value.length)
|
||||||
|
return document.execCommand('copy')
|
||||||
|
} finally {
|
||||||
|
document.body.removeChild(textarea)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -118,8 +150,8 @@ const handleCopySubtitle = async () => {
|
|||||||
if (!text) return
|
if (!text) return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await navigator.clipboard.writeText(text)
|
const copied = await copyTextWithFallback(text)
|
||||||
copyBtnText.value = t('typeLine.copied')
|
copyBtnText.value = copied ? t('typeLine.copied') : t('typeLine.copyFailed')
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('copy failed:', error)
|
console.error('copy failed:', error)
|
||||||
copyBtnText.value = t('typeLine.copyFailed')
|
copyBtnText.value = t('typeLine.copyFailed')
|
||||||
@ -256,21 +288,29 @@ useMotionValueEvent(
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div :class="['flex flex-col gap-6 relative ', (props.title || props.subtitle || props.metaText) ? 'mt-3' : 'mt-6']">
|
<div :class="['flex flex-col gap-2 relative ', (props.title || props.subtitle || props.metaText) ? 'mt-3' : 'mt-6']">
|
||||||
<div :style="lineStyle" class="absolute top-3 bottom-3 w-[1.5px] bg-border/60"></div>
|
<div v-for="(item, index) in props.categories" :key="item.key"
|
||||||
|
:style="itemGapStyle" class="flex items-start cursor-pointer group" @click="switchCategory(item.key)">
|
||||||
<div v-for="item in props.categories" :key="item.key"
|
<div :style="axisColStyle" class="flex shrink-0 flex-col items-center">
|
||||||
:style="itemGapStyle" class="relative flex items-center cursor-pointer group" @click="switchCategory(item.key)">
|
<div :class="[
|
||||||
<div :class="[
|
'z-10 rounded-full border-2 flex shrink-0 items-center justify-center transition-all duration-200',
|
||||||
'z-10 rounded-full border-2 flex items-center justify-center transition-all duration-200',
|
activeCategory === item.key
|
||||||
activeCategory === item.key
|
? 'bg-primary border-primary shadow-[0_0_0_3px_rgba(var(--primary),0.15)]'
|
||||||
? 'bg-primary border-primary shadow-[0_0_0_3px_rgba(var(--primary),0.15)]'
|
: 'bg-background border-muted-foreground/40 group-hover:border-muted-foreground/70'
|
||||||
: 'bg-background border-muted-foreground/40 group-hover:border-muted-foreground/70'
|
]" :style="dotStyle">
|
||||||
]" :style="dotStyle">
|
<div v-if="activeCategory === item.key" class="bg-background rounded-full" :style="dotInnerStyle"></div>
|
||||||
<div v-if="activeCategory === item.key" class="bg-background rounded-full" :style="dotInnerStyle"></div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="index < props.categories.length - 1"
|
||||||
|
class="flex flex-col items-center"
|
||||||
|
:style="{ paddingTop: 'var(--app-typeline-arrow-offset)' }"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<div :style="connectorStyle" class="typeline-arrow-connector"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span :class="[
|
<span :class="[
|
||||||
'transition-colors duration-200',
|
'pt-px transition-colors duration-200',
|
||||||
activeCategory === item.key
|
activeCategory === item.key
|
||||||
? 'font-semibold text-primary'
|
? 'font-semibold text-primary'
|
||||||
: 'text-muted-foreground group-hover:text-foreground'
|
: 'text-muted-foreground group-hover:text-foreground'
|
||||||
@ -391,4 +431,23 @@ useMotionValueEvent(
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.typeline-arrow-connector {
|
||||||
|
position: relative;
|
||||||
|
background: color-mix(in oklab, var(--foreground) 22%, var(--border));
|
||||||
|
border-radius: 9999px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.typeline-arrow-connector::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 100%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 0;
|
||||||
|
height: 0;
|
||||||
|
border-left: calc(var(--app-typeline-arrow-head-w) / 2) solid transparent;
|
||||||
|
border-right: calc(var(--app-typeline-arrow-head-w) / 2) solid transparent;
|
||||||
|
border-top: var(--app-typeline-arrow-head-h) solid color-mix(in oklab, var(--foreground) 22%, var(--border));
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -334,7 +334,7 @@ const buildDefaultScaleRows = (
|
|||||||
consultCategoryFactor: defaultConsultCategoryFactor,
|
consultCategoryFactor: defaultConsultCategoryFactor,
|
||||||
majorFactor: majorFactorMap?.get(id) ?? getDefaultMajorFactorById(id),
|
majorFactor: majorFactorMap?.get(id) ?? getDefaultMajorFactorById(id),
|
||||||
workStageFactor: 1,
|
workStageFactor: 1,
|
||||||
workRatio: 100
|
workRatio: 1
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -430,7 +430,7 @@ const getInvestScaleSingleTotalBudgetFee = (
|
|||||||
majorFactor: getRowNumberOrFallback(row, 'majorFactor', defaultMajorFactor),
|
majorFactor: getRowNumberOrFallback(row, 'majorFactor', defaultMajorFactor),
|
||||||
consultCategoryFactor: getRowNumberOrFallback(row, 'consultCategoryFactor', defaultConsultCategoryFactor),
|
consultCategoryFactor: getRowNumberOrFallback(row, 'consultCategoryFactor', defaultConsultCategoryFactor),
|
||||||
workStageFactor: getRowNumberOrFallback(row, 'workStageFactor', 1),
|
workStageFactor: getRowNumberOrFallback(row, 'workStageFactor', 1),
|
||||||
workRatio: getRowNumberOrFallback(row, 'workRatio', 100)
|
workRatio: getRowNumberOrFallback(row, 'workRatio', 1)
|
||||||
}, 'cost')
|
}, 'cost')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -444,7 +444,7 @@ const getInvestScaleSingleTotalBudgetFee = (
|
|||||||
const consultCategoryFactor = getRowNumberOrFallback(onlyRow, 'consultCategoryFactor', defaultConsultCategoryFactor)
|
const consultCategoryFactor = getRowNumberOrFallback(onlyRow, 'consultCategoryFactor', defaultConsultCategoryFactor)
|
||||||
const majorFactor = getRowNumberOrFallback(onlyRow, 'majorFactor', defaultMajorFactor)
|
const majorFactor = getRowNumberOrFallback(onlyRow, 'majorFactor', defaultMajorFactor)
|
||||||
const workStageFactor = getRowNumberOrFallback(onlyRow, 'workStageFactor', 1)
|
const workStageFactor = getRowNumberOrFallback(onlyRow, 'workStageFactor', 1)
|
||||||
const workRatio = getRowNumberOrFallback(onlyRow, 'workRatio', 100)
|
const workRatio = getRowNumberOrFallback(onlyRow, 'workRatio', 1)
|
||||||
return getScaleBudgetFeeByRow({
|
return getScaleBudgetFeeByRow({
|
||||||
amount: resolvedTotalAmount,
|
amount: resolvedTotalAmount,
|
||||||
benchmarkBudgetBasicChecked: typeof onlyRow?.benchmarkBudgetBasicChecked === 'boolean' ? onlyRow.benchmarkBudgetBasicChecked : true,
|
benchmarkBudgetBasicChecked: typeof onlyRow?.benchmarkBudgetBasicChecked === 'boolean' ? onlyRow.benchmarkBudgetBasicChecked : true,
|
||||||
@ -485,7 +485,7 @@ const buildInvestScaleSingleTotalDetailRows = (
|
|||||||
1
|
1
|
||||||
)
|
)
|
||||||
const workStageFactor = getRowNumberOrFallback(onlyRow, 'workStageFactor', 1)
|
const workStageFactor = getRowNumberOrFallback(onlyRow, 'workStageFactor', 1)
|
||||||
const workRatio = getRowNumberOrFallback(onlyRow, 'workRatio', 100)
|
const workRatio = getRowNumberOrFallback(onlyRow, 'workRatio', 1)
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@ -674,7 +674,7 @@ const normalizeScopedScaleRows = (
|
|||||||
(hasWorkStageFactor ? null : 1),
|
(hasWorkStageFactor ? null : 1),
|
||||||
workRatio:
|
workRatio:
|
||||||
toFiniteNumberOrNull(row.workRatio) ??
|
toFiniteNumberOrNull(row.workRatio) ??
|
||||||
(hasWorkRatio ? null : 100)
|
(hasWorkRatio ? null : 1)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -113,7 +113,7 @@ export const buildDefaultScaleRows = (
|
|||||||
consultCategoryFactor: defaultFactor,
|
consultCategoryFactor: defaultFactor,
|
||||||
majorFactor: majorFactorMap?.get(id) ?? getDefaultMajorFactor(id),
|
majorFactor: majorFactorMap?.get(id) ?? getDefaultMajorFactor(id),
|
||||||
workStageFactor: 1,
|
workStageFactor: 1,
|
||||||
workRatio: 100
|
workRatio: 1
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -54,7 +54,7 @@ export const getBenchmarkBudgetByScale = (value: unknown, mode: ScaleMode) => {
|
|||||||
*
|
*
|
||||||
* 这个方法负责“乘系数”这一层:
|
* 这个方法负责“乘系数”这一层:
|
||||||
* 1. 输入的是已经拆好的基准预算 basic / optional
|
* 1. 输入的是已经拆好的基准预算 basic / optional
|
||||||
* 2. 再乘咨询分类系数、专业系数、阶段系数、工作占比
|
* 2. 再乘咨询分类系数、专业系数、阶段系数、服务预算构成比率与数量比
|
||||||
* 3. 返回服务费的基本部分 / 附加部分 / 合计
|
* 3. 返回服务费的基本部分 / 附加部分 / 合计
|
||||||
*
|
*
|
||||||
* 和 `getBenchmarkBudgetSplitByScale` 的区别是:
|
* 和 `getBenchmarkBudgetSplitByScale` 的区别是:
|
||||||
@ -78,7 +78,7 @@ export const getScaleBudgetFeeSplit = (params: {
|
|||||||
const majorFactor = toFiniteNumberOrNull(params.majorFactor)
|
const majorFactor = toFiniteNumberOrNull(params.majorFactor)
|
||||||
const consultCategoryFactor = toFiniteNumberOrNull(params.consultCategoryFactor)
|
const consultCategoryFactor = toFiniteNumberOrNull(params.consultCategoryFactor)
|
||||||
const workStageFactor = hasWorkStageFactor ? toFiniteNumberOrNull(params.workStageFactor) : 1
|
const workStageFactor = hasWorkStageFactor ? toFiniteNumberOrNull(params.workStageFactor) : 1
|
||||||
const workRatio = hasWorkRatio ? toFiniteNumberOrNull(params.workRatio) : 100
|
const workRatio = hasWorkRatio ? toFiniteNumberOrNull(params.workRatio) : 1
|
||||||
|
|
||||||
if (
|
if (
|
||||||
benchmarkBudgetBasic == null ||
|
benchmarkBudgetBasic == null ||
|
||||||
@ -95,7 +95,6 @@ export const getScaleBudgetFeeSplit = (params: {
|
|||||||
.mul(majorFactor)
|
.mul(majorFactor)
|
||||||
.mul(workStageFactor)
|
.mul(workStageFactor)
|
||||||
.mul(workRatio)
|
.mul(workRatio)
|
||||||
.div(100)
|
|
||||||
const roundedBenchmarkBudget = roundTo(addNumbers(benchmarkBudgetBasic, benchmarkBudgetOptional), 2)
|
const roundedBenchmarkBudget = roundTo(addNumbers(benchmarkBudgetBasic, benchmarkBudgetOptional), 2)
|
||||||
const basic = roundTo(toDecimal(benchmarkBudgetBasic).mul(multiplier), 2)
|
const basic = roundTo(toDecimal(benchmarkBudgetBasic).mul(multiplier), 2)
|
||||||
const optional = roundTo(toDecimal(benchmarkBudgetOptional).mul(multiplier), 2)
|
const optional = roundTo(toDecimal(benchmarkBudgetOptional).mul(multiplier), 2)
|
||||||
@ -121,7 +120,7 @@ export const getScaleBudgetFee = (params: {
|
|||||||
const majorFactor = toFiniteNumberOrNull(params.majorFactor)
|
const majorFactor = toFiniteNumberOrNull(params.majorFactor)
|
||||||
const consultCategoryFactor = toFiniteNumberOrNull(params.consultCategoryFactor)
|
const consultCategoryFactor = toFiniteNumberOrNull(params.consultCategoryFactor)
|
||||||
const workStageFactor = hasWorkStageFactor ? toFiniteNumberOrNull(params.workStageFactor) : 1
|
const workStageFactor = hasWorkStageFactor ? toFiniteNumberOrNull(params.workStageFactor) : 1
|
||||||
const workRatio = hasWorkRatio ? toFiniteNumberOrNull(params.workRatio) : 100
|
const workRatio = hasWorkRatio ? toFiniteNumberOrNull(params.workRatio) : 1
|
||||||
|
|
||||||
if (
|
if (
|
||||||
benchmarkBudget == null ||
|
benchmarkBudget == null ||
|
||||||
@ -138,6 +137,5 @@ export const getScaleBudgetFee = (params: {
|
|||||||
.mul(majorFactor)
|
.mul(majorFactor)
|
||||||
.mul(workStageFactor)
|
.mul(workStageFactor)
|
||||||
.mul(workRatio)
|
.mul(workRatio)
|
||||||
.div(100)
|
|
||||||
return roundTo(toDecimal(roundedBenchmarkBudget).mul(multiplier), 2)
|
return roundTo(toDecimal(roundedBenchmarkBudget).mul(multiplier), 2)
|
||||||
}
|
}
|
||||||
|
|||||||
851
src/sql.ts
851
src/sql.ts
@ -173,44 +173,819 @@ export const majorList = {
|
|||||||
|
|
||||||
|
|
||||||
export const serviceList = {
|
export const serviceList = {
|
||||||
0: { code: 'D1', name: '全过程造价咨询', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 1, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
0: {
|
||||||
1: { code: 'D2', name: '分阶段造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 2, enableInvestScale: null, enableLandScale: null, investScaleSingleTotal: null, amount: null, workDay: null },
|
code: 'D1',
|
||||||
2: { code: 'D2-1', name: '前期阶段造价咨询', quickLabel: '项目前期阶段造价咨询', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 3, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
name: '全过程造价咨询',
|
||||||
3: { code: 'D2-2-1', name: '实施阶段造价咨询(公路、水运)', quickLabel: '项目实施阶段造价咨询', maxCoe: null, minCoe: null, defCoe: 0.55, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: false, isWaterway: true, mutiple: false, order: 4, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
maxCoe: null,
|
||||||
4: { code: 'D2-2-2', name: '实施阶段造价咨询(铁路)', quickLabel: '项目实施阶段造价咨询', maxCoe: null, minCoe: null, defCoe: 0.6, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: false, order: 5, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
minCoe: null,
|
||||||
5: { code: 'D3', name: '基本造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 6, enableInvestScale: null, enableLandScale: null, investScaleSingleTotal: null, amount: null, workDay: null },
|
defCoe: 1,
|
||||||
6: { code: 'D3-1', name: '投资估算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 7, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
desc: '',
|
||||||
7: { code: 'D3-2', name: '设计概算', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 8, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
isRoad: true,
|
||||||
8: { code: 'D3-3', name: '施工图预算', maxCoe: null, minCoe: null, defCoe: 0.25, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 9, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
isRailway: true,
|
||||||
9: { code: 'D3-4', name: '招标工程量清单及清单预算(或最高投标限价)', maxCoe: null, minCoe: null, defCoe: 0.15, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 10, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
isWaterway: true,
|
||||||
10: { code: 'D3-5', name: '清理概算(仅限铁路)', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: false, order: 11, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
mutiple: false,
|
||||||
11: { code: 'D3-6-1', name: '合同(工程)结算', maxCoe: null, minCoe: null, defCoe: 0.3, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: false, isWaterway: true, mutiple: false, order: 12, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
order: 1,
|
||||||
12: { code: 'D3-6-2', name: '合同(工程)结算', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: false, order: 13, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
enableInvestScale: true,
|
||||||
13: { code: 'D3-7', name: '竣工决算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 14, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
enableLandScale: false,
|
||||||
14: { code: 'D4', name: '专项造价咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 15, enableInvestScale: null, enableLandScale: null, investScaleSingleTotal: null, amount: null, workDay: null },
|
investScaleSingleTotal: true,
|
||||||
15: { code: 'D4-1', name: '工程造价顾问', maxCoe: null, minCoe: null, defCoe: 1, desc: '本表系数适用于采用工作量计价法基准预算的调整系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 16, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: true, workDay: true },
|
amount: false,
|
||||||
16: { code: 'D4-2', name: '造价政策制(修)订', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 17, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: true, workDay: true },
|
workDay: true
|
||||||
17: { code: 'D4-3', name: '造价科学与技术研究', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 18, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: true, workDay: true },
|
},
|
||||||
18: { code: 'D4-4', name: '定额测定', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 19, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: true, workDay: true },
|
1: {
|
||||||
19: { code: 'D4-5', name: '造价信息咨询', maxCoe: null, minCoe: null, defCoe: 1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 20, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: true, workDay: true },
|
code: 'D2',
|
||||||
20: { code: 'D4-6', name: '造价鉴定', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '本表系数适用于采用规模计价法基准预算的调整系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 21, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
name: '分阶段造价咨询',
|
||||||
21: { code: 'D4-7', name: '工程成本测算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 22, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
maxCoe: null,
|
||||||
22: { code: 'D4-8', name: '工程成本核算', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 23, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
minCoe: null,
|
||||||
23: { code: 'D4-9', name: '计算工程量', maxCoe: null, minCoe: null, defCoe: 0.2, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 24, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
defCoe: null,
|
||||||
24: { code: 'D4-10', name: '工程变更费用咨询', maxCoe: null, minCoe: null, defCoe: 0.5, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 25, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
desc: '',
|
||||||
25: { code: 'D4-11', name: '调整估算', maxCoe: 0.2, minCoe: 0.1, defCoe: 0.15, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 26, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
isRoad: true,
|
||||||
26: { code: 'D4-12', name: '调整概算', maxCoe: 0.3, minCoe: 0.15, defCoe: 0.225, desc: '本表系数适用于采用规模计价法基准预算的系数;依据其调整时期所在建设阶段和基础资料的不同,其系数取值不同。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 27, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
isRailway: true,
|
||||||
27: { code: 'D4-13', name: '造价检查', maxCoe: null, minCoe: null, defCoe: null, desc: '可按照服务工日数量×服务工日人工单价×综合预算系数;也可按照服务工日数量×服务工日综合预算单价。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 28, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: false, workDay: true },
|
isWaterway: true,
|
||||||
28: { code: 'D4-14', name: '其他专项咨询', maxCoe: null, minCoe: null, defCoe: null, desc: '可参照相同或相似服务的系数。', isRoad: true, isRailway: true, isWaterway: true, mutiple: false, order: 29, enableInvestScale: false, enableLandScale: false, investScaleSingleTotal: null, amount: false, workDay: true },
|
mutiple: false,
|
||||||
29: { code: 'D4-15-1', name: '造价数据测试验证(估算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 30, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
order: 2,
|
||||||
30: { code: 'D4-15-2', name: '造价数据测试验证(概算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 31, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
enableInvestScale: null,
|
||||||
31: { code: 'D4-15-3', name: '造价数据测试验证(施工图预算)', maxCoe: null, minCoe: null, defCoe: 0.1, desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 32, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
enableLandScale: null,
|
||||||
32: { code: 'D4-15-4', name: '造价数据测试验证(招标工程量清单及清单预算(或最高投标限价))', maxCoe: null, minCoe: null, defCoe: 0.06, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 33, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
investScaleSingleTotal: null,
|
||||||
33: { code: 'D4-15-5', name: '造价数据测试验证(清理概算(仅限铁路))', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: true, order: 34, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
amount: null,
|
||||||
34: { code: 'D4-15-6', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.12, desc: '本系数适用于公路和水运工程。', isRoad: true, isRailway: false, isWaterway: true, mutiple: true, order: 35, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
workDay: null
|
||||||
35: { code: 'D4-15-7', name: '造价数据测试验证(合同(工程)结算)', maxCoe: null, minCoe: null, defCoe: 0.08, desc: '本系数适用于铁路工程。', isRoad: false, isRailway: true, isWaterway: false, mutiple: true, order: 36, enableInvestScale: true, enableLandScale: true, investScaleSingleTotal: false, amount: false, workDay: true },
|
},
|
||||||
36: { code: 'D4-15-8', name: '造价数据测试验证(竣工决算)', maxCoe: null, minCoe: null, defCoe: 0.04, desc: '', isRoad: true, isRailway: true, isWaterway: true, mutiple: true, order: 37, enableInvestScale: true, enableLandScale: false, investScaleSingleTotal: true, amount: false, workDay: true },
|
2: {
|
||||||
};
|
code: 'D2-1',
|
||||||
|
name: '前期阶段造价咨询',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.5,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 3,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
3: {
|
||||||
|
code: 'D2-2-1',
|
||||||
|
name: '实施阶段造价咨询(公路、水运)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.55,
|
||||||
|
desc: '本系数适用于公路和水运工程。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: false,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 4,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
4: {
|
||||||
|
code: 'D2-2-2',
|
||||||
|
name: '实施阶段造价咨询(铁路)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.6,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: false,
|
||||||
|
order: 5,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
5: {
|
||||||
|
code: 'D3',
|
||||||
|
name: '基本造价咨询',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: null,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 6,
|
||||||
|
enableInvestScale: null,
|
||||||
|
enableLandScale: null,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: null,
|
||||||
|
workDay: null
|
||||||
|
},
|
||||||
|
6: {
|
||||||
|
code: 'D3-1',
|
||||||
|
name: '投资估算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 7,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
7: {
|
||||||
|
code: 'D3-2',
|
||||||
|
name: '设计概算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.2,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 8,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
8: {
|
||||||
|
code: 'D3-3',
|
||||||
|
name: '施工图预算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.25,
|
||||||
|
desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 9,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
9: {
|
||||||
|
code: 'D3-4',
|
||||||
|
name: '招标工程量清单及清单预算(或最高投标限价)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.15,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 10,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
10: {
|
||||||
|
code: 'D3-5',
|
||||||
|
name: '清理概算(仅限铁路)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.2,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: false,
|
||||||
|
order: 11,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
11: {
|
||||||
|
code: 'D3-6-1',
|
||||||
|
name: '合同(工程)结算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.3,
|
||||||
|
desc: '本系数适用于公路和水运工程。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: false,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 12,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
12: {
|
||||||
|
code: 'D3-6-2',
|
||||||
|
name: '合同(工程)结算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.2,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: false,
|
||||||
|
order: 13,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
13: {
|
||||||
|
code: 'D3-7',
|
||||||
|
name: '竣工决算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 14,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
14: {
|
||||||
|
code: 'D4',
|
||||||
|
name: '专项造价咨询',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: null,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 19,
|
||||||
|
enableInvestScale: null,
|
||||||
|
enableLandScale: null,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: null,
|
||||||
|
workDay: null
|
||||||
|
},
|
||||||
|
15: {
|
||||||
|
code: 'D4-1',
|
||||||
|
name: '工程造价顾问',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 1,
|
||||||
|
desc: '本表系数适用于采用工作量计价法基准预算的调整系数。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 20,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: true,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
16: {
|
||||||
|
code: 'D4-2',
|
||||||
|
name: '造价政策制(修)订',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 21,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: true,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
17: {
|
||||||
|
code: 'D4-3',
|
||||||
|
name: '造价科学与技术研究',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 22,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: true,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
18: {
|
||||||
|
code: 'D4-4',
|
||||||
|
name: '定额测定',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 23,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: true,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
19: {
|
||||||
|
code: 'D4-5',
|
||||||
|
name: '造价信息咨询',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 24,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: true,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
20: {
|
||||||
|
code: 'D4-6',
|
||||||
|
name: '造价鉴定',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.5,
|
||||||
|
desc: '本表系数适用于采用规模计价法基准预算的调整系数。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 25,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
21: {
|
||||||
|
code: 'D4-7',
|
||||||
|
name: '工程成本测算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 26,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
22: {
|
||||||
|
code: 'D4-8',
|
||||||
|
name: '工程成本核算',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 27,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
23: {
|
||||||
|
code: 'D4-9',
|
||||||
|
name: '计算工程量',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.2,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 28,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
24: {
|
||||||
|
code: 'D4-10',
|
||||||
|
name: '工程变更费用咨询',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.5,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 29,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
25: {
|
||||||
|
code: 'D4-11',
|
||||||
|
name: '调整估算',
|
||||||
|
maxCoe: 0.2,
|
||||||
|
minCoe: 0.1,
|
||||||
|
defCoe: 0.15,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 30,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
26: {
|
||||||
|
code: 'D4-12',
|
||||||
|
name: '调整概算',
|
||||||
|
maxCoe: 0.3,
|
||||||
|
minCoe: 0.15,
|
||||||
|
defCoe: 0.225,
|
||||||
|
desc: '本表系数适用于采用规模计价法基准预算的系数;依据其调整时期所在建设阶段和基础资料的不同,其系数取值不同。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 31,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
27: {
|
||||||
|
code: 'D4-13',
|
||||||
|
name: '造价检查',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: null,
|
||||||
|
desc: '可按照服务工日数量×服务工日人工单价×综合预算系数;也可按照服务工日数量×服务工日综合预算单价。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 32,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
28: {
|
||||||
|
code: 'D4-14',
|
||||||
|
name: '其他专项咨询',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: null,
|
||||||
|
desc: '可参照相同或相似服务的系数。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 33,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
29: {
|
||||||
|
code: 'D4-15-1',
|
||||||
|
name: '造价数据测试验证(估算)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.04,
|
||||||
|
desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 34,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
30: {
|
||||||
|
code: 'D4-15-2',
|
||||||
|
name: '造价数据测试验证(概算)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.08,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 35,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
31: {
|
||||||
|
code: 'D4-15-3',
|
||||||
|
name: '造价数据测试验证(施工图预算)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '委托同一咨询人同时负责D3-3和D3-4时,D3-3和D3-4的合计调整系数为0.3。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 36,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
32: {
|
||||||
|
code: 'D4-15-4',
|
||||||
|
name: '造价数据测试验证(招标工程量清单及清单预算(或最高投标限价))',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.06,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 37,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
33: {
|
||||||
|
code: 'D4-15-5',
|
||||||
|
name: '造价数据测试验证(清理概算(仅限铁路))',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.08,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: true,
|
||||||
|
order: 38,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
34: {
|
||||||
|
code: 'D4-15-6',
|
||||||
|
name: '造价数据测试验证(合同(工程)结算)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.12,
|
||||||
|
desc: '本系数适用于公路和水运工程。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: false,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 39,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
35: {
|
||||||
|
code: 'D4-15-7',
|
||||||
|
name: '造价数据测试验证(合同(工程)结算)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.08,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: true,
|
||||||
|
order: 40,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: false,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
36: {
|
||||||
|
code: 'D4-15-8',
|
||||||
|
name: '造价数据测试验证(竣工决算)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.04,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 41,
|
||||||
|
enableInvestScale: true,
|
||||||
|
enableLandScale: false,
|
||||||
|
investScaleSingleTotal: true,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
37: {
|
||||||
|
code: 'D3-1',
|
||||||
|
name: '投资估算•单独委托征地补偿与拆迁补偿',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 15,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
38: {
|
||||||
|
code: 'D3-2',
|
||||||
|
name: '设计概算•单独委托征地补偿与拆迁补偿',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.2,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 16,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
39: {
|
||||||
|
code: 'D3-5',
|
||||||
|
name: '清理概算•单独委托征地补偿与拆迁补偿',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.2,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: false,
|
||||||
|
order: 17,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
40: {
|
||||||
|
code: 'D3-7',
|
||||||
|
name: '竣工决算•单独委托征地补偿与拆迁补偿',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.1,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: false,
|
||||||
|
order: 18,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
41: {
|
||||||
|
code: 'D4-15-1',
|
||||||
|
name: '造价数据测试验证(投资估算•征地补偿与拆迁补偿)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.04,
|
||||||
|
desc: '委托同一咨询人同时负责D3-1和D3-2时,D3-1和D3-2的合计调整系数为0.25。',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 42,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
42: {
|
||||||
|
code: 'D4-15-2',
|
||||||
|
name: '造价数据测试验证(设计概算•征地补偿与拆迁补偿)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.08,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 43,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
43: {
|
||||||
|
code: 'D4-15-5',
|
||||||
|
name: '造价数据测试验证(清理概算•征地补偿与拆迁补偿)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.08,
|
||||||
|
desc: '本系数适用于铁路工程。',
|
||||||
|
isRoad: false,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: false,
|
||||||
|
mutiple: true,
|
||||||
|
order: 44,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
},
|
||||||
|
44: {
|
||||||
|
code: 'D4-15-8',
|
||||||
|
name: '造价数据测试验证(竣工决算•征地补偿与拆迁补偿)',
|
||||||
|
maxCoe: null,
|
||||||
|
minCoe: null,
|
||||||
|
defCoe: 0.04,
|
||||||
|
desc: '',
|
||||||
|
isRoad: true,
|
||||||
|
isRailway: true,
|
||||||
|
isWaterway: true,
|
||||||
|
mutiple: true,
|
||||||
|
order: 45,
|
||||||
|
enableInvestScale: false,
|
||||||
|
enableLandScale: true,
|
||||||
|
investScaleSingleTotal: null,
|
||||||
|
amount: false,
|
||||||
|
workDay: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export const taskList = {
|
export const taskList = {
|
||||||
|
|||||||
@ -57,12 +57,17 @@ html {
|
|||||||
--app-grid-row-h: 2.25rem;
|
--app-grid-row-h: 2.25rem;
|
||||||
--app-grid-font-size: 0.875rem;
|
--app-grid-font-size: 0.875rem;
|
||||||
--app-typeline-side-w: 12.5rem;
|
--app-typeline-side-w: 12.5rem;
|
||||||
--app-typeline-gap: 0.75rem;
|
--app-typeline-gap: 0.625rem;
|
||||||
--app-typeline-label-font: 0.8125rem;
|
--app-typeline-label-font: 0.8125rem;
|
||||||
--app-typeline-label-line: 1rem;
|
--app-typeline-label-line: 1rem;
|
||||||
--app-typeline-dot: 1.25rem;
|
--app-typeline-dot: 1.125rem;
|
||||||
--app-typeline-dot-inner: 0.375rem;
|
--app-typeline-dot-inner: 0.3125rem;
|
||||||
--app-typeline-line-left: 0.5625rem;
|
--app-typeline-line-left: 0.5625rem;
|
||||||
|
--app-typeline-arrow-offset: 0.125rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 0.9375rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.09375rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.5rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.375rem;
|
||||||
--radius: 0.625rem;
|
--radius: 0.625rem;
|
||||||
--background: oklch(1 0 0);
|
--background: oklch(1 0 0);
|
||||||
--foreground: oklch(0.145 0 0);
|
--foreground: oklch(0.145 0 0);
|
||||||
@ -418,12 +423,17 @@ input[inputmode='numeric'] {
|
|||||||
--app-grid-row-h: 2.125rem;
|
--app-grid-row-h: 2.125rem;
|
||||||
--app-grid-font-size: 0.8125rem;
|
--app-grid-font-size: 0.8125rem;
|
||||||
--app-typeline-side-w: 11.5rem;
|
--app-typeline-side-w: 11.5rem;
|
||||||
--app-typeline-gap: 0.625rem;
|
--app-typeline-gap: 0.5625rem;
|
||||||
--app-typeline-label-font: 0.75rem;
|
--app-typeline-label-font: 0.75rem;
|
||||||
--app-typeline-label-line: 0.95rem;
|
--app-typeline-label-line: 0.95rem;
|
||||||
--app-typeline-dot: 1.125rem;
|
--app-typeline-dot: 1rem;
|
||||||
--app-typeline-dot-inner: 0.3125rem;
|
--app-typeline-dot-inner: 0.25rem;
|
||||||
--app-typeline-line-left: 0.5rem;
|
--app-typeline-line-left: 0.5rem;
|
||||||
|
--app-typeline-arrow-offset: 0.125rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 0.8125rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.09375rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.4375rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.3125rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -439,12 +449,17 @@ input[inputmode='numeric'] {
|
|||||||
--app-grid-row-h: 2.25rem;
|
--app-grid-row-h: 2.25rem;
|
||||||
--app-grid-font-size: 0.875rem;
|
--app-grid-font-size: 0.875rem;
|
||||||
--app-typeline-side-w: 12rem;
|
--app-typeline-side-w: 12rem;
|
||||||
--app-typeline-gap: 0.6875rem;
|
--app-typeline-gap: 0.59375rem;
|
||||||
--app-typeline-label-font: 0.8125rem;
|
--app-typeline-label-font: 0.8125rem;
|
||||||
--app-typeline-label-line: 1rem;
|
--app-typeline-label-line: 1rem;
|
||||||
--app-typeline-dot: 1.1875rem;
|
--app-typeline-dot: 1.0625rem;
|
||||||
--app-typeline-dot-inner: 0.375rem;
|
--app-typeline-dot-inner: 0.3125rem;
|
||||||
--app-typeline-line-left: 0.5625rem;
|
--app-typeline-line-left: 0.5625rem;
|
||||||
|
--app-typeline-arrow-offset: 0.125rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 0.875rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.09375rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.46875rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.34375rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,12 +475,17 @@ input[inputmode='numeric'] {
|
|||||||
--app-grid-row-h: 2.25rem;
|
--app-grid-row-h: 2.25rem;
|
||||||
--app-grid-font-size: 0.875rem;
|
--app-grid-font-size: 0.875rem;
|
||||||
--app-typeline-side-w: 12.5rem;
|
--app-typeline-side-w: 12.5rem;
|
||||||
--app-typeline-gap: 0.75rem;
|
--app-typeline-gap: 0.625rem;
|
||||||
--app-typeline-label-font: 0.875rem;
|
--app-typeline-label-font: 0.875rem;
|
||||||
--app-typeline-label-line: 1.1rem;
|
--app-typeline-label-line: 1.1rem;
|
||||||
--app-typeline-dot: 1.25rem;
|
--app-typeline-dot: 1.125rem;
|
||||||
--app-typeline-dot-inner: 0.4375rem;
|
--app-typeline-dot-inner: 0.375rem;
|
||||||
--app-typeline-line-left: 0.625rem;
|
--app-typeline-line-left: 0.625rem;
|
||||||
|
--app-typeline-arrow-offset: 0.125rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 0.9375rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.09375rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.5rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.375rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,12 +501,17 @@ input[inputmode='numeric'] {
|
|||||||
--app-grid-row-h: 2.5rem;
|
--app-grid-row-h: 2.5rem;
|
||||||
--app-grid-font-size: 0.9375rem;
|
--app-grid-font-size: 0.9375rem;
|
||||||
--app-typeline-side-w: 13rem;
|
--app-typeline-side-w: 13rem;
|
||||||
--app-typeline-gap: 0.8125rem;
|
--app-typeline-gap: 0.6875rem;
|
||||||
--app-typeline-label-font: 0.9375rem;
|
--app-typeline-label-font: 0.9375rem;
|
||||||
--app-typeline-label-line: 1.2rem;
|
--app-typeline-label-line: 1.2rem;
|
||||||
--app-typeline-dot: 1.375rem;
|
--app-typeline-dot: 1.25rem;
|
||||||
--app-typeline-dot-inner: 0.5rem;
|
--app-typeline-dot-inner: 0.4375rem;
|
||||||
--app-typeline-line-left: 0.6875rem;
|
--app-typeline-line-left: 0.6875rem;
|
||||||
|
--app-typeline-arrow-offset: 0.15625rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 1rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.125rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.5625rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.40625rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -502,12 +527,17 @@ input[inputmode='numeric'] {
|
|||||||
--app-grid-row-h: 2.625rem;
|
--app-grid-row-h: 2.625rem;
|
||||||
--app-grid-font-size: 1rem;
|
--app-grid-font-size: 1rem;
|
||||||
--app-typeline-side-w: 13.5rem;
|
--app-typeline-side-w: 13.5rem;
|
||||||
--app-typeline-gap: 0.875rem;
|
--app-typeline-gap: 0.75rem;
|
||||||
--app-typeline-label-font: 1rem;
|
--app-typeline-label-font: 1rem;
|
||||||
--app-typeline-label-line: 1.25rem;
|
--app-typeline-label-line: 1.25rem;
|
||||||
--app-typeline-dot: 1.5rem;
|
--app-typeline-dot: 1.375rem;
|
||||||
--app-typeline-dot-inner: 0.5625rem;
|
--app-typeline-dot-inner: 0.5rem;
|
||||||
--app-typeline-line-left: 0.75rem;
|
--app-typeline-line-left: 0.75rem;
|
||||||
|
--app-typeline-arrow-offset: 0.1875rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 1.125rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.125rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.625rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.4375rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -523,11 +553,16 @@ input[inputmode='numeric'] {
|
|||||||
--app-grid-row-h: 2.875rem;
|
--app-grid-row-h: 2.875rem;
|
||||||
--app-grid-font-size: 1.0625rem;
|
--app-grid-font-size: 1.0625rem;
|
||||||
--app-typeline-side-w: 14.5rem;
|
--app-typeline-side-w: 14.5rem;
|
||||||
--app-typeline-gap: 1rem;
|
--app-typeline-gap: 0.875rem;
|
||||||
--app-typeline-label-font: 1.0625rem;
|
--app-typeline-label-font: 1.0625rem;
|
||||||
--app-typeline-label-line: 1.35rem;
|
--app-typeline-label-line: 1.35rem;
|
||||||
--app-typeline-dot: 1.625rem;
|
--app-typeline-dot: 1.5rem;
|
||||||
--app-typeline-dot-inner: 0.625rem;
|
--app-typeline-dot-inner: 0.5625rem;
|
||||||
--app-typeline-line-left: 0.8125rem;
|
--app-typeline-line-left: 0.8125rem;
|
||||||
|
--app-typeline-arrow-offset: 0.21875rem;
|
||||||
|
--app-typeline-arrow-shaft-h: 1.25rem;
|
||||||
|
--app-typeline-arrow-line-w: 0.125rem;
|
||||||
|
--app-typeline-arrow-head-w: 0.6875rem;
|
||||||
|
--app-typeline-arrow-head-h: 0.5rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user