middleground_H5/components/baseProject/index.vue

287 lines
7.4 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<base-popup
:title="'关联项目'"
ref="basePopup"
@handleConfirmClick="handlerProjectConfirm"
@handleCloseClick="resetDialog"
>
<view style="padding: 20rpx 30rpx 0 30rpx">
<u-search
v-if="showSearch"
:placeholder="placeholder"
v-model="CodeOrName"
shape="square"
clearabled
:showAction="false"
@change="contractSearch"
></u-search>
<scroll-view
:scroll-top="scrollTop"
scroll-y="true"
class="scroll-Y"
@scrolltolower="scrolltolower"
:lower-threshold="0"
style="margin-top: 20rpx"
v-if="!isLoading"
>
<!--单选-->
<u-radio-group
v-if="type == 'radio'"
:borderBottom="true"
iconPlacement="right"
placement="column"
@change="groupChange"
v-model="radioValue"
>
<u-radio
:customStyle="{ marginBottom: '12px' }"
v-for="(item, index) in dataLists"
:key="index"
:name="item.projectID"
>
<view class="listData">
<view class="content">
<text>项目名称:</text>
{{ item.projectName }}
</view>
<view class="flex time">
<view>
<text>项目任务:</text>
{{ item.projectTotalCount }}
</view>
<view>
<text>当前BUG</text>
{{ item.bugTotalCount || 0 }}
</view>
<view>
<text>项目经理:</text>
{{ item.pmPersonName }}
</view>
<view>
<text>业务员:</text>
{{ item.salesName }}
</view>
</view>
</view>
</u-radio>
</u-radio-group>
<!--多选-->
<u-checkbox-group
v-if="type == 'checkbox'"
:borderBottom="true"
placement="column"
iconPlacement="right"
@change="checkboxChange"
v-model="checkboxValue"
>
<u-checkbox
:customStyle="{ marginBottom: '12px', paddingBottom: '12px' }"
v-for="(item, index) in dataLists"
:key="index"
:name="item.projectID"
:label="item.cusName + ' ' + item.projectID"
>
</u-checkbox>
</u-checkbox-group>
<view class="contractNoData" v-show="noData">
<u-divider text="我是有底线哒!" :hairline="true"></u-divider>
</view>
</scroll-view>
<u-loadmore
v-else
status="loading"
:loadingText="'数据加载中'"
:marginTop="150"
></u-loadmore>
</view>
</base-popup>
</view>
</template>
<script>
import { GetProjectListData } from "@/api/system/projectAdd.js";
import basePopup from "@/components/basePopup/index.vue";
export default {
components: {
basePopup,
},
props: {
// 是否显示搜索
showSearch: {
default: true,
type: Boolean,
},
placeholder: {
default: "请输入项目名称",
type: String,
},
type: {
default: "checkbox",
type: String,
},
},
data() {
return {
noData: false,
CodeOrName: "",
scrollTop: 0,
pages: {
page: 1, //当前页码
limit: 20, //每页显示多少
CodeOrName: "",
},
dataLists: [],
checkboxData: [],
checkboxValue: [],
radioData: "",
radioValue: "",
timer: null,
isLoading: false,
};
},
methods: {
openDialog(radioValue = "") {
this.GetProjectListData();
setTimeout(() => {
this.$nextTick(() => {
this.radioValue = radioValue;
if (radioValue) {
this.groupChange(radioValue);
}
this.$refs.basePopup.isShowPopup = true;
});
}, 100);
},
// 搜索
contractSearch(value) {
if (this.timer !== null) clearTimeout(this.timer);
this.timer = setTimeout(() => {
this.pages.CodeOrName = value;
this.GetProjectListData();
this.radioValue = "";
this.checkboxValue = Object.assign([], []);
}, 800);
},
resetDialog() {
this.CodeOrName = "";
this.pages.page = 1;
this.pages.CodeOrName = "";
this.radioValue = "";
this.radioData = "";
this.checkboxValue = Object.assign([], []);
},
checkboxChange(n) {
this.checkboxData = [];
n.forEach((key) => {
this.dataLists.forEach((item) => {
if (item.projectID == key) {
this.checkboxData.push(item);
}
});
});
},
//选择列表项触发
groupChange(n) {
this.radioData = this.dataLists.filter((item) => item.projectID === n);
},
// 滑动到底部触发,用于下拉加载新数据
scrolltolower() {
if (this.noData != true) {
this.pages.page++;
this.GetProjectListData();
}
},
// 获取客户弹窗--列表
async GetProjectListData() {
this.isLoading = true;
this.noData = false;
let params = {
...this.pages,
};
const res = await GetProjectListData(params);
this.isLoading = false;
if (this.pages.page > 1) {
this.dataLists.push(...res.data[1]);
} else {
this.dataLists = res.data[1];
}
if (res.data[1].length < 20) {
this.noData = true;
}
},
// 确认按钮点击事件
handlerProjectConfirm() {
if (this.type == "radio") {
if (
this.radioData == "" ||
this.radioData == undefined ||
this.radioData == null
) {
uni.$u.toast("请选择数据");
return;
}
this.$emit("handlerProjectConfirm", this.radioData);
this.$refs.basePopup.isShowPopup = false;
this.resetDialog();
} else if (this.type == "checkbox") {
if (this.checkboxData.length == 0) {
uni.$u.toast("请选择数据");
return;
}
this.$emit("handlerProjectConfirm", this.checkboxData);
this.$refs.basePopup.isShowPopup = false;
this.resetDialog();
}
},
},
};
</script>
<style lang="scss" scoped>
.scroll-Y {
height: 680rpx;
}
.contractNoData .u-divider {
margin: 0;
}
.content {
line-height: 1.5;
font-size: 28rpx;
margin-bottom: 10rpx;
text {
font-size: 28rpx;
color: #979797;
}
}
.time {
font-size: 28rpx;
flex-wrap: wrap;
line-height: 1.5;
text {
display: inline-block;
font-size: 26rpx;
color: #979797;
margin-bottom: 30rpx;
}
view {
height: 48rpx;
}
view:nth-child(2n + 1) {
width: 50%;
}
view:nth-child(2n) {
width: 50%;
}
view:nth-child(4) {
text:nth-child(2) {
font-size: 28rpx;
}
}
}
</style>