Browse Source

feat: 交付物2

test2
xuesinan 4 years ago
parent
commit
6b39979d06
  1. 3
      CHANGELOG.md
  2. 4
      components/Plugin/Plugin.vue
  3. 69
      pages/submitLog/submitLog.vue
  4. 79
      plugins/p-deliver-check-second-detail/p-deliver-check-second-detail.vue
  5. 20
      plugins/p-deliver-upload-second/p-deliver-upload-second.vue

3
CHANGELOG.md

@ -1,4 +1,4 @@
# 1.0.0 (2022-04-18)
# 1.0.0 (2022-04-28)
### 🌟 新功能
范围|描述|commitId
@ -19,6 +19,7 @@
- | 登录按钮 | [527b0e5](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/527b0e5)
- | 登录图标、日历页今日 | [7de419d](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/7de419d)
- | 登录页标题 | [25e1a86](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/25e1a86)
- | 点击滚动到对应位置 | [c063de8](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/c063de8)
- | 服务、插件缓存、导入选择服务列表、 | [cc8004b](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/cc8004b)
- | 给财务条传参数 | [5ff7706](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/5ff7706)
- | 给财务条详情页传参 | [fa92a11](https://101.201.226.163:50022/ccsens_tall/TALL-MUI-4/commits/fa92a11)

4
components/Plugin/Plugin.vue

@ -20,8 +20,8 @@
<p-wbs-import :task="task" v-if="pluginId === '13' || pluginId === '14'" /> -->
<!-- 交付物插件 -->
<!-- <p-deliver v-else-if="pluginId === '15'" /> -->
<p-deliver-second v-else-if="pluginId === '15'" />
<p-deliver v-else-if="pluginId === '15'" />
<p-deliver-second v-else-if="pluginId === '25'" />
<p-source-manage v-else-if="pluginId === '16'" class="p-2" />
<p-finance-audit v-else-if="pluginId === '17'" class="p-2" />
<p-finance v-else-if="pluginId === '18'" class="p-2" />

69
pages/submitLog/submitLog.vue

@ -59,6 +59,21 @@
</view>
</view>
<view class="time-box" v-if="checkItem.checkDuration">
<view class="relative">
<view class="initial-duration bg-yellow-400" :style="{width: checkItem.initialPercent + '%'}"></view>
<text class="absolute duration-value">默认值{{ initialDuration / 3600000 }}小时</text>
</view>
<view class="relative">
<view class="duration bg-blue-400" :style="{width: checkItem.currPercent + '%'}"></view>
<text class="absolute duration-value">工作量时长{{ item.duration / 3600000 }}小时</text>
</view>
<view class="relative">
<view class="check-duration bg-green-400" :style="{width: checkItem.checkPercent + '%'}"></view>
<text class="absolute duration-value">确认工作{{ checkItem.checkDuration / 3600000 }}小时</text>
</view>
</view>
<view class="text-center text-xs">
<view v-if="checkItem.status == null" class="text-gray-400">待审核</view>
<view v-else-if="checkItem.status === 1">
@ -104,6 +119,8 @@ const clickList = [
];
const current = ref(0);
const url = ref(null);
let maxDuration = ref(null);
let initialDuration = ref(null); //
onLoad(options => {
deliverData.value = JSON.parse(options.deliverData);
@ -119,7 +136,13 @@ onLoad(options => {
const param = { deliverId: options.deliverId };
const data = await uni.$u.api.getDeliverHistory(param, options.url);
deliverName.value = data.deliverName;
initialDuration.value = data.initialDuration;
listRef.value = data.deliverRecordList;
listRef.value.forEach(item => {
handleDataRender(item);
})
} catch (error) {
console.log('error: ', error);
uni.$ui.showToast('获取交付物历史失败');
@ -155,6 +178,33 @@ async function getDeliverData() {
console.log('error: ', error);
}
}
//
async function handleDataRender(data) {
maxDuration.value = initialDuration.value > deliverData.value.duration ? initialDuration.value : deliverData.value.duration;
data.checkerList.forEach(item => {
if (item.checkDuration) {
maxDuration.value = maxDuration.value > item.checkDuration ? maxDuration.value : item.checkDuration;
if (maxDuration.value == initialDuration.value) {
item.initialPercent = 100;
item.currPercent = Math.floor(deliverData.value.duration / initialDuration.value * 100);
item.checkPercent = Math.floor(item.checkDuration / initialDuration.value * 100);
} else if (maxDuration.value == deliverData.value.duration) {
item.currPercent = 100;
item.initialPercent = Math.floor(initialDuration.value / deliverData.value.duration * 100);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.duration * 100);
} else if (maxDuration.value == item.checkDuration) {
item.checkPercent = 100;
item.initialPercent = Math.floor(initialDuration.value / item.checkDuration * 100);
item.currPercent = Math.floor(deliverData.value.duration / item.checkDuration * 100);
}
}
})
return data;
}
</script>
<style scoped lang="scss">
@ -175,4 +225,23 @@ async function getDeliverData() {
}
}
}
.time-box {
width: 120px;
view {
height: 15px;
border-radius: 2px;
margin: 2px 0;
}
.duration-value {
height: 15px;
line-height: 15px;
font-size: 12px;
top: 0;
left: 0;
color: #333;
}
}
</style>

79
plugins/p-deliver-check-second-detail/p-deliver-check-second-detail.vue

@ -30,9 +30,18 @@
</view>
<view class="time-box" v-if="item.checkDuration">
<view class="relative">
<view class="initial-duration bg-yellow-400" :style="{width: item.initialPercent + '%'}"></view>
<text class="absolute duration-value">默认值{{ deliverData.initialDuration / 3600000 }}小时</text>
</view>
<view class="relative">
<view class="duration bg-blue-400" :style="{width: item.currPercent + '%'}"></view>
<text class="absolute duration-value">工作量时长{{ deliverData.duration / 3600000 }}小时</text>
</view>
<view class="relative">
<view class="check-duration bg-green-400" :style="{width: item.checkPercent + '%'}"></view>
<text class="absolute duration-value">确认工作{{ item.checkDuration / 3600000 }}小时</text>
</view>
</view>
<!-- 自己是审核人 且审核过 当前审核人的审核状态并展示得分情况 -->
@ -69,8 +78,9 @@
</view>
<!-- 时长 -->
<view class="flex item-center justify-end flex-1 text-sm">
<view class="flex items-center justify-end flex-1 text-sm">
<u-input v-model="checkDuration" type="text" placeholder="工作量时长" class="input" style="text-align: right;"></u-input>
小时
</view>
</view>
</view>
@ -121,9 +131,18 @@
</view>
<view class="time-box" v-if="item.checkDuration">
<view class="relative">
<view class="initial-duration bg-yellow-400" :style="{width: item.initialPercent + '%'}"></view>
<text class="absolute duration-value">默认值{{ deliverData.initialDuration / 3600000 }}小时</text>
</view>
<view class="relative">
<view class="duration bg-blue-400" :style="{width: item.currPercent + '%'}"></view>
<text class="absolute duration-value">工作量时长{{ deliverData.duration / 3600000 }}小时</text>
</view>
<view class="relative">
<view class="check-duration bg-green-400" :style="{width: item.checkPercent + '%'}"></view>
<text class="absolute duration-value">确认工作{{ item.checkDuration / 3600000 }}小时</text>
</view>
</view>
<!-- 不是自己 显示审核状态 -->
@ -165,7 +184,7 @@ const deliverData = computed(() => (Object.keys(props.deliverData).length ? prop
const tasks = inject('task');
const task = computed(() => (Object.keys(props.task).length ? props.task : tasks.value));
const checkDuration = ref('2小时'); //
const checkDuration = ref(2); //
const checkedIndex = ref(2); //
const score = ref(100); //
const commit = ref(''); //
@ -175,44 +194,46 @@ const showWords = ref(false); // 是否显示常用语
const emits = defineEmits(['submit-end']);
if (Object.keys(deliverData.value).length) {
checkDuration.value = deliverData.value.duration; //
checkedIndex.value = checkDuration.value === '半小时' ? 0 : checkDuration.value === '1小时' ? 1 : checkDuration.value === '2小时' ? 2 : -1;
checkDuration.value = Number(deliverData.value.duration) / 3600000; //
checkedIndex.value = checkDuration.value == 0.5 ? 0 : checkDuration.value == 1 ? 1 : checkDuration.value == 2 ? 2 : -1;
handleDataRender(deliverData.value);
console.log('deliverData',deliverData.value)
}
watch(deliverData, () => {
checkDuration.value = deliverData.value.duration; //
checkedIndex.value = checkDuration.value === '半小时' ? 0 : checkDuration.value === '1小时' ? 1 : checkDuration.value === '2小时' ? 2 : -1;
checkDuration.value = Number(deliverData.value.duration) / 3600000; //
checkedIndex.value = checkDuration.value == 0.5 ? 0 : checkDuration.value == 1 ? 1 : checkDuration.value == 2 ? 2 : -1;
handleDataRender(deliverData.value.checkerList);
handleDataRender(deliverData.value);
})
//
function handleSelectTime(data) {
checkedIndex.value = data;
checkDuration.value = data === 0 ? '半小时' : data === 1 ? '1小时' : '2小时';
checkDuration.value = data === 0 ? 0.5 : data === 1 ? 1 : 2;
}
//
async function handleDataRender(data) {
console.log('111111', data);
maxDuration.value = deliverData.value.initialDuration > deliverData.value.duration ? deliverData.value.initialDuration : deliverData.value.duration;
data.checkerList.forEach(item => {
if (item.checkDuration) {
maxDuration.value = maxDuration > item.checkDuration ? maxDuration : item.checkDuration;
maxDuration.value = maxDuration.value > item.checkDuration ? maxDuration.value : item.checkDuration;
if (maxDuration === deliverData.value.initialDuration) {
if (maxDuration.value == deliverData.value.initialDuration) {
item.initialPercent = 100;
item.currPercent = Math.floor(deliverData.value.duration / deliverData.value.initialDuration);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.initialDuration);
} else if (maxDuration === deliverData.value.duration) {
item.currPercent = Math.floor(deliverData.value.duration / deliverData.value.initialDuration * 100);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.initialDuration * 100);
} else if (maxDuration.value == deliverData.value.duration) {
item.currPercent = 100;
item.initialPercent = Math.floor(deliverData.value.initialDuration / deliverData.value.duration);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.duration);
} else if (maxDuration === item.checkDuration) {
item.initialPercent = Math.floor(deliverData.value.initialDuration / deliverData.value.duration * 100);
item.checkPercent = Math.floor(item.checkDuration / deliverData.value.duration * 100);
} else if (maxDuration.value == item.checkDuration) {
item.checkPercent = 100;
item.initialPercent = Math.floor(deliverData.value.initialDuration / item.checkDuration);
item.currPercent = Math.floor(deliverData.value.duration / item.checkDuration);
item.initialPercent = Math.floor(deliverData.value.initialDuration / item.checkDuration * 100);
item.currPercent = Math.floor(deliverData.value.duration / item.checkDuration * 100);
}
}
})
@ -236,7 +257,7 @@ async function handleSubmit(mode) {
type: mode,
remark: commit.value,
score: score.value,
checkDuration: checkDuration.value,
checkDuration: checkDuration.value * 3600000,
msgId: task.value.msgId,
};
@ -270,4 +291,22 @@ function handleHide() {
.word-item {
border-bottom: 1px solid #E5E7EB;
}
.time-box {
width: 120px;
view {
height: 15px;
border-radius: 2px;
margin: 2px 0;
}
.duration-value {
height: 15px;
line-height: 15px;
font-size: 12px;
top: 0;
left: 0;
}
}
</style>

20
plugins/p-deliver-upload-second/p-deliver-upload-second.vue

@ -82,8 +82,9 @@
</view>
<!-- 时长 -->
<view class="flex item-center justify-end flex-1 text-sm">
<view class="flex items-center justify-end flex-1 text-sm">
<u-input v-model="duration" type="text" placeholder="工作量时长" :border="true" class="input"></u-input>
<text>小时</text>
</view>
</view>
</view>
@ -96,6 +97,7 @@
<script setup>
import { ref, computed, inject, watch } from 'vue';
import { useStore } from 'vuex';
import dayjs from 'dayjs';
import { UPLOAD_URL } from '@/config/index';
import { UPLOAD_EXTENSION } from '@/config/deliver';
@ -111,7 +113,7 @@ const emits = defineEmits(['upload-success', 'edit-success']);
const delivers = inject('deliver');
const deliver = computed(() => (Object.keys(props.deliverData).length ? props.deliverData : delivers.value));
const tasks = inject('task');
const task = computed(() => (Object.keys(props.task).length ? props.task : tasks.value));
const task = computed(() => (Object.keys(props.task).length ? props.task : tasks));
const reviewerRef = ref(null);
const submitBtnLoading = ref(false);
@ -122,7 +124,7 @@ const newInputRef = ref(''); // 修改的插件名的值
const showDeleteModal = ref(false); // modal
const content = '是否确定删除';
const showBadge = ref(false); // u-badge
const duration = ref('2小时'); //
const duration = ref(2); //
const checkedIndex = ref(2); //
//
@ -134,14 +136,14 @@ const roleIdStorage = uni.$storage.getStorageSync('roleId');
if (Object.keys(deliver.value).length) {
linkValue.value = deliver.value.details[0]; //
duration.value = deliver.value.duration ? deliver.value.duration : deliver.value.initialDuration; //
checkedIndex.value = duration.value === '半小时' ? 0 : duration.value === '1小时' ? 1 : duration.value === '2小时' ? 2 : -1;
duration.value = deliver.value.duration ? Number(deliver.value.duration) / 3600000 : Number(deliver.value.initialDuration) / 3600000; //
checkedIndex.value = duration.value == 0.5 ? 0 : duration.value == 1 ? 1 : duration.value == 2 ? 2 : -1;
}
watch(deliver, () => {
linkValue.value = deliver.value.details[0]; //
duration.value = deliver.value.duration ? deliver.value.duration : deliver.value.initialDuration; //
checkedIndex.value = duration.value === '半小时' ? 0 : duration.value === '1小时' ? 1 : duration.value === '2小时' ? 2 : -1;
duration.value = deliver.value.duration ? Number(deliver.value.duration) / 3600000 : Number(deliver.value.initialDuration) / 3600000; //
checkedIndex.value = duration.value == 0.5 ? 0 : duration.value == 1 ? 1 : duration.value == 2 ? 2 : -1;
})
//
@ -180,7 +182,7 @@ async function submit() {
deliverId: deliver.value.deliverId,
fileList: [linkValue.value],
checkerList,
duration: duration.value,
duration: Number(duration.value) * 60 * 60 * 1000,
msgId: task.value.msgId,
};
await uni.$u.api.submitDeliverInfo(param, props.url);
@ -313,7 +315,7 @@ async function confirmDelete() {
function handleSelectTime(data) {
checkedIndex.value = data;
duration.value = data === 0 ? '半小时' : data === 1 ? '1小时' : '2小时';
duration.value = data === 0 ? 0.5 : data === 1 ? 1 : 2;
}
</script>

Loading…
Cancel
Save