|
@@ -1,12 +1,16 @@
|
|
|
<template>
|
|
|
<view class="content">
|
|
|
+ <!-- <button class="btn-add" @click="toAdd" type="primary">新增</button> -->
|
|
|
<uni-calendar
|
|
|
class="uni-calendar--hook"
|
|
|
:selected="info.selected"
|
|
|
:showMonth="false"
|
|
|
@change="change"
|
|
|
- />
|
|
|
- <button @click="showModal" type="primary">新增</button>
|
|
|
+ @monthSwitch="monthSwitch"
|
|
|
+ >
|
|
|
+ <text @click="toAdd">新增工时</text>
|
|
|
+ </uni-calendar>
|
|
|
+ <!-- <button @click="showModal" type="primary">新增</button> -->
|
|
|
<uni-collapse ref="collapse">
|
|
|
<uni-collapse-item
|
|
|
v-for="collapse in collapseList"
|
|
@@ -14,54 +18,53 @@
|
|
|
:title="collapse.name"
|
|
|
>
|
|
|
<view class="content">
|
|
|
- <template v-for="(item, index) in collapse.children">
|
|
|
- <uni-card
|
|
|
- :key="index"
|
|
|
- :title="allType[item.type_id] && allType[item.type_id].name"
|
|
|
- >
|
|
|
- <view class="uni-body">
|
|
|
- <view class="detail-item" v-if="item.project_id != '0'">
|
|
|
- <view class="detail-label">所属项目</view>
|
|
|
- <view class="detail-value">
|
|
|
- {{ getProject(item.project_id) }}
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <view class="detail-item">
|
|
|
- <view class="detail-label">审核状态</view>
|
|
|
- <view
|
|
|
- class="detail-value"
|
|
|
- :style="{ color: stateColor[item.audit_state] }"
|
|
|
- >
|
|
|
- {{ auditState[item.audit_state] }}
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <view class="detail-item" v-if="item.audit_state == 3">
|
|
|
- <view class="detail-label">拒绝原因</view>
|
|
|
- <view class="detail-value">
|
|
|
- {{ item.audit_desc }}
|
|
|
- </view>
|
|
|
+ <uni-card
|
|
|
+ v-for="(item, index) in collapse.children"
|
|
|
+ :key="index"
|
|
|
+ :title="allType[item.type_id] && allType[item.type_id].name"
|
|
|
+ >
|
|
|
+ <view class="uni-body">
|
|
|
+ <view class="detail-item" v-if="item.project_id != '0'">
|
|
|
+ <view class="detail-label">所属项目</view>
|
|
|
+ <view class="detail-value">
|
|
|
+ {{ getProject(item.project_id) }}
|
|
|
</view>
|
|
|
- <view class="detail-item">
|
|
|
- <view class="detail-label">工时</view>
|
|
|
- <view class="detail-value">
|
|
|
- {{ item.workload }}
|
|
|
- </view>
|
|
|
+ </view>
|
|
|
+ <view class="detail-item">
|
|
|
+ <view class="detail-label">审核状态</view>
|
|
|
+ <view
|
|
|
+ class="detail-value"
|
|
|
+ :style="{ color: stateColor[item.audit_state] }"
|
|
|
+ >
|
|
|
+ {{ auditState[item.audit_state] }}
|
|
|
</view>
|
|
|
</view>
|
|
|
- <view
|
|
|
- v-if="item.audit_state == 0 || item.audit_state == 3"
|
|
|
- slot="actions"
|
|
|
- class="card-actions"
|
|
|
- >
|
|
|
- <view class="card-actions-item" @click="onHandleSave(item)">
|
|
|
- <text class="card-actions-item-text">修改工时</text>
|
|
|
+ <view class="detail-item" v-if="item.audit_state == 3">
|
|
|
+ <view class="detail-label">拒绝原因</view>
|
|
|
+ <view class="detail-value">
|
|
|
+ {{ item.audit_desc }}
|
|
|
</view>
|
|
|
- <view class="card-actions-item" @click="onHandleAudit(item)">
|
|
|
- <text class="card-actions-item-text">上报审批</text>
|
|
|
+ </view>
|
|
|
+ <view class="detail-item">
|
|
|
+ <view class="detail-label">工时</view>
|
|
|
+ <view class="detail-value">
|
|
|
+ {{ item.workload }}
|
|
|
</view>
|
|
|
</view>
|
|
|
- </uni-card>
|
|
|
- </template>
|
|
|
+ </view>
|
|
|
+ <view
|
|
|
+ v-if="item.audit_state == 0 || item.audit_state == 3"
|
|
|
+ slot="actions"
|
|
|
+ class="card-actions"
|
|
|
+ >
|
|
|
+ <view class="card-actions-item" @click="onHandleSave(item)">
|
|
|
+ <text class="card-actions-item-text">修改工时</text>
|
|
|
+ </view>
|
|
|
+ <view class="card-actions-item" @click="onHandleAudit(item, 0)">
|
|
|
+ <text class="card-actions-item-text">上报审批</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </uni-card>
|
|
|
</view>
|
|
|
</uni-collapse-item>
|
|
|
</uni-collapse>
|
|
@@ -83,12 +86,22 @@
|
|
|
@confirm="auditConfirm"
|
|
|
></uni-popup-dialog>
|
|
|
</uni-popup>
|
|
|
- <AddModal
|
|
|
+ <!-- <AddModal
|
|
|
ref="addModal"
|
|
|
@submit="onSubmit"
|
|
|
:projectList="projectList"
|
|
|
:typeList="typeList"
|
|
|
- />
|
|
|
+ /> -->
|
|
|
+ <view class="group">
|
|
|
+ <button @click="onHandleAudit({}, 2)" type="primary">上报本月工时</button>
|
|
|
+ <button
|
|
|
+ v-show="collapseList.length > 0"
|
|
|
+ @click="onHandleAudit({}, 1)"
|
|
|
+ class="button"
|
|
|
+ >
|
|
|
+ 上报今日工时
|
|
|
+ </button>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
@@ -128,7 +141,9 @@ export default {
|
|
|
2: "已通过",
|
|
|
3: "已拒绝",
|
|
|
},
|
|
|
+ auditType: 0,
|
|
|
day: moment().format("YYYY-MM-DD"),
|
|
|
+ monthDate: moment(),
|
|
|
};
|
|
|
},
|
|
|
onNavigationBarButtonTap(e) {
|
|
@@ -136,9 +151,12 @@ export default {
|
|
|
url: "../audit/index",
|
|
|
});
|
|
|
},
|
|
|
- onReady() {
|
|
|
+ onLoad() {
|
|
|
this.init();
|
|
|
},
|
|
|
+ onShow() {
|
|
|
+ this.queryWorkHours();
|
|
|
+ },
|
|
|
computed: {
|
|
|
...mapState(["allType", "typeList"]),
|
|
|
collapseList() {
|
|
@@ -158,14 +176,22 @@ export default {
|
|
|
methods: {
|
|
|
async init() {
|
|
|
await this.$store.dispatch("getType");
|
|
|
-
|
|
|
this.projectList = await queryProject();
|
|
|
- await this.queryWorkHours();
|
|
|
+ this.queryWorkHours();
|
|
|
},
|
|
|
change(e) {
|
|
|
+ console.log(e);
|
|
|
this.day = e.fulldate;
|
|
|
this.currentList = e.extraInfo.list || [];
|
|
|
},
|
|
|
+ monthSwitch(e) {
|
|
|
+ console.log(e);
|
|
|
+ this.monthDate = moment(`${e.year}-${e.month}-01`, "YYYY-MM-DD");
|
|
|
+ console.log(this.monthDate);
|
|
|
+ this.queryWorkHours();
|
|
|
+ // this.day = e.fulldate;
|
|
|
+ // this.currentList = e.extraInfo.list || [];
|
|
|
+ },
|
|
|
getProject(id) {
|
|
|
let p = this.projectList.find((p) => p.ID == id);
|
|
|
if (!p) return "";
|
|
@@ -175,8 +201,9 @@ export default {
|
|
|
this.currentItem = item;
|
|
|
this.$refs.inputDialog.open();
|
|
|
},
|
|
|
- onHandleAudit(item) {
|
|
|
+ onHandleAudit(item, type) {
|
|
|
this.currentItem = item;
|
|
|
+ this.auditType = type;
|
|
|
this.$refs.auditDialog.open();
|
|
|
},
|
|
|
async dialogInputConfirm(workload) {
|
|
@@ -226,28 +253,68 @@ export default {
|
|
|
await this.queryWorkHours();
|
|
|
},
|
|
|
async auditConfirm() {
|
|
|
- let item = this.currentItem;
|
|
|
- let params = [
|
|
|
- {
|
|
|
+ let type = this.auditType;
|
|
|
+ let params;
|
|
|
+ const getData = (item) => {
|
|
|
+ return {
|
|
|
type_id: Number(item.type_id),
|
|
|
data: [
|
|
|
{
|
|
|
id: item.id,
|
|
|
project_id: item.project_id,
|
|
|
workload: item.workload,
|
|
|
- day: item.time,
|
|
|
+ day: item.day,
|
|
|
},
|
|
|
],
|
|
|
- },
|
|
|
- ];
|
|
|
-
|
|
|
+ };
|
|
|
+ };
|
|
|
+ if (type == 0) {
|
|
|
+ params = [getData(this.currentItem)];
|
|
|
+ } else if (type == 1) {
|
|
|
+ let auditList = this.currentList.filter(
|
|
|
+ (item) => item.audit_state == 0 || item.audit_state == 3
|
|
|
+ );
|
|
|
+ if (auditList.length == 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: "本日没有待上报工时!",
|
|
|
+ icon: "none",
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ params = auditList.map((item) => getData(item));
|
|
|
+ } else {
|
|
|
+ let auditList = [];
|
|
|
+ this.info.selected.forEach((s) => {
|
|
|
+ if (s.list) {
|
|
|
+ auditList = auditList.concat(
|
|
|
+ s.list.filter(
|
|
|
+ (item) => item.audit_state == 0 || item.audit_state == 3
|
|
|
+ )
|
|
|
+ );
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (auditList.length == 0) {
|
|
|
+ uni.showToast({
|
|
|
+ title: "本月没有待上报工时!",
|
|
|
+ icon: "none",
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ params = auditList.map((item) => getData(item));
|
|
|
+ }
|
|
|
await addAuthWorkHours(params);
|
|
|
this.queryWorkHours();
|
|
|
this.$refs.auditDialog.close();
|
|
|
},
|
|
|
async queryWorkHours() {
|
|
|
+ let date = this.monthDate;
|
|
|
+ let s_time = date.format("YYYY-MM-01 00:00:00");
|
|
|
+ let e_time = moment(s_time)
|
|
|
+ .add("month", 1)
|
|
|
+ .add("days", -1)
|
|
|
+ .format("YYYY-MM-DD 23:59:59");
|
|
|
const user = uni.getStorageSync("user");
|
|
|
- const data = await queryWorkHours({ user_id: user.ID });
|
|
|
+ const data = await queryWorkHours({ user_id: user.ID, s_time, e_time });
|
|
|
let selected = [];
|
|
|
Object.keys(data).map((day) => {
|
|
|
let list = data[day];
|
|
@@ -271,27 +338,32 @@ export default {
|
|
|
});
|
|
|
this.info.selected = selected;
|
|
|
},
|
|
|
- async onSubmit(values) {
|
|
|
- let params = [
|
|
|
- {
|
|
|
- type_id: Number(values.subTypeId),
|
|
|
- comment: "",
|
|
|
- data: [
|
|
|
- {
|
|
|
- project_id: Number(values.projectId),
|
|
|
- workload: 0,
|
|
|
- day: this.day,
|
|
|
- },
|
|
|
- ],
|
|
|
- },
|
|
|
- ];
|
|
|
- // 新增
|
|
|
- await addWorkHours(params);
|
|
|
- this.queryWorkHours();
|
|
|
- },
|
|
|
- showModal() {
|
|
|
- this.$refs.addModal.open();
|
|
|
+ toAdd() {
|
|
|
+ uni.navigateTo({
|
|
|
+ url: `./add?day=${this.day}`,
|
|
|
+ });
|
|
|
},
|
|
|
+ // async onSubmit(values) {
|
|
|
+ // let params = [
|
|
|
+ // {
|
|
|
+ // type_id: Number(values.subTypeId),
|
|
|
+ // comment: "",
|
|
|
+ // data: [
|
|
|
+ // {
|
|
|
+ // project_id: Number(values.projectId),
|
|
|
+ // workload: 0,
|
|
|
+ // day: this.day,
|
|
|
+ // },
|
|
|
+ // ],
|
|
|
+ // },
|
|
|
+ // ];
|
|
|
+ // // 新增
|
|
|
+ // await addWorkHours(params);
|
|
|
+ // this.queryWorkHours();
|
|
|
+ // },
|
|
|
+ // showModal() {
|
|
|
+ // this.$refs.addModal.open();
|
|
|
+ // },
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
@@ -300,10 +372,11 @@ export default {
|
|
|
.content {
|
|
|
padding: 30rpx;
|
|
|
padding-top: 0;
|
|
|
+ padding-bottom: 60px;
|
|
|
}
|
|
|
-.button {
|
|
|
- margin-right: 20rpx;
|
|
|
-}
|
|
|
+// .button {
|
|
|
+// margin-right: 20rpx;
|
|
|
+// }
|
|
|
.card-actions {
|
|
|
display: flex;
|
|
|
flex-direction: row;
|
|
@@ -322,4 +395,17 @@ export default {
|
|
|
text-align: right;
|
|
|
}
|
|
|
}
|
|
|
+.group {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ position: fixed;
|
|
|
+ justify-content: flex-start;
|
|
|
+ bottom: 0;
|
|
|
+ left: 0;
|
|
|
+ button {
|
|
|
+ width: 50%;
|
|
|
+ border-radius: 0;
|
|
|
+ margin: inherit;
|
|
|
+ }
|
|
|
+}
|
|
|
</style>
|