628 lines
13 KiB
Vue
628 lines
13 KiB
Vue
<template>
|
||
<view class="content">
|
||
|
||
<view class="content-middle">
|
||
|
||
|
||
<view class="content-middle-three">
|
||
<view class="middle-three">
|
||
|
||
|
||
<view class="middle-threeb">
|
||
<view class="middle-threeb-title">
|
||
<view class="title">
|
||
{{detail.title}}
|
||
</view>
|
||
<view class="title-status" @click="show5=true">
|
||
{{detail.flow_status==1?"待办的":detail.flow_status==2?"进行中":detail.flow_status==3?"已完成":detail.flow_status==4?"已拒绝":"已关闭"}}
|
||
</view>
|
||
</view>
|
||
|
||
<view class="middle-threeba">
|
||
<view class="middle-threeb-a">
|
||
|
||
<view class="threeb-a-b">
|
||
<view class="name">负责人:<text>{{detail.director_name}}</text></view>
|
||
<view class="name">协办人:<text>{{detail.assist_admin_names}}</text></view>
|
||
<!-- <view class="name">发布人:<text>{{detail.title}}</text></view> -->
|
||
<view class="name">工作性质:<text>{{detail.cate_name}}</text></view>
|
||
<view class="name">计划完成日期:<text>{{detail.end_time}}</text></view>
|
||
<!-- <view class="name">任务验收截止时间:<text>{{detail.project_name}}</text></view> -->
|
||
<view class="name">预估工时:<text>{{detail.plan_hours}}</text></view>
|
||
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|
||
|
||
|
||
</view>
|
||
|
||
|
||
</view>
|
||
<view class="middle-three" style="margin-top: 30rpx;">
|
||
|
||
|
||
<view class="middle-threeb">
|
||
<view class="middle-threeb-title">
|
||
<view class="title">
|
||
任务描述
|
||
</view>
|
||
|
||
</view>
|
||
|
||
<view class="middle-threeba">
|
||
<view class="middle-threeb-a">
|
||
|
||
<view class="threeb-a-b1">
|
||
|
||
|
||
<!-- <text>{{detail.content}}</text> -->
|
||
|
||
<jyf-parser :html="detail.content" ref="article" :tag-style="tagStyle"></jyf-parser>
|
||
|
||
|
||
|
||
|
||
|
||
</view>
|
||
</view>
|
||
|
||
</view>
|
||
|
||
|
||
</view>
|
||
|
||
|
||
</view>
|
||
<view class="" style="background-color: #fff;">
|
||
<block v-for="(item, i) in fileArray" :key="i">
|
||
<view class="file flex_a_c_j_sb" style="z-index: 0;">
|
||
<view class="l_file">
|
||
<view class="file_name" @click="downloadFile(item)">{{ item.name }}</view>
|
||
<view class="file_size">{{ item.filesize }}</view>
|
||
<!-- -->
|
||
</view>
|
||
<u-icon @click="delImg(item,i)" name="close-circle" color="#333333" size="28"
|
||
style="z-index: 999;"></u-icon>
|
||
</view>
|
||
</block>
|
||
<view class="upload_box flex_a_c_j_sb">
|
||
<view>
|
||
<view class="title">选择文件并上传</view>
|
||
<view class="text">
|
||
上传前,请规范命名,最大只能上传100M的文件<br />
|
||
超过请压缩成多个文件上传。
|
||
</view>
|
||
</view>
|
||
<view class="" style="margin-top: 60rpx;">
|
||
<lsjUpload ref="lsjUpload" childId="upload1" :size="10" :option="fileOption" height="200rpx"
|
||
style="margin-top: 28rpx;" :debug="false"
|
||
:formats="'pdf,txt,zip,rar,jpg,png,mp3,avi,mov,mp4,gif'" :multiple="false" :count="3"
|
||
:instantly="true" @change="changeFile" @uploadEnd='onuploadEnd' @progress='onprogre'>
|
||
|
||
<u-icon name="plus-circle" color="#333333" size="28"></u-icon>
|
||
</lsjUpload>
|
||
</view>
|
||
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<u-empty v-if="Object.keys(detail).length==0" text="没有信息" icon="/static/empty/data.png"></u-empty>
|
||
<u-action-sheet :show="show5" :actions="actions5" title="请选择任务状态" @close="show5 = false" @select="Select5">
|
||
</u-action-sheet>
|
||
</view>
|
||
</template>
|
||
|
||
|
||
<script>
|
||
import {
|
||
projecttaskview,
|
||
addprojecttask,
|
||
addfile,
|
||
deletefile
|
||
} from '@/api/oa.js'
|
||
import {
|
||
HTTP_REQUEST_URL
|
||
} from '@/config/app.js'
|
||
import {
|
||
Toast
|
||
} from '@/libs/uniApi.js'
|
||
import {
|
||
FILE_URL
|
||
} from '@/api/file.js'
|
||
import lsjUpload from '@/uni_modules/lsj-upload/components/lsj-upload/lsj-upload.vue'
|
||
export default {
|
||
components: {
|
||
lsjUpload
|
||
},
|
||
|
||
data() {
|
||
return {
|
||
show5: false,
|
||
type: '',
|
||
detail: {},
|
||
actions5: [{
|
||
name: '待办的',
|
||
id: '1',
|
||
}, {
|
||
name: '进行中',
|
||
id: '2',
|
||
}, {
|
||
name: '已完成',
|
||
id: '3'
|
||
}, {
|
||
name: '已拒绝',
|
||
id: '4'
|
||
}, {
|
||
name: '已关闭',
|
||
id: '5'
|
||
}],
|
||
fileArray: [],
|
||
fileOption: {},
|
||
tagStyle: {
|
||
img: 'width:100%;display:block;',
|
||
|
||
},
|
||
files: new Map(),
|
||
};
|
||
},
|
||
|
||
onLoad(data) {
|
||
this.fileOption = {
|
||
url: FILE_URL,
|
||
name: 'file',
|
||
header: {
|
||
token: this.$store.state.app.token
|
||
}
|
||
},
|
||
|
||
this.type = data.data
|
||
this.getDeatil(data.data)
|
||
},
|
||
onShow() {
|
||
|
||
},
|
||
|
||
methods: {
|
||
async getDeatil(id) {
|
||
let res = await projecttaskview({
|
||
id: id
|
||
|
||
})
|
||
this.detail = res.data.detail
|
||
|
||
this.fileArray = res.data.file_array.map(function(obj) {
|
||
return {
|
||
name: obj.name,
|
||
filepath: obj.filepath,
|
||
fileext: obj.fileext,
|
||
filesize: obj.filesize,
|
||
id: obj.id
|
||
};
|
||
});
|
||
|
||
},
|
||
Select5(e) {
|
||
this.detail.flow_status = e.id
|
||
// con
|
||
this.zhuangtai()
|
||
},
|
||
downloadFile(item) {
|
||
uni.downloadFile({
|
||
url: HTTP_REQUEST_URL + item.filepath,
|
||
success: function(res) {
|
||
if (res.statusCode === 200) {
|
||
const tempFilePath = res.tempFilePath;
|
||
if (item.fileext == 'png'||item.fileext == 'jpg') {
|
||
uni.previewImage({
|
||
urls: [tempFilePath]
|
||
});
|
||
} else {
|
||
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '暂时不支持查看,请登录后台查看',
|
||
success: function(res) {
|
||
if (res.confirm) {
|
||
// console.log('用户点击确定');
|
||
} else if (res.cancel) {
|
||
// console.log('用户点击取消');
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
}
|
||
}
|
||
});
|
||
},
|
||
async zhuangtai() {
|
||
let res = await addprojecttask({
|
||
id: this.type,
|
||
flow_status: this.detail.flow_status
|
||
})
|
||
if (res.code == 0) {
|
||
uni.navigateBack({
|
||
delta: 1
|
||
})
|
||
}
|
||
Toast(res.msg)
|
||
},
|
||
async addfile1(val) {
|
||
|
||
let data = {
|
||
topic_id: this.detail.id,
|
||
file_id: val.id,
|
||
file_name: val.name,
|
||
module: 'task',
|
||
|
||
}
|
||
let res = await addfile(data)
|
||
|
||
if (res.code == 0) {
|
||
this.getDeatil(this.type)
|
||
}
|
||
Toast(res.msg)
|
||
// console.log(res)
|
||
},
|
||
/**
|
||
* 某文件上传结束回调(成功失败都回调)
|
||
* @param {Object} item 当前上传完成的文件
|
||
*/
|
||
onuploadEnd(item) {
|
||
console.log(`${item.name}已上传结束,上传状态=${item.type}`);
|
||
if (item['responseText']) {
|
||
this.files.get(item.name).responseText = JSON.parse(item.responseText);
|
||
}
|
||
// 更新当前窗口状态变化的文件
|
||
this.files.set(item.name, item);
|
||
let arr1 = this.files.get(item.name).responseText
|
||
|
||
this.fileArray.push(arr1.data)
|
||
|
||
this.addfile1(arr1.data)
|
||
|
||
// 强制更新视图
|
||
this.$forceUpdate();
|
||
},
|
||
/**
|
||
* 上传进度回调
|
||
* 如果网页上md文档没有渲染出事件名称onprogre,请复制代码的小伙伴自行添加上哈,没有哪个事件是只(item)的
|
||
* @param {Object} item 当前正在上传的文件
|
||
*/
|
||
onprogre(item) {
|
||
|
||
console.log('打印对象', JSON.stringify(this.files.get(item.name)));
|
||
// 更新当前状态变化的文件
|
||
this.files.set(item.name, item);
|
||
// 强制更新视图
|
||
this.$forceUpdate();
|
||
},
|
||
/**
|
||
* 文件选择回调
|
||
* @param {Object} files 已选择的所有文件Map集合
|
||
*/
|
||
changeFile(files) {
|
||
console.log('当前选择的文件列表:', JSON.stringify([...files.values()]));
|
||
// 更新选择的文件
|
||
this.files = files
|
||
console.log(files.values())
|
||
// 强制更新视图
|
||
this.$forceUpdate();
|
||
},
|
||
/**
|
||
* 指定上传某个文件
|
||
* @param {Object} name 带后缀名的文件名称
|
||
*/
|
||
resetUpload() {
|
||
this.$refs.lsjUpload.upload(name);
|
||
},
|
||
async delImg(item, i) {
|
||
console.log(item)
|
||
let res = await deletefile({
|
||
id: item.id
|
||
})
|
||
if (res.code == 0) {
|
||
this.fileArray.splice(i, 1)
|
||
}
|
||
Toast(res.msg)
|
||
}
|
||
}
|
||
};
|
||
</script>
|
||
|
||
|
||
<style lang="scss">
|
||
page {
|
||
padding: 0 28rpx;
|
||
}
|
||
|
||
// 附件
|
||
.upload_box {
|
||
padding: 17.54rpx;
|
||
background-color: #fff;
|
||
border-radius: 4px;
|
||
|
||
.title {
|
||
font-size: 28.07rpx;
|
||
}
|
||
|
||
.text {
|
||
margin-top: 7.02rpx;
|
||
font-size: 21.05rpx;
|
||
color: #999;
|
||
}
|
||
}
|
||
|
||
.file_name {
|
||
width: 526.32rpx;
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.file {
|
||
padding: 17.54rpx;
|
||
border-radius: 4px;
|
||
border: 1px solid #F2F2F2;
|
||
margin: 17.54rpx 0;
|
||
|
||
.file_size {
|
||
margin-top: 7.02rpx;
|
||
}
|
||
|
||
.file_size,
|
||
.upload_people {
|
||
font-size: 21.05rpx;
|
||
color: #999;
|
||
}
|
||
}
|
||
|
||
.content-middle {
|
||
.content-middle-one {
|
||
.middle-one {
|
||
display: flex;
|
||
background-color: #FFFFFF;
|
||
padding: 28rpx 18rpx;
|
||
|
||
.search {
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #666666;
|
||
width: 149rpx;
|
||
line-height: 63rpx;
|
||
height: 63rpx;
|
||
background: #FFFFFF;
|
||
text-align: center;
|
||
border-radius: 35rpx 35rpx;
|
||
border: 2rpx solid #E6E5E5;
|
||
margin-left: 18rpx;
|
||
}
|
||
|
||
.content-middle-search {
|
||
display: flex;
|
||
width: 527rpx;
|
||
height: 63rpx;
|
||
line-height: 63rpx;
|
||
padding-left: 30rpx;
|
||
background: #F7F7F7;
|
||
border-radius: 35rpx 35rpx;
|
||
font-size: 25rpx;
|
||
|
||
input {
|
||
width: 527rpx;
|
||
height: 63rpx;
|
||
line-height: 63rpx;
|
||
padding-left: 30rpx;
|
||
}
|
||
|
||
.placeholder {
|
||
font-size: 25rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #999999;
|
||
padding-left: 30rpx;
|
||
|
||
}
|
||
|
||
|
||
}
|
||
|
||
.content-middle-sai {
|
||
display: flex;
|
||
width: 149rpx;
|
||
height: 63rpx;
|
||
line-height: 63rpx;
|
||
background: #FFFFFF;
|
||
border-radius: 35rpx 35rpx;
|
||
border: 2rpx solid #E6E5E5;
|
||
margin-left: 18rpx;
|
||
|
||
.content-middle-saia {
|
||
|
||
width: 29rpx;
|
||
height: 28rpx;
|
||
margin-left: 25rpx;
|
||
margin-right: 10rpx;
|
||
|
||
image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
}
|
||
|
||
.content-middle-saib {
|
||
font-size: 28rpx;
|
||
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
}
|
||
}
|
||
}
|
||
|
||
.content-middle-search-detail {
|
||
background-color: #FFFFFF;
|
||
|
||
:nth-last-child(1) {
|
||
border: none !important;
|
||
}
|
||
|
||
.search-detail {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
padding-right: 195rpx;
|
||
padding: 18rpx 53rpx;
|
||
border-bottom: 2rpx solid #E6E6E6;
|
||
;
|
||
|
||
|
||
.search-detail-one {}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|
||
.content-middle-three {
|
||
margin-top: 26rpx;
|
||
|
||
|
||
.middle-three {
|
||
background-color: #FFFFFF;
|
||
padding: 28rpx 28rpx;
|
||
|
||
.middle-threea {
|
||
font-size: 35rpx;
|
||
font-family: PingFang SC-Bold, PingFang SC;
|
||
font-weight: bold;
|
||
color: #3274F9;
|
||
margin-bottom: 30rpx;
|
||
}
|
||
|
||
.middle-threeb {
|
||
|
||
|
||
.middle-threeb-title {
|
||
|
||
display: flex;
|
||
justify-content: space-between;
|
||
margin-bottom: 10px;
|
||
|
||
|
||
|
||
|
||
.title {
|
||
width: 540rpx;
|
||
font-size: 32rpx;
|
||
font-family: PingFang SC-Medium, PingFang SC;
|
||
font-weight: 500;
|
||
color: #333333;
|
||
}
|
||
|
||
.title-status {
|
||
font-size: 25rpx;
|
||
font-family: PingFang SC-Medium, PingFang SC;
|
||
font-weight: 500;
|
||
color: #3274F9;
|
||
background: #E4EDFF;
|
||
height: 42rpx;
|
||
line-height: 42rpx;
|
||
padding: 0 10rpx;
|
||
border-radius: 7rpx 7rpx;
|
||
}
|
||
}
|
||
|
||
.middle-threeba {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
|
||
.middle-threeb-a {
|
||
|
||
.threeb-a-b {
|
||
|
||
|
||
|
||
.middle-edit {
|
||
width: 645rpx;
|
||
height: 63rpx;
|
||
line-height: 63rpx;
|
||
background: #e6e5d9;
|
||
text-align: center;
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #000;
|
||
margin-bottom: 20rpx;
|
||
|
||
}
|
||
|
||
.middle-delete {
|
||
width: 645rpx;
|
||
height: 63rpx;
|
||
line-height: 63rpx;
|
||
background: #F02828;
|
||
text-align: center;
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #FFFFFF;
|
||
|
||
}
|
||
|
||
.name {
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Bold, PingFang SC;
|
||
color: #333333;
|
||
|
||
text {
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #333333;
|
||
}
|
||
|
||
}
|
||
|
||
.achor {
|
||
font-size: 28rpx;
|
||
font-family: PingFang SC-Regular, PingFang SC;
|
||
font-weight: 400;
|
||
color: #333333;
|
||
|
||
}
|
||
}
|
||
|
||
|
||
.threeb-a-b1 {
|
||
width: 350px;
|
||
padding: 20rpx 20rpx;
|
||
word-wrap: break-word;
|
||
overflow: hidden;
|
||
}
|
||
|
||
}
|
||
|
||
.middle-threeb-b {
|
||
|
||
height: 80rpx;
|
||
|
||
|
||
|
||
image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
</style> |