This commit is contained in:
yyy 2024-12-02 17:44:56 +08:00
parent 0113bba6c0
commit c44b46605d
5 changed files with 1143 additions and 1052 deletions

View File

@ -2,36 +2,75 @@ import api from './api'
export function getContractPage(data) { export function getContractPage(data) {
return api.get('/crm/contract/page', data, { login: false }) return api.get('/crm/contract/page', data, {
login: false
})
} }
export function getContractNo(data) { export function getContractNo(data) {
return api.get('/crm/contract/getCode', data, { login: false }) return api.get('/crm/contract/getCode', data, {
login: false
})
} }
export function createContract(data) { export function createContract(data) {
return api.post('/crm/contract/create', data, { login: false }) return api.post('/crm/contract/create', data, {
login: false
})
} }
export function getContract(data) { export function getContract(data) {
return api.get('/crm/contract/get', data, { login: false }) return api.get('/crm/contract/get', data, {
login: false
})
} }
export function getContractProductListByContractId(data) { export function getContractProductListByContractId(data) {
return api.get('/crm/contract/contract-product/list-by-contract-id', data, { login: false }) return api.get('/crm/contract/contract-product/list-by-contract-id', data, {
login: false
})
} }
export function updateContract(data) { export function updateContract(data) {
return api.put('/crm/contract/update', data, { login: false }) return api.put('/crm/contract/update', data, {
login: false
})
} }
export function check(data) { export function check(data) {
return api.post('/crm/contract/check', data, { login: false }) return api.post('/crm/contract/check', data, {
login: false
})
} }
//改成OA之后的
export function getOAContractPage(data) {
return api.get('/bpm/oa/contract/page', data, {
login: false
})
}
//创建
export function createOAContract(data) {
return api.post('/bpm/oa/contract/create', data, {
login: false
})
}
//详情
export function getOAContract(data) {
return api.get('/bpm/oa/contract/get', data, {
login: false
})
}
//详情
export function getByProcessInstanceId(data) {
return api.get('/bpm/oa/contract/getByProcessInstanceId', data, {
login: false
})
}
//获得同部门的合同审批
export function getListByDeptId(data) {
return api.get('/bpm/oa/contract/getListByDeptId', data, {
login: false
})
}

View File

@ -1,4 +1,4 @@
export const VUE_APP_API_URL = 'http://192.168.0.179:48080/admin-api' export const VUE_APP_API_URL = 'http://192.168.0.107:48080/admin-api'
export const VUE_APP_UPLOAD_URL = VUE_APP_API_URL + '/infra/file/upload' export const VUE_APP_UPLOAD_URL = VUE_APP_API_URL + '/infra/file/upload'
export const VUE_APP_UPLOAD_URL2 = VUE_APP_API_URL + '/system/user/profile/update-avatar' export const VUE_APP_UPLOAD_URL2 = VUE_APP_API_URL + '/system/user/profile/update-avatar'
export const APP_ID = 'wx91fcb30adb2df321' export const APP_ID = 'wx91fcb30adb2df321'

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +1,5 @@
<template> <template>
<uv-navbar <uv-navbar :fixed="false" @leftClick="$onClickLeft" bgColor="#09b4f1">
:fixed="false"
@leftClick="$onClickLeft"
bgColor="#09b4f1"
>
<template v-slot:left> <template v-slot:left>
<uv-icon name="arrow-left" size="19" color="#ffffff"></uv-icon> <uv-icon name="arrow-left" size="19" color="#ffffff"></uv-icon>
</template> </template>
@ -13,12 +9,14 @@
</uv-navbar> </uv-navbar>
<view class="container"> <view class="container">
<view class="pb-2 flex px-5" style="background-color: #09b4f1;"> <view class="pb-2 flex px-5" style="background-color: #09b4f1;">
<uv-search placeholder="搜索合同名称" v-model="keyword" bgColor="#ffffff" :customStyle="customStyle" :show-action="false" @change="onSearch"></uv-search> <uv-search placeholder="搜索合同名称" v-model="keyword" bgColor="#ffffff" :customStyle="customStyle"
:show-action="false" @change="onSearch"></uv-search>
<!-- <uv-icon name="/static/images/screen.png" :size="26" @click="openSearch"></uv-icon> --> <!-- <uv-icon name="/static/images/screen.png" :size="26" @click="openSearch"></uv-icon> -->
</view> </view>
<view class="wrap"> <view class="wrap">
<uv-tabs :list="list" @click="handleSelect" :scrollable="false"></uv-tabs> <uv-tabs :list="list" @click="handleSelect" :scrollable="false"></uv-tabs>
<scroll-view scroll-y class="sv" :style="{height:scrollHeight+'px'}" :scroll-top="scrollTop" @scroll="scroll" @scrolltolower="reachBottom"> <scroll-view scroll-y class="sv" :style="{height:scrollHeight+'px'}" :scroll-top="scrollTop" @scroll="scroll"
@scrolltolower="reachBottom">
<view class="page-box"> <view class="page-box">
<block v-if="dataList.length > 0"> <block v-if="dataList.length > 0">
<view class="client" v-for="(items, index) in dataList" :key="index" @click="onItem(items.id)"> <view class="client" v-for="(items, index) in dataList" :key="index" @click="onItem(items.id)">
@ -36,7 +34,8 @@
</view> </view>
<view class="item align-center"> <view class="item align-center">
<view class="content"> <view class="content">
<view class="title uv-line-2">{{items.money}} <text class="pl-1">回款:{{items.returnMoney}}</text> </view> <view class="title uv-line-2">{{items.money}} <text class="pl-1">回款:{{items.returnMoney}}</text>
</view>
</view> </view>
<view class="right">{{items.orderAdminName ? items.orderAdminName : '--'}}</view> <view class="right">{{items.orderAdminName ? items.orderAdminName : '--'}}</view>
</view> </view>
@ -52,7 +51,7 @@
</view> </view>
</view> </view>
</view> </view>
<uv-load-more :status="listStatus" ></uv-load-more> <uv-load-more :status="listStatus"></uv-load-more>
</block> </block>
<uv-empty text="暂无数据" v-else margin-top="50" mode="list"></uv-empty> <uv-empty text="暂无数据" v-else margin-top="50" mode="list"></uv-empty>
</view> </view>
@ -65,171 +64,172 @@
</template> </template>
<script setup> <script setup>
import { import {
ref, ref,
computed computed
} from 'vue' } from 'vue'
import { onLoad,onShow ,onReady,onPageScroll} from '@dcloudio/uni-app' import {
import { onLoad,
getContractPage onShow,
} from '@/api/contract' onReady,
import { formatDateTime } from '@/utils/util' onPageScroll
const title = ref('合同') } from '@dcloudio/uni-app'
const keyword = ref('') import {
const oldScrollTop = ref(0) getContractPage,
const scrollTop = ref(-1) getOAContractPage
const dataList = ref([]) } from '@/api/contract'
const relation = ref('my') import {
const list = ref( formatDateTime
} from '@/utils/util'
const title = ref('合同')
const keyword = ref('')
const oldScrollTop = ref(0)
const scrollTop = ref(-1)
const dataList = ref([])
const relation = ref(true)
const list = ref(
[{ [{
name: '我的合同', name: '我的合同',
value: 'my' value: true
}, { }, {
name: '下属合同', name: '下属合同',
value: 'sub' value: false
}] }]
) )
const current = ref(0) const current = ref(0)
const dx = ref(0) const dx = ref(0)
const pH = ref(0) const pH = ref(0)
const scrollHeight = ref(0) const scrollHeight = ref(0)
const page = ref(1) const page = ref(1)
const pageSize = ref(10) const pageSize = ref(10)
const lastPage = ref(false) const lastPage = ref(false)
const listStatus = ref('loadmore') const listStatus = ref('loadmore')
const isRefresh = ref(false) const isRefresh = ref(false)
defineExpose({isRefresh}) defineExpose({
isRefresh
})
onReady(()=>{ onReady(() => {
uni.getSystemInfo({ uni.getSystemInfo({
success(res) { success(res) {
pH.value = res.windowHeight pH.value = res.windowHeight
let scrollH = uni.createSelectorQuery().select(".sv") let scrollH = uni.createSelectorQuery().select(".sv")
scrollH.boundingClientRect(data=>{ scrollH.boundingClientRect(data => {
let pH0 = pH.value let pH0 = pH.value
scrollHeight.value = pH0 - data.top scrollHeight.value = pH0 - data.top
}).exec() }).exec()
} }
}) })
}) })
onLoad((e) => { onLoad((e) => {
})
onShow(()=>{
//if (isRefresh.value) {
isRefresh.value = false isRefresh.value = false
page.value = 1 page.value = 1
lastPage.value = false lastPage.value = false
scrollTop.value = 0 scrollTop.value = 0
dataList.value = [] dataList.value = []
getList() getList()
//} })
}) const timeFormats = (val) => {
if (val) {
const timeFormats = (val) => {
if(val){
return formatDateTime(val) return formatDateTime(val)
} else { } else {
return '--' return '--'
} }
}
const handleSelect = (key) => {
relation.value = key.value
getList()
}
//
const onCheck = (id,type) => {
if(type == 'look'){
uni.navigateTo({
url: '/pages/components/pages/contract/add?id=' +id + '&type=edit'
});
}else{
uni.navigateTo({
url: '/pages/components/pages/contract/add?id=' +id + '&type=check'
});
} }
} const handleSelect = (key) => {
relation.value = key.value
getList()
}
const getList = async(isNextPage,pages) => { //
const onCheck = (id, type) => {
if (type == 'look') {
uni.navigateTo({
url: '/pages/components/pages/contract/add?id=' + id + '&type=edit'
});
} else {
uni.navigateTo({
url: '/pages/components/pages/contract/add?id=' + id + '&type=check'
});
}
}
await getContractPage({ const getList = async (isNextPage, pages) => {
await getOAContractPage({
pageNo: page.value, pageNo: page.value,
pageSize: pageSize.value, pageSize: pageSize.value,
relation: relation.value, isMyContract: relation.value,
name:keyword.value, contractName: keyword.value,
}).then(res => { }).then(res => {
if(res) { if (res) {
if (res.list.length < 10) { if (res.list.length < 10) {
listStatus.value = 'nomore' listStatus.value = 'nomore'
} }
if(res.list.length == 0) { if (res.list.length == 0) {
lastPage.value = true lastPage.value = true
} }
if(isNextPage) { if (isNextPage) {
dataList.value = dataList.value.concat(res.list) dataList.value = dataList.value.concat(res.list)
return return
} }
dataList.value = res.list dataList.value = res.list
} }
}) })
} }
const scroll = (e) => { const scroll = (e) => {
oldScrollTop.value = e.detail.scrollTop oldScrollTop.value = e.detail.scrollTop
} }
const reachBottom = () => { const reachBottom = () => {
if(lastPage.value || listStatus.value == 'loading') return ; if (lastPage.value || listStatus.value == 'loading') return;
listStatus.value = 'loading' listStatus.value = 'loading'
setTimeout(() => { setTimeout(() => {
if(lastPage.value) return ; if (lastPage.value) return;
getList(true,++page.value) getList(true, ++page.value)
if(dataList.value.length >= 10) listStatus.value = 'loadmore'; if (dataList.value.length >= 10) listStatus.value = 'loadmore';
else listStatus.value = 'loading'; else listStatus.value = 'loading';
}, 1200) }, 1200)
} }
// //
const onSearch = () => { const onSearch = () => {
page.value = 1 page.value = 1
lastPage.value = false lastPage.value = false
getList() getList()
} }
const onItem = (val) => { const onItem = (val) => {
uni.navigateTo({ uni.navigateTo({
url: '/pages/components/pages/contract/add?id=' +val + '&type=edit' url: '/pages/components/pages/contract/add?id=' + val + '&type=edit'
}); });
} }
// //
const onAdd = () => { const onAdd = () => {
uni.navigateTo({ uni.navigateTo({
url: '/pages/components/pages/contract/add' url: '/pages/components/pages/contract/add'
}) })
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.container { .container {
background-color: #F7F7F7; background-color: #F7F7F7;
min-height: 100vh; min-height: 100vh;
} }
.page-box {
.page-box {
padding: 20rpx 20rpx 45rpx; padding: 20rpx 20rpx 45rpx;
} }
.client {
.client {
width: 710rpx; width: 710rpx;
background-color: #ffffff; background-color: #ffffff;
margin-bottom: 20rpx; margin-bottom: 20rpx;
@ -237,12 +237,15 @@ const onAdd = () => {
box-sizing: border-box; box-sizing: border-box;
padding: 20rpx; padding: 20rpx;
font-size: 28rpx; font-size: 28rpx;
.top { .top {
display: flex; display: flex;
.left { .left {
display: flex; display: flex;
align-items: center; align-items: center;
flex: 1; flex: 1;
.store { .store {
font-size: 28rpx; font-size: 28rpx;
font-weight: bold; font-weight: bold;
@ -250,43 +253,53 @@ const onAdd = () => {
} }
} }
} }
.item { .item {
display: flex; display: flex;
margin: 20rpx 0 0; margin: 20rpx 0 0;
.content { .content {
flex: 1; flex: 1;
.title { .title {
font-size: 28rpx; font-size: 28rpx;
line-height: 50rpx; line-height: 50rpx;
} }
.type { .type {
margin: 10rpx 0; margin: 10rpx 0;
font-size: 24rpx; font-size: 24rpx;
color: $uv-tips-color; color: $uv-tips-color;
} }
} }
.right { .right {
margin-left: 10rpx; margin-left: 10rpx;
text-align: right; text-align: right;
.decimal { .decimal {
font-size: 24rpx; font-size: 24rpx;
margin-top: 4rpx; margin-top: 4rpx;
} }
.number { .number {
color: $uv-tips-color; color: $uv-tips-color;
font-size: 24rpx; font-size: 24rpx;
} }
} }
} }
.bottom { .bottom {
display: flex; display: flex;
margin-top: 20rpx; margin-top: 20rpx;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.client_time { .client_time {
color: #777; color: #777;
font-size: 26rpx; font-size: 26rpx;
} }
.btn { .btn {
line-height: 56rpx; line-height: 56rpx;
padding: 0rpx 25rpx; padding: 0rpx 25rpx;
@ -295,24 +308,27 @@ const onAdd = () => {
text-align: center; text-align: center;
color: $uv-info-dark; color: $uv-info-dark;
} }
.entity { .entity {
color: #fff; color: #fff;
background-color: #FF6146; background-color: #FF6146;
} }
.primary { .primary {
color: #FFF; color: #FFF;
background-color: #09b4f1 background-color: #09b4f1
} }
} }
} }
.wrap {
.wrap {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 100%; width: 100%;
} }
.floatBtn { .floatBtn {
font-size: 23rpx; font-size: 23rpx;
bottom: 100px; bottom: 100px;
right: 20px; right: 20px;
@ -331,7 +347,5 @@ const onAdd = () => {
align-items: center; align-items: center;
transition: opacity 0.4s; transition: opacity 0.4s;
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
} }
</style> </style>

View File

@ -25,7 +25,9 @@
</view> </view>
<!-- 标签 --> <!-- 标签 -->
<view class="tap" v-if="customer.tags !='' "> <view class="tap" v-if="customer.tags !='' ">
<uv-tags :text="item" plain type="warning" size="mini" v-for="(item,i) in customer.tags" :key="i" /> <view v-for="(item,i) in customer.tags" :key="i" style="margin-right: 10rpx;">
<uv-tags :text="item" plain type="warning" size="mini" />
</view>
</view> </view>
<view class="relation flex"> <view class="relation flex">
<view class="left">手机<text class="dial" @click="call(customer.mobile)">{{customer.mobile}}</text></view> <view class="left">手机<text class="dial" @click="call(customer.mobile)">{{customer.mobile}}</text></view>