Browse Source

Merge branch 'deliver' of ssh://101.201.226.163:50022/TALL/TALL-MUI-4 into deliver

deliver
Min5203 4 years ago
parent
commit
d8a43286fb
  1. 1
      CHANGELOG.md
  2. 15
      components/Reviewer/Reviewer.vue
  3. 3
      pages/checkerList/checkerList.vue
  4. 3
      pages/submitlist/submitlist.vue
  5. 105
      plugins/p-deliver-checker/p-deliver-checker.vue
  6. 31
      plugins/p-deliver/p-deliver.vue
  7. 18
      store/deliver/index.js
  8. 2
      store/index.js

1
CHANGELOG.md

@ -108,4 +108,3 @@
范围|描述|commitId 范围|描述|commitId
--|--|-- --|--|--
- | Initial commit | [52b8f49](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/52b8f49) - | Initial commit | [52b8f49](https://101.201.226.163:50022/TALL/TALL-MUI-4/commits/52b8f49)

15
components/Reviewer/Reviewer.vue

@ -18,7 +18,13 @@
<!-- 隐藏的审核人选项 --> <!-- 隐藏的审核人选项 -->
<view v-show="!collapsed" class="foot mt-2 flex flex-wrap"> <view v-show="!collapsed" class="foot mt-2 flex flex-wrap">
<u-button v-for="item in checkers" :type="item.checked ? 'primary' : 'default'" size="mini" class="my-1 mx-2" @click="item.checked = !item.checked">{{ item.name }}</u-button> <u-button
v-for="item in checkers"
:type="item.checked ? 'primary' : 'default'"
size="mini"
class="my-1 mx-2"
@click="item.checked = !item.checked"
>{{ item.name }}</u-button>
</view> </view>
</view> </view>
</template> </template>
@ -36,9 +42,8 @@ const collapsed = ref(true);
const checkers = computed(() => store.state.role.members); const checkers = computed(() => store.state.role.members);
// //
const checkedCheckers = computed(() => checkers.value.filter(item => item.checked)); const checkedCheckers = computed(() => checkers.value.filter(item => item.checked) || []);
// //
const showCheckers = computed(() => { const showCheckers = computed(() => (checkedCheckers.value.length > 3 ? checkedCheckers.value.slice(0, 3) : checkedCheckers.value));
return checkedCheckers.value.length > 3 ? checkedCheckers.value.slice(0, 3) : checkedCheckers.value;
})
</script> </script>

3
pages/checkerList/checkerList.vue

@ -18,7 +18,7 @@
<view v-if="item.score > 0"> <view v-if="item.score > 0">
<u-circle-progress active-color="#FA8C16" :percent="item.score" width="90" border-width="7" class="mt-2"> <u-circle-progress active-color="#FA8C16" :percent="item.score" width="90" border-width="7" class="mt-2">
<view class="u-progress-content"> <view class="u-progress-content">
<view class="progressDot text-white text-center">{{ item.score }}</view> <view class="progress-dot text-white text-center">{{ item.score }}</view>
</view> </view>
</u-circle-progress> </u-circle-progress>
</view> </view>
@ -41,7 +41,6 @@ onLoad(options => {
const param = { deliverRecordId: options.deliverRecordId }; const param = { deliverRecordId: options.deliverRecordId };
const data = await uni.$u.api.queryCheckLog(param); const data = await uni.$u.api.queryCheckLog(param);
checkerList.value = data; checkerList.value = data;
console.log(checkerList.value);
} catch (error) { } catch (error) {
console.log('error: ', error); console.log('error: ', error);
uni.$ui.showToast('获取检查交付物历史失败'); uni.$ui.showToast('获取检查交付物历史失败');

3
pages/submitlist/submitlist.vue

@ -35,7 +35,7 @@
<view v-if="items.score > 0"> <view v-if="items.score > 0">
<u-circle-progress active-color="#FA8C16" :percent="items.score" width="90" border-width="7" class="mt-2"> <u-circle-progress active-color="#FA8C16" :percent="items.score" width="90" border-width="7" class="mt-2">
<view class="u-progress-content"> <view class="u-progress-content">
<view class="progressDot text-white text-center">{{ items.score }}</view> <view class="progress-dot text-white text-center">{{ items.score }}</view>
</view> </view>
</u-circle-progress> </u-circle-progress>
</view> </view>
@ -94,6 +94,7 @@ onLoad(options => {
const data = await uni.$u.api.getDeliverHistory(param); const data = await uni.$u.api.getDeliverHistory(param);
name.value = data.deliverName; name.value = data.deliverName;
listRef.value = data.deliverRecordList; listRef.value = data.deliverRecordList;
console.log(data);
} catch (error) { } catch (error) {
console.log('error: ', error); console.log('error: ', error);
uni.$ui.showToast('获取交付物历史失败'); uni.$ui.showToast('获取交付物历史失败');

105
plugins/p-deliver-checker/p-deliver-checker.vue

@ -1,40 +1,47 @@
<template> <template>
<theme>
<view class="bg-white rounded-md"> <view class="bg-white rounded-md">
<view class="p-3 flex justify-between" @click="iconRef = !iconRef"> <view class="p-3 flex justify-between" @click="collapsed = !collapsed">
<span class="relative p-1"> <span class="relative p-1">
<!-- <u-badge :is-dot="true" is-center></u-badge> --> <!-- <u-badge :is-dot="true" is-center></u-badge> -->
{{ nameRef }} {{ checkData ? checkData.deliverName : '' }}
</span> </span>
<u-icon :name="iconRef ? 'arrow-right' : 'arrow-down'"></u-icon> <!-- 展开折叠按钮 -->
<u-icon :name="collapsed ? 'arrow-up' : 'arrow-down'"></u-icon>
</view> </view>
<view class="p-3 pt-0" v-show="iconRef"> <view class="p-3 pt-0" v-show="collapsed">
<!-- 提交人和时间信息 --> <!-- 提交人和时间信息 -->
<view class="text-gray-400"> <view class="text-gray-400">
<span class="mr-2">{{ submitter }}</span> <span> {{ dayjs(+timeRef).format('MM-DD HH:mm') }}</span> <!-- <span class="mr-2" v-if="checkData && checkData.submitter">{{ checkData.submitter }}</span> -->
<span v-if="checkData && checkData.submitTime"> {{ dayjs(+checkData.submitTime).format('MM-DD HH:mm') }}</span>
</view> </view>
<!-- 提交的链接信息 --> <!-- 提交的链接信息 -->
<view class="w-64 break-all text-blue-400 py-2"> {{ linkRef }} </view> <view class="w-64 break-all text-blue-400 py-2" v-if="checkData && checkData.details && checkData.details[0]">
{{ checkData.details[0] }}
</view>
<!-- 审核人信息 --> <!-- 审核人信息 -->
<view class="text-gray-400 flex justify-between"> <view class="text-gray-400 flex justify-between">
<span>审核</span> <span>审核</span>
<span class="text-blue-400" @click="moreRecords">更多记录</span> <span class="text-blue-400" @click="moreRecords">更多记录</span>
</view> </view>
<view class="px-2"> <view class="px-2" v-if="checkData && checkData.checkerList">
<!-- 遍历审核人信息 --> <!-- 遍历审核人信息 -->
<view class="mt-3 text-sm flex justify-between" v-for="item in checkerList"> <view class="mt-3 text-sm flex justify-between" v-for="item in checkData.checkerList">
<view> <view>
<view>{{ item.checkerName }}</view> <view>{{ item.checkerName }}</view>
<view class="my-1">{{ item.remark }}</view> <view class="my-1">{{ item.remark }}</view>
<view class="my-1" v-if="item.checkTime > 0">{{ dayjs(+item.checkTime).format('MM-DD HH:mm') }}</view> <view class="my-1" v-if="item.checkTime > 0">{{ dayjs(+item.checkTime).format('MM-DD HH:mm') }}</view>
</view> </view>
<view v-show="item.isMine !== 1">{{ item.status == null ? '待审核' : item.status === 1 ? '已通过' : '已驳回' }}</view>
<!-- 判断是否是当前审核人 --> <!-- 不是自己 -->
<view v-show="item.isMine === 1 && item.status == null"> <view v-show="item.isMine !== 1">{{ item.status === null ? '待审核' : item.status === 1 ? '已通过' : '已驳回' }}</view>
<u-button size="mini" shape="circle" class="mr-4 h-1-4 leading-1-4" type="primary" @click="approved">通过</u-button>
<u-button size="mini" shape="circle" class="h-1-4 leading-1-4" type="error" @click="rebut">驳回</u-button> <!-- 是当前审核人 且未审核状态 -->
<view v-show="item.isMine === 1 && item.status === null">
<u-button size="mini" shape="circle" class="mr-4 h-1-4 leading-1-4" type="primary" @click="approvedModal = true">通过</u-button>
<u-button size="mini" shape="circle" class="h-1-4 leading-1-4" type="error" @click="rebutModal = true">驳回</u-button>
</view> </view>
<!-- 当前审核人的审核状态并展示得分情况 -->
<!-- 自己是审核人 且审核过 当前审核人的审核状态并展示得分情况 -->
<view v-show="item.isMine === 1 && item.status !== null" class="text-sm"> <view v-show="item.isMine === 1 && item.status !== null" class="text-sm">
<view> <view>
{{ item.status == '1' ? '已通过' : '已驳回' }} {{ item.status == '1' ? '已通过' : '已驳回' }}
@ -42,7 +49,7 @@
<view v-if="item.score > 0"> <view v-if="item.score > 0">
<u-circle-progress active-color="#FA8C16" :percent="item.score" width="90" border-width="7" class="mt-2"> <u-circle-progress active-color="#FA8C16" :percent="item.score" width="90" border-width="7" class="mt-2">
<view class="u-progress-content"> <view class="u-progress-content">
<view class="progressDot text-white text-center">{{ item.score }}</view> <view class="progress-dot text-white text-center">{{ item.score }}</view>
</view> </view>
</u-circle-progress> </u-circle-progress>
</view> </view>
@ -57,11 +64,11 @@
<view class="rect2" @tap.stop> <view class="rect2" @tap.stop>
<!-- 通过modal的标题 --> <!-- 通过modal的标题 -->
<view class="text-center my-7 font-semibold"> 审核通过 </view> <view class="text-center my-7 font-semibold"> 审核通过 </view>
<!-- 通过modal的进步器和滑动选择器 --> <!-- 评分 -->
<view class="flex justify-between mx-5"> <view class="flex justify-between mx-5">
<u-number-box v-model="score" size="30" input-width="50"></u-number-box> <u-number-box v-model="score" size="30" input-width="50" :max="100" :min="0" :step="1"></u-number-box>
<view class="w-32 pt-4"> <view class="w-32 pt-4">
<u-slider v-model="score" active-color="#34D399"></u-slider> <u-slider v-model="score" active-color="#34D399" :max="100" :min="0" :step="1"></u-slider>
</view> </view>
</view> </view>
<view> <view>
@ -112,60 +119,48 @@
</view> </view>
</u-mask> </u-mask>
</view> </view>
</theme>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue'; import { ref, computed } from 'vue';
import { useStore } from 'vuex'; import { useStore } from 'vuex';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
const props = defineProps({ task: { type: Object, default: () => {} } }); const props = defineProps({ task: { type: Object, default: () => {} } });
const store = useStore(); const store = useStore();
const nameRef = ref(''); const projectId = computed(() => store.getters['project/projectId']);
const iconRef = ref(false);
const submitter = ref('黛西'); const collapsed = ref(false);
const timeRef = ref(''); const checkData = ref(null); //
const linkRef = ref('');
const approvedModal = ref(false); // modal const approvedModal = ref(false); // modal
const rebutModal = ref(false); // modal const rebutModal = ref(false); // modal
const score = ref(1); // const score = ref(10); //
const adviceRef = ref(''); // const adviceRef = ref(''); //
const rebutRef = ref(''); // const rebutRef = ref(''); //
const commonWords = ['加油,再接再厉!', '很棒!', '不错,很详细!', '加油,再接再厉']; // const commonWords = ['加油,再接再厉!', '很棒!', '不错,很详细!', '加油,再接再厉']; //
const rebutWords = ['不详细', '还有需要改进的地方', '驳回审批1', '驳回审批2']; // const rebutWords = ['不详细', '还有需要改进的地方', '驳回审批1', '驳回审批2']; //
const checkerList = ref([]);
// //
(async function getDeliverList() { (async function getDeliverList() {
try {
const param = { taskId: props.task.id }; const param = { taskId: props.task.id };
const data = await uni.$u.api.getDeliverByTaskId(param); checkData.value = await uni.$u.api.getDeliverByTaskId(param);
// console.log(data) } catch (error) {
linkRef.value = data.details[0]; console.error('getDeliverList error: ', error);
timeRef.value = data.submitTime; }
nameRef.value = data.deliverName;
checkerList.value = data.checkerList;
}()); }());
//
async function approved() {
approvedModal.value = true;
}
//
function rebut() {
rebutModal.value = true;
}
// //
function confirmAdvice() { function confirmAdvice() {
// TODO: // TODO:
// console.log('') // console.log('')
try { try {
const { deliverRecordId } = store.state.deliver;
const param = { const param = {
projectId: store.state.project.project.id, projectId: projectId.value,
deliverRecordId: store.state.project.deliverRecordId, deliverRecordId,
type: 1, type: 1,
remark: adviceRef.value, remark: adviceRef.value,
score: score.value, score: score.value,
@ -181,9 +176,10 @@ function confirmAdvice() {
function confirmReject() { function confirmReject() {
// TODO: // TODO:
try { try {
const { deliverRecordId } = store.state.deliver;
const param = { const param = {
projectId: store.state.project.project.id, projectId: projectId.value,
deliverRecordId: store.state.project.deliverRecordId, deliverRecordId,
type: 2, type: 2,
remark: rebutRef.value, remark: rebutRef.value,
score: '', score: '',
@ -197,17 +193,8 @@ function confirmReject() {
// //
function moreRecords() { function moreRecords() {
const deliverRecordId = store.state.project.deliverRecordId const { deliverRecordId } = store.state.deliver;
uni.navigateTo({ url: `/pages/checkerList/checkerList?deliverRecordId=${deliverRecordId}` }); uni.navigateTo({ url: `/pages/checkerList/checkerList?deliverRecordId=${deliverRecordId}` });
} }
</script> </script>
<style scoped lang="scss"></style>
<style scoped lang="scss">
.progressDot {
width: 50rpx;
height: 50rpx;
border-radius: 50%;
line-height: 50rpx;
background-color: #fa8c16;
}
</style>

31
plugins/p-deliver/p-deliver.vue

@ -14,7 +14,17 @@
</span> </span>
</view> </view>
<u-button type="primary" size="mini" @click="submit" class="self-center" :disabled="submitState" v-show="!uBadgeShow">提交</u-button> <!-- 提交 -->
<u-button
type="primary"
size="mini"
@click="submit"
class="self-center"
:disabled="submitState"
:ripple="true"
:loading="submitBtnLoading"
v-show="!uBadgeShow"
>提交</u-button>
<!-- 查看提交历史的按钮 --> <!-- 查看提交历史的按钮 -->
<u-icon name="arrow-right" class="ml-3" @click="openDeliverHistory"></u-icon> <u-icon name="arrow-right" class="ml-3" @click="openDeliverHistory"></u-icon>
@ -22,7 +32,9 @@
<!-- 插件上传方式 --> <!-- 插件上传方式 -->
<view> <view>
<view class="linkBox"><u-input v-model="linkValue" type="text" :border="true" placeholder="请输入交付物地址/链接" class="input"></u-input></view> <view class="link-box">
<u-input v-model="linkValue" type="text" :border="true" placeholder="请输入交付物地址/链接" class="input"></u-input>
</view>
<view class="mt-3"> <view class="mt-3">
<u-button size="mini" :plain="true" type="primary" class="mr-3" @click="paste">粘贴</u-button> <u-button size="mini" :plain="true" type="primary" class="mr-3" @click="paste">粘贴</u-button>
<u-button size="mini" :plain="true" type="primary" class="mr-3" @click="uploadFile">文件</u-button> <u-button size="mini" :plain="true" type="primary" class="mr-3" @click="uploadFile">文件</u-button>
@ -80,8 +92,9 @@ const deliver = ref();
const submitState = computed(() => !linkValue.value); const submitState = computed(() => !linkValue.value);
// //
const projectId = computed(() => store.getters['project/projectId']);
const delivers = computed(() => store.state.role.members); const delivers = computed(() => store.state.role.members);
const checkedDelivers = computed(() => delivers.value.filter(item => item.checked)); const checkedCheckers = computed(() => delivers.value.filter(item => item.checked));
getDeliverData(); getDeliverData();
// id // id
async function getDeliverData() { async function getDeliverData() {
@ -95,7 +108,6 @@ async function getDeliverData() {
console.log('error: ', error); console.log('error: ', error);
} }
} }
// //
function validateDeliverForm() { function validateDeliverForm() {
const reg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?$/; const reg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?$/;
@ -105,7 +117,7 @@ function validateDeliverForm() {
return false; return false;
} }
// //
if (!checkedDelivers.value || !checkedDelivers.value.length) { if (!checkedCheckers.value || !checkedCheckers.value.length) {
uni.$ui.showToast('请选择检查人'); uni.$ui.showToast('请选择检查人');
return false; return false;
} }
@ -119,18 +131,19 @@ function submit() {
// //
try { try {
const checkerList = []; const checkerList = [];
checkedDelivers.value.forEach(item => { checkedCheckers.value.forEach(item => {
checkerList.push(item.memberId); checkerList.push(item.memberId);
}); });
const param = { const param = {
projectId: store.state.project.project.id, projectId: projectId.value,
deliverId: deliver.value.deliverId, deliverId: deliver.value.deliverId,
fileList: [linkValue.value], fileList: [linkValue.value],
checkerList, checkerList,
}; };
console.log(param);
uni.$u.api.submitDeliverInfo(param); uni.$u.api.submitDeliverInfo(param);
store.commit('deliver/setDeliverRecordId', deliver.value.deliverRecordId);
uBadgeShow.value = true; uBadgeShow.value = true;
store.state.project.deliverRecordId = deliver.value.deliverRecordId;
} catch (error) { } catch (error) {
console.log('error: ', error); console.log('error: ', error);
uni.$ui.showToast('提交交付物信息失败'); uni.$ui.showToast('提交交付物信息失败');
@ -193,7 +206,7 @@ async function confirmEditDeliverName() {
} }
try { try {
const param = { const param = {
projectId: store.state.project.project.id, projectId: projectId.value,
taskId: props.task.id, taskId: props.task.id,
deliverName: newInputRef.value, deliverName: newInputRef.value,
}; };

18
store/deliver/index.js

@ -0,0 +1,18 @@
export default {
namespaced: true,
state: {
deliverRecordId: '', // 交付物记录id
},
getters: {},
mutations: {
/**
* 设置交付物记录id
* @param {object} state
* @param {string} recordId
*/
setDeliverRecordId(state, recordId) {
state.deliverRecordId = recordId;
},
},
actions: {},
};

2
store/index.js

@ -4,7 +4,7 @@ import role from './role/index.js';
import socket from './socket/index.js'; import socket from './socket/index.js';
import task from './task/index.js'; import task from './task/index.js';
import user from './user/index.js'; import user from './user/index.js';
import deliver from './user/index.js'; import deliver from './deliver/index.js';
// 不属于具体模块的 应用级的 store内容 // 不属于具体模块的 应用级的 store内容
const state = { const state = {

Loading…
Cancel
Save