Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Z
zc-qiyewx-app
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
杨勇飞
zc-qiyewx-app
Commits
e13da015
Commit
e13da015
authored
Feb 25, 2025
by
刘杰
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
企业微信前端
parent
3612bc13
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1261 additions
and
1063 deletions
+1261
-1063
launch.json
.hbuilderx/launch.json
+16
-0
apiList.js
api/apiList.js
+3
-0
bossCard.vue
components/bossCard/bossCard.vue
+235
-211
dailyReport.vue
components/dailyReport/dailyReport.vue
+21
-4
dailyReportCreate.vue
components/dailyReportCreate/dailyReportCreate.vue
+1
-1
manifest.json
manifest.json
+1
-1
loginBehavior.js
mixins/loginBehavior.js
+67
-67
index.vue
pages/abnormal/detail/index.vue
+469
-459
index.vue
pages/abnormal/list/index.vue
+20
-6
index.vue
pages/index/index.vue
+17
-20
login.vue
pages/login/login.vue
+351
-234
config.js
publicConfig/config.js
+1
-1
yarn.lock
yarn.lock
+59
-59
No files found.
.hbuilderx/launch.json
0 → 100644
View file @
e13da015
{
//
launch.json
配置了启动调试时相关设置,configurations下节点名称可为
app-plus/h
5
/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp
-360
/
//
launchtype项可配置值为local或remote
,
local代表前端连本地云函数,remote代表前端连云端云函数
"version"
:
"0.0"
,
"configurations"
:
[{
"default"
:
{
"launchtype"
:
"local"
},
"mp-weixin"
:
{
"launchtype"
:
"local"
},
"type"
:
"uniCloud"
}
]
}
api/apiList.js
View file @
e13da015
...
...
@@ -16,6 +16,9 @@ export function searchBossCard(data) {
export
function
searchOrderEvent
(
data
)
{
return
Request
(
`/api/entry/{mini}/m-action/biz.tm.OrderRelease.service.searchOrderEvent`
,
data
)
}
export
function
searchOrderEventDetail
(
data
)
{
return
Request
(
`/api/entry/{mini}/m-action/biz.tm.OrderRelease.service.searchOrderEventDetail`
,
data
)
}
export
function
BindCompany
(
data
)
{
return
Request
(
...
...
components/bossCard/bossCard.vue
View file @
e13da015
<
template
>
<view
class=
"report-container"
>
<scroll-view
class=
"scroll-list"
scroll-y
>
<!-- 顶部统计卡片 -->
<view
class=
"top-stats-wrapper"
>
<!-- 异常统计环状进度 -->
...
...
@@ -56,8 +57,8 @@
<!-- 右侧数据统计 -->
<view
class=
"statistics"
v-if=
"staffKind==='simulatedBoss'
"
>
<view
class=
"stat-row
"
>
<view
class=
"statistics
"
>
<view
class=
"stat-row"
v-if=
"staffKind==='simulatedBoss'
"
>
<view
class=
"stat-item"
>
<view
class=
"stat-block green "
>
<text
class=
"number"
>
{{
currentSearchData
.
overview
.
stats
.
shippingCount
}}
</text>
...
...
@@ -221,8 +222,8 @@
</text>
</view>
</view>
<scroll-view
class=
"chart-scroll"
scroll-x
>
<view
class=
"chart-wrapper"
id=
"myLeaderChart"
></view
>
<scroll-view
class=
"chart-scroll"
scroll-x
@
touchmove
.
prevent
>
<canvas
class=
"chart-wrapper"
id=
"myLeaderChart"
></canvas
>
</scroll-view>
</view>
...
...
@@ -249,14 +250,15 @@
</text>
</view>
</view>
<scroll-view
class=
"chart-scroll"
scroll-x
>
<view
class=
"chart-wrapper"
id=
"myProjectChart"
></view
>
<scroll-view
class=
"chart-scroll"
scroll-x
@
touchmove
.
prevent
>
<canvas
class=
"chart-wrapper"
id=
"myProjectChart"
></canvas
>
</scroll-view>
</view>
<!-- 项目运营表格 -->
<view
class=
"table-container"
>
<text
class=
"table-title"
>
模拟老板运营情况
</text>
<scroll-view
scroll-x
class=
"table-scroll"
>
<view
class=
"table-scroll"
>
<uni-table
:data=
"currentData.tableData"
border
:loading=
"loading"
emptyText=
"暂无数据"
>
<uni-tr>
...
...
@@ -283,7 +285,9 @@
</uni-tr>
</uni-table>
</view>
</scroll-view>
</view>
</scroll-view>
</view>
</
template
>
...
...
@@ -496,6 +500,9 @@
itemStyle
:
{
color
:
'#52C41A'
,
borderRadius
:
[
4
,
4
,
0
,
0
]
},
emphasis
:
{
focus
:
'series'
}
},
{
...
...
@@ -505,6 +512,9 @@
itemStyle
:
{
color
:
'#FF4D4F'
,
borderRadius
:
[
4
,
4
,
0
,
0
]
},
emphasis
:
{
focus
:
'series'
}
},
{
...
...
@@ -518,12 +528,20 @@
},
lineStyle
:
{
width
:
2
},
emphasis
:
{
focus
:
'series'
}
}
]
}
this
.
myLeaderChart
.
setOption
(
option
)
this
.
myLeaderChart
.
on
(
'click'
,
function
(
params
)
{
if
(
params
.
componentType
===
'series'
)
{
console
.
log
(
'触碰到柱状图:'
,
params
);
}
});
},
initProjectChart
()
{
// 获取数据点数量
...
...
@@ -650,10 +668,10 @@
lineStyle
:
{
width
:
2
}
}
]
}
this
.
myProjectChart
.
setOption
(
option
)
},
async
switchTime
(
time
)
{
...
...
@@ -883,11 +901,17 @@
height
:
100%
;
}
.scroll-list
{
height
:
calc
(
100vh
-
60px
);
}
.report-container
{
width
:
100%
;
box-sizing
:
border-box
;
background-color
:
#F5F7FA
;
min-height
:
100vh
;
min-height
:
calc
(
100vh
-
60px
);
// max-height: 100vh;
>
view
{
width
:
100%
;
...
...
components/dailyReport/dailyReport.vue
View file @
e13da015
...
...
@@ -3,15 +3,23 @@
<!-- 顶部统计 -->
<view
class=
"report-stats"
>
<view
class=
"stat-item"
@
click=
"selectReport('submit')"
>
<text
class=
"number"
style=
"color: #52c41a;"
>
{{
searchDatas
.
submitted
}}
</text>
<text
class=
"number"
style=
"color: #52c41a;"
>
{{
searchDatas
.
submitted
}}
<text
class=
"unit"
style=
"color: #52c41a;"
>
人
</text>
</text>
<text
class=
"label"
>
已提交
</text>
</view>
<view
class=
"stat-item"
@
click=
"selectReport('unSubmit')"
>
<text
class=
"number"
style=
"color: #ff4d4f;"
>
{{
searchDatas
.
unSubmitted
}}
</text>
<text
class=
"number"
style=
"color: #ff4d4f;"
>
{{
searchDatas
.
unSubmitted
}}
<text
class=
"unit"
style=
"color: #ff4d4f;"
>
人
</text>
</text>
<text
class=
"label"
>
未提交
</text>
</view>
<view
class=
"stat-item"
@
click=
"selectReport('all')"
>
<text
class=
"number"
style=
"color: #1890ff;"
>
{{
searchDatas
.
total
}}
</text>
<text
class=
"number"
style=
"color: #1890ff;"
>
{{
searchDatas
.
total
}}
<text
class=
"unit"
style=
"color: #1890ff;"
>
人
</text></text>
<text
class=
"label"
>
总人数
</text>
</view>
...
...
@@ -85,6 +93,9 @@
this
.
staffCode
=
uni
.
getStorageSync
(
'staffCode'
);
this
.
staffKind
=
uni
.
getStorageSync
(
'uc_staff_kind'
);
this
.
commonName
=
uni
.
getStorageSync
(
'commonName'
);
console
.
log
(
"this.staffCode"
+
this
.
staffCode
)
console
.
log
(
"this.staffKind"
+
this
.
staffKind
)
console
.
log
(
"this.commonName"
+
this
.
commonName
)
console
.
log
(
'获取到的commonName:'
,
this
.
commonName
);
...
...
@@ -167,6 +178,12 @@
font-weight
:
bold
;
color
:
#333
;
margin-bottom
:
8px
;
.unit
{
font-size
:
12px
;
color
:
#999
;
margin-left
:
5px
;
}
}
.label
{
...
...
@@ -178,7 +195,7 @@
.report-list
{
// 调整高度,移除分页器的空间
height
:
calc
(
100vh
-
12
0px
);
height
:
calc
(
100vh
-
20
0px
);
.report-card
{
display
:
block
;
...
...
components/dailyReportCreate/dailyReportCreate.vue
View file @
e13da015
...
...
@@ -52,7 +52,7 @@
<!-- 按钮组 -->
<view
class=
"button-group"
>
<
button
class=
"back-btn"
@
click=
"goBack"
>
返回
</button
>
<
!--
<button
class=
"back-btn"
@
click=
"goBack"
>
返回
</button>
--
>
<button
class=
"submit-btn"
@
click=
"submitReport"
>
提交日报
</button>
</view>
</view>
...
...
manifest.json
View file @
e13da015
...
...
@@ -79,7 +79,7 @@
"devServer"
:
{
"https"
:
false
,
"disableHostCheck"
:
true
,
"port"
:
808
2
,
"port"
:
808
3
,
"proxy"
:
{
"/api"
:
{
//
"target"
:
"http://122.112.220.204:8089"
,
...
...
mixins/loginBehavior.js
View file @
e13da015
...
...
@@ -16,75 +16,75 @@ import * as ww from "@wecom/jssdk";
module
.
exports
=
{
methods
:
{
initWeCom
(
callback
=
()
=>
{})
{
getTicketByType
({
aux
:
{
entryName
:
MINI
.
h5Uat
,
//
initWeCom(callback = () => {}) {
//
getTicketByType({
//
aux: {
//
entryName: MINI.h5Uat,
type
:
"app"
,
},
}).
then
((
res
)
=>
{
const
appTicket
=
res
.
data
.
data
.
ticket
;
getTicketByType
({
aux
:
{
entryName
:
MINI
.
h5Uat
,
//
type: "app",
//
},
//
}).then((res) => {
//
const appTicket = res.data.data.ticket;
//
getTicketByType({
//
aux: {
//
entryName: MINI.h5Uat,
type
:
"company"
,
},
}).
then
((
res
)
=>
{
const
comTicket
=
res
.
data
.
data
.
ticket
;
const
timestamp
=
new
Date
().
getTime
();
ww
.
register
({
corpId
:
CORP_ID
,
agentId
:
AGENT_ID
,
jsApiList
:
JS_API_LIST
,
async
getConfigSignature
(
url
)
{
const
{
signature
}
=
ww
.
getSignature
({
ticket
:
comTicket
,
nonceStr
:
MINI
.
h5Uat
,
timestamp
,
url
,
});
return
{
timestamp
,
nonceStr
:
MINI
.
h5Uat
,
signature
,
};
},
async
getAgentConfigSignature
(
url
)
{
const
{
signature
}
=
ww
.
getSignature
({
ticket
:
appTicket
,
nonceStr
:
MINI
.
h5Uat
,
timestamp
,
url
,
});
return
{
timestamp
,
nonceStr
:
MINI
.
h5Uat
,
signature
,
};
},
onConfigSuccess
(
res
)
{
console
.
log
(
"onConfigSuccess"
,
res
);
},
onConfigFail
(
res
)
{
console
.
log
(
"onConfigFail"
+
res
);
},
onAgentConfigSuccess
(
res
)
{
console
.
log
(
"onAgentConfigSuccess"
+
JSON
.
stringify
(
res
));
callback
()
},
onAgentConfigFail
(
res
)
{
console
.
log
(
"onAgentConfigFail"
+
res
);
},
});
});
});
},
//
type: "company",
//
},
//
}).then((res) => {
//
const comTicket = res.data.data.ticket;
//
const timestamp = new Date().getTime();
//
ww.register({
//
corpId: CORP_ID,
//
agentId: AGENT_ID,
//
jsApiList: JS_API_LIST,
//
async getConfigSignature(url) {
//
const {
//
signature
//
} = ww.getSignature({
//
ticket: comTicket,
//
nonceStr: MINI.h5Uat,
//
timestamp,
//
url,
//
});
//
return {
//
timestamp,
//
nonceStr: MINI.h5Uat,
//
signature,
//
};
//
},
//
async getAgentConfigSignature(url) {
//
const {
//
signature
//
} = ww.getSignature({
//
ticket: appTicket,
//
nonceStr: MINI.h5Uat,
//
timestamp,
//
url,
//
});
//
return {
//
timestamp,
//
nonceStr: MINI.h5Uat,
//
signature,
//
};
//
},
//
onConfigSuccess(res) {
//
console.log("onConfigSuccess", res);
//
},
//
onConfigFail(res) {
//
console.log("onConfigFail" + res);
//
},
//
onAgentConfigSuccess(res) {
//
console.log("onAgentConfigSuccess" + JSON.stringify(res));
//
callback()
//
},
//
onAgentConfigFail(res) {
//
console.log("onAgentConfigFail" + res);
//
},
//
});
//
});
//
});
//
},
//获取微信token
getWxToken
()
{
uni
.
login
({
...
...
pages/abnormal/detail/index.vue
View file @
e13da015
<
template
>
<view
class=
"abnormal-detail"
>
<!-- 基本信息卡片 -->
<scroll-view
scroll-y
:style=
"
{ height: '100vh' }">
<view
class=
"detail-card"
>
<view
class=
"card-title"
>
基本信息
</view>
<view
class=
"info-grid"
>
<view
class=
"header-row"
>
<text
class=
"abnormal-id"
@
click=
"copyText(detail.abnormalId)"
>
{{
detail
.
abnormalId
}}
</text>
<text
class=
"time"
>
{{
detail
.
occurTime
}}
</text>
<text
class=
"abnormal-id"
@
click=
"copyText(detail.orderEventNo)"
>
{{
detail
.
orderEventNo
}}
</text>
<text
class=
"time"
>
{{
detail
.
eventTime
}}
</text>
</view>
<view
class=
"full-width-item"
>
<text
class=
"label"
>
客户
</text>
<text
class=
"value"
>
{{
detail
.
customer
}}
</text>
<text
class=
"value"
>
{{
detail
.
customerName
}}
</text>
</view>
<view
class=
"full-width-item"
>
...
...
@@ -36,13 +38,13 @@
<view
class=
"info-row"
>
<view
class=
"info-col"
>
<text
class=
"label"
>
处理状态
</text>
<text
class=
"value"
:class=
"getProcessClass(detail.process
Status)"
>
{{
detail
.
process
Status
}}
<text
class=
"value"
:class=
"getProcessClass(detail.orderEvent
Status)"
>
{{
detail
.
orderEvent
Status
}}
</text>
</view>
<view
class=
"info-col"
>
<text
class=
"label"
>
涉及金额
</text>
<text
class=
"value amount"
>
¥
{{
detail
.
a
mount
}}
</text>
<text
class=
"value amount"
>
¥
{{
detail
.
involvingA
mount
}}
</text>
</view>
</view>
...
...
@@ -53,7 +55,7 @@
</view>
<view
class=
"info-col"
>
<text
class=
"label"
>
二级异常
</text>
<text
class=
"value"
>
{{
detail
.
secondaryAbnormal
}}
</text>
<text
class=
"value"
>
{{
detail
.
childrenException
}}
</text>
</view>
</view>
...
...
@@ -78,19 +80,19 @@
<view
class=
"text-area"
>
<view
class=
"text-item"
>
<view
class=
"text-label"
>
事件描述
</view>
<view
class=
"text-content"
>
{{
detail
.
description
}}
</view>
<view
class=
"text-content"
>
{{
detail
.
content
}}
</view>
</view>
<view
class=
"text-item"
>
<view
class=
"text-label"
>
围堵措施
</view>
<view
class=
"text-content"
>
{{
detail
.
measures
}}
</view>
<view
class=
"text-content"
>
{{
detail
.
containmentMeasure
}}
</view>
</view>
<view
class=
"text-item"
>
<view
class=
"text-label"
>
原因分析
</view>
<view
class=
"text-content"
>
{{
detail
.
analysis
}}
</view>
<view
class=
"text-content"
>
{{
detail
.
reason
}}
</view>
</view>
<view
class=
"text-item"
>
<view
class=
"text-label"
>
改善措施
</view>
<view
class=
"text-content"
>
{{
detail
.
improvement
}}
</view>
<view
class=
"text-content"
>
{{
detail
.
advice
}}
</view>
</view>
<view
class=
"text-item"
>
<view
class=
"text-label"
>
备注
</view>
...
...
@@ -104,16 +106,16 @@
<view
class=
"card-title"
>
附件信息
</view>
<view
class=
"attachment-area"
>
<!-- 图片展示 -->
<view
class=
"images-list"
v-if=
"detail.images && detail.
images.length"
>
<view
class=
"image-item"
v-for=
"(img, index) in detail.
images"
:key=
"index"
>
<image
:src=
"img"
mode=
"aspectFill"
@
click=
"previewImage(
img)"
></image>
<view
class=
"images-list"
v-if=
"images &&
images.length"
>
<view
class=
"image-item"
v-for=
"(img, index) in
images"
:key=
"index"
>
<image
:src=
"img"
@
click=
"onPreviewImage(index,
img)"
></image>
</view>
</view>
<!-- 附件列表 -->
<view
class=
"files-list"
v-if=
"detail.files && detail.files.length"
>
<view
class=
"file-item"
v-for=
"(file, index) in detail.files"
:key=
"index"
>
<text
class=
"iconfont icon-file"
></text>
<text
class=
"file-name"
>
{{
file
.
nam
e
}}
</text>
<text
class=
"file-name"
>
{{
fil
e
}}
</text>
</view>
</view>
</view>
...
...
@@ -128,41 +130,21 @@
</text>
</view>
</view>
</scroll-view>
</view>
</
template
>
<
script
>
export
default
{
import
{
searchOrderEventDetail
,
downloadImg
}
from
'../../../api/apiList'
export
default
{
data
()
{
return
{
detail
:
{
abnormalId
:
'AB202403200001'
,
orderId
:
'TR202403200001'
,
customer
:
'某某物流有限公司'
,
startLocation
:
'上海市浦东新区'
,
endLocation
:
'北京市朝阳区'
,
occurTime
:
'2024-03-20 09:30'
,
abnormalType
:
'运输异常'
,
secondaryAbnormal
:
'货物损坏'
,
amount
:
'5000.00'
,
responsible
:
'承运方'
,
isKPI
:
true
,
processStatus
:
'处理中'
,
description
:
'货物在运输过程中发生损坏,预计损失金额5000元。'
,
measures
:
'已第一时间联系客户,并安排人员前往现场处理。'
,
analysis
:
'装卸过程操作不当,导致货物受损。'
,
improvement
:
'加强装卸人员培训,完善操作规程。'
,
remarks
:
'已与客户达成初步赔偿方案。'
,
images
:
[
'https://example.com/image1.jpg'
,
'https://example.com/image2.jpg'
],
files
:
[
{
name
:
'现场照片.zip'
,
url
:
'https://example.com/file1.zip'
},
{
name
:
'处理报告.pdf'
,
url
:
'https://example.com/file2.pdf'
}
],
approvalStatus
:
'审批中'
}
detail
:
{},
images
:
[],
files
:
[]
}
},
onLoad
(
options
)
{
...
...
@@ -173,13 +155,23 @@ export default {
},
methods
:
{
getDetail
(
id
)
{
// TODO: 调用接口获取详情数据
console
.
log
(
'获取详情数据'
,
id
)
const
data
=
{
aux
:
{
orderEventId
:
id
}
}
searchOrderEventDetail
(
data
).
then
(
res
=>
{
const
data
=
res
.
data
.
data
;
this
.
detail
=
data
;
this
.
files
=
data
.
files
;
this
.
downloadImgs
(
data
.
images
);
})
},
getStatusClass
(
status
)
{
const
classMap
=
{
'未审批'
:
'status-pending'
,
'审批中
'
:
'status-processing'
,
'待审批
'
:
'status-processing'
,
'审批完成'
:
'status-completed'
}
return
classMap
[
status
]
||
''
...
...
@@ -192,10 +184,11 @@ export default {
}
return
classMap
[
status
]
||
''
},
previewImage
(
url
)
{
onPreviewImage
(
index
,
images
)
{
console
.
log
(
"预览图片"
+
images
)
uni
.
previewImage
({
urls
:
this
.
detail
.
images
,
current
:
url
current
:
index
,
urls
:
images
})
},
copyText
(
text
)
{
...
...
@@ -208,13 +201,28 @@ export default {
})
}
})
},
downloadImgs
(
paths
)
{
console
.
log
(
"图片下载"
+
paths
)
return
new
Promise
((
reslove
,
reject
)
=>
{
if
(
paths
)
{
const
imgPaths
=
paths
.
split
(
'|'
)
imgPaths
.
map
((
path
,
index
)
=>
{
downloadImg
(
path
).
then
(
res
=>
{
this
.
images
=
this
.
images
.
concat
(
res
)
})
})
}
else
{
reject
()
}
})
},
}
}
}
</
script
>
<
style
lang=
"scss"
>
.abnormal-detail
{
.abnormal-detail
{
padding
:
15px
;
background
:
#f5f7fa
;
min-height
:
100vh
;
...
...
@@ -224,7 +232,7 @@ export default {
border-radius
:
8px
;
padding
:
0
;
margin-bottom
:
15px
;
box-shadow
:
0
2px
12px
rgba
(
0
,
0
,
0
,
0
.05
);
box-shadow
:
0
2px
12px
rgba
(
0
,
0
,
0
,
0
.05
);
.card-title
{
font-size
:
16px
;
...
...
@@ -364,6 +372,7 @@ export default {
.text-area
{
padding
:
20px
;
.text-item
{
margin-bottom
:
20px
;
...
...
@@ -453,6 +462,7 @@ export default {
.approval-status
{
padding
:
20px
;
.status-tag
{
display
:
inline-block
;
padding
:
6px
16px
;
...
...
@@ -462,5 +472,5 @@ export default {
}
}
}
}
}
</
style
>
\ No newline at end of file
pages/abnormal/list/index.vue
View file @
e13da015
...
...
@@ -5,18 +5,22 @@
<view
class=
"stat-item"
@
click=
"selectReport('new')"
>
<text
class=
"number"
style=
"color: #faad14;"
>
{{
searchDatas
.
new
}}
</text>
<text
class=
"label"
>
未审批
</text>
<text
class=
"number2"
style=
"color: #faad14;"
>
¥
{{
searchDatas
.
newAmount
}}
</text>
</view>
<view
class=
"stat-item"
@
click=
"selectReport('approving')"
>
<text
class=
"number"
style=
"color: #1890ff;"
>
{{
searchDatas
.
approving
}}
</text>
<text
class=
"label"
>
审批中
</text>
<text
class=
"number2"
style=
"color: #1890ff;"
>
¥
{{
searchDatas
.
approvingAmount
}}
</text>
</view>
<view
class=
"stat-item"
@
click=
"selectReport('approved')"
>
<text
class=
"number"
style=
"color:#52c41a;"
>
{{
searchDatas
.
approved
}}
</text>
<text
class=
"label"
>
审批完成
</text>
<text
class=
"number2"
style=
"color:#52c41a;"
>
¥
{{
searchDatas
.
approvedAmount
}}
</text>
</view>
<view
class=
"stat-item"
@
click=
"selectReport('total')"
>
<text
class=
"number"
style=
"color:#ff4d4f;"
>
{{
searchDatas
.
total
}}
</text>
<text
class=
"label"
>
总计
</text>
<text
class=
"number2"
style=
"color:#ff4d4f;"
>
¥
{{
searchDatas
.
totalAmount
}}
</text>
</view>
</view>
...
...
@@ -32,7 +36,7 @@
{{
order
.
approvalStatus
}}
</text>
</view>
<text
class=
"time"
>
{{
order
.
occur
Time
}}
</text>
<text
class=
"time"
>
{{
order
.
event
Time
}}
</text>
</view>
<view
class=
"card-content"
>
...
...
@@ -70,7 +74,7 @@
return
{
staffCode
:
""
,
staffKind
:
""
,
activeStatus
:
"total"
,
activeStatus
:
"total"
,
searchDatas
:
{},
orderList
:
[]
}
...
...
@@ -79,9 +83,9 @@
this
.
initData
()
},
methods
:
{
selectReport
(
active
){
this
.
activeStatus
=
active
this
.
orderList
=
[]
selectReport
(
active
)
{
this
.
activeStatus
=
active
this
.
orderList
=
[]
this
.
initData
()
},
initData
()
{
...
...
@@ -152,9 +156,10 @@
.stat-item
{
text-align
:
center
;
padding
:
15px
24px
;
//
padding: 15px 24px;
background
:
#f9f9f9
;
border-radius
:
6px
;
width
:
25%
;
transition
:
background
0
.3s
,
transform
0
.3s
;
/* 添加过渡效果 */
...
...
@@ -173,6 +178,14 @@
margin-bottom
:
8px
;
}
.number2
{
display
:
block
;
font-size
:
28px
;
// font-weight: bold;
color
:
#333
;
margin-bottom
:
8px
;
}
.label
{
font-size
:
14px
;
color
:
#999
;
...
...
@@ -241,6 +254,7 @@
.time
{
font-size
:
14px
;
color
:
#999
;
float
:
right
;
}
}
...
...
pages/index/index.vue
View file @
e13da015
...
...
@@ -53,12 +53,10 @@
},
onLoad
()
{
console
.
log
(
'index页面加载'
);
// 调试日志
this
.
getUserInfo
()
this
.
getBindCompanyResult
()
this
.
bindGroupChatCompany
()
this
.
uc_staff_kind
=
uni
.
getStorageSync
(
`uc_staff_kind`
);
this
.
updateTopUserList
()
// this.getBindCompanyResult()
// this.bindGroupChatCompany()
},
onShow
()
{
...
...
@@ -72,26 +70,23 @@
},
methods
:
{
updateTopUserList
()
{
if
(
this
.
uc_staff_kind
===
'boss'
)
{
this
.
topUserList
=
[{
name
:
'
订单查询
'
,
key
:
'
orderQuery
'
,
name
:
'
老板看板
'
,
key
:
'
bossCard
'
,
url
:
'/pages/index/index'
},
{
name
:
'查看日报'
,
key
:
'dailyReport'
,
url
:
'/pages/index/index'
},
{
name
:
'老板看板'
,
key
:
'bossCard'
,
url
:
'/pages/index/index'
},
];
}
else
{
}
else
if
(
this
.
uc_staff_kind
===
'simulatedBoss'
)
{
this
.
topUserList
=
[{
name
:
'
订单查询
'
,
key
:
'
orderQuery
'
,
name
:
'
老板看板
'
,
key
:
'
bossCard
'
,
url
:
'/pages/index/index'
},
{
...
...
@@ -102,12 +97,14 @@
name
:
'填写日报'
,
key
:
'dailyReportCreate'
,
url
:
'/pages/index/index'
},
{
name
:
'老板看板'
,
key
:
'bossCard'
,
url
:
'/pages/index/index'
},
];
}
else
{
this
.
topUserList
=
[{
name
:
'填写日报'
,
key
:
'dailyReportCreate'
,
url
:
'/pages/index/index'
},
]
}
},
...
...
@@ -281,4 +278,4 @@
padding
:
0px
12px
12px
12px
;
}
}
</
style
>
\ No newline at end of file
</
style
>
s
\ No newline at end of file
pages/login/login.vue
View file @
e13da015
...
...
@@ -17,6 +17,18 @@
</u-form-item>
</
template
>
</u-form>
<!-- 复选框:是否记住密码 -->
<view
style=
"width: 690rpx; display: flex; justify-content: space-between;"
>
<view
class=
"search-input"
style=
"display: flex; align-items: center;"
>
<u-checkbox-group
placement=
"column"
@
change=
"onChanges"
>
<u-checkbox
:checked=
"isChecked"
iconSize=
"30rpx"
shape=
"square"
size=
"20spx"
/>
</u-checkbox-group>
<text
style=
"color: black;font-size: 18px;"
>
记住密码
</text>
</view>
</view>
<!-- 登录按钮 -->
<button
class=
"loginBtn font_bolder"
@
click=
"submitForm"
>
登录
</button>
</view>
...
...
@@ -24,11 +36,20 @@
</template>
<
script
>
import
{
TokenPrefix
,
MINI
}
from
'../../publicConfig/config.js'
import
{
userLogin
,
SendMessage
}
from
'../../api/apiList.js'
const
loginBehavior
=
require
(
'../../mixins/loginBehavior.js'
)
export
default
{
import
{
TokenPrefix
,
MINI
}
from
'../../publicConfig/config.js'
import
{
userMobileOperation
,
selectStaffByUsername
,
userLogin
,
SendMessage
}
from
'../../api/apiList.js'
const
loginBehavior
=
require
(
'../../mixins/loginBehavior.js'
)
export
default
{
mixins
:
[
loginBehavior
],
data
()
{
return
{
...
...
@@ -42,14 +63,42 @@ export default {
isVerifLogin
:
false
,
//是否为验证码登录
tips
:
'获取验证码'
,
disabled
:
false
,
//是否禁用获取验证码
rememberMe
:
false
,
// 复选框的状态
isChecked
:
false
,
username
:
""
}
},
onLoad
()
{
this
.
loginBg
=
'static/img/bg/loginBg.png'
this
.
projectMini
=
getApp
().
globalData
.
projectMini
this
.
rememberPd
()
},
methods
:
{
rememberPd
()
{
let
_this
=
this
// 赋值操作
var
isCheckedS
=
wx
.
getStorageSync
(
'isChecked'
);
//通过缓存获取密码
console
.
log
(
"rememberPd ischeck"
+
isCheckedS
)
if
(
isCheckedS
)
{
//如果记住账号密码为true,则赋值
this
.
formData
.
userName
=
wx
.
getStorageSync
(
'username2'
)
console
.
log
(
"rememberPd username2"
+
wx
.
getStorageSync
(
'username2'
))
this
.
formData
.
password
=
wx
.
getStorageSync
(
'password'
)
_this
.
isChecked
=
isCheckedS
}
else
{
//用户没有勾选“记住密码”
// 清除缓存,并将输入框置为空
wx
.
setStorageSync
(
'username2'
,
''
);
wx
.
setStorageSync
(
'password'
,
''
);
wx
.
setStorageSync
(
'isChecked'
,
false
);
this
.
formData
.
userName
=
""
;
this
.
formData
.
password
=
""
;
this
.
isChecked
=
false
;
}
},
onChanges
()
{
this
.
isChecked
=
!
this
.
isChecked
;
wx
.
setStorageSync
(
'isChecked'
,
this
.
isChecked
)
},
//手机验证码登录
chooseVerifLogin
()
{
...
...
@@ -100,16 +149,45 @@ export default {
//确认提交
submitForm
()
{
const
{
userName
,
password
,
phone
,
authCode
}
=
this
.
formData
const
{
userName
,
password
,
phone
,
authCode
}
=
this
.
formData
if
(
!
this
.
onSubmitBeforeRule
(
userName
,
password
,
phone
,
authCode
))
return
//规则校验
let
{
projectMini
}
=
getApp
().
globalData
let
{
projectMini
}
=
getApp
().
globalData
let
loginAction
=
'loginByUserInfo'
let
reqData
=
{
entryName
:
projectMini
}
let
reqData
=
{
entryName
:
projectMini
}
if
(
this
.
isVerifLogin
)
{
reqData
=
{
...
reqData
,
params
:
{
phone
,
authCode
}
}
reqData
=
{
...
reqData
,
params
:
{
phone
,
authCode
}
}
loginAction
=
'loginByCustomAuth'
}
else
{
reqData
=
{
...
reqData
,
userName
,
password
}
reqData
=
{
...
reqData
,
userName
,
password
}
}
console
.
log
(
"isChecked"
+
this
.
isChecked
)
if
(
this
.
isChecked
)
{
// 记住密码的逻辑
console
.
log
(
"isChecked"
+
this
.
formData
.
userName
)
uni
.
setStorageSync
(
'username2'
,
this
.
formData
.
userName
);
uni
.
setStorageSync
(
'password'
,
this
.
formData
.
password
);
}
else
{
// 清除存储的密码
uni
.
removeStorageSync
(
'password'
);
}
this
.
h5Login
(
reqData
,
loginAction
)
},
...
...
@@ -117,10 +195,14 @@ export default {
//H5提交
h5Login
(
reqData
,
loginAction
)
{
// uni.setStorageSync(`staffCode`,"");
uni
.
setStorageSync
(
`uc_staff_kind`
,
""
);
const
_this
=
this
let
newCode
=
''
const
{
code
}
=
_this
.
getH5Code
()
const
{
code
}
=
_this
.
getH5Code
()
newCode
=
code
userLogin
(
loginAction
,
newCode
,
reqData
).
then
(
res
=>
{
let
token
=
res
.
data
.
renewedToken
...
...
@@ -131,10 +213,31 @@ export default {
title
:
'登录成功!'
,
duration
:
1000
})
userMobileOperation
(
'getUserInfo'
).
then
(
res
=>
{
let
data
=
res
.
data
.
data
data
.
mobile
=
data
.
userExt
.
mobile
||
'暂无'
this
.
username
=
data
.
username
uni
.
setStorageSync
(
`username`
,
data
.
username
);
uni
.
setStorageSync
(
`commonName`
,
res
.
data
.
data
.
commonName
);
const
staffData
=
{
"aux"
:
{
"username"
:
this
.
username
}
}
selectStaffByUsername
(
staffData
).
then
(
res
=>
{
let
data2
=
res
.
data
.
data
uni
.
setStorageSync
(
`staffCode`
,
data2
.
staffCode
);
uni
.
setStorageSync
(
`uc_staff_kind`
,
data2
.
uc_staff_kind
);
uni
.
redirectTo
({
url
:
"/pages/index/index"
,
})
_this
.
initWeCom
()
})
})
}).
catch
(
err
=>
{
uni
.
showToast
({
...
...
@@ -144,6 +247,9 @@ export default {
})
})
},
getUserInfo
()
{
},
//提示文本
onTipsChange
(
text
)
{
...
...
@@ -154,11 +260,11 @@ export default {
}
}
}
</
script
>
<
style
lang=
"scss"
>
.content_box
{
.content_box
{
color
:
#FFFFFF
;
letter-spacing
:
6rpx
;
background-size
:
100%
;
...
...
@@ -245,6 +351,17 @@ export default {
}
}
.remember-me
{
margin-bottom
:
20px
;
// 添加底部间距
display
:
flex
;
// 使用 flex 布局
align-items
:
center
;
// 垂直居中
}
.remember-checkbox
{
color
:
black
;
// 设置复选框字体颜色为黑色
font-size
:
14px
;
// 设置字体大小
z-index
:
999
;
}
// .user-agreement {
// margin-bottom: 95rpx;
...
...
@@ -306,5 +423,5 @@ export default {
background
:
linear-gradient
(
90deg
,
#2E75E6
0%
,
#5E58EE
100%
);
}
}
}
}
</
style
>
\ No newline at end of file
publicConfig/config.js
View file @
e13da015
...
...
@@ -10,7 +10,7 @@ let BASEURL = {
// url: 'http://192.168.0.230:8080' // xiaohan
// url: "https://botms-demo.logwirecloud.com",
url
:
"http://localhost:8083"
,
//开发
// url: "http://122.112.220.204:8089", //开发
/
// url: "http://122.112.220.204:8089", //开发
// url: "https://stms.bjzc-scs.com", //生产
};
...
...
yarn.lock
View file @
e13da015
...
...
@@ -3,83 +3,83 @@
"@amap/amap-jsapi-loader@^1.0.1":
version "1.0.1
"
resolved
"https://mirrors.cloud.tencent.com/npm/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz"
integrity sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==
"integrity" "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz"
"version" "1.0.1"
"@babel/runtime@^7.17.2":
version "7.26.7
"
resolved
"https://mirrors.cloud.tencent.com/npm/@babel/runtime/-/runtime-7.26.7.tgz"
integrity sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==
"integrity" "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/@babel/runtime/-/runtime-7.26.7.tgz"
"version" "7.26.7"
dependencies:
regenerator-runtime
"^0.14.0"
"regenerator-runtime"
"^0.14.0"
"@dcloudio/uni-ui@^1.5.7":
version "1.5.7
"
resolved
"https://mirrors.cloud.tencent.com/npm/@dcloudio/uni-ui/-/uni-ui-1.5.7.tgz"
integrity sha512-DugxSIrQrze1FLdUOj9a+JEQ0bHGjnJTcGUK1mN/MivKg7nuKJBRWk5Ipa9sUdoBznX6ndz5h2e7Uao6x1CdCw==
"integrity" "sha512-DugxSIrQrze1FLdUOj9a+JEQ0bHGjnJTcGUK1mN/MivKg7nuKJBRWk5Ipa9sUdoBznX6ndz5h2e7Uao6x1CdCw==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/@dcloudio/uni-ui/-/uni-ui-1.5.7.tgz"
"version" "1.5.7"
"@wecom/jssdk@^2.1.0":
version "2.2.5
"
resolved
"https://mirrors.cloud.tencent.com/npm/@wecom/jssdk/-/jssdk-2.2.5.tgz"
integrity sha512-qOBAsfqaiYM8jZHWYs/atHSpJhsLdZVNaxHQdmEQ7ZWul/GZMt4P5VY8Nf7GII7GhG8z/k+r37Dto6qtAaRqow==
"integrity" "sha512-qOBAsfqaiYM8jZHWYs/atHSpJhsLdZVNaxHQdmEQ7ZWul/GZMt4P5VY8Nf7GII7GhG8z/k+r37Dto6qtAaRqow==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/@wecom/jssdk/-/jssdk-2.2.5.tgz"
"version" "2.2.5"
copy-text-to-clipboard@^3.0.1
:
version "3.2.0
"
resolved
"https://mirrors.cloud.tencent.com/npm/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz"
integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==
"copy-text-to-clipboard@^3.0.1"
:
"integrity" "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz"
"version" "3.2.0"
core-js@^3.11.0
:
version "3.40.0
"
resolved
"https://mirrors.cloud.tencent.com/npm/core-js/-/core-js-3.40.0.tgz"
integrity sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==
"core-js@^3.11.0"
:
"integrity" "sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/core-js/-/core-js-3.40.0.tgz"
"version" "3.40.0"
echarts@^5.6.0
:
version "5.6.0
"
resolved
"https://mirrors.cloud.tencent.com/npm/echarts/-/echarts-5.6.0.tgz"
integrity sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==
"echarts@^5.6.0"
:
"integrity" "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/echarts/-/echarts-5.6.0.tgz"
"version" "5.6.0"
dependencies:
tslib
"2.3.0"
zrender
"5.6.1"
"tslib"
"2.3.0"
"zrender"
"5.6.1"
jweixin-module@^1.6.0
:
version "1.6.0
"
resolved
"https://mirrors.cloud.tencent.com/npm/jweixin-module/-/jweixin-module-1.6.0.tgz"
integrity sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==
"jweixin-module@^1.6.0"
:
"integrity" "sha512-dGk9cf+ipipHmtzYmKZs5B2toX+p4hLyllGLF6xuC8t+B05oYxd8fYoaRz0T30U2n3RUv8a4iwvjhA+OcYz52w==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/jweixin-module/-/jweixin-module-1.6.0.tgz"
"version" "1.6.0"
mutation-observer@^1.0.3
:
version "1.0.3
"
resolved
"https://mirrors.cloud.tencent.com/npm/mutation-observer/-/mutation-observer-1.0.3.tgz"
integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
"mutation-observer@^1.0.3"
:
"integrity" "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/mutation-observer/-/mutation-observer-1.0.3.tgz"
"version" "1.0.3"
regenerator-runtime@^0.14.0
:
version "0.14.1
"
resolved
"https://mirrors.cloud.tencent.com/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
"regenerator-runtime@^0.14.0"
:
"integrity" "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz"
"version" "0.14.1"
tslib@2.3.0
:
version "2.3.0
"
resolved
"https://mirrors.cloud.tencent.com/npm/tslib/-/tslib-2.3.0.tgz"
integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
"tslib@2.3.0"
:
"integrity" "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/tslib/-/tslib-2.3.0.tgz"
"version" "2.3.0"
uview-ui@^2.0.31
:
version "2.0.31
"
resolved
"https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz"
integrity sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==
"uview-ui@^2.0.31"
:
"integrity" "sha512-I/0fGuvtiKHH/mBb864SGYk+SJ7WaF32tsBgYgeBOsxlUp+Th+Ac2tgz2cTvsQJl6eZYWsKZ3ixiSXCAcxZ8Sw==
"
"resolved"
"https://registry.npmjs.org/uview-ui/-/uview-ui-2.0.31.tgz"
"version" "2.0.31"
vconsole@^3.15.0
:
version "3.15.1
"
resolved
"https://mirrors.cloud.tencent.com/npm/vconsole/-/vconsole-3.15.1.tgz"
integrity sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==
"vconsole@^3.15.0"
:
"integrity" "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/vconsole/-/vconsole-3.15.1.tgz"
"version" "3.15.1"
dependencies:
"@babel/runtime" "^7.17.2"
copy-text-to-clipboard
"^3.0.1"
core-js
"^3.11.0"
mutation-observer
"^1.0.3"
"copy-text-to-clipboard"
"^3.0.1"
"core-js"
"^3.11.0"
"mutation-observer"
"^1.0.3"
zrender@5.6.1
:
version "5.6.1
"
resolved
"https://mirrors.cloud.tencent.com/npm/zrender/-/zrender-5.6.1.tgz"
integrity sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==
"zrender@5.6.1"
:
"integrity" "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==
"
"resolved"
"https://mirrors.cloud.tencent.com/npm/zrender/-/zrender-5.6.1.tgz"
"version" "5.6.1"
dependencies:
tslib
"2.3.0"
"tslib"
"2.3.0"
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