商机分析

This commit is contained in:
jia 2023-10-16 15:02:02 +08:00
parent fa6ebea280
commit d80d55e6e8
5 changed files with 632 additions and 14 deletions

12
api/business.js Normal file
View File

@ -0,0 +1,12 @@
import oahttp from "@/utils/oahttp.js";
/**
* 商机列表
*/
export const opportunity = (data) => oahttp.get('/information/list', data)
/**
* 商机详情
*/
export const oppordetails = (data) => oahttp.get('/information/details', data)

View File

@ -0,0 +1,245 @@
<template>
<view class="c_task_item" @click="clickTask">
<view class="personnel_list">
<view class="cards">
<view class="cards_head">
<view style="font-size: 32rpx; display: flex;padding-right: 16rpx;">
<view style="flex-shrink: 0;margin-right: 10rpx;">完成时间: {{datas.create_time}}</view>
<view>{{ datas.title }}</view>
</view>
<view style="flex-shrink: 0;">点击查看</view>
</view>
<view class="cards_content">
<view class="right" style="width: 100%">
<view style="
display: flex;
justify-content: space-between;
align-items: center;
">
<view>
<text> 人员名称:</text>
<text>{{datas.name }}</text>
</view>
</view>
<view class="" style="display: flex">
<text> 联系电话:</text>
<text>{{datas.phone}}</text>
</view>
<view class="">
<text>所属片区 :</text>
<text> {{ datas.village_name +datas.brigade_name }} </text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
Toast
} from '../../libs/uniApi';
export default {
name: "task",
props: {
datas: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
extend: {}
};
},
mounted() {
this.$props.datas.extend ? this.extend = this.$props.datas.extend : null;
},
methods: {
clickTask() {
uni.navigateTo({
url: `/pages/business/detail?id=${this.$props.datas?.id}`
})
// if ((this.$props.datas.type != 31) && this.$props.datas.status !== 2 && this.$props.datas.status !== 1) {
// return this.$props.datas.status == 3 ? Toast('!') : Toast('!');
// }
},
}
}
</script>
<style lang="scss">
.c_task_item {
margin: 0 auto;
// margin-bottom: 28rpx;
width: 694rpx;
// background: #FFFFFF;
border-radius: 14rpx 14rpx 14rpx 14rpx;
opacity: 1;
font-size: 25rpx;
font-weight: 400;
color: #999999;
line-height: 39rpx;
.text {
font-size: 28rpx;
font-weight: 400;
color: #333333;
line-height: 39rpx;
margin-left: 18rpx;
}
.top {
display: flex;
justify-content: space-between;
padding: 28rpx;
border-bottom: 1rpx solid #f5f5f5ff;
.left {
display: flex;
justify-content: left;
align-items: center;
}
.right {
.icon {
width: 43rpx;
height: 43rpx;
}
}
}
.bottom {
padding: 28rpx;
display: flex;
.b_left {
width: 103.39rpx;
height: 94.63rpx;
margin-right: 18rpx;
}
.b_right {
flex: 1;
display: flex;
justify-content: space-around;
flex-direction: column;
.item {
display: flex;
justify-content: space-between;
// margin: 18rpx 28rpx 0 28rpx;
// &:last-child {
// padding-bottom: 18rpx;
// }
.left {
display: flex;
}
.right {
font-size: 32rpx;
font-weight: 400;
color: #3274f9;
line-height: 39rpx;
.price {
font-size: 25rpx;
}
}
}
}
}
}
.personnel_list {
// padding: 28rpx 0;
padding-bottom: 28rpx;
.cards {
margin: 0 auto;
// margin-bottom: 28rpx;
width: 694rpx;
background: #ffffff;
border-radius: 30rpx;
opacity: 1;
overflow: hidden;
// box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6);
.cards_head {
padding: 28rpx;
background-color: $theme-oa-color;
color: white;
min-height: 100rpx;
display: flex;
justify-content: space-between;
}
.cards_content {
padding: 28rpx;
display: flex;
justify-content: space-between;
.left {
text-align: center;
// padding: 15rpx 25rpx;
padding-top: 20rpx;
width: 160rpx;
background-color: $theme-oa-color;
color: white;
border-radius: 40rpx;
.cir {
width: 120rpx;
height: 120rpx;
background-color: #ffffff;
margin-left: 25rpx;
border-radius: 120rpx;
position: relative;
}
}
.right {
display: flex;
flex-direction: column;
justify-content: space-between;
view {
text:nth-child(2) {
margin-left: 20rpx;
}
.status {
display: inline-block;
float: right;
color: white;
text-align: center;
padding: 10rpx 30rpx;
border-radius: 30rpx;
}
}
}
}
.u_avatar {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
}
</style>

View File

@ -0,0 +1,223 @@
<template>
<view class="c_task_item" @click="clickTask">
<view class="personnel_list" v-for="(item ,i) in datas.datas">
<view class="cards" v-if="item.ai_question">
<view class="cards_content">
<view class="right" style="width: 100%">
<view class="">
AI提问
</view>
<view class="">
{{item.ai_question}}
</view>
</view>
</view>
<view class="cards_content">
<view class="right" style="width: 100%">
<view class="">
AI回答
</view>
<view class="">
{{item.ai_aianalyse}}
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
Toast
} from '../../libs/uniApi';
export default {
name: "task",
props: {
datas: {
type: Object,
default: function() {
return {}
}
}
},
data() {
return {
extend: {}
};
},
mounted() {
this.$props.datas.extend ? this.extend = this.$props.datas.extend : null;
},
methods: {}
}
</script>
<style lang="scss">
.c_task_item {
margin: 0 auto;
// margin-bottom: 28rpx;
width: 694rpx;
// background: #FFFFFF;
border-radius: 14rpx 14rpx 14rpx 14rpx;
opacity: 1;
font-size: 25rpx;
font-weight: 400;
color: #999999;
line-height: 39rpx;
.text {
font-size: 28rpx;
font-weight: 400;
color: #333333;
line-height: 39rpx;
margin-left: 18rpx;
}
.top {
display: flex;
justify-content: space-between;
padding: 28rpx;
border-bottom: 1rpx solid #f5f5f5ff;
.left {
display: flex;
justify-content: left;
align-items: center;
}
.right {
.icon {
width: 43rpx;
height: 43rpx;
}
}
}
.bottom {
padding: 28rpx;
display: flex;
.b_left {
width: 103.39rpx;
height: 94.63rpx;
margin-right: 18rpx;
}
.b_right {
flex: 1;
display: flex;
justify-content: space-around;
flex-direction: column;
.item {
display: flex;
justify-content: space-between;
// margin: 18rpx 28rpx 0 28rpx;
// &:last-child {
// padding-bottom: 18rpx;
// }
.left {
display: flex;
}
.right {
font-size: 32rpx;
font-weight: 400;
color: #3274f9;
line-height: 39rpx;
.price {
font-size: 25rpx;
}
}
}
}
}
}
.personnel_list {
// padding: 28rpx 0;
padding-bottom: 28rpx;
.cards {
margin: 0 auto;
// margin-bottom: 28rpx;
width: 694rpx;
background: #ffffff;
border-radius: 30rpx;
opacity: 1;
overflow: hidden;
// box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.6);
.cards_head {
padding: 28rpx;
background-color: $theme-oa-color;
color: white;
min-height: 100rpx;
display: flex;
justify-content: space-between;
}
.cards_content {
padding: 28rpx;
.left {
text-align: center;
// padding: 15rpx 25rpx;
padding-top: 20rpx;
width: 160rpx;
background-color: $theme-oa-color;
color: white;
border-radius: 40rpx;
.cir {
width: 120rpx;
height: 120rpx;
background-color: #ffffff;
margin-left: 25rpx;
border-radius: 120rpx;
position: relative;
}
}
.right {
display: flex;
flex-direction: column;
justify-content: space-between;
view {
text:nth-child(2) {
margin-left: 20rpx;
}
.status {
display: inline-block;
float: right;
color: white;
text-align: center;
padding: 10rpx 30rpx;
border-radius: 30rpx;
}
}
}
}
.u_avatar {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
}
</style>

View File

@ -1,34 +1,82 @@
<template>
<view class="">
<u-empty icon="/static/img/empty/data.png"></u-empty>
<!-- <u-loadmore :status="loadConfig.status" :loading-text="loadConfig.loadingText" :loadmore-text="loadConfig.loadmoreText" :nomore-text="loadConfig.nomoreText" /> -->
<view class="all_box">
<block v-if="skeleton">
<u-skeleton :loading="skeleton" :animate="true" title rows="2" rows-width="100%"
rowsHeight="40" v-for="i in 3" :key="i" style="padding: 28rpx;">
</u-skeleton>
</block>
<block v-else>
<u-empty v-if="list.length==0" icon="/static/img/empty/data.png" text="没有信息"></u-empty>
<view v-else class="task_list">
<!-- <taskCard class="task_card" v-for="item in 10" :key="item"></taskCard> -->
<task-item :datas="item" v-for="item in list" :key="item.id"></task-item>
</view>
</block>
<!-- <u-loadmore v-else :status="loadConfig.status" :loading-text="loadConfig.loadingText"
:loadmore-text="loadConfig.loadmoreText" :nomore-text="loadConfig.nomoreText" /> -->
</view>
</template>
<script>
import { Toast } from '@/libs/uniApi.js'
import taskItem from "@/components/task/taskitemA.vue"
import {
opportunity
} from "@/api/business.js"
export default {
components:{
taskItem
},
data() {
return {
loadConfig: {
skeleton: false,
loadConfig:{
page: 1,
limit: 15,
lastpage: '',
loadingText: '努力加载中',
loadmoreText: '轻轻上拉',
nomoreText: '暂无商机',
status: 'nomore'
nomoreText: '我也是有底线的~~',
status: 'loadmore',
},
list: []
}
},
onLoad(e) {
this.skeleton = true;
this.id=e.id
},
onShow() {
this.loadList();
},
onReady() {
uni.$on('initOaTask', this.loadList);
},
methods: {
async loadList(){
let res = await opportunity({});
this.list =res.data;
this.skeleton = false;
}
},
onLoad() {},
onShow() {},
methods: {},
onPullDownRefresh() {
uni.stopPullDownRefresh()
}
this.loadList();
this.$u.sleep(500).then(()=>{uni.stopPullDownRefresh()});
},
onReachBottom() {
},
}
</script>
<style lang="scss">
</style>
<style lang="scss" scoped>
.task_list{
padding-top: 28rpx;
}
.loading{
padding: 28rpx;
margin-top: 28rpx;
}
</style>

90
pages/business/detail.vue Normal file
View File

@ -0,0 +1,90 @@
<template>
<view class="all_box">
<block v-if="skeleton">
<u-skeleton :loading="skeleton" :animate="true" title rows="2" rows-width="100%" rowsHeight="40"
v-for="i in 3" :key="i" style="padding: 28rpx;">
</u-skeleton>
</block>
<block v-else>
<u-empty v-if="list.length==0" icon="/static/img/empty/data.png" text="没有信息"></u-empty>
<view v-else class="task_list">
<!-- <taskCard class="task_card" v-for="item in 10" :key="item"></taskCard> -->
<task-item :datas="list" ></task-item>
</view>
</block>
<!-- <u-loadmore v-else :status="loadConfig.status" :loading-text="loadConfig.loadingText"
:loadmore-text="loadConfig.loadmoreText" :nomore-text="loadConfig.nomoreText" /> -->
</view>
</template>
<script>
import {
oppordetails
} from "@/api/business.js"
import {
Toast
} from '@/libs/uniApi.js'
import taskItem from "@/components/task/taskitemB.vue"
import {
opportunity
} from "@/api/business.js"
export default {
components: {
taskItem
},
data() {
return {
skeleton: false,
loadConfig: {
page: 1,
limit: 15,
lastpage: '',
loadingText: '努力加载中',
loadmoreText: '轻轻上拉',
nomoreText: '我也是有底线的~~',
status: 'loadmore'
},
list: [],
id: 0
}
},
onLoad(e) {
this.skeleton = true;
this.id = e.id
},
onShow() {
this.loadList();
},
onReady() {
uni.$on('initOaTask', this.loadList);
},
methods: {
async loadList() {
let res = await oppordetails({
id: this.id
});
this.list = res.data;
this.skeleton = false;
}
},
onPullDownRefresh() {
this.loadList();
this.$u.sleep(500).then(() => {
uni.stopPullDownRefresh()
});
},
onReachBottom() {},
}
</script>
<style lang="scss" scoped>
.task_list {
padding-top: 28rpx;
}
.loading {
padding: 28rpx;
margin-top: 28rpx;
}
</style>