Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
text2video-frontend
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
周成波
text2video-frontend
Commits
cbe91c43
Commit
cbe91c43
authored
9 months ago
by
Administrator
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加退休日期计算
parent
91fec522
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
363 additions
and
71 deletions
+363
-71
components.d.ts
components.d.ts
+1
-0
package-lock.json
package-lock.json
+50
-68
index.ts
src/router/index.ts
+16
-3
utils.ts
src/utils/utils.ts
+8
-0
calc_retire.vue
src/views/home/calc_retire.vue
+149
-0
record_steps.vue
src/views/home/record_steps.vue
+139
-0
No files found.
components.d.ts
View file @
cbe91c43
...
@@ -9,6 +9,7 @@ declare module 'vue' {
...
@@ -9,6 +9,7 @@ declare module 'vue' {
export
interface
GlobalComponents
{
export
interface
GlobalComponents
{
ElButton
:
typeof
import
(
'element-plus/es'
)[
'ElButton'
]
ElButton
:
typeof
import
(
'element-plus/es'
)[
'ElButton'
]
ElColorPicker
:
typeof
import
(
'element-plus/es'
)[
'ElColorPicker'
]
ElColorPicker
:
typeof
import
(
'element-plus/es'
)[
'ElColorPicker'
]
ElDatePicker
:
typeof
import
(
'element-plus/es'
)[
'ElDatePicker'
]
ElDialog
:
typeof
import
(
'element-plus/es'
)[
'ElDialog'
]
ElDialog
:
typeof
import
(
'element-plus/es'
)[
'ElDialog'
]
ElDivider
:
typeof
import
(
'element-plus/es'
)[
'ElDivider'
]
ElDivider
:
typeof
import
(
'element-plus/es'
)[
'ElDivider'
]
ElForm
:
typeof
import
(
'element-plus/es'
)[
'ElForm'
]
ElForm
:
typeof
import
(
'element-plus/es'
)[
'ElForm'
]
...
...
This diff is collapsed.
Click to expand it.
package-lock.json
View file @
cbe91c43
This diff is collapsed.
Click to expand it.
src/router/index.ts
View file @
cbe91c43
import
{
createRouter
,
createWebHashHistory
}
from
'vue-router'
import
{
createRouter
,
createWebHashHistory
}
from
'vue-router'
import
HomeView
from
'../views/home/index.vue'
import
HomeView
from
'../views/home/index.vue'
import
HomeViewEn
from
'../views/home/index_en.vue'
import
HomeViewEn
from
'../views/home/index_en.vue'
import
RecordSteps
from
'../views/home/record_steps.vue'
import
CalcRetire
from
'../views/home/calc_retire.vue'
const
router
=
createRouter
({
const
router
=
createRouter
({
history
:
createWebHashHistory
(
import
.
meta
.
env
.
BASE_URL
),
history
:
createWebHashHistory
(
import
.
meta
.
env
.
BASE_URL
),
routes
:
[
routes
:
[
{
{
path
:
'/'
,
path
:
'/'
,
name
:
'home'
,
name
:
'CalcRetire'
,
component
:
CalcRetire
},
{
path
:
'/recordsteps'
,
name
:
'recordsteps'
,
component
:
RecordSteps
},
{
path
:
'/text2video'
,
name
:
'text2video'
,
component
:
HomeView
component
:
HomeView
},
},
{
{
path
:
'/en'
,
path
:
'/
text2video_
en'
,
name
:
'
home
_en'
,
name
:
'
text2video
_en'
,
component
:
HomeViewEn
component
:
HomeViewEn
}
}
]
]
...
...
This diff is collapsed.
Click to expand it.
src/utils/utils.ts
View file @
cbe91c43
...
@@ -19,6 +19,14 @@ export default class utils {
...
@@ -19,6 +19,14 @@ export default class utils {
}
}
}
}
// 从文本中提取 JSON
static
extractJSON
(
text
:
string
)
{
// 正则表达式匹配 JSON 格式的字符串
const
jsonRegex
=
/
\[\s
*
\{\s
*"序号"
\s
*:
\s
*
\d
+.*
?\}\s
*
\]
/
s
;
const
matches
=
text
.
match
(
jsonRegex
);
return
matches
?
matches
[
0
]
:
null
;
}
// 生成年月日时分秒毫秒字符串
// 生成年月日时分秒毫秒字符串
static
genDateTimeStr
()
{
static
genDateTimeStr
()
{
const
now
=
new
Date
();
const
now
=
new
Date
();
...
...
This diff is collapsed.
Click to expand it.
src/views/home/calc_retire.vue
0 → 100644
View file @
cbe91c43
<
script
setup
lang=
"ts"
>
import
text2videoService
from
"@/api/service/text2videoService"
;
import
utils
from
"@/utils/utils"
;
import
{
ElMessage
,
genFileId
,
type
UploadInstance
,
type
UploadProps
,
type
UploadRawFile
}
from
"element-plus"
;
import
{
nextTick
,
onMounted
,
reactive
,
ref
}
from
"vue"
;
const
debug
=
ref
(
import
.
meta
.
env
.
MODE
===
'production'
?
false
:
true
);
// const debug = ref(false);
const
loading
=
ref
(
false
);
const
form
=
reactive
({
task_id
:
""
,
birth
:
"1982-04"
,
sex_value
:
"男"
,
sex_option
:
[
{
value
:
'男'
,
label
:
'男'
,
},
{
value
:
'女50岁退休'
,
label
:
'女(普通)50岁退'
,
},
{
value
:
'女55岁退休'
,
label
:
'女(管理、灵活就业)55岁退'
,
},
],
retire_age
:
""
,
retire_date
:
""
,
how_long_to_retire
:
""
,
});
onMounted
(()
=>
{
// 初始化task_id
form
.
task_id
=
utils
.
genDateTimeStr
();
console
.
log
(
'页面加载,task_id='
,
form
.
task_id
)
});
const
calculateRetirement
=
(
birthStr
,
gender
)
=>
{
let
parts
=
birthStr
.
split
(
'-'
);
// 使用'-'作为分隔符来拆分字符串
let
birthYear
=
parseInt
(
parts
[
0
],
10
);
// 年份
let
birthMonth
=
parseInt
(
parts
[
1
],
10
);
// 月份
const
currentYear
=
new
Date
().
getFullYear
();
const
birthDate
=
new
Date
(
`
${
birthYear
}
-
${
birthMonth
<
10
?
'0'
+
birthMonth
:
birthMonth
}
-01`
);
let
retirementAge
,
delayMonths
,
retirementYear
,
retirementMonth
;
if
(
gender
===
'男'
)
{
retirementAge
=
60
;
delayMonths
=
Math
.
floor
((
currentYear
-
birthYear
)
/
4
)
*
4
;
}
else
if
(
gender
===
'女50岁退休'
)
{
retirementAge
=
50
;
delayMonths
=
Math
.
floor
((
currentYear
-
birthYear
)
/
2
)
*
2
;
}
else
if
(
gender
===
'女55岁退休'
)
{
retirementAge
=
55
;
delayMonths
=
Math
.
floor
((
currentYear
-
birthYear
)
/
4
)
*
4
;
}
else
{
console
.
log
(
"Invalid gender input. Please choose '男', '女50岁退休', or '女55岁退休'."
);
return
;
}
retirementAge
+=
Math
.
floor
(
delayMonths
/
12
);
console
.
log
(
retirementAge
,
delayMonths
)
let
retirementDate
=
new
Date
(
birthDate
);
console
.
log
(
retirementDate
)
retirementDate
.
setFullYear
(
retirementDate
.
getFullYear
()
+
retirementAge
);
retirementDate
.
setMonth
(
retirementDate
.
getMonth
()
+
delayMonths
%
12
);
console
.
log
(
retirementDate
)
retirementYear
=
retirementDate
.
getFullYear
();
retirementMonth
=
retirementDate
.
getMonth
()
+
1
;
// getMonth() returns 0-11
console
.
log
(
retirementYear
,
retirementMonth
)
let
yearsUntilRetirement
=
retirementDate
.
getFullYear
()
-
currentYear
-
1
;
let
monthsUntilRetirement
=
(
retirementDate
.
getMonth
()
-
new
Date
().
getMonth
()
+
12
)
%
12
-
1
;
if
(
monthsUntilRetirement
<
0
)
{
yearsUntilRetirement
--
;
monthsUntilRetirement
+=
12
;
}
form
.
retire_age
=
`
${
retirementAge
}
岁+
${
delayMonths
%
12
}
个月`
,
form
.
retire_date
=
`
${
retirementYear
}
-
${
retirementMonth
<
10
?
'0'
+
retirementMonth
:
retirementMonth
}
-01`
,
form
.
how_long_to_retire
=
`
${
yearsUntilRetirement
}
年
${
monthsUntilRetirement
}
个月`
};
</
script
>
<!-- ============================================================================================================ -->
<!-- ============================================================================================================ -->
<!-- ============================================================================================================ -->
<
template
>
<main
class=
"home-container"
>
<!-- 标题 -->
<el-divider
content-position=
"left"
>
延迟退休年龄计算器
</el-divider>
<el-form
:model=
"form"
label-width=
"114px"
v-loading=
"loading"
>
<!-- 输入出生年月 -->
<el-form-item
label=
"出生年月"
>
<el-date-picker
v-model=
"form.birth"
type=
"month"
placeholder=
"Pick a month"
/>
</el-form-item>
<!-- 性别 -->
<el-form-item
label=
"性别"
>
<el-select
v-model=
"form.sex_value"
placeholder=
"Select"
size=
"large"
style=
"width: 240px"
>
<el-option
v-for=
"item in form.sex_option"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<!-- 计算 -->
<el-form-item>
<el-button
type=
"primary"
@
click=
"calculateRetirement(form.birth, form.sex_value)"
>
开始计算
</el-button
>
</el-form-item>
<!-- 结果 -->
<el-form-item
label=
"您的退休年龄"
>
<el-text
class=
"mx-1"
>
{{
form
.
retire_age
}}
</el-text>
</el-form-item>
<el-form-item
label=
"您的退休日期"
>
<el-text
class=
"mx-1"
>
{{
form
.
retire_date
}}
</el-text>
</el-form-item>
<el-form-item
label=
"距离退休还有"
>
<el-text
class=
"mx-1"
>
{{
form
.
how_long_to_retire
}}
</el-text>
</el-form-item>
</el-form>
</main>
</
template
>
<
style
lang=
"scss"
scoped
>
.home-container
{
width
:
100%
;
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/home/record_steps.vue
0 → 100644
View file @
cbe91c43
<
script
setup
lang=
"ts"
>
import
text2videoService
from
"@/api/service/text2videoService"
;
import
utils
from
"@/utils/utils"
;
import
{
ElMessage
,
genFileId
,
type
UploadInstance
,
type
UploadProps
,
type
UploadRawFile
}
from
"element-plus"
;
import
{
nextTick
,
onMounted
,
reactive
,
ref
}
from
"vue"
;
const
debug
=
ref
(
import
.
meta
.
env
.
MODE
===
'production'
?
false
:
true
);
// const debug = ref(false);
const
loading
=
ref
(
false
);
const
form
=
reactive
({
task_id
:
""
,
task_content
:
"开发一款坦克大战的小游戏"
,
prompt
:
`你是一名高级的程序员。现在需要根据产品需求,设计一份完整的程序编写的思路,比如第一步写什么模块,第二步写什么模块,整个思路应逻辑清晰、流畅。以json格式输出:\n[{"序号": 序号, "描述": 描述, "详细说明": 详细说明}, ...]\n`
,
answer
:
""
,
answer_json
:
[],
});
const
llms
=
{
tyqw_online
:
{
'api'
:
'tyqw'
,
'name'
:
'线上通义千问'
},
baichuan
:
{
'api'
:
'langchain'
,
'name'
:
'本地baichuan2-7b'
},
qwen_local
:
{
'api'
:
'langchain'
,
'name'
:
'本地Qwen-7B-Chat'
},
chatgpt
:
{
'api'
:
'gpt'
,
'name'
:
'chatgpt'
},
kimi
:
{
'api'
:
'kimi'
,
'name'
:
'kimi'
},
};
onMounted
(()
=>
{
// 初始化task_id
form
.
task_id
=
utils
.
genDateTimeStr
();
console
.
log
(
'页面加载,task_id='
,
form
.
task_id
)
});
const
onSubmitGpt
=
()
=>
{
const
my_prompt
=
ref
(
`
${
form
.
prompt
}
。产品需求如下:
${
form
.
task_content
}
`
);
text2videoService
.
submitLLM
(
utils
.
aesEncrypt
(
my_prompt
.
value
),
utils
.
aesEncrypt
(
llms
.
tyqw_online
.
api
),
[],
form
.
task_id
,
"true"
)
.
then
((
result
:
string
)
=>
{
console
.
log
(
result
);
form
.
answer
=
result
;
const
jsonText
=
utils
.
extractJSON
(
result
);
console
.
log
(
jsonText
);
form
.
answer_json
=
utils
.
formatJsonObj
(
jsonText
);
})
.
catch
((
error
:
any
)
=>
{
console
.
error
(
error
);
ElMessage
({
message
:
error
,
type
:
"error"
,
});
});
};
</
script
>
<!-- ============================================================================================================ -->
<!-- ============================================================================================================ -->
<!-- ============================================================================================================ -->
<
template
>
<main
class=
"home-container"
>
<!-- 标题 -->
<el-divider
content-position=
"left"
>
将产品需求拆解为开发步骤
</el-divider>
<el-form
:model=
"form"
label-width=
"114px"
v-loading=
"loading"
>
<!-- 产品需求 -->
<el-form-item
label=
"产品需求"
>
<el-input
v-model=
"form.task_content"
:autosize=
"true"
type=
"textarea"
/>
</el-form-item>
<!-- Prompt -->
<el-form-item
label=
"Prompt"
>
<el-text
class=
"mx-1"
type=
"danger"
>
{{
form
.
prompt
}}
</el-text>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
@
click=
"onSubmitGpt"
>
生成步骤(
{{
llms
.
tyqw_online
.
name
}}
)
</el-button
>
</el-form-item>
<!-- 结果 -->
<el-form-item
label=
"步骤"
>
<!--
<el-text
class=
"mx-1"
>
{{
form
.
answer
}}
</el-text>
-->
<el-table
:data=
"form.answer_json"
border
style=
"width: 100%; z-index: calc(var(--el-table-index) -1)"
>
<el-table-column
prop=
"序号"
label=
"序号"
width=
"55"
/>
<el-table-column
prop=
"描述"
label=
"描述"
width=
"300"
>
<template
v-slot=
"scope"
>
<el-text
class=
"mx-1"
>
{{
scope
.
row
.
描述
}}
</el-text>
</
template
>
</el-table-column>
<el-table-column
prop=
"详细说明"
label=
"详细说明"
>
<
template
v-slot=
"scope"
>
<el-text
class=
"mx-1"
>
{{
scope
.
row
.
详细说明
}}
</el-text>
</
template
>
</el-table-column>
<el-table-column
width=
"200"
label=
"操作"
align=
"center"
>
<
template
v-slot=
"scope"
>
<div
style=
"margin: 5px 0"
>
<el-button
type=
"primary"
size=
"small"
@
click=
""
>
与大模型继续沟通
</el-button
>
</div>
<!--
<div
style=
"margin: 10px 0"
>
<el-button
type=
"danger"
size=
"small"
@
click=
""
>
删除本步骤
</el-button>
</div>
-->
</
template
>
</el-table-column>
</el-table>
</el-form-item>
<!-- <el-form-item>
<el-button type="primary" @click="">保存所有记录</el-button>
</el-form-item> -->
</el-form>
</main>
</template>
<
style
lang=
"scss"
scoped
>
.home-container
{
width
:
100%
;
}
</
style
>
<
style
lang=
"scss"
>
.home-container
{
.el-table
.el-table__cell
{
z-index
:
calc
(
var
(
--
el-table-index
)
-1
);
}
}
.dashed-div
{
border
:
1px
dashed
#999
;
margin
:
5px
0
;
padding
:
2px
;
}
</
style
>
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment