forked from ccsens_fe/tall-mui-3
10 changed files with 754 additions and 14 deletions
@ -1,3 +1,6 @@ |
|||
.min-0 { |
|||
min-width: 0; |
|||
} |
|||
.border-b-1 { |
|||
border-bottom-width: 1px; |
|||
} |
|||
|
@ -0,0 +1,231 @@ |
|||
<template> |
|||
<view class="secondPopup flex justify-center"> |
|||
<view class="content p-3 pb-8"> |
|||
<view class="mb-3 font-bold text-base flex justify-center">创建分享链接</view> |
|||
<view class="flex flex-col"> |
|||
<view class="mb-1">用户以什么角色加入项目</view> |
|||
<!-- 下拉多选 --> |
|||
<u-dropdown> |
|||
<u-dropdown-item v-model="roleValue" :title="roleValue" :options="allRoles" @change="changeRole"></u-dropdown-item> |
|||
</u-dropdown> |
|||
<!-- 复制链接 --> |
|||
<view class="link flex items-center mt-4"> |
|||
<view class="link-url">{{ links }}</view> |
|||
<!-- <u-button style="border-radius: 0" type="primary" @click="copyPasteboard">复制链接</u-button> --> |
|||
<u-button |
|||
style="border-radius: 0" |
|||
type="primary" |
|||
v-clipboard:copy="links" |
|||
v-clipboard:success="copySuccess" |
|||
v-clipboard:error="copyError" |
|||
> |
|||
复制链接 |
|||
</u-button> |
|||
</view> |
|||
|
|||
<view @click="select"> |
|||
<!-- 全选按钮 --> |
|||
<!-- <view class="flex mt-4"> |
|||
<view> |
|||
<u-checkbox-group> |
|||
<u-checkbox v-model="checked" @change="checkedAll"></u-checkbox> |
|||
</u-checkbox-group> |
|||
</view> |
|||
<view>已选择({{ this.quantity }})</view> |
|||
<view style="color: #f37378; margin-left: 20px">批量删除</view> |
|||
</view> --> |
|||
<!-- 多选框 --> |
|||
<!-- <view> |
|||
<u-checkbox-group class="checkboxs flex flex-1 items-center mt-4" v-for="(item, index) in list" :key="index"> |
|||
<div class="flex-1 flex items-center"> |
|||
<u-checkbox v-model="item.checked"></u-checkbox> |
|||
<u-avatar :src="item.src" size="55" style="background: #d8dce0; margin-right: 10px"></u-avatar> |
|||
<div style="width: 60%; font-size: 12px"> |
|||
<div style="color: gray">{{ item.name }}</div> |
|||
<div style="color: #c4d0e1">{{ item.joinMethod }}</div> |
|||
</div> |
|||
</div> |
|||
</u-checkbox-group> |
|||
</view> --> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters, mapState } from 'vuex'; |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
roleValue: '观众', |
|||
links: 'https://kdocs.cn/l/cbs', //复制的链接 |
|||
checked: false, //全选按钮是否选中 |
|||
// 多选框列表 |
|||
list: [ |
|||
{ |
|||
name: '冯老师', |
|||
src: '', |
|||
joinMethod: '文件创建者', |
|||
role: '观众', |
|||
checked: false, |
|||
disabled: false, |
|||
}, |
|||
{ |
|||
name: '马壮', |
|||
src: '', |
|||
joinMethod: '通过链接加入', |
|||
role: '干系人', |
|||
checked: false, |
|||
disabled: false, |
|||
}, |
|||
{ |
|||
name: '张野', |
|||
src: '', |
|||
joinMethod: '通过链接加入', |
|||
role: '观众', |
|||
checked: false, |
|||
disabled: false, |
|||
}, |
|||
], |
|||
quantity: 0, //多选里面已选择的数量 |
|||
path: '', |
|||
}; |
|||
}, |
|||
|
|||
computed: { |
|||
...mapState('role', ['visibleRoles', 'invisibleRoles']), |
|||
...mapGetters('project', ['projectId']), |
|||
|
|||
allRoles() { |
|||
let newArr = []; |
|||
if (this.visibleRoles.length || this.invisibleRoles.length) { |
|||
const arr = this.visibleRoles.concat(this.invisibleRoles); |
|||
arr.forEach(role => { |
|||
let item = { value: '', label: '' }; |
|||
item.id = role.id; |
|||
item.value = role.name; |
|||
item.label = role.name; |
|||
newArr.push(item); |
|||
}); |
|||
const firstItem = { id: '0', value: '观众', label: '观众' }; |
|||
newArr.unshift(firstItem); |
|||
} |
|||
return newArr; |
|||
}, |
|||
}, |
|||
|
|||
async created() { |
|||
this.path = window.location.href.split('?')[0]; |
|||
const { path, projectId } = this; |
|||
const params = { path: `${path}share=1`, projectId, roleId: '0' }; |
|||
await this.creatShare(params); |
|||
}, |
|||
|
|||
methods: { |
|||
// 选择角色 |
|||
async changeRole(value) { |
|||
this.roleValue = value; |
|||
const role = this.allRoles.find(item => item.value == value); |
|||
const { path, projectId } = this; |
|||
const params = { path, projectId, roleId: role.id }; |
|||
await this.creatShare(params); |
|||
}, |
|||
|
|||
// 复制成功 |
|||
copySuccess() { |
|||
this.$t.ui.showToast('复制成功'); |
|||
}, |
|||
// 复制失败 |
|||
copyError() { |
|||
this.$t.ui.showToast('复制失败,请稍后重试'); |
|||
}, |
|||
|
|||
/** |
|||
* 创建分享链接 |
|||
* @param path 路径前缀 |
|||
* @param projectId 项目id |
|||
* @param roleId 角色id |
|||
*/ |
|||
async creatShare(params) { |
|||
try { |
|||
const data = await this.$u.api.createShare(params); |
|||
this.links = data.path; |
|||
} catch (error) { |
|||
console.error('error: ', error); |
|||
} |
|||
}, |
|||
|
|||
//获取粘贴板的内容 |
|||
copyPasteboard() { |
|||
uni.setClipboardData({ |
|||
data: this.links, |
|||
success: function (res) { |
|||
console.log('链接复制成功', res.data); |
|||
}, |
|||
}); |
|||
}, |
|||
|
|||
//已选择 |
|||
select() { |
|||
this.quantity = 0; |
|||
this.list.forEach(val => { |
|||
if (val.checked == true) { |
|||
this.quantity++; |
|||
} |
|||
}); |
|||
}, |
|||
|
|||
// 全选 |
|||
checkedAll() { |
|||
this.list.map(val => { |
|||
val.checked = !this.checked; |
|||
}); |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.content { |
|||
width: 330px; |
|||
max-height: 400px; |
|||
} |
|||
|
|||
.link { |
|||
height: 40px; |
|||
border: 1px solid #afbed1; |
|||
} |
|||
|
|||
.link-url { |
|||
color: #afbed1; |
|||
width: 80%; |
|||
line-height: 40px; |
|||
margin-left: 5px; |
|||
overflow: hidden; |
|||
white-space: nowrap; |
|||
text-overflow: ellipsis; |
|||
} |
|||
|
|||
/deep/ .u-slot-content { |
|||
min-width: 0; |
|||
} |
|||
/deep/ .u-dropdown__content { |
|||
height: 160px !important; |
|||
overflow-y: auto; |
|||
background: #fff !important; |
|||
transition: none !important; |
|||
} |
|||
/deep/.u-dropdown__menu__item .u-flex { |
|||
justify-content: space-between; |
|||
width: 100%; |
|||
height: 100%; |
|||
flex-wrap: nowrap; |
|||
border: 1px solid #afbed1; |
|||
padding: 0 8px; |
|||
} |
|||
/deep/.u-dropdown__content__mask { |
|||
display: none; |
|||
} |
|||
</style> |
@ -0,0 +1,320 @@ |
|||
<template> |
|||
<div class="new-projects-box" :style="{ height: arrow ? '330px' : '580px' }"> |
|||
<div class="form"> |
|||
<!-- 项目名称 --> |
|||
<view class="popupTitle flex justify-center">新建任务</view> |
|||
<div class="flex items-center"> |
|||
<div>名称</div> |
|||
<u-input v-model="nameValue" :type="type" :border="border" /> |
|||
</div> |
|||
<!-- 起止时间 --> |
|||
<div class="flex items-center"> |
|||
<div>起止-截止时间</div> |
|||
<u-input v-model="timeValue" :type="type" :border="border" /> |
|||
</div> |
|||
<!-- 多选框 --> |
|||
<div class="flex justify-between items-center"> |
|||
<div>负责人</div> |
|||
<div label="负责人" style="width: 85%"> |
|||
<u-dropdown ref="uDropdown"> |
|||
<u-dropdown-item :title="dropTitle"> |
|||
<view class="slot-content bg-white"> |
|||
<div |
|||
class="multiple-choice flex flex-row justify-between mb-1" |
|||
v-for="(option, optionIndex) in options" |
|||
:key="optionIndex" |
|||
@click="change(optionIndex)" |
|||
> |
|||
<view v-model="option.value">{{ option.label }}</view> |
|||
<u-icon v-if="option.dropdownShow" name="checkbox-mark" color="#2979ff" size="28"></u-icon> |
|||
</div> |
|||
</view> |
|||
</u-dropdown-item> |
|||
</u-dropdown> |
|||
</div> |
|||
</div> |
|||
<!-- 下拉图标 --> |
|||
<div class="flex justify-center" style="margin-top: 20px"> |
|||
<u-icon v-if="arrow" name="arrow-down" size="28" @click="openDropdown"></u-icon> |
|||
<u-icon v-else name="arrow-up" size="28" @click="closeSecondDropdown"></u-icon> |
|||
</div> |
|||
<!-- 下拉框的内容 --> |
|||
<div v-if="show"> |
|||
<!-- 描述 --> |
|||
<div class="flex items-center"> |
|||
<div>描述</div> |
|||
<u-input v-model="decripeValue" :type="type" :border="border" /> |
|||
</div> |
|||
<!-- 所属项目 --> |
|||
<div class="w flex items-center"> |
|||
<div>所属项目</div> |
|||
<div class="xiangmu" style="position: relative; background: #fff">当前项目</div> |
|||
</div> |
|||
<!-- 所属任务 --> |
|||
<div class="w flex items-center"> |
|||
<div>所属任务</div> |
|||
<div class="renwu">当前任务</div> |
|||
</div> |
|||
<!-- 上道工序 --> |
|||
<div class="flex items-center"> |
|||
<div>上道工序</div> |
|||
<u-input v-model="lastValue" :type="type" :border="border" /> |
|||
</div> |
|||
<!-- 检查人多选框 --> |
|||
<div class="flex justify-between items-center"> |
|||
<div>检查人</div> |
|||
<div class="" label="检查人" style="width: 85%"> |
|||
<u-dropdown ref="dropdown"> |
|||
<u-dropdown-item :title="secondDropTitle" style="border: none"> |
|||
<view class="slot-content bg-white"> |
|||
<div |
|||
class="mb-1 multiple-choice flex flex-row justify-between" |
|||
v-for="(checkoutOption, Index) in checkoutOptions" |
|||
:key="Index" |
|||
@click="choose(Index)" |
|||
> |
|||
<view v-model="checkoutOption.value">{{ checkoutOption.label }}</view> |
|||
<u-icon v-if="checkoutOption.dropdownShow" name="checkbox-mark" color="#2979ff" size="28"></u-icon> |
|||
</div> |
|||
</view> |
|||
</u-dropdown-item> |
|||
</u-dropdown> |
|||
</div> |
|||
</div> |
|||
<!-- 是否是日常任务 --> |
|||
<div class="flex justify-between items-center" style="padding: 25px 0; border-bottom: 1px solid #adadad"> |
|||
<div>是否日常任务</div> |
|||
<u-switch v-model="checked" size="28"></u-switch> |
|||
</div> |
|||
<div style="padding-top: 25px"> |
|||
<div>交付物</div> |
|||
<u-input style="border-bottom: 1px solid #dcdfe6" placeholder="交付物名称1" :type="type" :border="border" /> |
|||
<u-input style="border-bottom: 1px solid #dcdfe6" placeholder="交付物名称2" :type="type" :border="border" /> |
|||
</div> |
|||
</div> |
|||
<div class="flex justify-between items-center btns"> |
|||
<u-button class="btn flex justify-center" type="primary" shape="circle" size="medium" @click="$emit('closeMask')">提交</u-button> |
|||
<u-button class="btn flex justify-center" shape="circle" size="medium" @click="$emit('closeMask')">取消</u-button> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
projects: ['我是睡', '我叫什么', '我的名字是'], |
|||
title: 'tall1', |
|||
arrow: true, |
|||
show: false, |
|||
checked: false, //开关选择器默认关闭 |
|||
nameValue: '', //名称 |
|||
timeValue: '', //起止时间 |
|||
decripeValue: '', //描述 |
|||
projectValue: '', //所属项目 |
|||
projectShow: false, //所属项目模糊搜索展示 |
|||
taskValue: '', //所属任务 |
|||
lastValue: '', //上道工序 |
|||
type: 'text', |
|||
border: true, |
|||
dropTitle: '观众,干系人', //负责人默认多选 |
|||
secondDropTitle: '干系人', //检查人默认多选 |
|||
// 负责人下拉多选列表 |
|||
options: [ |
|||
{ |
|||
label: '观众', |
|||
value: 1, |
|||
dropdownShow: false, |
|||
status: false, |
|||
}, |
|||
{ |
|||
label: '距离优先', |
|||
value: 2, |
|||
dropdownShow: false, |
|||
status: false, |
|||
}, |
|||
{ |
|||
label: '价格优先', |
|||
value: 3, |
|||
dropdownShow: false, |
|||
status: false, |
|||
}, |
|||
], |
|||
// 检查人下拉多选列表 |
|||
checkoutOptions: [ |
|||
{ |
|||
label: '观众', |
|||
value: 1, |
|||
dropdownShow: false, |
|||
status: false, |
|||
}, |
|||
{ |
|||
label: '距离优先', |
|||
value: 2, |
|||
dropdownShow: false, |
|||
status: false, |
|||
}, |
|||
{ |
|||
label: '价格优先', |
|||
value: 3, |
|||
dropdownShow: false, |
|||
status: false, |
|||
}, |
|||
], |
|||
// 交付物 |
|||
diliverables: [], |
|||
// 所属项目下拉单选 |
|||
projectOptions: [ |
|||
{ |
|||
label: 'tall1', |
|||
value: 1, |
|||
}, |
|||
{ |
|||
label: 'tall2', |
|||
value: 2, |
|||
}, |
|||
{ |
|||
label: 'tall3', |
|||
value: 3, |
|||
}, |
|||
], |
|||
}; |
|||
}, |
|||
methods: { |
|||
isProjectShow($event) { |
|||
console.log(this.projectValue); |
|||
console.log($event); |
|||
this.projectShow = true; |
|||
}, |
|||
|
|||
// 下拉多选确定按钮 |
|||
closeDropdown() { |
|||
this.$refs.uDropdown.close(); |
|||
}, |
|||
|
|||
// 下拉多选确定按钮 |
|||
dropdownClosed() { |
|||
this.$refs.dropdown.close(); |
|||
}, |
|||
|
|||
// 负责人下拉多选选中 |
|||
change(index) { |
|||
console.log(index); |
|||
let arr = [...this.options]; |
|||
// 选择多选项图标的展示 |
|||
arr[index].dropdownShow = !arr[index].dropdownShow; |
|||
// 多选展示的改变 |
|||
this.dropTitle = arr[index].label; |
|||
let shows = ''; |
|||
// 遍历arr,如果选中,添加到多选展示框上 |
|||
arr.map(val => { |
|||
if (val.dropdownShow === true) { |
|||
shows += val.label + ','; |
|||
} |
|||
}); |
|||
this.options = [...arr]; |
|||
// 删除最后的',' |
|||
this.dropTitle = shows.slice(0, shows.length - 1); |
|||
console.log(this.dropTitle); |
|||
}, |
|||
// 检查人下拉多选选中 |
|||
choose(index) { |
|||
console.log(index); |
|||
let arr = [...this.checkoutOptions]; |
|||
// 选择多选项图标的展示 |
|||
arr[index].dropdownShow = !arr[index].dropdownShow; |
|||
// 多选展示的改变 |
|||
this.secondDropTitle = arr[index].label; |
|||
let shows = ''; |
|||
// 遍历arr,如果选中,添加到多选展示框上 |
|||
arr.map(val => { |
|||
if (val.dropdownShow === true) { |
|||
shows += val.label + ','; |
|||
} |
|||
}); |
|||
this.checkoutOptions = [...arr]; |
|||
// 删除最后的',' |
|||
this.secondDropTitle = shows.slice(0, shows.length - 1); |
|||
console.log(this.secondDropTitle); |
|||
// this.dropTitle = arr[value - 1].label; |
|||
}, |
|||
|
|||
// 所属项目下拉单选框 |
|||
// project(value) { |
|||
// console.log(value); |
|||
// this.title = this.projectOptions[value - 1].label; |
|||
// }, |
|||
|
|||
// 打开下拉框 |
|||
openDropdown() { |
|||
this.arrow = !this.arrow; |
|||
this.show = true; |
|||
}, |
|||
// 关闭下拉框 |
|||
closeSecondDropdown() { |
|||
this.arrow = !this.arrow; |
|||
this.show = false; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
.projectBelong { |
|||
height: auto; |
|||
background: #fff; |
|||
padding: 0 10px; |
|||
color: #c0c4cc; |
|||
position: absolute; |
|||
z-index: 55; |
|||
} |
|||
|
|||
.form { |
|||
display: flex; |
|||
flex-direction: column; |
|||
width: 100%; |
|||
height: 550px; |
|||
overflow-y: scroll; |
|||
} |
|||
|
|||
/deep/.u-input--border { |
|||
border: none; |
|||
border-radius: 0; |
|||
} |
|||
/deep/.u-dropdown__menu__item > uni-view { |
|||
border: none !important; |
|||
padding: 5px; |
|||
} |
|||
.u-input { |
|||
border-bottom: 1px solid #ccc; |
|||
} |
|||
.btn { |
|||
margin-top: 20px; |
|||
} |
|||
.popupTitle { |
|||
font-size: 16px; |
|||
font-weight: bold; |
|||
margin-bottom: 5px; |
|||
} |
|||
.new-projects-box { |
|||
margin-top: 20px; |
|||
padding: 15px; |
|||
width: 330px; |
|||
overflow: hidden; |
|||
} |
|||
.btns { |
|||
padding: 0 30px; |
|||
} |
|||
.xiangmu { |
|||
margin-left: 11px; |
|||
color: rgb(192, 196, 204); |
|||
} |
|||
.renwu { |
|||
margin-left: 11px; |
|||
color: rgb(192, 196, 204); |
|||
} |
|||
.w { |
|||
width: 300px; |
|||
height: 39px; |
|||
} |
|||
</style> |
Loading…
Reference in new issue