1
This commit is contained in:
parent
e72012cfc2
commit
85eb501a42
7
.dockerignore
Normal file
7
.dockerignore
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
**
|
||||||
|
!dist/
|
||||||
|
!dist/**
|
||||||
|
!Dockerfile.dist
|
||||||
|
!docker/
|
||||||
|
!docker/dist-server/
|
||||||
|
!docker/dist-server/**
|
||||||
18
Dockerfile.dist
Normal file
18
Dockerfile.dist
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
FROM golang:1.24-alpine AS builder
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
COPY docker/dist-server/ ./
|
||||||
|
|
||||||
|
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o /out/dist-server .
|
||||||
|
|
||||||
|
FROM scratch
|
||||||
|
|
||||||
|
WORKDIR /www
|
||||||
|
|
||||||
|
COPY --from=builder /out/dist-server /dist-server
|
||||||
|
COPY dist/ /www/
|
||||||
|
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
ENTRYPOINT ["/dist-server"]
|
||||||
3
docker/dist-server/go.mod
Normal file
3
docker/dist-server/go.mod
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module dist-server
|
||||||
|
|
||||||
|
go 1.24
|
||||||
69
docker/dist-server/main.go
Normal file
69
docker/dist-server/main.go
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultPort = "80"
|
||||||
|
webRoot = "/www"
|
||||||
|
indexName = "index.html"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
port := strings.TrimSpace(os.Getenv("PORT"))
|
||||||
|
if port == "" {
|
||||||
|
port = defaultPort
|
||||||
|
}
|
||||||
|
|
||||||
|
server := &http.Server{
|
||||||
|
Addr: ":" + port,
|
||||||
|
Handler: http.HandlerFunc(serve),
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("dist server listening on :%s", port)
|
||||||
|
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func serve(w http.ResponseWriter, r *http.Request) {
|
||||||
|
requestPath := strings.TrimPrefix(filepath.Clean("/"+r.URL.Path), "/")
|
||||||
|
if requestPath == "." || requestPath == "" {
|
||||||
|
serveIndex(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fullPath := filepath.Join(webRoot, filepath.FromSlash(requestPath))
|
||||||
|
if info, err := os.Stat(fullPath); err == nil && !info.IsDir() {
|
||||||
|
applyAssetCacheHeaders(w, requestPath)
|
||||||
|
http.ServeFile(w, r, fullPath)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
serveIndex(w, r)
|
||||||
|
}
|
||||||
|
|
||||||
|
func serveIndex(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Cache-Control", "no-cache")
|
||||||
|
w.Header().Set("Pragma", "no-cache")
|
||||||
|
w.Header().Set("Expires", "0")
|
||||||
|
http.ServeFile(w, r, filepath.Join(webRoot, indexName))
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyAssetCacheHeaders(w http.ResponseWriter, requestPath string) {
|
||||||
|
if strings.EqualFold(requestPath, indexName) {
|
||||||
|
w.Header().Set("Cache-Control", "no-cache")
|
||||||
|
w.Header().Set("Pragma", "no-cache")
|
||||||
|
w.Header().Set("Expires", "0")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if strings.HasPrefix(requestPath, "static/") {
|
||||||
|
w.Header().Set("Cache-Control", "public, max-age=31536000, immutable")
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -8,7 +8,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<script>
|
<!-- <script>
|
||||||
//上线前添加访问版本号,强制刷新缓存
|
//上线前添加访问版本号,强制刷新缓存
|
||||||
;(() => {
|
;(() => {
|
||||||
const makeVisitVersion = () => {
|
const makeVisitVersion = () => {
|
||||||
@ -28,7 +28,7 @@
|
|||||||
window.history.replaceState(null, '', nextUrl)
|
window.history.replaceState(null, '', nextUrl)
|
||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
</script>
|
</script> -->
|
||||||
<script type="module" src="/src/main.ts"></script>
|
<script type="module" src="/src/main.ts"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
372
public/data.js
372
public/data.js
@ -1,372 +0,0 @@
|
|||||||
let data1 = {
|
|
||||||
name: 'test001',
|
|
||||||
writer: '张三',// 编制人
|
|
||||||
reviewer: '李四',// 复核人
|
|
||||||
company: '测试公司',// 公司名称
|
|
||||||
date: '2021-09-24',// 编制日期
|
|
||||||
industry: 0,// 0为公路工程,1为铁路工程,2为水运工程
|
|
||||||
fee: 10000,
|
|
||||||
scaleCost: 100000,// scale的cost的合计数
|
|
||||||
overview: '项目概况××××',
|
|
||||||
desc: '在履行造价咨询服务时,宜根据咨询服务质量情况分级确定相应的处罚金额。其中考评得分在大于及等于85和小于90分时,处罚金额为预算费用的10%;其中考评得分在大于及等于80和小于85分时,处罚金额为预算费用的20%;其中考评得分在大于及等于75和小于80分时,处罚金额为预算费用的30%;其中考评得分在大于及等于70和小于75分时,处罚金额为预算费用的40%;其中考评得分小于70分时,处罚金额为预算费用的50%以上。',
|
|
||||||
scale: [// 规模信息
|
|
||||||
{
|
|
||||||
major: 0,
|
|
||||||
cost: 100000,
|
|
||||||
area: 200,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
major: 1,
|
|
||||||
cost: 100000,
|
|
||||||
area: 200,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
serviceCoes: [// 项目咨询分类系数
|
|
||||||
{
|
|
||||||
serviceid: 0,
|
|
||||||
coe: 1.1,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
serviceid: 1,
|
|
||||||
coe: 1.2,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
majorCoes: [// 项目工程专业系数
|
|
||||||
{
|
|
||||||
majorid: 0,
|
|
||||||
coe: 1.1,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
majorid: 1,
|
|
||||||
coe: 1.2,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
contracts: [// 合同段信息
|
|
||||||
{
|
|
||||||
name: 'A合同段',
|
|
||||||
serviceFee: 100000,
|
|
||||||
addtionalFee: 0,
|
|
||||||
reserveFee: 0,
|
|
||||||
fee: 10000,
|
|
||||||
quality: '造价咨询服务的综合评价应达到“较好”或综合评分90分',
|
|
||||||
duration: '自xxxx年xx月开始至xxxx年xx月结束,服务周期xx个月。',
|
|
||||||
scale: [
|
|
||||||
{
|
|
||||||
major: 0,
|
|
||||||
cost: 100000,
|
|
||||||
area: 200,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
major: 1,
|
|
||||||
cost: 100000,
|
|
||||||
area: 200,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
serviceCoes: [// 合同段咨询分类系数
|
|
||||||
{
|
|
||||||
serviceid: 0,
|
|
||||||
coe: 1.1,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
serviceid: 1,
|
|
||||||
coe: 1.2,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
majorCoes: [// 合同段工程专业系数
|
|
||||||
{
|
|
||||||
majorid: 0,
|
|
||||||
coe: 1.1,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
majorid: 1,
|
|
||||||
coe: 1.2,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
services: [
|
|
||||||
{
|
|
||||||
id: 0,
|
|
||||||
fee: 250000,//小计
|
|
||||||
finalFee: 250000,//确认金额
|
|
||||||
process: 0,// 工作环节,0为编制,1为审核
|
|
||||||
method1: { // 投资规模法
|
|
||||||
cost: 100000,
|
|
||||||
basicFee: 200,
|
|
||||||
basicFee_basic: 200,
|
|
||||||
basicFee_optional: 0,
|
|
||||||
fee: 250000, //小计
|
|
||||||
proAmount: 3,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
proNum: 1,
|
|
||||||
major: 0,
|
|
||||||
cost: 100000,
|
|
||||||
basicFee: 200,
|
|
||||||
basicFormula: '856,000+(1,000,000,000-500,000,000)×1‰',
|
|
||||||
basicFee_basic: 200,
|
|
||||||
optionalFormula: '171,200+(1,000,000,000-500,000,000)×0.2‰',
|
|
||||||
basicFee_optional: 0,
|
|
||||||
serviceCoe: 1.1,
|
|
||||||
majorCoe: 1.2,
|
|
||||||
processCoe: 1,// 工作环节系数(编审系数)
|
|
||||||
proportion: 0.5,// 工作占比
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
method2: { // 用地规模法
|
|
||||||
area: 1200,
|
|
||||||
basicFee: 200,
|
|
||||||
basicFee_basic: 200,
|
|
||||||
basicFee_optional: 0,
|
|
||||||
fee: 250000,
|
|
||||||
proAmount: 3,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
proNum: 1,
|
|
||||||
major: 0,
|
|
||||||
area: 1200,
|
|
||||||
basicFee: 200,
|
|
||||||
basicFormula: '106,000+(1,200-1,000)×60',
|
|
||||||
basicFee_basic: 200,
|
|
||||||
optionalFormula: '21,200+(1,200-1,000)×12',
|
|
||||||
basicFee_optional: 0,
|
|
||||||
serviceCoe: 1.1,
|
|
||||||
majorCoe: 1.2,
|
|
||||||
processCoe: 1,// 工作环节系数(编审系数)
|
|
||||||
proportion: 0.5,// 工作占比
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
method3: { // 工作量法
|
|
||||||
basicFee: 200,
|
|
||||||
fee: 250000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
task: 0,
|
|
||||||
price: 100000,
|
|
||||||
amount: 10,
|
|
||||||
basicFee: 200,
|
|
||||||
serviceCoe: 1.1,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
task: 1,
|
|
||||||
price: 100000,
|
|
||||||
amount: 10,
|
|
||||||
basicFee: 200,
|
|
||||||
serviceCoe: 1.1,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
method4: { // 工时法
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 10,
|
|
||||||
fee: 250000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
expert: 0,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
expert: 1,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
tasks: [{ serviceid: 0, text: ['abc', 'efg'] },
|
|
||||||
{ serviceid: 2,text: ['abc', 'efg'] } //tasks不分组的时候传单对象[{text: ['abc', 'efg']}],分组的时候传分组的服务id[{ serviceid: 0, text: ['abc', 'efg'] },...]
|
|
||||||
],// 工作内容
|
|
||||||
},
|
|
||||||
],
|
|
||||||
addtional: {// 附加工作费
|
|
||||||
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'C' }] },
|
|
||||||
name: '附加工作',
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
id: 0,
|
|
||||||
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'F' }] },
|
|
||||||
name: '人员驻场服务及其他附加工作',
|
|
||||||
fee: 10000,
|
|
||||||
m4: {
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
expert: 0,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
expert: 1,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
m5: {
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
name: '×××项',
|
|
||||||
unit: '项',
|
|
||||||
amount: 10,
|
|
||||||
price: 100000,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '×××项',
|
|
||||||
unit: '项',
|
|
||||||
amount: 10,
|
|
||||||
price: 100000,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
tasks:[]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'C' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'X' }] },
|
|
||||||
name: '咨询服务协调工作',
|
|
||||||
fee: 10000,
|
|
||||||
m0: {
|
|
||||||
coe: 0.03,
|
|
||||||
fee: 10000,
|
|
||||||
},
|
|
||||||
m4: {
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
expert: 0,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
expert: 1,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
m5: {
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
name: '×××项',
|
|
||||||
unit: '项',
|
|
||||||
amount: 10,
|
|
||||||
price: 100000,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '×××项',
|
|
||||||
unit: '项',
|
|
||||||
amount: 10,
|
|
||||||
price: 100000,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
tasks:[]
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
reserve: {// 预备费
|
|
||||||
code: { richText: [{ font: { charset: 134, color: { theme: 1 }, italic: true, name: '宋体', size: 10 }, text: 'Y' }, { font: { charset: 134, color: { theme: 1 }, italic: true, name: 'Calibri', size: 10, vertAlign: 'subscript' }, text: 'B' }] },
|
|
||||||
name: '预备费',
|
|
||||||
fee: 10000,
|
|
||||||
tasks:[],
|
|
||||||
m0: {
|
|
||||||
coe: 0.03,
|
|
||||||
fee: 10000,
|
|
||||||
},
|
|
||||||
m4: {
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
expert: 0,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
expert: 1,
|
|
||||||
price: 100000,
|
|
||||||
person_num: 10,
|
|
||||||
work_day: 3,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
m5: {
|
|
||||||
fee: 10000,
|
|
||||||
det: [
|
|
||||||
{
|
|
||||||
name: '×××项',
|
|
||||||
unit: '项',
|
|
||||||
amount: 10,
|
|
||||||
price: 100000,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '×××项',
|
|
||||||
unit: '项',
|
|
||||||
amount: 10,
|
|
||||||
price: 100000,
|
|
||||||
fee: 100000,
|
|
||||||
remark: '',// 用户输入的说明
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
45
scripts/package-dist-image.ps1
Normal file
45
scripts/package-dist-image.ps1
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
param(
|
||||||
|
[string]$ImageName = "jgjs2026-dist",
|
||||||
|
[string]$Tag = "latest"
|
||||||
|
)
|
||||||
|
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
|
$projectRoot = Split-Path -Parent $PSScriptRoot
|
||||||
|
$distPath = Join-Path $projectRoot "dist"
|
||||||
|
$dockerfilePath = Join-Path $projectRoot "Dockerfile.dist"
|
||||||
|
$serverSourcePath = Join-Path $projectRoot "docker\\dist-server"
|
||||||
|
$buildContext = Join-Path ([System.IO.Path]::GetTempPath()) ("jgjs2026-dist-docker-" + [System.Guid]::NewGuid().ToString("N"))
|
||||||
|
|
||||||
|
if (-not (Test-Path $distPath)) {
|
||||||
|
throw "dist directory not found. Run npm run build first."
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path $dockerfilePath)) {
|
||||||
|
throw "Dockerfile.dist not found."
|
||||||
|
}
|
||||||
|
|
||||||
|
if (-not (Test-Path $serverSourcePath)) {
|
||||||
|
throw "docker/dist-server not found."
|
||||||
|
}
|
||||||
|
|
||||||
|
New-Item -ItemType Directory -Path $buildContext | Out-Null
|
||||||
|
New-Item -ItemType Directory -Path (Join-Path $buildContext "docker") | Out-Null
|
||||||
|
|
||||||
|
try {
|
||||||
|
Copy-Item $dockerfilePath (Join-Path $buildContext "Dockerfile.dist")
|
||||||
|
Copy-Item $serverSourcePath (Join-Path $buildContext "docker\\dist-server") -Recurse
|
||||||
|
Copy-Item $distPath (Join-Path $buildContext "dist") -Recurse
|
||||||
|
|
||||||
|
Write-Host "Building Docker image ${ImageName}:${Tag} from minimal dist context..."
|
||||||
|
docker build -f (Join-Path $buildContext "Dockerfile.dist") -t "${ImageName}:${Tag}" $buildContext
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (Test-Path $buildContext) {
|
||||||
|
Remove-Item $buildContext -Recurse -Force
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Done."
|
||||||
|
Write-Host "Run with:"
|
||||||
|
Write-Host "docker run --rm -p 8080:80 ${ImageName}:${Tag}"
|
||||||
@ -1 +1 @@
|
|||||||
{"root":["./src/main.ts","./src/sql.ts","./src/components/ui/button/index.ts","./src/components/ui/card/index.ts","./src/components/ui/scroll-area/index.ts","./src/components/ui/tooltip/index.ts","./src/features/ht/contracts.ts","./src/features/ht/importexport.ts","./src/features/ht/types.ts","./src/features/tab/importexport.ts","./src/features/tab/types.ts","./src/i18n/dictionary-en.ts","./src/i18n/index.ts","./src/i18n/locales/en-us.ts","./src/i18n/locales/zh-cn.ts","./src/lib/aggridreadonlyautoheight.ts","./src/lib/aggridresetheader.ts","./src/lib/contractsegment.ts","./src/lib/decimal.ts","./src/lib/diyaggridoptions.ts","./src/lib/number.ts","./src/lib/numberformat.ts","./src/lib/pricinghourlycalc.ts","./src/lib/pricingmethodtotals.ts","./src/lib/pricingpersistcontrol.ts","./src/lib/pricingpinnedrows.ts","./src/lib/pricingscalecalc.ts","./src/lib/pricingscalecolumns.ts","./src/lib/pricingscaledetail.ts","./src/lib/pricingscaledict.ts","./src/lib/pricingscalefee.ts","./src/lib/pricingscalegrid.ts","./src/lib/pricingscalelink.ts","./src/lib/pricingscalepanedata.ts","./src/lib/pricingscalepanelifecycle.ts","./src/lib/pricingscaleproject.ts","./src/lib/pricingscalerowmap.ts","./src/lib/pricingworkloadcalc.ts","./src/lib/projectevents.ts","./src/lib/projectregistry.ts","./src/lib/projectsessionlock.ts","./src/lib/projectworkspace.ts","./src/lib/reportexportbuilders.ts","./src/lib/utils.ts","./src/lib/workspace.ts","./src/lib/xmfactordefaults.ts","./src/lib/zwarchive.ts","./src/lib/zxfwpricingsync.ts","./src/pinia/kv.ts","./src/pinia/tab.ts","./src/pinia/uiprefs.ts","./src/pinia/zxfwpricing.ts","./src/pinia/zxfwpricinghtfee.ts","./src/pinia/zxfwpricingkeys.ts","./src/pinia/plugin/indexdb.ts","./src/pinia/plugin/types.d.ts","./src/types/pricing.ts","./src/app.vue","./src/components/ui/button/button.vue","./src/components/ui/card/card.vue","./src/components/ui/card/cardaction.vue","./src/components/ui/card/cardcontent.vue","./src/components/ui/card/carddescription.vue","./src/components/ui/card/cardfooter.vue","./src/components/ui/card/cardheader.vue","./src/components/ui/card/cardtitle.vue","./src/components/ui/scroll-area/scrollarea.vue","./src/components/ui/scroll-area/scrollbar.vue","./src/components/ui/tooltip/tooltipcontent.vue","./src/features/ht/components/ht.vue","./src/features/ht/components/htadditionalworkfee.vue","./src/features/ht/components/htbaseinfo.vue","./src/features/ht/components/htconsultcategoryfactor.vue","./src/features/ht/components/htcontractsummary.vue","./src/features/ht/components/htfeeratemethodform.vue","./src/features/ht/components/htmajorfactor.vue","./src/features/ht/components/htreservefee.vue","./src/features/ht/components/htcard.vue","./src/features/ht/components/htinfo.vue","./src/features/ht/components/zxfw.vue","./src/features/pricing/components/hourlypricingpane.vue","./src/features/pricing/components/investmentscalepricingpane.vue","./src/features/pricing/components/landscalepricingpane.vue","./src/features/pricing/components/workloadpricingpane.vue","./src/features/shared/components/hourlyfeegrid.vue","./src/features/shared/components/htfeegrid.vue","./src/features/shared/components/htfeemethodgrid.vue","./src/features/shared/components/methodunavailablenotice.vue","./src/features/shared/components/servicecheckboxselector.vue","./src/features/shared/components/workcontentgrid.vue","./src/features/shared/components/xmfactorgrid.vue","./src/features/shared/components/xmcommonaggrid.vue","./src/features/workbench/components/homeentryview.vue","./src/features/workbench/components/htfeemethodtypelineview.vue","./src/features/workbench/components/quickcalcworkbenchview.vue","./src/features/workbench/components/zxfwview.vue","./src/features/xm/components/xmconsultcategoryfactor.vue","./src/features/xm/components/xmmajorfactor.vue","./src/features/xm/components/info.vue","./src/features/xm/components/xmcard.vue","./src/features/xm/components/xminfo.vue","./src/layout/tab.vue","./src/layout/typeline.vue"],"version":"5.9.3"}
|
{"root":["./src/main.ts","./src/sql.ts","./src/components/ui/button/index.ts","./src/components/ui/card/index.ts","./src/components/ui/scroll-area/index.ts","./src/components/ui/tooltip/index.ts","./src/features/ht/contracts.ts","./src/features/ht/importexport.ts","./src/features/ht/types.ts","./src/features/tab/importexport.ts","./src/features/tab/types.ts","./src/i18n/dictionary-en.ts","./src/i18n/index.ts","./src/i18n/locales/en-us.ts","./src/i18n/locales/zh-cn.ts","./src/lib/aggridreadonlyautoheight.ts","./src/lib/aggridresetheader.ts","./src/lib/contractsegment.ts","./src/lib/decimal.ts","./src/lib/diyaggridoptions.ts","./src/lib/number.ts","./src/lib/numberformat.ts","./src/lib/pricinghourlycalc.ts","./src/lib/pricingmethodtotals.ts","./src/lib/pricingpersistcontrol.ts","./src/lib/pricingpinnedrows.ts","./src/lib/pricingscalecalc.ts","./src/lib/pricingscalecolumns.ts","./src/lib/pricingscaledetail.ts","./src/lib/pricingscaledict.ts","./src/lib/pricingscalefee.ts","./src/lib/pricingscalegrid.ts","./src/lib/pricingscalelink.ts","./src/lib/pricingscalepanedata.ts","./src/lib/pricingscalepanelifecycle.ts","./src/lib/pricingscaleproject.ts","./src/lib/pricingscalerowmap.ts","./src/lib/pricingworkloadcalc.ts","./src/lib/projectevents.ts","./src/lib/projectkvstore.ts","./src/lib/projectregistry.ts","./src/lib/projectsessionlock.ts","./src/lib/projectworkspace.ts","./src/lib/reportexportbuilders.ts","./src/lib/utils.ts","./src/lib/workspace.ts","./src/lib/xmfactordefaults.ts","./src/lib/zwarchive.ts","./src/lib/zxfwpricingsync.ts","./src/pinia/kv.ts","./src/pinia/tab.ts","./src/pinia/uiprefs.ts","./src/pinia/zxfwpricing.ts","./src/pinia/zxfwpricinghtfee.ts","./src/pinia/zxfwpricingkeys.ts","./src/pinia/plugin/indexdb.ts","./src/pinia/plugin/types.d.ts","./src/types/pricing.ts","./src/app.vue","./src/components/ui/button/button.vue","./src/components/ui/card/card.vue","./src/components/ui/card/cardaction.vue","./src/components/ui/card/cardcontent.vue","./src/components/ui/card/carddescription.vue","./src/components/ui/card/cardfooter.vue","./src/components/ui/card/cardheader.vue","./src/components/ui/card/cardtitle.vue","./src/components/ui/scroll-area/scrollarea.vue","./src/components/ui/scroll-area/scrollbar.vue","./src/components/ui/tooltip/tooltipcontent.vue","./src/features/ht/components/ht.vue","./src/features/ht/components/htadditionalworkfee.vue","./src/features/ht/components/htbaseinfo.vue","./src/features/ht/components/htconsultcategoryfactor.vue","./src/features/ht/components/htcontractsummary.vue","./src/features/ht/components/htfeeratemethodform.vue","./src/features/ht/components/htmajorfactor.vue","./src/features/ht/components/htreservefee.vue","./src/features/ht/components/htcard.vue","./src/features/ht/components/htinfo.vue","./src/features/ht/components/zxfw.vue","./src/features/pricing/components/hourlypricingpane.vue","./src/features/pricing/components/investmentscalepricingpane.vue","./src/features/pricing/components/landscalepricingpane.vue","./src/features/pricing/components/workloadpricingpane.vue","./src/features/shared/components/hourlyfeegrid.vue","./src/features/shared/components/htfeegrid.vue","./src/features/shared/components/htfeemethodgrid.vue","./src/features/shared/components/methodunavailablenotice.vue","./src/features/shared/components/servicecheckboxselector.vue","./src/features/shared/components/workcontentgrid.vue","./src/features/shared/components/xmfactorgrid.vue","./src/features/shared/components/xmcommonaggrid.vue","./src/features/workbench/components/homeentryview.vue","./src/features/workbench/components/htfeemethodtypelineview.vue","./src/features/workbench/components/quickcalcworkbenchview.vue","./src/features/workbench/components/zxfwview.vue","./src/features/xm/components/xmconsultcategoryfactor.vue","./src/features/xm/components/xmmajorfactor.vue","./src/features/xm/components/info.vue","./src/features/xm/components/xmcard.vue","./src/features/xm/components/xminfo.vue","./src/layout/tab.vue","./src/layout/typeline.vue"],"version":"5.9.3"}
|
||||||
Loading…
x
Reference in New Issue
Block a user