This commit is contained in:
Rhett霍 2026-03-16 10:26:31 +08:00
commit 9c257f0363
28 changed files with 2398 additions and 1180 deletions

View File

@ -0,0 +1,11 @@
import request from '@/utils/request'
// 查询账期价格复审主列表
export const getPriceFinallReviewList = (data, query) => {
return request({
method: 'post',
url: '/bussiness/baseusercredithistory/credit-period-repeatedly-review-list',
data,
params: query,
})
}

View File

@ -0,0 +1,76 @@
import request from '@/utils/request'
// 获取账期价格初审列表
export const getPricePreliminaryReviewList = (data, query) => {
return request({
method: 'post',
url: '/bussiness/baseusercredithistory/credit-period-initial-review-list',
data,
params: query
})
}
// 根据 ID 获取账期价格初审详情
export const getPricePreliminaryReviewDetail = (query) => {
return request({
method: 'get',
url: '/bussiness/baseusercredithistory/get-creditline-creditperiod',
params: query
})
}
// 获取账期审核/额度审核列表(两个列表一个接口)
export const getLastPaymentAndQuotaList = (data, query) => {
return request({
method: 'post',
url: '/bussiness/baseusercredithistory/goods-credit-period-initial-review-list',
params: query,
data: data,
})
}
// 账期终审/额度终审的回退(两个列表一个接口)
export const putBackDataLastPaymentOrQuota = (data) => {
return request({
method: 'put',
url: '/bussiness/baseusercredithistory/goods-credit-period-repeatedly-review-back',
data,
})
}
// 额度终审 (副总监初审)
export const directorLastReviewQuota = (query) => {
return request({
method: 'put',
url: '/bussiness/baseusercredithistory/goods-credit-limit-repeatedly-review',
params: query,
})
}
// 价格审核列表
export const getPriceChangeReviewList = (data, query) => {
return request({
method: 'post',
url: '/bussiness/baseusercredithistory/goods-credit-line-initial-review-list',
params: query,
data
})
}
// 价格审核 的回退
export const putBackDataPrice = (data) => {
return request({
method: 'put',
url: '/bussiness/businessgoods/goods-credit-line-initial-review-back',
data,
})
}
// 价格审核(副总监初审)
export const directorReviewPrice = (query) => {
return request({
method: 'put',
url: 'bussiness/businessgoods/goods-credit-line-initial-review',
params: query,
})
}

9
api/area.js Normal file
View File

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 获取地域列表
export const getAreaList = () => {
return request({
method: 'get',
url: '/system/dept/regionals',
})
}

11
api/order.js Normal file
View File

@ -0,0 +1,11 @@
import request from "../utils/request";
// 订单综合查询列表内部用户
export const getReportOrderQuery = (data, query) => {
return request({
method: 'post',
url: '/report/stock/ReportOrderQuery',
data: data,
params: query,
})
}

View File

@ -1,7 +1,7 @@
import request from '@/utils/request' import request from '@/utils/request'
export function listsalemain(data,query) { export function listsalemain(data, query) {
return request({ return request({
url: '/bussiness/salemain/list', url: '/bussiness/salemain/list',
method: 'post', method: 'post',
@ -21,16 +21,17 @@ export function productListWithUserId() {
} }
// 查询s生产单位列表 // 查询s生产单位列表
export function listproductList(data,query) { export function listproductList(data, query) {
return request({ return request({
url: '/system/dept/productList', url: '/system/dept/productList',
method: 'get', method: 'get',
data:data, data: data,
params: query params: query
}) })
} }
// 新建销售订单时候的商品列表 // 新建销售订单时候的商品列表
export function listsaleBusGoodsList(data,query) { export function listsaleBusGoodsList(data, query) {
return request({ return request({
url: '/bussiness/businessgoods/saleBusGoodsList', url: '/bussiness/businessgoods/saleBusGoodsList',
method: 'post', method: 'post',
@ -39,6 +40,7 @@ export function listsaleBusGoodsList(data,query) {
}) })
} }
// 查询剩余额度 // 查询剩余额度
export function getsalemaincheckAmount(queryParams) { export function getsalemaincheckAmount(queryParams) {
return request({ return request({
@ -47,6 +49,7 @@ export function getsalemaincheckAmount(queryParams) {
// isEncrypt: false // isEncrypt: false
}) })
} }
// 获取当前商业用户票扣列表 // 获取当前商业用户票扣列表
// 相当于补差 // 相当于补差
export function salemainpiAoKouList(data) { export function salemainpiAoKouList(data) {
@ -57,6 +60,7 @@ export function salemainpiAoKouList(data) {
isEncrypt: false isEncrypt: false
}) })
} }
// 新增 // 新增
export function addsalemain(data) { export function addsalemain(data) {
return request({ return request({
@ -85,6 +89,7 @@ export function salemainDetail(salemainId) {
// isEncrypt: false // isEncrypt: false
}) })
} }
// 商务经理审批时获取详情,下面的商品列表 // 商务经理审批时获取详情,下面的商品列表
export function businessManagerReviewGoodsList(salemainId) { export function businessManagerReviewGoodsList(salemainId) {
return request({ return request({
@ -98,14 +103,13 @@ export function businessManagerReviewGoodsList(salemainId) {
// 删除 // 删除
export function delsalemain(id) { export function delsalemain(id) {
return request({ return request({
url: '/bussiness/salemain/remove?ids=' +id, url: '/bussiness/salemain/remove?ids=' + id,
method: 'post', method: 'post',
// isEncrypt: false // isEncrypt: false
}) })
} }
// 订单详情中,查询商业用户详细--收货地址 // 订单详情中,查询商业用户详细--收货地址
export function BaseuserBusinessUserDetail(BaseuserBusinessUserId) { export function BaseuserBusinessUserDetail(BaseuserBusinessUserId) {
return request({ return request({
@ -125,11 +129,11 @@ export function getSaleDisDetail(saleid) {
} }
// 销售订单操作日志 // 销售订单操作日志
export function salemainlogList(data,query) { export function salemainlogList(data, query) {
return request({ return request({
url: '/bussiness/salemainlog/list', url: '/bussiness/salemainlog/list',
method: 'post', method: 'post',
data:data, data: data,
params: query, params: query,
isEncrypt: false isEncrypt: false
}) })
@ -144,15 +148,11 @@ export function getInvoiceList(saleid) {
}) })
} }
// 获取商业公司列表 // 获取商业公司列表
export function getBusinessList(data) { export const getBusinessCompanyList = (data) => {
return request({ return request({
url: '/system/user/list_business',
method: 'post', method: 'post',
data:data, url: '/system/user/list_business',
isEncrypt: false data
}) })
} }

36
components/Area.vue Normal file
View File

@ -0,0 +1,36 @@
<template>
<uni-data-select
v-model="modelValue"
:localdata="options"
v-bind="omit($attrs,['change'])"
placeholder="请选择地域"
/>
</template>
<script setup>
import {defineModel, defineOptions, defineProps, getCurrentInstance, onMounted, ref} from 'vue'
import {omit} from "radash";
import UniDataSelect from "../uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue";
import {getAreaList} from "../api/area";
defineOptions({
name: "Area",
inheritAttrs: false
})
const modelValue = defineModel()
const props = defineProps([])
const {proxy} = getCurrentInstance()
const options = ref([])
onMounted(async () => {
const {data} = await getAreaList()
options.value = data.sort((a, b) => {
return a.deptName.localeCompare(b.deptName, 'zh-CN');
}).map(i => ({
value: i.deptId,
text: i.deptName
}))
})
</script>

View File

@ -0,0 +1,66 @@
<template>
<uni-data-select
v-model="modelValue"
:localdata="options"
placeholder="请选择商业公司"
v-bind="omit($attrs,['change'])"
/>
</template>
<script setup>
import {defineModel, defineOptions, defineProps, getCurrentInstance, nextTick, onMounted, ref, watch} from 'vue'
import {omit} from "radash";
import {getBusinessCompanyList} from "../api/orderManager";
defineOptions({
name: "BusinessCompany",
inheritAttrs: false
})
const modelValue = defineModel()
// default: type = all_name
/**
* type:
* all_name = 显示所有名称
* id = value 值是 ID
*/
const props = defineProps({
type: {
type: String,
default: 'all_name'
},
areaId: {
type: Number,
default: 0
}
})
const {proxy} = getCurrentInstance()
const options = ref([])
const handleQuery = async () => {
const {data} = await getBusinessCompanyList({
isUnit: 0,
queryParam: {
areaId: props.areaId
}
})
options.value = data.map(item => {
return {
value: props.type === 'id' ? item.userid : item.businessname,
text: item.businessname
}
})
}
onMounted(async () => {
await nextTick()
await handleQuery()
})
watch(() => props.areaId, async (newValue) => {
if (newValue) {
await handleQuery()
}
})
</script>

View File

@ -156,6 +156,27 @@
"props": true "props": true
// props // props
} }
},
{
"path": "pages/work/OrderSearchQuery/index",
"style": {
"navigationBarTitleText": "订单综合查询",
"props": true
}
},
{
"path": "pages/work/AccountPricePreliminaryRreview/index",
"style": {
"navigationBarTitleText": "账期价格初审",
"props": true
}
},
{
"path": "pages/work/AccountPriceFinallReview/index",
"style": {
"navigationBarTitleText": "账期价格复审",
"props": true
}
} }
], ],
"tabBar": { "tabBar": {

View File

@ -1,35 +1,33 @@
<template> <template>
<view class="normal-login-container"> <view class="normal-login-container">
<view class="logo-content align-center justify-center flex"> <view class="logo-content align-center justify-center flex">
<image style="width: 100rpx;height: 100rpx;" :src="globalConfig.appInfo.logo" mode="widthFix"> <image :src="globalConfig.appInfo.logo" mode="widthFix" style="width: 100rpx;height: 100rpx;">
</image> </image>
<text class="title">大冢APS Ultra管理平台</text> <text class="title">大冢APS Ultra管理平台</text>
</view> </view>
<view class="login-form-content"> <view class="login-form-content">
<view class="input-item flex align-center"> <view class="input-item flex align-center">
<view class="iconfont icon-user icon"></view> <view class="iconfont icon-user icon"></view>
<input v-model="loginForm.username" class="input" type="text" placeholder="请输入账号" maxlength="30" /> <input v-model="loginForm.username" class="input" maxlength="30" placeholder="请输入账号" type="text"/>
</view> </view>
<view class="input-item flex align-center"> <view class="input-item flex align-center">
<view class="iconfont icon-password icon"></view> <view class="iconfont icon-password icon"></view>
<input v-model="loginForm.password" :type="passwordVisible ? 'text' : 'password'" class="input" placeholder="请输入密码" maxlength="20" /> <input v-model="loginForm.password" class="input" maxlength="20" placeholder="请输入密码"
<view class="password-eye" @click="togglePasswordVisible"> type="password"/>
<uni-icons :type="passwordVisible ? 'eye-slash' : 'eye'" size="20" color="#999"></uni-icons>
</view> </view>
</view> <view v-if="captchaEnabled" class="input-item flex align-center" style="width: 60%;margin: 0px;">
<view class="input-item flex align-center" style="width: 60%;margin: 0px;" v-if="captchaEnabled">
<view class="iconfont icon-code icon"></view> <view class="iconfont icon-code icon"></view>
<input v-model="loginForm.code" type="number" class="input" placeholder="请输入验证码" maxlength="4" /> <input v-model="loginForm.code" class="input" maxlength="4" placeholder="请输入验证码" type="number"/>
<view class="login-code"> <view class="login-code">
<image :src="codeUrl" @click="getCode" class="login-code-img"></image> <image :src="codeUrl" class="login-code-img" @click="getCode"></image>
</view> </view>
</view> </view>
<view class="action-btn"> <view class="action-btn">
<button @click="handleLogin" class="login-btn cu-btn block bg-blue lg round">登录</button> <button class="login-btn cu-btn block bg-blue lg round" @click="handleLogin">登录</button>
</view> </view>
<view class="reg text-center" v-if="register"> <view v-if="register" class="reg text-center">
<text class="text-grey1">没有账号</text> <text class="text-grey1">没有账号</text>
<text @click="handleUserRegister" class="text-blue">立即注册</text> <text class="text-blue" @click="handleUserRegister">立即注册</text>
</view> </view>
</view> </view>
@ -37,41 +35,33 @@
</template> </template>
<script setup> <script setup>
import { ref, getCurrentInstance } from "vue" import {getCurrentInstance, ref} from "vue"
import { onLoad } from "@dcloudio/uni-app" import {onLoad} from "@dcloudio/uni-app"
import { getToken } from '@/utils/auth' import {getToken} from '@/utils/auth'
import { getCodeImg } from '@/api/login' import {getCodeImg} from '@/api/login'
import { useConfigStore, useUserStore } from '@/store' import {useConfigStore, useUserStore} from '@/store'
const { proxy } = getCurrentInstance() const {proxy} = getCurrentInstance()
const globalConfig = useConfigStore().config const globalConfig = useConfigStore().config
const codeUrl = ref("") const codeUrl = ref("")
// //
const captchaEnabled = ref(true) const captchaEnabled = ref(true)
// //
const register = ref(false) const register = ref(false)
// const loginForm = ref({
const passwordVisible = ref(false)
const loginForm = ref({
username: "admin", username: "admin",
password: "admin123", password: "admin123",
code: "", code: "",
uuid: "" uuid: ""
}) })
// //
function togglePasswordVisible() { function handleUserRegister() {
passwordVisible.value = !passwordVisible.value
}
//
function handleUserRegister() {
proxy.$tab.redirectTo(`/pages/register`) proxy.$tab.redirectTo(`/pages/register`)
} }
// //
function getCode() { function getCode() {
getCodeImg().then(res => { getCodeImg().then(res => {
captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled
if (captchaEnabled.value) { if (captchaEnabled.value) {
@ -79,10 +69,10 @@
loginForm.value.uuid = res.uuid loginForm.value.uuid = res.uuid
} }
}) })
} }
// //
async function handleLogin() { async function handleLogin() {
if (loginForm.value.username === "") { if (loginForm.value.username === "") {
proxy.$modal.msgError("请输入账号") proxy.$modal.msgError("请输入账号")
} else if (loginForm.value.password === "") { } else if (loginForm.value.password === "") {
@ -93,10 +83,10 @@
proxy.$modal.loading("登录中,请耐心等待...") proxy.$modal.loading("登录中,请耐心等待...")
pwdLogin() pwdLogin()
} }
} }
// //
async function pwdLogin() { async function pwdLogin() {
useUserStore().login(loginForm.value).then(() => { useUserStore().login(loginForm.value).then(() => {
proxy.$modal.closeLoading() proxy.$modal.closeLoading()
loginSuccess() loginSuccess()
@ -105,33 +95,33 @@
getCode() getCode()
} }
}) })
} }
// //
function loginSuccess(result) { function loginSuccess(result) {
// //
useUserStore().getInfo().then(res => { useUserStore().getInfo().then(res => {
proxy.$tab.reLaunch('/pages/work/index') proxy.$tab.reLaunch('/pages/index')
}) })
} }
onLoad(() => { onLoad(() => {
//#ifdef H5 //#ifdef H5
if (getToken()) { if (getToken()) {
proxy.$tab.reLaunch('/pages/index') proxy.$tab.reLaunch('/pages/index')
} }
//#endif //#endif
}) })
getCode() getCode()
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
page { page {
background-color: #ffffff; background-color: #ffffff;
} }
.normal-login-container { .normal-login-container {
width: 100%; width: 100%;
.logo-content { .logo-content {
@ -160,7 +150,6 @@
background-color: #f5f6f7; background-color: #f5f6f7;
height: 45px; height: 45px;
border-radius: 20px; border-radius: 20px;
position: relative;
.icon { .icon {
font-size: 38rpx; font-size: 38rpx;
@ -174,31 +163,8 @@
line-height: 20px; line-height: 20px;
text-align: left; text-align: left;
padding-left: 15px; padding-left: 15px;
padding-right: 45px; /* 为眼睛图标留出更多空间 */
} }
.password-eye {
position: absolute;
right: 15px;
top: 50%;
transform: translateY(-50%);
z-index: 10;
display: flex;
align-items: center;
justify-content: center;
width: 30px;
height: 30px;
/* 增加点击区域 */
&::after {
content: '';
position: absolute;
top: -10px;
left: -10px;
right: -10px;
bottom: -10px;
}
}
} }
.login-btn { .login-btn {
@ -227,5 +193,5 @@
} }
} }
} }
} }
</style> </style>

View File

@ -1,5 +1,5 @@
<template> <template>
<view class="mine-container" :style="{height: `${windowHeight}px`}"> <view :style="{height: `${windowHeight}px`}" class="mine-container">
<!--顶部个人信息栏--> <!--顶部个人信息栏-->
<view class="header-section"> <view class="header-section">
<view class="flex padding justify-between"> <view class="flex padding justify-between">
@ -7,18 +7,19 @@
<view v-if="!avatar" class="cu-avatar xl round bg-white"> <view v-if="!avatar" class="cu-avatar xl round bg-white">
<view class="iconfont icon-people text-gray icon"></view> <view class="iconfont icon-people text-gray icon"></view>
</view> </view>
<image v-if="avatar" @click="handleToAvatar" :src="avatar" class="cu-avatar xl round" mode="widthFix"> <image v-if="avatar" :src="avatar" class="cu-avatar xl round" mode="widthFix"
@click="handleToAvatar">
</image> </image>
<view v-if="!name" @click="handleToLogin" class="login-tip"> <view v-if="!name" class="login-tip" @click="handleToLogin">
点击登录 点击登录
</view> </view>
<view v-if="name" @click="handleToInfo" class="user-info"> <view v-if="name" class="user-info" @click="handleToInfo">
<view class="u_title"> <view class="u_title">
用户名{{ name }} 用户名{{ name }}
</view> </view>
</view> </view>
</view> </view>
<view @click="handleToInfo" class="flex align-center"> <view class="flex align-center" @click="handleToInfo">
<text>个人信息</text> <text>个人信息</text>
<view class="iconfont icon-right"></view> <view class="iconfont icon-right"></view>
</view> </view>
@ -26,7 +27,7 @@
</view> </view>
<view class="content-section"> <view class="content-section">
<!-- <view class="mine-actions grid col-4 text-center"> <view class="mine-actions grid col-4 text-center">
<view class="action-item" @click="handleJiaoLiuQun"> <view class="action-item" @click="handleJiaoLiuQun">
<view class="iconfont icon-friendfill text-pink icon"></view> <view class="iconfont icon-friendfill text-pink icon"></view>
<text class="text">交流群</text> <text class="text">交流群</text>
@ -43,7 +44,7 @@
<view class="iconfont icon-dianzan text-green icon"></view> <view class="iconfont icon-dianzan text-green icon"></view>
<text class="text">点赞我们</text> <text class="text">点赞我们</text>
</view> </view>
</view> --> </view>
<view class="menu-list"> <view class="menu-list">
<view class="list-cell list-cell-arrow" @click="handleToEditInfo"> <view class="list-cell list-cell-arrow" @click="handleToEditInfo">
@ -52,7 +53,7 @@
<view>编辑资料</view> <view>编辑资料</view>
</view> </view>
</view> </view>
<!-- <view class="list-cell list-cell-arrow" @click="handleHelp"> <view class="list-cell list-cell-arrow" @click="handleHelp">
<view class="menu-item-box"> <view class="menu-item-box">
<view class="iconfont icon-help menu-icon"></view> <view class="iconfont icon-help menu-icon"></view>
<view>常见问题</view> <view>常见问题</view>
@ -63,7 +64,7 @@
<view class="iconfont icon-aixin menu-icon"></view> <view class="iconfont icon-aixin menu-icon"></view>
<view>关于我们</view> <view>关于我们</view>
</view> </view>
</view> --> </view>
<view class="list-cell list-cell-arrow" @click="handleToSetting"> <view class="list-cell list-cell-arrow" @click="handleToSetting">
<view class="menu-item-box"> <view class="menu-item-box">
<view class="iconfont icon-setting menu-icon"></view> <view class="iconfont icon-setting menu-icon"></view>
@ -77,61 +78,61 @@
</template> </template>
<script setup> <script setup>
import { useUserStore } from '@/store' import {useUserStore} from '@/store'
import { computed , getCurrentInstance } from "vue" import {computed, getCurrentInstance} from "vue"
const { proxy } = getCurrentInstance() const {proxy} = getCurrentInstance()
const name = useUserStore().name const name = useUserStore().name
const avatar = computed(() => useUserStore().avatar) const avatar = computed(() => useUserStore().avatar)
const windowHeight = computed(() => uni.getSystemInfoSync().windowHeight - 50) const windowHeight = computed(() => uni.getSystemInfoSync().windowHeight - 50)
function handleToInfo() { function handleToInfo() {
proxy.$tab.navigateTo('/pages/mine/info/index') proxy.$tab.navigateTo('/pages/mine/info/index')
} }
function handleToEditInfo() { function handleToEditInfo() {
proxy.$tab.navigateTo('/pages/mine/info/edit') proxy.$tab.navigateTo('/pages/mine/info/edit')
} }
function handleToSetting() { function handleToSetting() {
proxy.$tab.navigateTo('/pages/mine/setting/index') proxy.$tab.navigateTo('/pages/mine/setting/index')
} }
function handleToLogin() { function handleToLogin() {
proxy.$tab.reLaunch('/pages/login') proxy.$tab.reLaunch('/pages/login')
} }
function handleToAvatar() { function handleToAvatar() {
proxy.$modal.showToast('模块建设中~') proxy.$modal.showToast('模块建设中~')
// proxy.$tab.navigateTo('/pages/mine/avatar/index') // proxy.$tab.navigateTo('/pages/mine/avatar/index')
} }
function handleHelp() { function handleHelp() {
proxy.$modal.showToast('模块建设中~') proxy.$modal.showToast('模块建设中~')
// proxy.$tab.navigateTo('/pages/mine/help/index') // proxy.$tab.navigateTo('/pages/mine/help/index')
} }
function handleAbout() { function handleAbout() {
proxy.$modal.showToast('模块建设中~') proxy.$modal.showToast('模块建设中~')
// proxy.$tab.navigateTo('/pages/mine/about/index') // proxy.$tab.navigateTo('/pages/mine/about/index')
} }
function handleJiaoLiuQun() { function handleJiaoLiuQun() {
proxy.$modal.showToast('模块建设中~') proxy.$modal.showToast('模块建设中~')
// proxy.$modal.showToast('QQ133713780()146013835()189091635') // proxy.$modal.showToast('QQ133713780()146013835()189091635')
} }
function handleBuilding() { function handleBuilding() {
proxy.$modal.showToast('模块建设中~') proxy.$modal.showToast('模块建设中~')
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
page { page {
background-color: #f5f6f7; background-color: #f5f6f7;
} }
.mine-container { .mine-container {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -187,5 +188,5 @@
} }
} }
} }
} }
</style> </style>

View File

@ -1,7 +1,7 @@
<template> <template>
<view class="container"> <view class="container">
<uni-list> <uni-list>
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'person-filled'}" title="昵称" :rightText="user.nickName" /> <uni-list-item showExtraIcon="true" :extraIcon="{type: 'person-filled'}" title="昵称" :rightText="user.userName" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'phone-filled'}" title="手机号码" :rightText="user.phonenumber" /> <uni-list-item showExtraIcon="true" :extraIcon="{type: 'phone-filled'}" title="手机号码" :rightText="user.phonenumber" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'email-filled'}" title="邮箱" :rightText="user.email" /> <uni-list-item showExtraIcon="true" :extraIcon="{type: 'email-filled'}" title="邮箱" :rightText="user.email" />
<uni-list-item showExtraIcon="true" :extraIcon="{type: 'auth-filled'}" title="岗位" :rightText="postGroup" /> <uni-list-item showExtraIcon="true" :extraIcon="{type: 'auth-filled'}" title="岗位" :rightText="postGroup" />

View File

@ -0,0 +1,88 @@
<template>
<view class="container">
<MBCard>
<uni-forms ref="baseForm" :modelValue="queryParams">
<uni-forms-item label="大区">
<LargeArea v-model="queryParams.bigAreaId" @change="handleQuery"/>
</uni-forms-item>
<uni-forms-item label="地域">
<Area v-model="queryParams.deptId" @change="handleQuery"/>
</uni-forms-item>
<uni-forms-item label="商业公司">
<BusinessCompany
v-model="queryParams.businessName"
@change="handleQuery"
/>
</uni-forms-item>
</uni-forms>
</MBCard>
<uni-table ref="table" :loading="loading" emptyText="暂无更多数据" stripe>
<uni-tr>
<uni-th align="center" width="50">序号</uni-th>
<uni-th align="left" width="200">公司名称</uni-th>
<uni-th align="left" width="50">地域</uni-th>
<uni-th width="100">账期终审</uni-th>
<uni-th width="100">额度终审</uni-th>
<uni-th width="100">价格终审</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in tableData" :key="index">
<uni-td align="center">{{ index + 1 }}</uni-td>
<uni-td>{{ item.userName }}</uni-td>
<uni-td>{{ item.areaName }}</uni-td>
<uni-td>
<view v-if="item.creditPeriod > 0">
<button class="uni-button" size="mini" type="submit">编辑</button>
</view>
</uni-td>
<uni-td>
<view v-if="item.creditLimit > 0">
<button class="uni-button" size="mini" type="submit">编辑</button>
</view>
</uni-td>
<uni-td>
<view v-if="item.price > 0">
<button class="uni-button" size="mini" type="submit">编辑</button>
</view>
</uni-td>
</uni-tr>
</uni-table>
</view>
</template>
<script setup>
import {defineOptions, onMounted, ref} from "vue"
import Area from "../../../components/Area.vue";
import MBCard from "../../../components/MB/MBCard.vue";
import UniFormsItem from "../../../uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue";
import BusinessCompany from "../../../components/BusinessCompany.vue";
import UniForms from "../../../uni_modules/uni-forms/components/uni-forms/uni-forms.vue";
import LargeArea from "../../../components/LargeArea/LargeArea.vue";
import {getPriceFinallReviewList} from "../../../api/AccountPriceFinallReview";
defineOptions({
name: "AccountPriceFinallReview"
})
const loading = ref(true)
const queryParams = ref({})
const tableData = ref([])
const total = ref(0)
const paging = ref({
pageNum: 1,
pageSize: 100,
})
const handleQuery = async () => {
const data = await getPriceFinallReviewList(queryParams.value, paging.value)
tableData.value = data.rows
total.value = data.total
loading.value = false
}
onMounted(async () => {
await handleQuery()
})
</script>

View File

@ -0,0 +1,107 @@
<template>
<uni-drawer ref="drawerContainerRef" :width="width" mode="right">
<uni-nav-bar
:border="false"
:fixed="true"
left-icon="left"
status-bar
title="账期审核"
@clickLeft="hideDrawer"
/>
<uni-collapse ref="collapse">
<uni-collapse-item
v-for="row in tableData"
:key="row.creditHistId"
:title="row.shortName"
open
>
<view class="padding">
<view class="context">
<view class="label">
<text>货主:</text>
<text>{{ row.companyName }}</text>
</view>
<view class="label">
<text>状态:</text>
<text>{{ row.state }}</text>
</view>
<view class="label">
<text>老账期:</text>
<text>{{ row.oldCreditPeriod }}</text>
</view>
<view class="label">
<text>新账期:</text>
<text>{{ row.creditPeriod }}</text>
</view>
<view class="label">
<text>申请日期:</text>
<text>{{ row.addDate }}</text>
</view>
<view class="label">
<text></text>
<button class="mini-btn" size="mini" type="primary" @click="handleReview(row)">查看</button>
</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</uni-drawer>
<AccountPeriodReview ref="AccountPeriodReviewRef" @refresh="handleQuery"/>
</template>
<script setup>
import {defineExpose, ref} from 'vue'
import {getLastPaymentAndQuotaList} from "../../../../api/AccountPricePreliminaryRreview.js";
import AccountPeriodReview from "./components/AccountPeriodReview.vue";
//
defineOptions({
name: 'AccountPeriod'
})
const width = ref(document.documentElement.clientWidth || document.body.clientWidth)
const id = ref('')
const queryParams = ref({})
const drawerContainerRef = ref()
const AccountPeriodReviewRef = ref()
const tableData = ref([])
const total = ref()
const paging = ref({
pageNum: 1,
pageSize: 100,
})
const handleQuery = async () => {
uni.showLoading({
title: '加载中'
});
const {rows, total:count} = await getLastPaymentAndQuotaList(queryParams.value, paging.value)
tableData.value = rows
total.value = count
uni.hideLoading()
}
const openDrawer = async (item) => {
drawerContainerRef.value.open()
queryParams.value = {
userId: item.userId,
type: 0
}
await handleQuery()
}
defineExpose({openDrawer})
const hideDrawer = () => {
drawerContainerRef.value.close()
}
const handleReview = (data) => {
AccountPeriodReviewRef.value.openDrawer(data)
}
</script>

View File

@ -0,0 +1,106 @@
<template>
<uni-drawer ref="drawerContainerRef" :width="width" mode="right">
<uni-nav-bar
:border="false"
:fixed="true"
left-icon="left"
status-bar
title="额度审核"
@clickLeft="hideDrawer"
/>
<uni-collapse ref="collapse">
<uni-collapse-item
v-for="row in tableData"
:key="row.creditHistId"
:title="row.shortName"
open
>
<view class="padding">
<view class="context">
<view class="label">
<text>货主:</text>
<text>{{ row.companyName }}</text>
</view>
<view class="label">
<text>状态:</text>
<text>{{ row.state }}</text>
</view>
<view class="label">
<text>老额度(万元) :</text>
<text>{{ row.oldCreditLine }}</text>
</view>
<view class="label">
<text>新额度(万元):</text>
<text>{{ row.creditLine }}</text>
</view>
<view class="label">
<text>申请日期:</text>
<text>{{ row.addDate }}</text>
</view>
<view class="label">
<text></text>
<button class="mini-btn" size="mini" type="primary" @click="handleReview(row)">查看</button>
</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</uni-drawer>
<CreditLimitReview ref="CreditLimitReviewRef" @refresh="handleQuery"/>
</template>
<script setup>
import {defineExpose, defineOptions, ref} from 'vue'
import {getLastPaymentAndQuotaList} from "../../../../api/AccountPricePreliminaryRreview.js";
import CreditLimitReview from "./components/CreditLimitReview.vue";
//
defineOptions({
name: "CreditLimit"
})
const width = ref(document.documentElement.clientWidth || document.body.clientWidth)
const queryParams = ref({})
const tableData = ref([])
const total = ref()
const paging = ref({
pageNum: 1,
pageSize: 100,
})
const drawerContainerRef = ref()
const CreditLimitReviewRef = ref()
const handleQuery = async () => {
uni.showLoading({
title: '加载中'
});
const {rows, total: count} = await getLastPaymentAndQuotaList(queryParams.value, paging.value)
tableData.value = rows
total.value = count
uni.hideLoading()
}
const openDrawer = async (item) => {
drawerContainerRef.value.open()
queryParams.value = {
userId: item.userId,
type: 1
}
await handleQuery()
}
defineExpose({openDrawer})
const hideDrawer = () => {
drawerContainerRef.value.close()
}
const handleReview = (data) => {
CreditLimitReviewRef.value.openDrawer(data)
}
</script>

View File

@ -0,0 +1,115 @@
<template>
<uni-drawer ref="drawerContainerRef" :width="width" mode="right">
<uni-nav-bar
:border="false"
:fixed="true"
left-icon="left"
status-bar
title="价格审核"
@clickLeft="hideDrawer"
/>
<uni-collapse ref="collapse">
<uni-collapse-item
v-for="row in tableData"
:key="row.creditHistId"
:title="`商品名称: ${row.shortName}`"
open
>
<view class="padding">
<view class="context">
<view class="label">
<text>发货仓库:</text>
<text>{{ row.warehouseName }}</text>
</view>
<view class="label">
<text>新考核价(,含税):</text>
<text>{{ row.checkPrice }}</text>
</view>
<view class="label">
<text>新开票价(,含税):</text>
<text>{{ row.invoicePrice }}</text>
</view>
<view class="label">
<text>原考核价(,无税):</text>
<text>{{ row.oldCheckPrice }}</text>
</view>
<view class="label">
<text>原开票价(,无税):</text>
<text>{{ row.oldInvoicePrice }}</text>
</view>
<view class="label">
<text>状态:</text>
<text>{{ row.state }}</text>
</view>
<view class="label">
<text>更新日期:</text>
<text>{{ row.updateTime }}</text>
</view>
<view class="label">
<text></text>
<button class="mini-btn" size="mini" type="primary" @click="handleReview(row)">查看</button>
</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</uni-drawer>
<PriceReview ref="PriceReviewRef" @refresh="handleQuery"/>
</template>
<script setup>
import {defineExpose, defineOptions, ref} from 'vue'
import {getPriceChangeReviewList} from '../../../../api/AccountPricePreliminaryRreview.js'
import PriceReview from "./components/PriceReview.vue";
//
defineOptions({
name: "Price"
})
const width = ref(document.documentElement.clientWidth || document.body.clientWidth)
const queryParams = ref({})
const tableData = ref([])
const total = ref()
const paging = ref({
pageNum: 1,
pageSize: 100,
})
const drawerContainerRef = ref()
const PriceReviewRef = ref()
const handleQuery = async () => {
uni.showLoading({
title: '加载中'
});
const {rows, total: count} = await getPriceChangeReviewList(queryParams.value, paging.value)
tableData.value = rows
total.value = count
uni.hideLoading()
}
const openDrawer = async (item) => {
drawerContainerRef.value.open()
queryParams.value = {
userId: item.userId,
type: 1
}
await handleQuery()
}
defineExpose({openDrawer})
const hideDrawer = () => {
drawerContainerRef.value.close()
}
const handleReview = (data) => {
PriceReviewRef.value.openDrawer(data)
}
</script>

View File

@ -0,0 +1,154 @@
<template>
<uni-drawer ref="drawerContainerRef" :width="width" mode="right">
<uni-nav-bar
:border="false"
:fixed="true"
left-icon="left"
status-bar
title="账期审核"
@clickLeft="hideDrawer"
/>
<view class="padding">
<uni-section :subTitle="queryParams.userName" title="商业公司名称:" type="line"/>
<uni-section :subTitle="queryParams.companyName" title="货主:" type="line"/>
<uni-section
:subTitle="`${queryParams.creditPeriod} - 现有信用账期:${queryParams.oldCreditPeriod}`"
:title="`${onCompanySelect(queryParams.companyId)}:`"
type="line"
/>
<uni-section :subTitle="queryParams.remark" title="备注:" type="line"/>
<uni-section class="margin-bottom" title="回退原因:" type="line">
<uni-easyinput v-model="queryParams.backReasonCredit" placeholder="请输入回退内容"/>
</uni-section>
<view class="flex">
<button class="mini-btn" size="mini" type="primary" @click="handleBack">回退</button>
<button class="mini-btn" size="mini" type="default" @click="handleSubmit">初审通过</button>
</view>
</view>
</uni-drawer>
</template>
<script setup>
import {defineEmits, defineExpose, ref} from 'vue'
import {putBackDataLastPaymentOrQuota} from "../../../../../api/AccountPricePreliminaryRreview";
//
defineOptions({
name: 'AccountPeriodReview'
})
const emit = defineEmits(['refresh'])
const width = ref(document.documentElement.clientWidth || document.body.clientWidth)
const queryParams = ref({})
const drawerContainerRef = ref()
const tableData = ref([])
const total = ref(0)
const paging = ref({
pageNum: 1,
pageSize: 100,
})
//
const onCompanySelect = (type) => {
switch (type) {
case '1':
return 'ZOP信用期限(天)'
case '2':
return 'GOP信用期限(天)'
case '3':
return 'LOP信用期限(天)'
case '4':
return 'HOP信用期限(天)'
default:
return '';
}
}
const openDrawer = async (data) => {
drawerContainerRef.value.open()
queryParams.value = data
}
defineExpose({openDrawer})
const hideDrawer = () => {
drawerContainerRef.value.close()
}
const handleBack = () => {
if (!queryParams.value.backReasonCredit) {
return uni.showToast({
title: '请填写回退内容',
icon: 'none',
})
}
uni.showModal({
title: '提示',
content: '您确定是否要回退记录?',
success: async function (res) {
if (res.confirm) {
uni.showLoading({
title: '加载中'
});
await putBackDataLastPaymentOrQuota({
creditHistId: queryParams.value.creditHistId,
});
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
uni.hideLoading()
hideDrawer()
emit('refresh')
}
}
})
}
const handleSubmit = () => {
uni.showModal({
title: '提示',
content: '您确认要进行审核通过吗?',
success: async function (res) {
if (res.confirm) {
uni.showLoading({
title: '加载中'
});
await directorLastReviewPayment({
creditHistId: queryParams.value.creditHistId
})
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
uni.hideLoading()
hideDrawer()
emit('refresh')
}
}
})
}
</script>

View File

@ -0,0 +1,156 @@
<template>
<uni-drawer ref="drawerContainerRef" :width="width" mode="right">
<uni-nav-bar
:border="false"
:fixed="true"
left-icon="left"
status-bar
title="额度审核"
@clickLeft="hideDrawer"
/>
<view class="padding">
<uni-section :subTitle="queryParams.userName" title="商业公司名称:" type="line"/>
<uni-section :subTitle="queryParams.companyName" title="货主:" type="line"/>
<uni-section
:subTitle="`${queryParams.creditLine} - 现有信用账期:${queryParams.oldCreditLine || 0}`"
:title="`${onCompanySelect(queryParams.companyId)}:`"
type="line"
/>
<uni-section :subTitle="queryParams.remark" title="备注:" type="line"/>
<uni-section class="margin-bottom" title="回退原因:" type="line">
<uni-easyinput v-model="queryParams.backReasonCredit" placeholder="请输入回退内容"/>
</uni-section>
<view class="flex">
<button class="mini-btn" size="mini" type="primary" @click="handleBack">回退</button>
<button class="mini-btn" size="mini" type="default" @click="handleSubmit">额度终审</button>
</view>
</view>
</uni-drawer>
</template>
<script setup>
import {defineEmits, defineExpose, defineOptions, ref} from 'vue'
import {
directorLastReviewQuota,
putBackDataLastPaymentOrQuota
} from "../../../../../api/AccountPricePreliminaryRreview";
//
defineOptions({
name: 'CreditLimitReview'
})
const emit = defineEmits(['refresh'])
const width = ref(document.documentElement.clientWidth || document.body.clientWidth)
const queryParams = ref({})
const drawerContainerRef = ref()
const tableData = ref([])
const total = ref(0)
const paging = ref({
pageNum: 1,
pageSize: 100,
})
//
const onCompanySelect = (type) => {
switch (type) {
case '1':
return 'ZOP信用期限(万元)'
case '2':
return 'GOP信用期限(万元)'
case '3':
return 'LOP信用期限(万元)'
case '4':
return 'HOP信用期限(万元)'
default:
return '';
}
}
const openDrawer = (data) => {
drawerContainerRef.value.open()
queryParams.value = data
}
defineExpose({openDrawer})
const hideDrawer = () => {
drawerContainerRef.value.close()
}
const handleBack = () => {
if (!queryParams.value.backReasonCredit) {
return uni.showToast({
title: '请填写回退内容',
icon: 'none',
})
}
uni.showModal({
title: '提示',
content: '您确定是否要回退记录?',
success: async function (res) {
if (res.confirm) {
uni.showLoading({
title: '加载中'
});
await putBackDataLastPaymentOrQuota({
creditHistId: queryParams.value.creditHistId,
});
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
uni.hideLoading()
hideDrawer()
emit('refresh')
}
}
})
}
const handleSubmit = () => {
uni.showModal({
title: '提示',
content: '您确认要进行审核通过吗?',
success: async function (res) {
if (res.confirm) {
uni.showLoading({
title: '加载中'
});
await directorLastReviewQuota({
creditHistId: queryParams.value.creditHistId
})
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
uni.hideLoading()
hideDrawer()
emit('refresh')
}
}
})
}
</script>

View File

@ -0,0 +1,169 @@
<template>
<uni-drawer ref="drawerContainerRef" :width="width" mode="right">
<uni-nav-bar
:border="false"
:fixed="true"
left-icon="left"
status-bar
title="价格审核"
@clickLeft="hideDrawer"
/>
<view class="padding">
<uni-section :subTitle="queryParams.cbusinessname" title="商业公司名称:" type="line"/>
<uni-section :subTitle="queryParams.goodsName" title="商品:" type="line"/>
<uni-section :subTitle="queryParams.warehouseName" title="发货仓库:" type="line"/>
<uni-section :subTitle="queryParams.execDate" title="新价格执行日期:" type="line"/>
<uni-section :subTitle="`${queryParams.checkPrice} - 原考核价(元,含税)${queryParams.oldCheckPrice ?? 0}`"
title="考核价(元,含税):" type="line"/>
<uni-section :subTitle="`${queryParams.invoicePrice} - 原销售价(元,含税)${queryParams.oldInvoicePrice ?? 0}`"
title="销售价(元,含税):" type="line"/>
<uni-section :subTitle="`${queryParams.middlePrice} - 原中标价(元,含税)${queryParams.oldMiddlePrice ?? 0}`"
title="中标价(元,含税):" type="line"/>
<uni-section :subTitle="queryParams.taxRate" title="税率:" type="line"/>
<uni-section :subTitle="queryParams.taxLessPrice" title="销售价(元,无税):" type="line"/>
<uni-section :subTitle="queryParams.remark" title="备注:" type="line"/>
<uni-section class="margin-bottom" title="回退原因:" type="line">
<uni-easyinput v-model="queryParams.backReasonCredit" placeholder="请输入回退内容"/>
</uni-section>
<view class="flex">
<button class="mini-btn" size="mini" type="primary" @click="handleBack">回退</button>
<button class="mini-btn" size="mini" type="default" @click="handleSubmit">额度终审</button>
</view>
</view>
</uni-drawer>
</template>
<script setup>
import {defineEmits, defineExpose, defineOptions, ref} from 'vue'
import {
directorLastReviewQuota,
directorReviewPrice,
putBackDataLastPaymentOrQuota,
putBackDataPrice
} from "../../../../../api/AccountPricePreliminaryRreview";
//
defineOptions({
name: 'PriceReview'
})
const emit = defineEmits(['refresh'])
const width = ref(document.documentElement.clientWidth || document.body.clientWidth)
const queryParams = ref({})
const drawerContainerRef = ref()
const tableData = ref([])
const total = ref(0)
const paging = ref({
pageNum: 1,
pageSize: 100,
})
//
const onCompanySelect = (type) => {
switch (type) {
case '1':
return 'ZOP信用期限(万元)'
case '2':
return 'GOP信用期限(万元)'
case '3':
return 'LOP信用期限(万元)'
case '4':
return 'HOP信用期限(万元)'
default:
return '';
}
}
const openDrawer = (data) => {
drawerContainerRef.value.open()
queryParams.value = {
...data,
cbusinessname: data.userName
}
}
defineExpose({openDrawer})
const hideDrawer = () => {
drawerContainerRef.value.close()
}
const handleBack = () => {
if (!queryParams.value.backReasonCredit) {
return uni.showToast({
title: '请填写回退内容',
icon: 'none',
})
}
uni.showModal({
title: '提示',
content: '您确定是否要回退记录?',
success: async function (res) {
if (res.confirm) {
uni.showLoading({
title: '加载中'
});
await putBackDataPrice({
backReasonCredit: queryParams.value.backReasonCredit,
businessGoodsHistId: queryParams.value.businessGoodsHistId,
});
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
uni.hideLoading()
hideDrawer()
emit('refresh')
}
}
})
}
const handleSubmit = () => {
uni.showModal({
title: '提示',
content: '您确认要进行审核通过吗?',
success: async function (res) {
if (res.confirm) {
uni.showLoading({
title: '加载中'
});
await directorReviewPrice({
businessGoodsHistId: queryParams.value.businessGoodsHistId
})
uni.showToast({
title: '操作成功',
icon: 'none',
duration: 2000
});
uni.hideLoading()
hideDrawer()
emit('refresh')
}
}
})
}
</script>

View File

@ -0,0 +1,129 @@
<template>
<view class="container">
<MBCard>
<uni-forms ref="baseForm" :modelValue="queryParams">
<uni-forms-item label="地域">
<Area v-model="queryParams.deptId" @change="handleQuery"/>
</uni-forms-item>
<uni-forms-item label="商业公司">
<BusinessCompany
v-model="queryParams.businessName"
@change="handleQuery"
/>
</uni-forms-item>
</uni-forms>
</MBCard>
<uni-table ref="table" :loading="loading" emptyText="暂无更多数据" stripe>
<uni-tr>
<uni-th align="center" width="50">序号</uni-th>
<uni-th align="left" width="180">公司名称</uni-th>
<uni-th align="left" width="50">地域</uni-th>
<uni-th width="100">账期审核</uni-th>
<uni-th width="100">额度审核</uni-th>
<uni-th width="100">价格审核</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in tableData" :key="index">
<uni-td>{{ index + 1 }}</uni-td>
<uni-td>{{ item.userName }}</uni-td>
<uni-td>{{ item.areaName }}</uni-td>
<uni-td>
<view v-if="item.zhangqi > 0">
<button
class="uni-button"
size="mini"
type="submit"
@click="handleShowAccountPeriod(item)"
>编辑
</button>
</view>
</uni-td>
<uni-td>
<view v-if="item.edu > 0">
<button
class="uni-button"
size="mini"
type="submit"
@click="handleShowCreditLimit(item)"
>编辑
</button>
</view>
</uni-td>
<uni-td>
<view v-if="item.bg > 0">
<button
class="uni-button"
size="mini"
type="submit"
@click="handleShowPrice(item)"
>编辑
</button>
</view>
</uni-td>
</uni-tr>
</uni-table>
<!-- 账期审核 -->
<AccountPeriod ref="AccountPeriodRef"/>
<!-- 额度审核 -->
<CreditLimit ref="CreditLimitRef"/>
<!-- 价格审核 -->
<Price ref="PriceRef"/>
</view>
</template>
<script setup>
import {defineOptions, onMounted, ref} from "vue"
import Area from "../../../components/Area.vue";
import MBCard from "../../../components/MB/MBCard.vue";
import UniFormsItem from "../../../uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue";
import BusinessCompany from "../../../components/BusinessCompany.vue";
import UniForms from "../../../uni_modules/uni-forms/components/uni-forms/uni-forms.vue";
import {getPricePreliminaryReviewList} from "../../../api/AccountPricePreliminaryRreview";
import AccountPeriod from "./children/AccountPeriod.vue";
import CreditLimit from "./children/CreditLimit.vue";
import Price from "./children/Price.vue";
defineOptions({
name: "AccountPricePreliminaryRreview"
})
const loading = ref(true)
const queryParams = ref({})
const tableData = ref([])
const total = ref(0)
const paging = ref({
pageNum: 1,
pageSize: 100,
})
const AccountPeriodRef = ref()
const CreditLimitRef = ref()
const PriceRef = ref()
const handleQuery = async () => {
const data = await getPricePreliminaryReviewList(queryParams.value, paging.value)
tableData.value = data.rows
total.value = data.total
loading.value = false
}
onMounted(async () => {
await handleQuery()
})
const handleShowAccountPeriod = (item) => {
AccountPeriodRef.value.openDrawer(item)
}
const handleShowCreditLimit = (item) => {
CreditLimitRef.value.openDrawer(item)
}
const handleShowPrice = (item) => {
PriceRef.value.openDrawer(item)
}
</script>

View File

@ -28,15 +28,12 @@
@confirm="getTableData"/> @confirm="getTableData"/>
</uni-forms-item> </uni-forms-item>
<uni-forms-item label="商业公司" v-if="userType === '00'" > <uni-forms-item label="商业公司" v-if="userType === '00'" >
<uni-data-select <!-- <input-->
v-model="queryParams.userid" <!-- v-model="queryParams.businessCompany"-->
placeholder="请输入商业公司" <!-- class="uni-input custom-input"-->
:clear="true" <!-- placeholder="请输入商业公司"-->
:localdata="businessCompanyList" <!-- @confirm="getTableData"/>-->
text-field="value" <BusinessCompany v-model="queryParams.businessCompany" @change="getTableData"/>
value-field="label"
@change="getTableData"
></uni-data-select>
</uni-forms-item> </uni-forms-item>
</uni-forms> </uni-forms>
<button <button
@ -50,7 +47,7 @@
<MBLoading v-if="loading"/> <MBLoading v-if="loading"/>
<view v-else> <view v-else>
<ListItem :items="tableData" @refresh="getTableData" :order-type-list="orderTypeList" :user-type="userType" /> <ListItem :items="tableData" @refresh="getTableData" />
<MBPagination <MBPagination
v-if="total > 0" v-if="total > 0"
v-model:limit="paging.pageSize" v-model:limit="paging.pageSize"
@ -63,7 +60,7 @@
</template> </template>
<script setup> <script setup>
import {listproductList, listsalemain,getBusinessList} from "../../../api/orderManager/index.js" import {listproductList, listsalemain} from "../../../api/orderManager/index.js"
import {computed, getCurrentInstance, onMounted, ref} from "vue" import {computed, getCurrentInstance, onMounted, ref} from "vue"
import {getDicts} from "../../../api/system/dict/data.js" import {getDicts} from "../../../api/system/dict/data.js"
import {useOrderManagerStore} from "../../../store/modules/orderManager.js" import {useOrderManagerStore} from "../../../store/modules/orderManager.js"
@ -73,6 +70,7 @@ import MBPagination from "../../../components/MB/MBPagination.vue";
import MBLoading from "../../../components/MB/MBLoading.vue"; import MBLoading from "../../../components/MB/MBLoading.vue";
import ListItem from "./ListItem.vue"; import ListItem from "./ListItem.vue";
import { getUserProfile } from "@/api/system/user" import { getUserProfile } from "@/api/system/user"
import BusinessCompany from "../../../components/BusinessCompany.vue";
const userType = ref() const userType = ref()
@ -104,7 +102,7 @@ const queryParams = ref({
const stateList = ref([]) const stateList = ref([])
const companyOptions = ref([]) const companyOptions = ref([])
const businessCompanyList = ref([])
// //
const tableData = ref([]) const tableData = ref([])
@ -114,7 +112,6 @@ onMounted(async () => {
loading.value = true loading.value = true
await getDictData() await getDictData()
await getDeptLists() await getDeptLists()
await getBussinessLists()
await getUser() await getUser()
await getTableData() await getTableData()
} finally { } finally {
@ -166,7 +163,7 @@ const getTableData = async () => {
loading.value = false loading.value = false
} }
} }
//
const getDeptLists = async () => { const getDeptLists = async () => {
try { try {
const res = await listproductList() const res = await listproductList()
@ -180,38 +177,7 @@ const getDeptLists = async () => {
console.error('获取部门列表失败:', error) console.error('获取部门列表失败:', error)
} }
} }
//
const getBussinessLists = async () => {
try {
const res = await getBusinessList({
isUnit: 0,
queryParam:{
areaId: 0,
}
})
businessCompanyList.value = res.data.map(item => {
return {
value: item.userid,
text: item.businessname
}
})
} catch (error) {
console.error('获取商业公司列表失败:', error)
}
}
//
const selectedCompanyText = ref('')
//
const handleCompanySelect = (text) => {
selectedCompanyText.value = text
// ID
const company = businessCompanyList.value.find(item => item.text === text)
queryParams.value.userid = company ? company.value : ''
getTableData()
}
// //
function filtertableData(e) { function filtertableData(e) {
console.log("筛选条件变化:", e) console.log("筛选条件变化:", e)

View File

@ -0,0 +1,63 @@
<template>
<uni-card
v-for="(item,index) in items"
:key="item.saleid"
:class="index % 2 === 0 ? 'card-even' : 'card-odd'"
:extra="item.contractcode"
:title="item.user_name"
style="margin: 0;margin-bottom: 20px"
@click="handleDetail(item)"
>
<view class="context">
<view class="label">
<text>货主:</text>
<text>{{ item.companyname }}</text>
</view>
<view class="label">
<text>发货仓库:</text>
<text>{{ item.warehousename }}</text>
</view>
<view class="label">
<text>订单金额:</text>
<text>{{ formatPrice(item.contractmoney) }}</text>
</view>
<view class="label">
<text>补差金额:</text>
<text>{{ formatPrice(item.piaokou) }}</text>
</view>
<view class="label">
<text>制单日期:</text>
<text>{{ item.addDate }}</text>
</view>
<view class="label">
<text>执行日期:</text>
<text>{{ item.execDate }}</text>
</view>
<view class="label">
<text>支付方式:</text>
<text>{{ item.ispaynow }}</text>
</view>
<view class="label">
<text>状态:</text>
<text>{{ item.stateText }}</text>
</view>
</view>
</uni-card>
</template>
<script setup>
import {defineOptions, defineProps, getCurrentInstance} from 'vue'
import UniCard from "../../../uni_modules/uni-card/components/uni-card/uni-card.vue";
import {formatPrice} from "../../../utils/utils";
defineOptions({
name: "ListItem"
})
const {proxy} = getCurrentInstance()
const props = defineProps(['items'])
const handleDetail = (raw) => {
// proxy.$tab.navigateTo(`/pages/work/FinancialApproval/OrderDetail?id=${raw.saleid}`)
}
</script>

View File

@ -0,0 +1,81 @@
<template>
<view class="container">
<MBCard>
<uni-forms ref="baseForm" :modelValue="queryParams">
<uni-forms-item label="合同编号">
<uni-easyinput
v-model="queryParams.contractCode"
errorMessage
placeholder="请输入合同编号"
trim="all"
@input="handleQuery"
/>
</uni-forms-item>
<uni-forms-item label="地域">
<Area v-model="queryParams.areaId" @change="handleQuery"/>
</uni-forms-item>
<uni-forms-item label="商业公司">
<BusinessCompany v-model="queryParams.params.userId" :areaId="queryParams.areaId"
@change="handleQuery"/>
</uni-forms-item>
<uni-forms-item label="货主">
<ProductionUnit v-model="queryParams.companyId" @change="handleQuery"/>
</uni-forms-item>
</uni-forms>
</MBCard>
<MBLoading v-if="loading"/>
<view v-else>
<ListItem v-if="tableData.length > 0" :items="tableData"/>
<MBPagination
v-if="total > 0"
v-model:limit="paging.pageSize"
v-model:page="paging.pageNum"
:total="total"
@pagination="handleQuery"
/>
</view>
</view>
</template>
<script setup>
import MBCard from "../../../components/MB/MBCard.vue";
import ProductionUnit from "../../../components/ProductionUnit/ProductionUnit.vue";
import UniForms from "../../../uni_modules/uni-forms/components/uni-forms/uni-forms.vue";
import UniFormsItem from "../../../uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue";
import {onMounted, ref} from 'vue'
import BusinessCompany from "../../../components/BusinessCompany.vue";
import Area from "../../../components/Area.vue";
import MBLoading from "../../../components/MB/MBLoading.vue";
import MBPagination from "../../../components/MB/MBPagination.vue";
import ListItem from "./ListItem.vue";
import {getReportOrderQuery} from "../../../api/order";
const queryParams = ref({
params: {}
})
const loading = ref(true)
const total = ref(0)
const paging = ref({
pageNum: 1,
pageSize: 20,
isAsc: 'descending',
orderByColumn: 'adddate'
})
const tableData = ref([])
const handleQuery = async () => {
loading.value = true
const data = await getReportOrderQuery(queryParams.value, paging.value)
total.value = data.total
tableData.value = data.rows
loading.value = false
}
onMounted(async () => {
await handleQuery()
})
</script>

View File

@ -39,6 +39,29 @@
<text class="text">商务审批</text> <text class="text">商务审批</text>
</view> </view>
</uni-grid-item> </uni-grid-item>
<uni-grid-item @click="gotoOrderSearchQuery">
<view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">订单综合查询</text>
</view>
</uni-grid-item>
</uni-grid>
</view>
<uni-section title="开户管理" type="line" />
<view class="grid-body">
<uni-grid :column="4" :showBorder="false" @change="changeGrid">
<uni-grid-item @click="navigateTo('/pages/work/AccountPricePreliminaryRreview/index')">
<view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">账期价格初审</text>
</view>
</uni-grid-item>
<uni-grid-item @click="navigateTo('/pages/work/AccountPriceFinallReview/index')">
<view class="grid-item-box">
<uni-icons size="30" type="person-filled"></uni-icons>
<text class="text">账期价格复审</text>
</view>
</uni-grid-item>
</uni-grid> </uni-grid>
</view> </view>
@ -100,6 +123,7 @@
<script setup> <script setup>
import {getCurrentInstance, ref} from "vue" import {getCurrentInstance, ref} from "vue"
import {navigateTo} from "../../utils/utils";
const {proxy} = getCurrentInstance() const {proxy} = getCurrentInstance()
const current = ref(0) const current = ref(0)
@ -143,6 +167,12 @@ const gotoOrderManager = () => {
}) })
} }
const gotoOrderSearchQuery = () => {
uni.navigateTo({
url: '/pages/work/OrderSearchQuery/index'
})
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

BIN
static/images/profile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

View File

@ -1,12 +1,12 @@
import { defineStore } from 'pinia' import {defineStore} from 'pinia'
import { ref } from 'vue' import {ref} from 'vue'
import config from '@/config' import config from '@/config'
import storage from '@/utils/storage' import storage from '@/utils/storage'
import constant from '@/utils/constant' import constant from '@/utils/constant'
import { isHttp, isEmpty } from "@/utils/validate" import {isEmpty, isHttp} from "@/utils/validate"
import { getInfo, login, logout } from '@/api/login' import {getInfo, login, logout} from '@/api/login'
import { getToken, removeToken, setToken } from '@/utils/auth' import {getToken, removeToken, setToken} from '@/utils/auth'
import defAva from '@/static/images/profile.jpg' import defAva from '@/static/images/profile.png'
const baseUrl = config.baseUrl const baseUrl = config.baseUrl
@ -17,6 +17,7 @@ export const useUserStore = defineStore('user', () => {
const avatar = ref(storage.get(constant.avatar)) const avatar = ref(storage.get(constant.avatar))
const roles = ref(storage.get(constant.roles)) const roles = ref(storage.get(constant.roles))
const permissions = ref(storage.get(constant.permissions)) const permissions = ref(storage.get(constant.permissions))
const userInfo = ref(storage.get(constant.userInfo))
const SET_TOKEN = (val) => { const SET_TOKEN = (val) => {
token.value = val token.value = val
@ -42,6 +43,11 @@ export const useUserStore = defineStore('user', () => {
storage.set(constant.permissions, val) storage.set(constant.permissions, val)
} }
const SET_USER_INFO = (val) => {
userInfo.value = val
storage.set(constant.userInfo, val)
}
// 登录 // 登录
const loginAction = (userInfo) => { const loginAction = (userInfo) => {
const username = userInfo.username.trim() const username = userInfo.username.trim()
@ -79,6 +85,7 @@ export const useUserStore = defineStore('user', () => {
SET_ID(userid) SET_ID(userid)
SET_NAME(username) SET_NAME(username)
SET_AVATAR(avatar) SET_AVATAR(avatar)
SET_USER_INFO(user)
resolve(res) resolve(res)
}).catch(error => { }).catch(error => {
reject(error) reject(error)
@ -109,6 +116,7 @@ export const useUserStore = defineStore('user', () => {
avatar, avatar,
roles, roles,
permissions, permissions,
userInfo,
SET_AVATAR, SET_AVATAR,
login: loginAction, login: loginAction,
getInfo: getInfoAction, getInfo: getInfoAction,

View File

@ -3,7 +3,8 @@ const constant = {
id: 'user_id', id: 'user_id',
name: 'user_name', name: 'user_name',
roles: 'user_roles', roles: 'user_roles',
permissions: 'user_permissions' permissions: 'user_permissions',
} userInfo: 'userInfo'
}
export default constant export default constant

File diff suppressed because it is too large Load Diff