h5
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

205 lines
6.8 KiB

<template>
<!-- <view class="deliver-container">p-deliver</view> -->
<!-- TODO if 是测试用的 -->
<view class="my-2 bg-white p-2 rounded-md relative" @longpress.prevent="showMask = true" v-if="deliverRef">
<!-- 插件名称输入和提交 -->
<view class="flex item-center justify-between py-3 pl-2">
<!-- <u-input v-model="iptValue" type="text" :border="false" placeholder="请编辑交付物名称" /> -->
<!-- TODO: 可能会有多个交付物 需要遍历 或者展示第一个 -->
<!-- TODO: 应该是交付物的名称 -->
<view class="flex-1">
<span class="relative px-1" v-if="deliver && deliver.deliverName">
<u-badge :is-dot="true" is-center v-if="uBadgeShow"></u-badge>
{{ deliver.deliverName }}
</span>
</view>
<u-button type="primary" size="mini" @click="submit" class="self-center" :disabled="submitState" v-show="!uBadgeShow">提交</u-button>
<!-- 查看提交历史的按钮 -->
<u-icon name="arrow-right" class="ml-3" @click="openDeliverHistory"></u-icon>
</view>
<!-- 插件上传方式 -->
<view>
<view class="linkBox"
><u-input v-model="linkValue" type="text" :border="true" placeholder="请输入交付物地址/链接" class="input"></u-input
></view>
<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="uploadFile">文件</u-button>
<u-button size="mini" :plain="true" type="primary" class="mr-3" @click="uploadPhoto">拍照</u-button>
</view>
</view>
<!-- 编辑和删除的遮罩层 -->
<view class="mask flex items-center justify-center bg-grey" v-show="showMask" @click="showMask = false">
<view class="bg-yellow-500 text-white w-12 h-12 text-center leading-12 rounded-w-12 mx-8" @click.stop="showEditModal = true"
>修改</view
>
<view class="bg-red-500 text-white w-12 h-12 text-center leading-12 rounded-w-12 mx-8" @click.stop="deleteDeliver">删除</view>
<!-- 删除的二次提示modal -->
<u-modal v-model="showDeleteModal" :content="content" :show-cancel-button="true" @confirm="confirmDelete"></u-modal>
</view>
<!-- 编辑交付物标题的modal -->
<u-mask :show="showEditModal" @click="showEditModal = false">
<view class="warp">
<view class="rect rounded-md" @tap.stop>
<view class="text-center my-7 font-semibold">交付物标题名称</view>
<view class=""><u-input :border="true" class="m-5" placeholder="请输入交付物名称" v-model="newInputRef"></u-input></view>
<!-- TODO: 边框 -->
<view class="flex justify-around h-12 mt-7 justify-self-stretch box-modal-border">
<view class="leading-12 flex-1 text-center delete-modal-border" @click="showEditModal = false">取消</view>
<view class="text-blue-700 leading-12 flex-1 text-center" @click="confirmEditDeliverName">确定</view>
</view>
</view>
</view>
</u-mask>
<!-- 插件审核人员选择 -->
<Reviewer/>
</view>
</template>
<script setup>
import { ref, computed } from 'vue';
const props = defineProps({ task: { type: Object, default: () => {} } });
// 插件名称
const deliverRef = ref(true); // 交付物插件的显示与销毁
const linkValue = ref(''); // 链接的值
const showMask = ref(false); // 编辑和删除页面
const showEditModal = ref(false); // 编辑交付物标题的modal
const newInputRef = ref(props.task.name); // 修改的插件名的值
const showDeleteModal = ref(false); // 删除二次提示的modal
const content = '是否确定删除';
const uBadgeShow = ref(false); // u-badge的显示与隐藏
const deliver = ref(null);
// 判断提交按钮的状态
const submitState = computed(() => !linkValue.value);
// 根据任务id获取交付物信息
(async function getDeliverData() {
try {
const { id: taskId } = props.task;
if (!taskId) return;
const param = { taskId: props.task.id };
const data = await uni.$u.api.getDeliverByTaskId(param);
deliver.value = data;
} catch (error) {
console.log('error: ', error);
uni.$ui.showToast('获取交付物信息失败');
}
}());
// 验证提交的交付物信息格式
function validateDeliverForm() {
const reg = /^http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- ./?%&=]*)?$/;
if (!reg.test(linkValue.value)) {
// 显示toast信息
uni.$ui.showToast('请输入正确的链接');
return false;
}
// 没有检查人 提示选择检查人
if (!checkedDelivers.value || !checkedDelivers.value.length) {
uni.$ui.showToast('请选择检查人');
return false;
}
return true;
}
// 提交后验证链接并修改状态
function submit() {
if (!validateDeliverForm()) return;
// else {
// //
// uBadgeShow.value = true;
// }
}
// 查看历史记录
function openDeliverHistory() {
uni.navigateTo({ url: '/pages/submitList/submitList' });
}
// 粘贴上传
function paste() {
uni.getClipboardData({
success(res) {
linkValue.value = res.data;
},
});
}
// 文件上传
async function uploadFile() {
try {
const data = await uni.$upload.chooseAndUpload(
'https://test.tall.wiki/filedeal/file/upload/multiple',
{},
['.xls', '.xlsx', '.zip', '.exe', '.pdf', '.doc', '.docx', '.ppt', '.pptx'],
'files',
);
// console.log(data[0])
linkValue.value = data[0].visitUrl;
} catch (error) {
console.error('error: ', error);
}
}
// 拍照上传
async function uploadPhoto() {
try {
const data = await uni.$upload.chooseAndUpload(
'https://test.tall.wiki/filedeal/file/upload/multiple',
{},
['.xls', '.xlsx', '.zip', '.exe', '.pdf', '.doc', '.docx', '.ppt', '.pptx'],
'files',
);
// console.log(data[0])
linkValue.value = data[0].visitUrl;
} catch (error) {
console.error('error: ', error);
}
}
// 确定修改交付物名称
function confirmEditDeliverName() {
// TODO: 发请求 请求成功后更新task里的交付物信息
if (!newInputRef.value) {
// TODO: 提示不能为空
uni.$ui.showToast('输入不能为空');
} else {
// 请求成功 才会清空 请求失败保留
showEditModal.value = false;
showMask.value = false;
uBadgeShow.value = false;
newInputRef.value = '';
}
}
// 删除交付物按钮
function deleteDeliver() {
showDeleteModal.value = true;
}
// 二次确认后删除
async function confirmDelete() {
// TODO: 删除二次确认
// TODO: 确定后 发删除交付物的请求
try {
showDeleteModal.value = true;
deliverRef.value = false;
await uni.$u.api.deleteDeliver();
uni.$ui.showToast('删除交付物成功');
} catch (error) {
console.error('error: ', error);
}
}
</script>
<style scoped lang="scss"></style>