Files
2024-10-31 14:34:57 +08:00

106 lines
2.7 KiB
Vue

<script>
import {mapMutations, mapState} from "vuex";
import qs from 'query-string'
export default {
name: "AppDutyInfo",
appName: "值班信息",
data() {
return {
list: [],
show: false,
columns: [
{label: '值班人员', prop: 'dutyUserName'},
{label: '开始时间', prop: 'dutyStartTime'},
{label: '结束时间', prop: 'dutyEndTime'},
]
}
},
computed: {
...mapState(['user']),
},
onShow() {
document.title = '值班信息'
if (this.user.token) {
this.getList()
} else if (this.$route.query.code) {
this.getToken().then(this.getList)
} else this.getCode().then(this.getToken).then(this.getList)
},
methods: {
...mapMutations(['setToken']),
getCode() {
/**
* 构建oauth2链接获取code
*/
const oauth2Weixin = params => {
const redirect = qs.parseUrl(location.href)
delete redirect.query.code
delete redirect.query.state
return qs.stringifyUrl({
url: "https://open.weixin.qq.com/connect/oauth2/authorize",
query: {
response_type: 'code',
redirect_uri: qs.stringifyUrl(redirect),
...params
},
fragmentIdentifier: "wechat_redirect"
})
}
const oauthURL = oauth2Weixin({
appid: "ww596787bb70f08288",
agentid: "1000211",
scope: "snsapi_privateinfo"
})
location.replace(oauthURL)
},
getToken() {
const {code} = this.$route.query
return this.$http.post("/node/wxtest/token", null, {withoutToken: 1, params: {code}}).then(res => {
if (res?.data) {
return this.setToken(res.data.data)
} else if (res?.err?.errcode == 40029) {
this.getCode().then(this.getToken).then(this.getList)
}
})
},
getList() {
this.$http.post('/node/duty/list').then((res) => {
if (res?.data) {
this.list = res.data.records
}
})
},
},
}
</script>
<template>
<section class="AppDutyInfo">
<div v-text="user.token"/>
<div class="select" @click="show=true">艾贤凌
<u-icon name="arrow-down" color="#999" size="24"/>
</div>
<u-table>
<u-tr>
<u-th width="33%" v-for="column in columns" :key="column.prop">{{ column.label }}</u-th>
</u-tr>
<u-tr v-for="(row, i) in list" :key="i">
<u-th width="33%" v-for="column in columns" :key="column.prop">{{ row[column.prop] }}</u-th>
</u-tr>
</u-table>
</section>
</template>
<style scoped lang="scss">
.AppDutyInfo {
padding: 0 16px;
.select {
text-align: right;
padding: 32px 0;
}
}
</style>