Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pptist
Project
Project
Details
Activity
Releases
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
viitto
pptist
Commits
1690ba82
Commit
1690ba82
authored
Sep 23, 2024
by
zhengke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
工作台
parent
d2c23c30
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
1385 additions
and
366 deletions
+1385
-366
common.css
src/assets/styles/common.css
+3
-0
router.ts
src/router/router.ts
+23
-0
menu.ts
src/store/menu.ts
+11
-1
Layout.vue
src/views/TeamCenter/Layout.vue
+1
-1
Layout.vue
src/views/TemplateCenter/Layout.vue
+1
-1
Index.vue
src/views/Workbench/Index.vue
+43
-351
NewProject.vue
src/views/Workbench/components/NewProject.vue
+18
-12
NewSharer.vue
src/views/Workbench/components/NewSharer.vue
+212
-0
header.vue
src/views/Workbench/components/header.vue
+224
-0
list.vue
src/views/Workbench/components/list.vue
+357
-0
personnel.vue
src/views/Workbench/components/personnel.vue
+124
-0
Index.vue
src/views/project/Index.vue
+26
-0
Layout.vue
src/views/project/Layout.vue
+125
-0
NewJourney.vue
src/views/project/components/NewJourney.vue
+183
-0
trip.vue
src/views/project/trip.vue
+34
-0
No files found.
src/assets/styles/common.css
View file @
1690ba82
...
...
@@ -533,6 +533,9 @@ page {
.inline
.el-statistic__content
{
line-height
:
0
;
}
.text-weight-bold700
{
font-weight
:
700
;
}
.text-weight-bold
{
font-weight
:
bold
!important
;
}
...
...
src/router/router.ts
View file @
1690ba82
...
...
@@ -397,6 +397,29 @@ const routes: RouteRecordRaw[] = [
title
:
'工作台'
},
},
{
path
:
'/project'
,
component
:
()
=>
import
(
'@/views/project/Layout.vue'
),
meta
:{
title
:
'工作台'
},
children
:[
{
path
:
'/project'
,
component
:
()
=>
import
(
'@/views/project/Index.vue'
),
meta
:{
title
:
'概览'
}
},
{
path
:
'/project/create/trip'
,
component
:
()
=>
import
(
'@/views/project/trip.vue'
),
meta
:{
title
:
'行程制作'
}
},
]
},
{
path
:
'/p/show'
,
component
:
()
=>
import
(
'@/views/Product/Show.vue'
),
...
...
src/store/menu.ts
View file @
1690ba82
...
...
@@ -7,7 +7,7 @@ export interface Menu{
url
:
string
,
children
?:
Menu
[]
}
export
type
MenuOwner
=
'*'
|
'F'
|
'V'
|
'A'
|
'E'
|
'M'
export
type
MenuOwner
=
'*'
|
'F'
|
'V'
|
'A'
|
'E'
|
'M'
|
'C'
export
interface
MenuState
{
userMenu
:
Menu
[]
temMenu
:
Menu
[]
...
...
@@ -31,6 +31,8 @@ const menus:{menu:Menu,owner:MenuOwner}[] = [
{
menu
:{
name
:
'云盘空间'
,
icon
:
'IconCloudStorage'
,
url
:
'/a/c'
},
owner
:
'A'
},
{
menu
:{
name
:
'LOGO设置'
,
icon
:
'IconPicture'
,
url
:
'/a/l'
},
owner
:
'A'
},
{
menu
:{
name
:
'订单/发票'
,
icon
:
'IconCurrency'
,
url
:
'/a/order'
},
owner
:
'E'
},
{
menu
:{
name
:
'概览'
,
icon
:
'IconCurrency'
,
url
:
'/project'
},
owner
:
'C'
},
{
menu
:{
name
:
'行程制作'
,
icon
:
'IconCurrency'
,
url
:
'/project/create/trip'
},
owner
:
'C'
},
{
menu
:{
name
:
'更多设置 '
,
...
...
@@ -95,6 +97,14 @@ export const useMenuStore = defineStore('menu', {
return
finds
.
map
(
x
=>
x
.
menu
)
}
return
new
Array
<
Menu
>
()
},
getCreateMenu
:(
state
)
=>
{
let
userPermissions
:
MenuOwner
[]
=
[
'C'
]
const
findFreeMenu
=
menus
.
filter
(
x
=>
userPermissions
.
includes
(
x
.
owner
))
if
(
findFreeMenu
){
state
.
temMenu
=
findFreeMenu
.
map
(
x
=>
x
.
menu
)
}
return
state
.
temMenu
}
},
// actions:{
...
...
src/views/TeamCenter/Layout.vue
View file @
1690ba82
...
...
@@ -13,7 +13,7 @@
<div
class=
"col row"
>
<div
class=
"user-center-menu column "
>
<el-menu
:default-active=
"
activeIndex
"
class=
"no-border md-menu col"
router
>
<el-menu
:default-active=
"
`$
{activeIndex}`
" class="no-border md-menu col" router>
<template
v-for=
"(x,i) in menus"
:key=
"i"
>
<el-sub-menu
:index=
"`$
{i}`" v-if="x.children
&&
x.children.length>0">
<template
#
title
>
...
...
src/views/TemplateCenter/Layout.vue
View file @
1690ba82
...
...
@@ -15,7 +15,7 @@
</div>
<div
class=
"col row"
>
<div
class=
"user-center-menu column "
>
<el-menu
:default-active=
"
activeIndex
"
class=
"no-border md-menu col"
router
>
<el-menu
:default-active=
"
`$
{activeIndex}`
" class="no-border md-menu col" router>
<el-menu-item
:index=
"`$
{i}`" v-for="(x,i) in menus" :key="i" :route="x.url">
<component
:is=
"x.icon"
style=
"font-size: 20px;"
></component>
<span
class=
"q-ml-lg"
>
{{
x
.
name
}}
</span>
...
...
src/views/Workbench/Index.vue
View file @
1690ba82
...
...
@@ -15,186 +15,39 @@
<UserCard
:size=
"33"
></UserCard>
</div>
<div
class=
"full-height bg-f5"
>
<div
class=
"bg-white WorkbenchInTabBox"
>
<div
class=
"q-px-lg row flex-between"
>
<div
class=
"row WorkbenchInTab fz14 text-weight-bolder microsoft"
>
<div
class=
"active cusor-pointer"
>
全部
</div>
</div>
<div
class=
"WorkbenchInDel fz14 microsoft cusor-pointer"
>
<span>
回收站
</span>
</div>
</div>
<headers></headers>
<list></list>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"col row flex-between q-px-lg q-py-md"
>
<div
class=
"row items-center wrap WorkbenchInSea"
>
<div
class=
"row items-center q-mb-sm"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Title"
placeholder=
"搜索关键字"
clearable
@
keyup
.
enter=
"search"
>
<template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Search
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"row items-center bg-white q-ml-lg q-mb-sm"
style=
"border-radius: 5px;height: 34px;"
>
<div
class=
"row items-center"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Title"
placeholder=
"出行地点"
clearable
@
keyup
.
enter=
"search"
>
<
template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Location
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"WorkbenchInSeaLin"
></div>
<div
class=
"row items-center"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Day"
placeholder=
"出行天数"
clearable
@
keyup
.
enter=
"search"
>
<
template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Sunny
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"WorkbenchInSeaLin"
></div>
<div
class=
"row items-center"
>
<el-date-picker
style=
"max-width:300px"
v-model=
"dateTime"
type=
"daterange"
start-placeholder=
"开始"
end-placeholder=
"结束"
format=
"YYYY-MM-DD"
date-format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
>
</el-date-picker>
</div>
</div>
<div
class=
"row items-center q-ml-lg q-mb-sm"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Title"
placeholder=
"相关POI"
clearable
@
keyup
.
enter=
"search"
>
<
template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Fries
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"row items-center q-ml-lg q-mb-sm"
>
<el-checkbox
v-model=
"queryObj.Star"
label=
"星标"
size=
"large"
/>
</div>
</div>
<div
class=
"row nowrap"
style=
"flex-shrink: 0;"
>
<el-button
class=
"q-pl-lg microsoft"
size=
"Default"
type=
"primary"
icon=
"plus"
@
click=
"addCreateProject"
>
新建
</el-button>
</div>
</div>
<div
class=
"col q-px-lg"
>
<el-table
v-loading=
"loading"
ref=
"dataTableRef"
highlight-current-row
v-load-more=
"tableScrollHandler"
:data=
"dataList"
class=
"tableHBEbeef5"
height=
"82vh"
>
<el-table-column
label=
""
align=
"center"
width=
"50"
>
<
template
#
default=
"scope"
>
<el-icon
:color=
"$themeColor"
><Star
/></el-icon>
</
template
>
</el-table-column>
<el-table-column
label=
"项目信息"
align=
"center"
width=
"350"
>
<
template
#
default=
"scope"
>
</
template
>
</el-table-column>
<el-table-column
label=
"项目状态"
>
<
template
#
default=
"scope"
>
<el-icon
:color=
"$themeColor"
><SuccessFilled
/></el-icon>
<el-icon
color=
"#ff9632"
><Histogram
/></el-icon>
</
template
>
</el-table-column>
<el-table-column
label=
"行程信息"
>
<
template
#
default=
"scope"
>
</
template
>
</el-table-column>
<el-table-column
label=
"参与成员"
width=
"200"
>
<
template
#
default=
"scope"
>
<div>
<div>
<el-button
type=
"default"
link
:icon=
"Edit"
size=
"small"
@
click=
"goEditor(scope.row)"
class=
"microsoft"
>
编辑
</el-button>
<el-dropdown
class=
"q-pl-lg"
trigger=
"click"
>
<el-icon
class=
"q-pt-sm"
size=
"16"
color=
"#b1b7cf"
><MoreFilled
/></el-icon>
<template
#
dropdown
>
<el-dropdown-menu
class=
"q-pa-md"
>
<el-dropdown-item
@
click=
"copyData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"View"
size=
"small"
class=
"microsoft"
>
复制项目
</el-button>
</el-dropdown-item>
<el-dropdown-item
@
click=
"completeData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"View"
size=
"small"
class=
"microsoft"
>
完成项目
</el-button>
</el-dropdown-item>
<el-dropdown-item
@
click=
"OffData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"View"
size=
"small"
class=
"microsoft"
>
关闭项目
</el-button>
</el-dropdown-item>
<el-dropdown-item
@
click=
"deleteData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"Delete"
size=
"small"
class=
"microsoft"
>
删除
</el-button>
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</div>
<el-button
type=
"primary"
circle
>
周琳
</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</div>
<el-dialog
v-model=
"addDialogFormVisible"
title=
""
width=
"420"
@
close=
"close"
@
closed=
"closed"
>
<
template
#
header
>
<div
class=
"text-title text-left fz16 PingFangSC"
>
创建出行项目
</div>
</
template
>
<NewProject
:addDialogFormVisible=
"addDialogFormVisible"
></NewProject>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<el-button
link
type=
"primary"
@
click=
"addDialogFormVisible = false"
>
跳过
</el-button>
</div>
</
template
>
</el-dialog>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
storeToRefs
}
from
'pinia'
import
UserCard
from
"@/components/User/UserCard.vue"
;
import
{
useMenuStore
,
useScreenStore
}
from
"@/store"
;
import
{
ref
,
reactive
,
watch
,
provide
}
from
"vue"
;
import
{
ref
,
reactive
,
provide
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useUserStore
}
from
"@/store/user"
import
{
Edit
,
Delete
,
View
,
Search
,
Location
,
Sunny
,
Fries
,
Star
,
SuccessFilled
,
Histogram
}
from
'@element-plus/icons-vue'
;
import
{
ElLoading
,
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
ConfigService
from
'@/services/ConfigService
'
import
NewProject
from
'./components/NewProjec
t'
import
headers
from
'./components/header
'
import
list
from
'./components/lis
t'
const
router
=
useRouter
()
const
useMenu
=
useMenuStore
();
const
menus
=
ref
(
useMenu
.
getWorkbenchMenu
);
const
{
model
}
=
storeToRefs
(
useScreenStore
())
const
addDialogFormVisible
=
ref
(
false
)
const
dateTime
=
ref
(
''
)
const
dataList
=
ref
([]
as
Array
<
any
>
);
const
loading
=
ref
(
false
as
any
)
const
deleteLoading
=
ref
<
any
>
(
null
)
const
queryObj
=
reactive
({
const
search
=
reactive
({
msg
:
{
allPeoples
:[],
personnelType
:
1
,
personnelList1
:
[],
personnelList2
:
[],
personnelList3
:
[],
personnelList4
:
[],
personnelList5
:
[],
},
form
:{
Name
:
''
},
queryObj
:{
pageIndex
:
1
,
pageSize
:
20
,
LineId
:
0
,
//线路Id
...
...
@@ -211,177 +64,16 @@
type
:
0
,
OrderByType
:
1
,
//排序方式
QAuthType
:
''
,
//1-免费,2-VIP,3-私有
Current
:
1
,
star
:
''
,
end
:
''
,
Day
:
''
,
Star
:
false
,
},
})
const
WorkProject
=
ref
({}
as
any
)
provide
(
injectKeyPublic
,
WorkProject
)
const
goEditor
=
(
item
:
any
)
=>
{
}
const
copyData
=
(
item
:
any
)
=>
{
}
const
completeData
=
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
`本行程中的项目需求、行程制作、费用核算、行程报价尚未完成,您是否确认忽略以上内容?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
TempId
:
item
.
TempId
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
const
response
=
await
ConfigService
.
SetDeleteTripTemplate
(
queryMsg
)
if
(
response
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除行程成功`
,
type
:
'success'
,
})
await
queryBySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除行程失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
OffData
=
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
`若关闭,则该行程的下业务将不能进行编辑,是否确认?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
TempId
:
item
.
TempId
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
const
response
=
await
ConfigService
.
SetDeleteTripTemplate
(
queryMsg
)
if
(
response
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除行程成功`
,
type
:
'success'
,
})
await
queryBySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除行程失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
deleteData
=
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
`若删除行程,则所有方案将会删除,是否确认?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
TempId
:
item
.
TempId
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
const
response
=
await
ConfigService
.
SetDeleteTripTemplate
(
queryMsg
)
if
(
response
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除行程成功`
,
type
:
'success'
,
})
await
queryBySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除行程失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
addCreateProject
=
()
=>
{
addDialogFormVisible
.
value
=
true
}
const
search
=
()
=>
{
}
const
queryBySearchHandler
=
async
()
=>
{
// const parmas = router.currentRoute.value.params
// if(parmas.temptype) queryObj.TempType = parseInt(parmas.temptype.toString())
loading
.
value
=
true
try
{
if
(
queryObj
.
pageIndex
==
1
)
dataList
.
value
=
[]
const
response
=
await
ConfigService
.
GetManagerTripTemplatePage
(
queryObj
);
if
(
response
.
data
.
resultCode
==
1
)
{
let
arrList
=
function
(
list
){
list
.
forEach
(
x
=>
{
x
.
checked
=
false
})
}
arrList
(
response
.
data
.
data
.
pageData
)
dataList
.
value
=
dataList
.
value
.
concat
(
response
.
data
.
data
.
pageData
);
queryObj
.
pageCount
=
response
.
data
.
data
.
pageCount
;
}
loading
.
value
=
false
}
catch
(
error
)
{
loading
.
value
=
false
}
}
const
tableScrollHandler
=
()
=>
{
if
(
queryObj
.
pageCount
>
queryObj
.
pageIndex
){
queryObj
.
pageIndex
++
queryBySearchHandler
()
}
}
provide
(
injectKeyPublic
,
search
)
const
forwardSpace
=
()
=>
router
.
push
(
'/space'
)
// queryBySearchHandler()
</
script
>
<
style
lang=
"scss"
scoped
>
...
...
src/views/Workbench/components/NewProject.vue
View file @
1690ba82
...
...
@@ -2,15 +2,21 @@
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleFormRef"
class=
"NewProjectForm"
>
<div
class=
"fz16 text-weight-bold microsoft q-mb-md"
>
项目标题:
</div>
<el-form-item
label=
""
prop=
"Name"
>
<el-input
v-model=
"form.Name"
autocomplete=
"off"
/>
<el-input
v-model=
"form.Name"
autocomplete=
"off"
placeholder=
"项目标题"
/>
</el-form-item>
</el-form>
<div
class=
"column q-pt-lg"
>
<div
class=
"row"
>
<el-button
class=
"col"
type=
"info"
plain
size=
"large"
>
记录项目需求
</el-button>
<el-tooltip
class=
"box-item"
effect=
"dark"
content=
"此为TD云高级版/定制版功能"
placement=
"left"
>
<el-button
class=
"col"
type=
"info"
plain
size=
"large"
disabled
>
记录项目需求
</el-button>
</el-tooltip>
</div>
<div
class=
"row q-pt-sm"
>
<el-button
class=
"col"
size=
"large"
>
规划行程路线
</el-button>
<el-button
class=
"col"
size=
"large"
@
click=
"router.push('/project/create/trip')"
>
规划行程路线
</el-button>
</div>
</div>
</
template
>
...
...
@@ -18,9 +24,14 @@
import
{
ElMessage
,
FormInstance
,
FormRules
}
from
'element-plus'
;
import
{
ref
,
reactive
,
watch
,
inject
,
onMounted
}
from
"vue"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
{
useRouter
}
from
"vue-router"
;
const
WorkProject
=
ref
({}
as
any
)
WorkProject
.
value
=
inject
(
injectKeyPublic
)
const
router
=
useRouter
()
const
search
=
ref
({}
as
any
)
search
.
value
=
inject
(
injectKeyPublic
)
const
form
=
ref
({}
as
any
)
form
.
value
=
search
.
value
.
form
const
props
=
defineProps
({
addDialogFormVisible
:
{
...
...
@@ -36,19 +47,14 @@
{
min
:
1
,
max
:
500
,
message
:
''
,
trigger
:
'blur'
},
]
})
const
form
=
ref
({}
as
any
)
WorkProject
.
value
.
form
=
{
Name
:
''
}
form
.
value
=
WorkProject
.
value
.
form
const
close
=
()
=>
{
}
const
c
losed
=
()
=>
{
const
c
onfirmator
=
()
=>
{
}
watch
(()
=>
form
.
value
,(
o
,
n
)
=>
{
WorkProject
.
value
.
form
=
form
.
value
search
.
value
.
form
=
form
.
value
})
watch
(()
=>
props
.
addDialogFormVisible
,(
o
,
n
)
=>
{
ruleFormRef
.
value
.
clearValidate
()
...
...
src/views/Workbench/components/NewSharer.vue
0 → 100644
View file @
1690ba82
<
template
>
<el-button
class=
"full-width"
type=
"info"
plain
size=
"large"
>
项目分享成员
</el-button>
<el-scrollbar
max-height=
"530px"
>
<div
class=
"q-py-lg"
>
<div
class=
"fz16 row flex-between"
>
<span
class=
"microsoft text-weight-bold700 q-mb-lg"
>
项目管理者:
</span>
<div
class=
"row nowrap"
>
<div
class=
"row nowrap"
v-if=
"msg.personnelList1.length
<5
"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList1"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,1)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
<el-button
size=
"large"
icon=
"Plus"
circle
@
click=
"addPersonnel(1)"
/>
</div>
</div>
<div
class=
"row wrap"
v-if=
"msg.personnelList1.length>=5"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList1"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,1)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
</div>
<div
class=
"q-py-lg"
>
<div
class=
"fz16 row flex-between"
>
<span
class=
"microsoft text-weight-bold700 q-mb-lg"
>
项目需求:
</span>
<div
class=
"row nowrap"
>
<div
class=
"row nowrap"
v-if=
"msg.personnelList2.length
<5
"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList2"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,2)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
<el-button
size=
"large"
icon=
"Plus"
circle
@
click=
"addPersonnel(2)"
/>
</div>
</div>
<div
class=
"row wrap"
v-if=
"msg.personnelList2.length>=5"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList2"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,2)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
</div>
<div
class=
"q-py-lg"
>
<div
class=
"fz16 row flex-between"
>
<span
class=
"microsoft text-weight-bold700 q-mb-lg"
>
行程制作:
</span>
<div
class=
"row nowrap"
>
<div
class=
"row nowrap"
v-if=
"msg.personnelList3.length
<5
"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList3"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,3)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
<el-button
size=
"large"
icon=
"Plus"
circle
@
click=
"addPersonnel(3)"
/>
</div>
</div>
<div
class=
"row wrap"
v-if=
"msg.personnelList3.length>=5"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList3"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,3)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
</div>
<div
class=
"q-py-lg"
>
<div
class=
"fz16 row flex-between"
>
<span
class=
"microsoft text-weight-bold700 q-mb-lg"
>
费用核算:
</span>
<div
class=
"row nowrap"
>
<div
class=
"row nowrap"
v-if=
"msg.personnelList4.length
<5
"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList4"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,4)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
<el-button
size=
"large"
icon=
"Plus"
circle
@
click=
"addPersonnel(4)"
/>
</div>
</div>
<div
class=
"row wrap"
v-if=
"msg.personnelList4.length>=5"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList4"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,4)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
</div>
<div
class=
"q-py-lg"
>
<div
class=
"fz16 row flex-between"
>
<span
class=
"microsoft text-weight-bold700 q-mb-lg"
>
行程报价:
</span>
<div
class=
"row nowrap"
>
<div
class=
"row nowrap"
v-if=
"msg.personnelList5.length
<5
"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList5"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,5)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
<el-button
size=
"large"
icon=
"Plus"
circle
@
click=
"addPersonnel(5)"
/>
</div>
</div>
<div
class=
"row wrap"
v-if=
"msg.personnelList5.length>=5"
>
<div
class=
"NewSharerBox q-mr-md q-mb-md"
v-for=
"(item,index) in msg.personnelList5"
>
<el-icon
color=
"#F26060"
class=
"NewSharerDel pointer"
size=
"14"
@
click=
"delPersonnel(index,5)"
><RemoveFilled
/></el-icon>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
""
><span
class=
"colorF"
>
{{
item
.
name
.
slice
(
0
,
2
)
}}
</span></el-button>
</div>
</div>
</div>
</el-scrollbar>
<el-drawer
v-model=
"datas.personnelShow"
>
<template
#
header
>
<div
class=
"row items-center flex-between"
>
<span
class=
"microsoft fz24 color0"
>
选择成员
</span>
<el-button
class=
"q-mr-lg"
type=
"primary"
color=
"#fff"
plain
@
click=
"confirmator"
>
确 认
</el-button>
</div>
</
template
>
<
template
#
default
>
<personnel></personnel>
</
template
>
</el-drawer>
</template>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
,
FormInstance
,
FormRules
}
from
'element-plus'
;
import
{
ref
,
reactive
,
watch
,
inject
,
onMounted
}
from
"vue"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
{
RemoveFilled
}
from
'@element-plus/icons-vue'
;
import
personnel
from
'./personnel'
const
loading
=
ref
(
true
)
const
allPeoples
=
ref
<
any
[]
>
([])
const
search
=
ref
({}
as
any
)
search
.
value
=
inject
(
injectKeyPublic
)
const
queryObj
=
ref
({}
as
any
)
queryObj
.
value
=
search
.
value
.
queryObj
const
msg
=
ref
({}
as
any
)
msg
.
value
=
search
.
value
.
msg
const
form
=
ref
({}
as
any
)
form
.
value
=
search
.
value
.
form
const
datas
=
reactive
({
personnelShow
:
false
,
keyword
:
''
})
const
props
=
defineProps
({
addDialogFormVisible
:
{
type
:
Boolean
,
default
:
false
,
},
})
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
rules
=
reactive
<
FormRules
<
RuleForm
>>
({
Name
:
[
{
required
:
true
,
message
:
'请输入项目标题'
,
trigger
:
'blur'
},
{
min
:
1
,
max
:
500
,
message
:
''
,
trigger
:
'blur'
},
]
})
const
delPersonnel
=
(
index
:
Number
,
type
:
Number
)
=>
{
if
(
type
==
1
)
msg
.
value
.
personnelList1
.
splice
(
index
,
1
)
if
(
type
==
2
)
msg
.
value
.
personnelList2
.
splice
(
index
,
1
)
if
(
type
==
3
)
msg
.
value
.
personnelList3
.
splice
(
index
,
1
)
if
(
type
==
4
)
msg
.
value
.
personnelList4
.
splice
(
index
,
1
)
if
(
type
==
5
)
msg
.
value
.
personnelList5
.
splice
(
index
,
1
)
}
const
confirmator
=
()
=>
{
datas
.
personnelShow
=
false
}
const
addPersonnel
=
(
type
:
Number
)
=>
{
msg
.
value
.
personnelType
=
type
datas
.
personnelShow
=
true
}
const
closed
=
()
=>
{
}
watch
(()
=>
form
.
value
,(
o
,
n
)
=>
{
search
.
value
.
form
=
form
.
value
},{
deep
:
true
})
watch
(()
=>
msg
.
value
,(
o
,
n
)
=>
{
search
.
value
.
form
=
msg
.
value
},{
deep
:
true
})
watch
(()
=>
props
.
addDialogFormVisible
,(
o
,
n
)
=>
{
ruleFormRef
.
value
.
clearValidate
()
ruleFormRef
.
value
.
resetFields
()
})
onMounted
(()
=>
{
})
</
script
>
<
style
lang=
"scss"
scoped
>
.NewSharerBox
{
width
:
40px
;
height
:
40px
;
position
:
relative
;
}
.NewSharerDel
{
position
:
absolute
;
top
:
-5px
;
right
:
0px
}
</
style
>
\ No newline at end of file
src/views/Workbench/components/header.vue
0 → 100644
View file @
1690ba82
<
template
>
<div>
<div
class=
"bg-white WorkbenchInTabBox"
>
<div
class=
"q-px-lg row flex-between"
>
<div
class=
"row WorkbenchInTab fz14 text-weight-bolder microsoft"
@
click=
"queryObj.Current=1"
>
<div
class=
"cusor-pointer"
:class=
"[queryObj.Current==1?'active':'']"
>
全部
</div>
</div>
<div
class=
"WorkbenchInDel fz14 microsoft cusor-pointer q-pr-lg"
@
click=
"queryObj.Current=2"
>
<div
class=
"WorkbenchInTab"
>
<div
:class=
"[queryObj.Current==2?'active':'']"
>
回收站
</div>
</div>
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"col row flex-between q-px-lg q-py-md"
>
<div
class=
"row items-center wrap WorkbenchInSea"
>
<div
class=
"row items-center q-mb-sm"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Title"
placeholder=
"搜索关键字"
clearable
>
<template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Search
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"row items-center bg-white q-ml-lg q-mb-sm"
style=
"border-radius: 5px;height: 34px;"
>
<div
class=
"row items-center"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Title"
placeholder=
"出行地点"
clearable
>
<
template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Location
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"WorkbenchInSeaLin"
></div>
<div
class=
"row items-center"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Day"
placeholder=
"出行天数"
clearable
>
<
template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Sunny
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"WorkbenchInSeaLin"
></div>
<div
class=
"row items-center"
>
<el-date-picker
style=
"max-width:300px"
@
change=
"getTime"
v-model=
"dateTime"
type=
"daterange"
start-placeholder=
"开始"
end-placeholder=
"结束"
format=
"YYYY-MM-DD"
date-format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
>
</el-date-picker>
</div>
</div>
<div
class=
"row items-center q-ml-lg q-mb-sm"
>
<el-input
class=
"microsoft"
style=
"max-width:150px"
v-model=
"queryObj.Title"
placeholder=
"相关POI"
clearable
>
<
template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Fries
/></el-icon>
</
template
>
</el-input>
</div>
<div
class=
"row items-center q-ml-lg q-mb-sm"
>
<el-checkbox
v-model=
"queryObj.Star"
label=
"星标"
size=
"large"
/>
</div>
</div>
<div
class=
"row nowrap"
style=
"flex-shrink: 0;"
>
<el-button
class=
"q-pl-lg microsoft"
size=
"Default"
type=
"primary"
icon=
"plus"
@
click=
"addCreateProject"
>
新建
</el-button>
</div>
</div>
</div>
<el-dialog
v-model=
"addDialogFormVisible"
title=
""
width=
"420"
>
<
template
#
header
>
<div
class=
"text-title text-left fz16 PingFangSC"
>
创建出行项目
</div>
</
template
>
<NewProject
v-if=
"!addSharer"
:addDialogFormVisible=
"addDialogFormVisible"
></NewProject>
<NewSharer
v-else
></NewSharer>
<
template
#
footer
>
<div
class=
"dialog-footer row flex-between"
>
<template
v-if=
"!addSharer"
>
<div
class=
"row items-center pointer"
@
click=
"addSharer=true"
>
<el-icon><User
/></el-icon>
<span
class=
"fz14 microsoft q-pl-md"
>
添加分享人
</span>
</div>
<el-button
link
type=
"primary"
@
click=
"addDialogFormVisible = false"
>
跳过
</el-button>
</
template
>
<
template
v-else
>
<div
class=
""
>
</div>
<div>
<el-button
@
click=
"addSharer = false"
>
取消
</el-button>
<el-button
type=
"primary"
@
click=
"confirmator"
>
确认
</el-button>
</div>
</
template
>
</div>
</template>
</el-dialog>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
storeToRefs
}
from
'pinia'
import
{
ref
,
reactive
,
watch
,
inject
}
from
"vue"
;
import
{
useUserStore
}
from
"@/store/user"
import
{
ElLoading
,
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
NewProject
from
'./NewProject'
import
NewSharer
from
'./NewSharer'
const
search
=
ref
({}
as
any
)
search
.
value
=
inject
(
injectKeyPublic
)
const
queryObj
=
ref
({}
as
any
)
queryObj
.
value
=
search
.
value
.
queryObj
const
addDialogFormVisible
=
ref
(
false
)
const
addSharer
=
ref
(
false
)
const
dateTime
=
ref
(
''
)
const
confirmator
=
()
=>
{
addSharer
.
value
=
false
}
const
getTime
=
()
=>
{
console
.
log
(
dateTime
.
value
)
if
(
dateTime
.
value
.
length
>
0
){
queryObj
.
value
.
star
=
dateTime
.
value
[
0
]
queryObj
.
value
.
end
=
dateTime
.
value
[
1
]
}
else
{
queryObj
.
value
.
star
=
''
queryObj
.
value
.
end
=
''
}
}
const
addCreateProject
=
()
=>
{
addDialogFormVisible
.
value
=
true
}
watch
(()
=>
queryObj
.
value
,(
o
,
n
)
=>
{
search
.
value
.
queryObj
=
queryObj
.
value
},{
deep
:
true
})
</
script
>
<
style
lang=
"scss"
scoped
>
.user-center-header
{
padding
:
0
40px
0
28px
;
border-bottom
:
1px
solid
#efefef
;
height
:
56px
;
color
:
#000
;
}
.user-center-menu
{
width
:
90px
;
padding
:
20px
0
20px
16px
;
font-family
:
microsoft
yahei
;
}
.user-center-body
{
padding
:
20px
40px
40px
40px
;
}
.WorkbenchInTabBox
{
padding
:
8px
20px
;
}
.WorkbenchInTab
div
{
color
:
$themeColor
}
.WorkbenchInTab
div
.active
{
position
:
relative
;
}
.
WorkbenchInTab
div
.
active
:
:
after
{
content
:
""
;
display
:
block
;
position
:
absolute
;
width
:
24px
;
height
:
4px
;
background
:
$themeColor
;
border-radius
:
2px
;
bottom
:
-9px
;
left
:
50%
;
transform
:
translateX
(
-50%
)
translateY
(
0
);
}
.WorkbenchInDel
{
padding-left
:
16px
;
margin-right
:
-16px
;
border-left
:
1px
solid
#e6e7e8
;
}
.WorkbenchInDel
span
{
display
:
inline-block
;
padding
:
0
16px
;
position
:
relative
;
color
:
#666e76
;
transition
:
color
.3s
;
}
.WorkbenchInDel
:hover
span
{
color
:
$themeColor
;
}
.
WorkbenchInSea
:
:
v-deep
(
.
el-input__wrapper
)
,.
WorkbenchInSea
::
v-deep
(
.
el-date-editor
.
el-input__wrapper
)
{
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
;
border
:
1px
solid
#fff
;
}
.
WorkbenchInSea
:
:
v-deep
(
.
el-input__wrapper
:
hover
)
,.
WorkbenchInSea
::
v-deep
(
.
el-date-editor
.
el-input__wrapper
:
hover
)
{
border
:
1px
solid
$themeColor
;
}
.WorkbenchInSeaLin
{
margin
:
7px
0
;
width
:
1px
;
background
:
#dedede
;
}
</
style
>
src/views/Workbench/components/list.vue
0 → 100644
View file @
1690ba82
<
template
>
<div
class=
"q-px-lg"
>
<div
class=
"col q-px-lg"
>
<el-table
v-loading=
"loading"
ref=
"dataTableRef"
highlight-current-row
v-load-more=
"tableScrollHandler"
:data=
"dataList"
class=
"tableHBEbeef5"
height=
"82vh"
>
<el-table-column
label=
""
align=
"center"
width=
"50"
>
<template
#
default=
"scope"
>
<el-icon
:color=
"$themeColor"
><Star
/></el-icon>
</
template
>
</el-table-column>
<el-table-column
label=
"项目信息"
align=
"center"
width=
"350"
>
<
template
#
default=
"scope"
>
</
template
>
</el-table-column>
<el-table-column
label=
"项目状态"
>
<
template
#
default=
"scope"
>
<el-icon
:color=
"$themeColor"
><SuccessFilled
/></el-icon>
<el-icon
color=
"#ff9632"
><Histogram
/></el-icon>
</
template
>
</el-table-column>
<el-table-column
label=
"行程信息"
>
<
template
#
default=
"scope"
>
</
template
>
</el-table-column>
<el-table-column
label=
"参与成员"
width=
"200"
>
<
template
#
default=
"scope"
>
<div>
<div>
<el-button
type=
"default"
link
:icon=
"Edit"
size=
"small"
@
click=
"goEditor(scope.row)"
class=
"microsoft"
>
编辑
</el-button>
<el-dropdown
class=
"q-pl-lg"
trigger=
"click"
>
<el-icon
class=
"q-pt-sm"
size=
"16"
color=
"#b1b7cf"
><MoreFilled
/></el-icon>
<template
#
dropdown
>
<el-dropdown-menu
class=
"q-pa-md"
>
<el-dropdown-item
@
click=
"copyData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"View"
size=
"small"
class=
"microsoft"
>
复制项目
</el-button>
</el-dropdown-item>
<el-divider
border-style=
"dashed"
/>
<el-dropdown-item
@
click=
"completeData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"View"
size=
"small"
class=
"microsoft"
>
完成项目
</el-button>
</el-dropdown-item>
<el-dropdown-item
@
click=
"OffData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"View"
size=
"small"
class=
"microsoft"
>
关闭项目
</el-button>
</el-dropdown-item>
<el-dropdown-item
@
click=
"deleteData(scope.row)"
>
<el-button
type=
"default"
link
:icon=
"Delete"
size=
"small"
class=
"microsoft"
>
删除
</el-button>
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</div>
<el-button
type=
"primary"
circle
>
周琳
</el-button>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
ApiResult
}
from
'@/configs/axios'
;
import
OrgService
from
'@/services/OrgService'
;
import
{
storeToRefs
}
from
'pinia'
import
UserCard
from
"@/components/User/UserCard.vue"
;
import
{
useMenuStore
,
useScreenStore
}
from
"@/store"
;
import
{
ref
,
reactive
,
watch
,
inject
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useUserStore
}
from
"@/store/user"
import
{
Edit
,
Delete
,
View
,
Search
,
Location
,
Sunny
,
Fries
,
Star
,
SuccessFilled
,
Histogram
,
User
}
from
'@element-plus/icons-vue'
;
import
{
ElLoading
,
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
ConfigService
from
'@/services/ConfigService'
const
search
=
ref
({}
as
any
)
search
.
value
=
inject
(
injectKeyPublic
)
const
queryObj
=
ref
({}
as
any
)
queryObj
.
value
=
search
.
value
.
queryObj
const
msg
=
ref
({}
as
any
)
msg
.
value
=
search
.
value
.
msg
const
router
=
useRouter
()
const
useMenu
=
useMenuStore
();
const
menus
=
ref
(
useMenu
.
getWorkbenchMenu
);
const
{
model
}
=
storeToRefs
(
useScreenStore
())
const
addDialogFormVisible
=
ref
(
false
)
const
addSharer
=
ref
(
false
)
const
dateTime
=
ref
(
''
)
const
dataList
=
ref
([]
as
Array
<
any
>
);
const
loading
=
ref
(
false
as
any
)
const
deleteLoading
=
ref
<
any
>
(
null
)
const
goEditor
=
(
item
:
any
)
=>
{
}
const
copyData
=
(
item
:
any
)
=>
{
}
const
completeData
=
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
`本行程中的项目需求、行程制作、费用核算、行程报价尚未完成,您是否确认忽略以上内容?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
TempId
:
item
.
TempId
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
const
response
=
await
ConfigService
.
SetDeleteTripTemplate
(
queryMsg
)
if
(
response
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除行程成功`
,
type
:
'success'
,
})
await
queryBySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除行程失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
OffData
=
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
`若关闭,则该行程的下业务将不能进行编辑,是否确认?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
TempId
:
item
.
TempId
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
const
response
=
await
ConfigService
.
SetDeleteTripTemplate
(
queryMsg
)
if
(
response
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除行程成功`
,
type
:
'success'
,
})
await
queryBySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除行程失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
deleteData
=
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
`若删除行程,则所有方案将会删除,是否确认?`
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
TempId
:
item
.
TempId
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
const
response
=
await
ConfigService
.
SetDeleteTripTemplate
(
queryMsg
)
if
(
response
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除行程成功`
,
type
:
'success'
,
})
await
queryBySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除行程失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
getAllPeople
=
async
()
=>
{
OrgService
.
GetAllEmployerAsync
().
then
((
res
)
=>
{
const
response
=
res
.
data
if
(
response
.
resultCode
==
ApiResult
.
SUCCESS
&&
response
.
data
.
length
>
0
){
let
arrList
=
function
(
list
){
list
.
forEach
(
x
=>
{
x
.
checked
=
false
})
}
arrList
(
response
.
data
)
msg
.
value
.
allPeoples
=
response
.
data
msg
.
value
.
newAllPeoples
=
response
.
data
}
}).
catch
(()
=>
{
})
}
const
searchData
=
()
=>
{
queryBySearchHandler
()
}
const
queryBySearchHandler
=
async
()
=>
{
// const parmas = router.currentRoute.value.params
// if(parmas.temptype) queryObj.TempType = parseInt(parmas.temptype.toString())
loading
.
value
=
true
try
{
if
(
queryObj
.
pageIndex
==
1
)
dataList
.
value
=
[]
const
response
=
await
ConfigService
.
GetManagerTripTemplatePage
(
queryObj
);
if
(
response
.
data
.
resultCode
==
1
)
{
let
arrList
=
function
(
list
){
list
.
forEach
(
x
=>
{
x
.
checked
=
false
})
}
arrList
(
response
.
data
.
data
.
pageData
)
dataList
.
value
=
dataList
.
value
.
concat
(
response
.
data
.
data
.
pageData
);
queryObj
.
pageCount
=
response
.
data
.
data
.
pageCount
;
}
loading
.
value
=
false
}
catch
(
error
)
{
loading
.
value
=
false
}
}
const
tableScrollHandler
=
()
=>
{
if
(
queryObj
.
pageCount
>
queryObj
.
pageIndex
){
queryObj
.
pageIndex
++
queryBySearchHandler
()
}
}
const
forwardSpace
=
()
=>
router
.
push
(
'/space'
)
watch
(()
=>
msg
.
value
,(
o
,
n
)
=>
{
search
.
value
.
msg
=
msg
.
value
},{
deep
:
true
})
watch
(()
=>
queryObj
.
value
,(
o
,
n
)
=>
{
// queryBySearchHandler()
},{
deep
:
true
})
// queryBySearchHandler()
getAllPeople
()
</
script
>
<
style
lang=
"scss"
scoped
>
.user-center-header
{
padding
:
0
40px
0
28px
;
border-bottom
:
1px
solid
#efefef
;
height
:
56px
;
color
:
#000
;
}
.user-center-menu
{
width
:
90px
;
padding
:
20px
0
20px
16px
;
font-family
:
microsoft
yahei
;
}
.user-center-body
{
padding
:
20px
40px
40px
40px
;
}
.WorkbenchInTabBox
{
padding
:
8px
20px
;
}
.WorkbenchInTab
div
{
color
:
$themeColor
}
.WorkbenchInTab
div
.active
{
position
:
relative
;
}
.
WorkbenchInTab
div
.
active
:
:
after
{
content
:
""
;
display
:
block
;
position
:
absolute
;
width
:
24px
;
height
:
4px
;
background
:
$themeColor
;
border-radius
:
2px
;
bottom
:
-9px
;
left
:
50%
;
transform
:
translateX
(
-50%
)
translateY
(
0
);
}
.WorkbenchInDel
{
margin-right
:
-16px
;
border-left
:
1px
solid
#e6e7e8
;
}
.WorkbenchInDel
span
{
display
:
inline-block
;
padding
:
0
16px
;
position
:
relative
;
color
:
#666e76
;
transition
:
color
.3s
;
}
.WorkbenchInDel
:hover
span
{
color
:
$themeColor
;
}
.
WorkbenchInSea
:
:
v-deep
(
.
el-input__wrapper
)
,.
WorkbenchInSea
::
v-deep
(
.
el-date-editor
.
el-input__wrapper
)
{
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
;
border
:
1px
solid
#fff
;
}
.
WorkbenchInSea
:
:
v-deep
(
.
el-input__wrapper
:
hover
)
,.
WorkbenchInSea
::
v-deep
(
.
el-date-editor
.
el-input__wrapper
:
hover
)
{
border
:
1px
solid
$themeColor
;
}
.WorkbenchInSeaLin
{
margin
:
7px
0
;
width
:
1px
;
background
:
#dedede
;
}
</
style
>
src/views/Workbench/components/personnel.vue
0 → 100644
View file @
1690ba82
<
template
>
<div
class=
"full-height"
style=
"position: relative;"
>
<el-input
style=
"position: absolute;left: 0;top: 0;right: 0;z-index: 2;"
class=
"microsoft q-mb-md"
size=
"large"
v-model=
"keyword"
placeholder=
"搜索成员"
clearable
@
keyup
.
enter=
"filtrationData"
@
change=
"filtrationData"
>
<template
#
prefix
>
<el-icon
class=
"el-input__icon"
><Search
/></el-icon>
</
template
>
</el-input>
<!-- height="300px" -->
<el-scrollbar
class=
"col full-height user-center-body"
style=
"padding-top: 50px;"
>
<div
class=
"row col flex-between items-center q-pb-md pointer"
v-for=
"(item,index) in allPeoples"
:key=
"index"
@
click=
"clickLine(item,index,1)"
>
<div>
<el-button
size=
"large"
color=
"#599DFA"
circle
class=
"q-mr-lg"
>
<span
class=
"colorF"
>
{{item.name.slice(0,2)}}
</span>
</el-button>
<span
class=
"color0 fz14 microsoft"
>
{{item.name}}
</span>
</div>
<div>
<el-checkbox
v-model=
"item.checked"
label=
""
size=
"large"
@
change=
"clickLine(item,index)"
@
click
.
stop=
""
/>
</div>
</div>
</el-scrollbar>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
,
FormInstance
,
FormRules
}
from
'element-plus'
;
import
{
ref
,
reactive
,
watch
,
inject
,
onMounted
}
from
"vue"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
{
Search
}
from
'@element-plus/icons-vue'
;
const
search
=
ref
({}
as
any
)
search
.
value
=
inject
(
injectKeyPublic
)
const
queryObj
=
ref
({}
as
any
)
queryObj
.
value
=
search
.
value
.
queryObj
const
msg
=
ref
({}
as
any
)
msg
.
value
=
search
.
value
.
msg
const
form
=
ref
({}
as
any
)
form
.
value
=
search
.
value
.
form
const
allPeoples
=
ref
([]
as
ay
)
allPeoples
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
msg
.
value
.
allPeoples
))
const
keyword
=
ref
(
''
)
const
props
=
defineProps
({
})
const
filtrationData
=
()
=>
{
if
(
keyword
.
value
)
allPeoples
.
value
=
msg
.
value
.
allPeoples
.
filter
(
x
=>
{
return
x
.
name
.
toLowerCase
().
includes
(
keyword
.
value
.
toLowerCase
())})
else
allPeoples
.
value
=
msg
.
value
.
allPeoples
}
const
clickLine
=
(
item
:
any
,
index
:
Number
,
type
:
any
)
=>
{
if
(
type
){
item
.
checked
=
!
item
.
checked
}
if
(
item
.
checked
==
true
)
{
let
filter
if
(
msg
.
value
.
personnelType
==
1
)
filter
=
msg
.
value
.
personnelList1
.
filter
(
x
=>
{
return
x
.
empId
==
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
2
)
filter
=
msg
.
value
.
personnelList2
.
filter
(
x
=>
{
return
x
.
empId
==
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
3
)
filter
=
msg
.
value
.
personnelList3
.
filter
(
x
=>
{
return
x
.
empId
==
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
4
)
filter
=
msg
.
value
.
personnelList4
.
filter
(
x
=>
{
return
x
.
empId
==
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
5
)
filter
=
msg
.
value
.
personnelList5
.
filter
(
x
=>
{
return
x
.
empId
==
item
.
empId
})
if
(
filter
.
length
==
0
)
{
if
(
msg
.
value
.
personnelType
==
1
)
msg
.
value
.
personnelList1
.
push
(
item
)
if
(
msg
.
value
.
personnelType
==
2
)
msg
.
value
.
personnelList2
.
push
(
item
)
if
(
msg
.
value
.
personnelType
==
3
)
msg
.
value
.
personnelList3
.
push
(
item
)
if
(
msg
.
value
.
personnelType
==
4
)
msg
.
value
.
personnelList4
.
push
(
item
)
if
(
msg
.
value
.
personnelType
==
5
)
msg
.
value
.
personnelList5
.
push
(
item
)
}
}
else
{
if
(
msg
.
value
.
personnelType
==
1
)
msg
.
value
.
personnelList1
=
msg
.
value
.
personnelList1
.
filter
(
x
=>
{
return
x
.
empId
!=
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
2
)
msg
.
value
.
personnelList2
=
msg
.
value
.
personnelList2
.
filter
(
x
=>
{
return
x
.
empId
!=
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
3
)
msg
.
value
.
personnelList3
=
msg
.
value
.
personnelList3
.
filter
(
x
=>
{
return
x
.
empId
!=
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
4
)
msg
.
value
.
personnelList4
=
msg
.
value
.
personnelList4
.
filter
(
x
=>
{
return
x
.
empId
!=
item
.
empId
})
if
(
msg
.
value
.
personnelType
==
5
)
msg
.
value
.
personnelList5
=
msg
.
value
.
personnelList5
.
filter
(
x
=>
{
return
x
.
empId
!=
item
.
empId
})
}
}
watch
(()
=>
msg
.
value
,(
o
,
n
)
=>
{
search
.
value
.
msg
=
msg
.
value
allPeoples
.
value
.
forEach
(
x
=>
{
let
filter
if
(
msg
.
value
.
personnelType
==
1
)
filter
=
msg
.
value
.
personnelList1
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
2
)
filter
=
msg
.
value
.
personnelList2
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
3
)
filter
=
msg
.
value
.
personnelList3
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
4
)
filter
=
msg
.
value
.
personnelList4
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
5
)
filter
=
msg
.
value
.
personnelList5
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
filter
.
length
>
0
)
x
.
checked
=
true
else
x
.
checked
=
false
})
},{
deep
:
true
})
watch
(()
=>
msg
.
value
.
personnelType
,(
o
,
n
)
=>
{
allPeoples
.
value
.
forEach
(
x
=>
{
let
filter
if
(
msg
.
value
.
personnelType
==
1
)
filter
=
msg
.
value
.
personnelList1
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
2
)
filter
=
msg
.
value
.
personnelList2
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
3
)
filter
=
msg
.
value
.
personnelList3
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
4
)
filter
=
msg
.
value
.
personnelList4
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
msg
.
value
.
personnelType
==
5
)
filter
=
msg
.
value
.
personnelList5
.
filter
(
y
=>
{
return
y
.
empId
==
x
.
empId
})
if
(
filter
.
length
>
0
)
x
.
checked
=
true
else
x
.
checked
=
false
})
},{
deep
:
true
})
onMounted
(()
=>
{
})
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
\ No newline at end of file
src/views/project/Index.vue
0 → 100644
View file @
1690ba82
<
template
>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
reactive
,
ref
,
inject
,
onMounted
,
watch
}
from
"vue"
;
import
LineService
from
'@/services/LineService'
import
ConfigService
from
'@/services/ConfigService'
import
{
useUserStore
}
from
"@/store/user"
;
import
{
useSellTemplateStore
,
useSlidesStore
}
from
'@/store'
import
{
useScreenStore
}
from
"@/store/screen"
;
import
{
storeToRefs
}
from
"pinia"
;
import
{
injectKeyTemplate
}
from
'@/types/injectKey'
import
{
createOpEditorLink
,
createSaleCreateLink
,
managerTemplateLink
,
noDataImg
,
openNewBlank
}
from
'@/utils/common'
import
{
ElLoading
,
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
useRouter
}
from
"vue-router"
;
import
UserCard
from
"@/components/User/UserCard.vue"
;
import
temDetails
from
"@/components/home/temDetails.vue"
;
import
{
Edit
,
Delete
,
View
,
Search
}
from
'@element-plus/icons-vue'
;
import
{
VIEWPORT_SIZE
,
VIEWPORT_VER_SIZE
}
from
'@/configs/canvas'
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
\ No newline at end of file
src/views/project/Layout.vue
0 → 100644
View file @
1690ba82
<
template
>
<div
class=
"window-height column"
>
<div
class=
"user-center-header row items-center"
>
<img
src=
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Static/pptTD.png"
style=
"height: 24px"
/>
<div
class=
"q-ml-lg text-weight-bold"
style=
"font-size: 20px"
>
工作台
</div>
<div
class=
"user-center-menuB column "
>
<el-button
class=
"full-width pingfangr text-weight-bolder"
@
click=
"forwardSpace"
style=
"font-size: 14px !important;"
icon=
"arrow-left"
>
返回
</el-button>
</div>
<div
class=
"col"
></div>
<UserCard
:size=
"33"
></UserCard>
</div>
<div
class=
"col column q-px-lg"
>
<div
class=
"user-center-menu row"
>
<el-menu
:default-active=
"`$
{activeIndex}`" class="el-menu-demo col row q-px-lg"
router>
<template
v-for=
"(x,i) in menus"
>
<el-menu-item
:index=
"`$
{i}`" :key="i" :route="x.url" v-if="i==0">
<span
class=
"microsoft"
>
{{
x
.
name
}}
</span>
</el-menu-item>
</
template
>
<div
class=
"row items-center q-pr-lg"
>
<div
class=
"q-pl-md q-pr-lg color0 fz12"
>
》
</div>
<el-divider
class=
"q-ml-lg"
direction=
"vertical"
style=
"height: 60%;"
/>
</div>
<
template
v-for=
"(x,i) in menus"
>
<el-menu-item
:index=
"`$
{i}`" :key="i" :route="x.url" v-if="i!=0">
<span
class=
"microsoft"
>
{{
x
.
name
}}
</span>
</el-menu-item>
</
template
>
</el-menu>
</div>
<el-scrollbar
class=
"col full-height user-center-body"
wrap-style=
"overflow-x:unset;"
>
<router-view
/>
</el-scrollbar>
</div>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
storeToRefs
}
from
'pinia'
import
UserCard
from
"@/components/User/UserCard.vue"
;
import
{
useMenuStore
,
useScreenStore
}
from
"@/store"
;
import
{
ref
,
watch
}
from
"vue"
;
import
{
useRouter
}
from
"vue-router"
;
import
{
useUserStore
}
from
"@/store/user"
const
router
=
useRouter
()
const
useMenu
=
useMenuStore
();
const
menus
=
ref
(
useMenu
.
getCreateMenu
);
const
{
model
}
=
storeToRefs
(
useScreenStore
())
const
activeIndex
=
ref
(
0
)
const
userStore
=
useUserStore
()
const
userInfo
=
userStore
.
getUser
if
(
!
userInfo
.
isTemplate
&&
!
userInfo
.
iv
&&
!
userInfo
.
ic
&&
!
userInfo
.
ia
)
router
.
push
(
'/notfound'
)
const
forwardSpace
=
()
=>
router
.
push
(
'/space'
)
watch
(()
=>
router
.
currentRoute
.
value
.
path
,
(
toPath
)
=>
{
// if(!userInfo.isTemplate && !userInfo.iv && !userInfo.ic && !userInfo.ia) return router.push('/notfound')
menus
.
value
=
useMenu
.
getCreateMenu
if
(
!
menus
.
value
)
return
activeIndex
.
value
=
menus
.
value
.
findIndex
(
x
=>
x
.
url
==
router
.
currentRoute
.
value
.
path
)
},{
immediate
:
true
,
deep
:
true
})
</
script
>
<
style
lang=
"scss"
scoped
>
.user-center-header
{
padding
:
0
40px
0
28px
;
border-bottom
:
1px
solid
#efefef
;
height
:
56px
;
color
:
#000
;
}
.user-center-menuB
{
width
:
90px
;
padding
:
20px
0
20px
16px
;
font-family
:
microsoft
yahei
;
}
.el-menu--vertical
:not
(
.el-menu--collapse
)
:not
(
.el-menu--popup-container
)
.el-menu-item
{
padding-left
:
0
;
}
.el-menu
{
border
:
0
;
}
.user-center-menu
{
padding
:
0
20px
;
font-family
:
microsoft
yahei
;
}
.el-menu-demo
.el-menu-item
{
padding
:
0
;
position
:
relative
;
}
.
el-menu-demo
.
el-menu-item
.
is-active
:
:
after
{
content
:
""
;
display
:
block
;
position
:
absolute
;
width
:
24px
;
height
:
4px
;
background
:
$themeColor
;
border-radius
:
2px
;
bottom
:
0px
;
left
:
50%
;
transform
:
translateX
(
-50%
)
translateY
(
0
);
}
.el-menu-demo
.el-menu-item
:hover
{
background
:
#fff
!
important
;
}
.el-menu-demo
.el-menu-item
:hover
span
{
color
:
$themeColor
!
important
;
}
.user-center-body
{
padding
:
20px
40px
40px
40px
;
}
</
style
>
src/views/project/components/NewJourney.vue
0 → 100644
View file @
1690ba82
<
template
>
<el-form
:model=
"form"
:rules=
"rules"
ref=
"ruleFormRef"
class=
"NewProjectForm"
>
<div
class=
"row items-center text-weight-bold microsoft q-mb-md"
>
<span
class=
"text-negative q-pr-sm"
>
*
</span>
<span
class=
"fz16"
>
行程标题
</span>
</div>
<el-form-item
label=
""
prop=
"Name"
>
<el-input
v-model=
"form.Name"
autocomplete=
"off"
placeholder=
"行程标题"
/>
</el-form-item>
<div
class=
"row items-center text-weight-bold microsoft q-mb-md q-pt-lg"
>
<span
class=
"text-negative q-pr-sm"
></span>
<span
class=
"fz16"
>
出行日期
</span>
</div>
<el-form-item>
<el-date-picker
@
change=
"getTime"
v-model=
"dateTime"
type=
"daterange"
start-placeholder=
"开始"
end-placeholder=
"结束"
format=
"YYYY-MM-DD"
date-format=
"YYYY-MM-DD"
value-format=
"YYYY-MM-DD"
>
</el-date-picker>
</el-form-item>
<div
class=
"row items-center text-weight-bold microsoft q-mb-md q-pt-lg"
>
<span
class=
"text-negative q-pr-sm"
></span>
<span
class=
"fz16"
>
出发与返回(城市)
</span>
</div>
<el-form-item>
<div
class=
"row col flex-between"
>
<el-select
v-model=
"form.qscs"
multiple
filterable
remote
reserve-keyword
placeholder=
"出发城市"
:remote-method=
"remoteMethod"
:loading=
"loading"
style=
"width: 174px;"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
<div>
<el-divider
direction=
"vertical"
style=
"height: 80%;"
/>
</div>
<el-select
v-model=
"form.qscs"
multiple
filterable
remote
reserve-keyword
placeholder=
"返回城市"
:remote-method=
"remoteMethod"
:loading=
"loading"
style=
"width: 174px;"
>
<el-option
v-for=
"item in options"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</div>
</el-form-item>
</el-form>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
ElMessage
,
FormInstance
,
FormRules
}
from
'element-plus'
;
import
{
ref
,
reactive
,
watch
,
inject
,
onMounted
}
from
"vue"
;
import
{
injectKeyPublic
}
from
'@/types/injectKey'
;
import
{
useRouter
}
from
"vue-router"
;
const
router
=
useRouter
()
// const search = ref({} as any)
// search.value = inject(injectKeyPublic)
const
dateTime
=
ref
(
''
)
const
options
=
ref
([])
const
loading
=
ref
(
false
)
const
form
=
reactive
({
Name
:
''
,
qscs
:
''
}
as
any
)
const
props
=
defineProps
({
addDialogFormVisible
:
{
type
:
Boolean
,
default
:
false
,
},
})
const
ruleFormRef
=
ref
<
FormInstance
>
()
const
rules
=
reactive
<
FormRules
<
RuleForm
>>
({
Name
:
[
{
required
:
true
,
message
:
'请输入行程标题'
,
trigger
:
'blur'
},
{
min
:
1
,
max
:
500
,
message
:
''
,
trigger
:
'blur'
},
]
})
const
close
=
()
=>
{
}
const
confirmator
=
()
=>
{
}
const
getTime
=
()
=>
{
console
.
log
(
dateTime
.
value
)
if
(
dateTime
.
value
.
length
>
0
){
// queryObj.value.star = dateTime.value[0]
// queryObj.value.end = dateTime.value[1]
}
else
{
// queryObj.value.star = ''
// queryObj.value.end = ''
}
}
const
remoteMethod
=
(
query
:
string
)
=>
{
if
(
query
)
{
loading
.
value
=
true
setTimeout
(()
=>
{
loading
.
value
=
false
options
.
value
=
list
.
value
.
filter
((
item
)
=>
{
return
item
.
label
.
toLowerCase
().
includes
(
query
.
toLowerCase
())
})
},
200
)
}
else
{
options
.
value
=
[]
}
}
// watch(()=>form.value,(o,n)=>{
// search.value.form = form.value
// })
watch
(()
=>
props
.
addDialogFormVisible
,(
o
,
n
)
=>
{
ruleFormRef
.
value
.
clearValidate
()
ruleFormRef
.
value
.
resetFields
()
})
onMounted
(()
=>
{
})
</
script
>
<
style
lang=
"scss"
scoped
>
.
NewProjectForm
:
:
v-deep
(
.
el-input__wrapper
){
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
;
border-radius
:
0
;
border
:
1px
solid
#fff
;
border-bottom-color
:
#e8eaec
;
}
.
NewProjectForm
:
:
v-deep
(
.
el-input__wrapper
:
hover
){
border-bottom-color
:
$themeColor
;
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
::v-deep
(
.el-form-item.is-error
.el-input__wrapper.is-focus
)
{
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
.
NewProjectForm
:
:
v-deep
(
.
el-select
:
hover
){
border
:
0
!
important
;;
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
.
NewProjectForm
:
:
v-deep
(
.
select-trigger
:
hover
){
border
:
0
!
important
;;
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
.
NewProjectForm
:
:
v-deep
(
.
el-tooltip__trigger
:
hover
){
border
:
0
!
important
;;
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
.
NewProjectForm
:
:
v-deep
(
.
el-tooltip__trigger
:
hover
){
border
:
0
!
important
;;
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
.
NewProjectForm
:
:
v-deep
(
.
el-select__tags
:
hover
){
border
:
0
!
important
;;
box-shadow
:
0
0
0
0px
var
(
--
el-input-border-color
,
var
(
--
el-border-color
))
inset
!
important
;
}
</
style
>
\ No newline at end of file
src/views/project/trip.vue
0 → 100644
View file @
1690ba82
<
template
>
<div>
<el-dialog
v-model=
"addDialogFormVisible"
title=
""
width=
"420"
>
<template
#
header
>
<div
class=
"text-title text-left fz16 PingFangSC"
>
新建行程
</div>
</
template
>
<NewJourney
:addDialogFormVisible=
"addDialogFormVisible"
></NewJourney>
<
template
#
footer
>
<div
class=
"dialog-footer row flex-between"
>
<div
class=
""
>
</div>
<div>
<el-button
type=
"primary"
@
click=
"confirmator"
>
创建
</el-button>
</div>
</div>
</
template
>
</el-dialog>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
ref
,
reactive
,
watch
,
inject
}
from
"vue"
;
import
NewJourney
from
'./components/NewJourney'
const
addDialogFormVisible
=
ref
(
true
)
const
confirmator
=
()
=>
{
}
</
script
>
<
style
scoped
>
</
style
>
\ No newline at end of file
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