甘浙APP

This commit is contained in:
bb_pan 2025-05-27 14:06:10 +08:00
parent 008a19695f
commit e2821c638f
26 changed files with 1067 additions and 279 deletions

View File

@ -1,5 +1,5 @@
{ {
"tabWidth": 4, "tabWidth": 2,
"singleQuote": true, "singleQuote": true,
"semi": false, "semi": false,
"printWidth": 100, "printWidth": 100,

View File

@ -12,7 +12,7 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationBarTitleText": "业务办理" "navigationBarTitleText": "首页"
} }
}, },
// //
@ -36,6 +36,20 @@
"navigationBarTitleText": "我的" "navigationBarTitleText": "我的"
} }
}, },
//
{
"path": "pages/toolsLease/toolsLease",
"style": {
"navigationStyle": "custom"
}
},
// -
{
"path": "pages/toolsLease/toolsLeaseAdd",
"style": {
"navigationStyle": "custom"
}
},
/* */ /* */
// //
{ {
@ -548,22 +562,22 @@
"list": [ "list": [
{ {
"pagePath": "pages/index/index", "pagePath": "pages/index/index",
"text": "业务办理", "text": "首页",
"iconPath": "static/yeWuBanLi.png", "iconPath": "static/home.png",
"selectedIconPath": "static/yeWuBanLiSelected.png" "selectedIconPath": "static/homeSelected.png"
},
{
"pagePath": "pages/work/index",
"text": "工作台",
"iconPath": "static/work.png",
"selectedIconPath": "static/workSelected.png"
},
{
"pagePath": "pages/search/index",
"text": "查询",
"iconPath": "static/search.png",
"selectedIconPath": "static/searchSelected.png"
}, },
// {
// "pagePath": "pages/work/index",
// "text": "工作台",
// "iconPath": "static/work.png",
// "selectedIconPath": "static/workSelected.png"
// },
// {
// "pagePath": "pages/search/index",
// "text": "查询",
// "iconPath": "static/search.png",
// "selectedIconPath": "static/searchSelected.png"
// },
{ {
"pagePath": "pages/my/index", "pagePath": "pages/my/index",
"text": "我的", "text": "我的",

View File

@ -2,15 +2,19 @@
<view class="accept page-common"> <view class="accept page-common">
<div class="card"> <div class="card">
<uni-forms :model="formData" ref="form" label-width="200rpx" :rule="rules.value" :border="true" > <uni-forms :model="formData" ref="form" label-width="200rpx" :rule="rules.value" :border="true" >
<uni-forms-item label="领用单位" name="unitId" required> <uni-forms-item label="领用班组" name="teamId" required>
<eselect <uni-data-select v-model="formData.teamId"
placeholder="请选择领用班组"
:localdata="unitList" @change="getUnit" >
</uni-data-select>
<!-- <eselect
style="width: 100%; height: 90rpx" style="width: 100%; height: 90rpx"
v-model="formData.unitId" v-model="formData.unitId"
ref="treeSelect" ref="treeSelect"
:options="unitList" :options="unitList"
@change="getProject" @change="getProject"
@clear="clearUnit" @clear="clearUnit"
></eselect> ></eselect> -->
</uni-forms-item> </uni-forms-item>
<uni-forms-item label="领用工程" name="proId" required> <uni-forms-item label="领用工程" name="proId" required>
<eselect <eselect
@ -22,9 +26,9 @@
@clear="clearPro" @clear="clearPro"
></eselect> ></eselect>
</uni-forms-item> </uni-forms-item>
<uni-forms-item label="采购申请编号" name="applyCode" required> <!-- <uni-forms-item label="采购申请编号" name="applyCode" required>
<uni-easyinput v-model="formData.applyCode" maxlength="10" placeholder="请输入领料人" /> <uni-easyinput v-model="formData.applyCode" maxlength="10" placeholder="请输入采购申请编号" />
</uni-forms-item> </uni-forms-item> -->
<uni-forms-item label="领料人" name="leasePerson" required> <uni-forms-item label="领料人" name="leasePerson" required>
<uni-easyinput v-model="formData.leasePerson" maxlength="10" placeholder="请输入领料人" /> <uni-easyinput v-model="formData.leasePerson" maxlength="10" placeholder="请输入领料人" />
</uni-forms-item> </uni-forms-item>
@ -137,13 +141,13 @@
import { ref, reactive } from 'vue' import { ref, reactive } from 'vue'
import eselect from '@/components/tree-select/eselect.vue' import eselect from '@/components/tree-select/eselect.vue'
import { onLoad,onReady } from '@dcloudio/uni-app' import { onLoad,onReady } from '@dcloudio/uni-app'
import { getUnitList,getProjectList,getConfigList,getLevelThreeType,insertApp,getAgreementInfoById,getListsByConfigId,getTypeDataList,leaseTask } from '../../services/back.js'; import { getBmTeamList,getProjectList,getConfigList,getLevelThreeType,insertApp,getAgreementInfoById,getListsByConfigId,getTypeDataList,leaseTask } from '@/services/back.js';
const taskInfo = ref({}) const taskInfo = ref({})
const treeSelect = ref(null) const treeSelect = ref(null)
const treeSelect2 = ref(null) const treeSelect2 = ref(null)
const formData = ref({ const formData = ref({
value: { value: {
unitId: '', teamId: '',
proId: '', proId: '',
leasePerson: '', leasePerson: '',
phone: '', phone: '',
@ -233,11 +237,22 @@ const getUnit = () => {
let obj = { let obj = {
projectId: proId.value, projectId: proId.value,
} }
getUnitList(obj) getBmTeamList()
.then((res) => { .then((res) => {
console.log(res) console.log('🚀 ~ .班组 ~ res:', res)
unitList.value = res.data // unitList.value = res.data
// getAgreement() if (res.data.rows.length > 0) {
unitList.value = res.data.rows.map(option => {
return {
value: option.id,
text: option.teamName,
}
})
} else {
unitList.value = []
}
console.log('🚀 ~ getUnit ~ unitList.value:', unitList.value)
if (unitId.value && proId.value) { if (unitId.value && proId.value) {
getAgreement() getAgreement()
} }
@ -247,20 +262,20 @@ const getUnit = () => {
}) })
} }
// //
const getProject = async (e) => { const getProject = async () => {
flagFile.value = false // flagFile.value = false
if (e.typeKey == 'fbs') { // if (e.typeKey == 'fbs') {
flagFile.value = true // flagFile.value = true
} // }
console.log('🚀 ~ getProject ~ e:', e) // console.log('🚀 ~ getProject ~ e:', e)
unitId.value = e?.id || '' // unitId.value = e?.id || ''
formData.value.unitId = e?.id || '' // formData.value.unitId = e?.id || ''
let obj = { // let obj = {
unitId: unitId.value, // unitId: unitId.value,
// "isApp":true // // "isApp":true
} // }
try { try {
const res = await getProjectList(obj); const res = await getProjectList({});
proList.value = res.data; proList.value = res.data;
// proId.value="" // proId.value=""
// treeSelect2.value.clearInput(); // treeSelect2.value.clearInput();
@ -449,19 +464,20 @@ const submitNum = async() => {
}) })
return return
} }
for (let i = 0; i < typeList.value.length; i++) { // for (let i = 0; i < typeList.value.length; i++) {
if (typeList.value[i].preNum <= 0 || !typeList.value[i].preNum) { // if (typeList.value[i].preNum <= 0 || !typeList.value[i].preNum) {
uni.showToast({ // uni.showToast({
title: '预领数量不能为空或等于0', // title: '0',
icon: 'none', // icon: 'none',
duration: 1000 // duration: 1000
}) // })
return // return
} // }
} // }
let obj = { let obj = {
"leaseApplyInfo":{ "leaseApplyInfo":{
"unitId":unitId.value, "unitId":unitId.value,
"teamId":formData.value.teamId,
"projectId":proId.value, "projectId":proId.value,
"agreementId":agreementId.value, "agreementId":agreementId.value,
"leasePerson":formData.value.leasePerson, "leasePerson":formData.value.leasePerson,

View File

@ -0,0 +1,233 @@
<template>
<view class="content">
<view class="new-purchase">
<div class="title-text">
<div></div>
<div class="purchase-title">业务办理</div>
</div>
<view
class="purchase-item"
:key="index"
@tap="onNavigateTo(item.url)"
v-for="(item, index) in newInfoList"
>
<image :src="item.iconSrc" mode="scaleToFill" />
<text>
{{ item.title }}
</text>
</view>
</view>
<!-- <view class="new-purchase">
<div class="title-text">
<div></div>
<div class="purchase-title">电子档案</div>
</div>
<view
class="purchase-item"
:key="index"
@tap="onNavigateTo(item.url)"
v-for="(item, index) in newPurchaseList"
>
<image :src="item.iconSrc" mode="scaleToFill" />
<text>
{{ item.title }}
</text>
</view>
</view>
<view class="new-purchase">
<div class="title-text">
<div></div>
<div class="purchase-title">检验预警</div>
</div>
<view
class="purchase-item"
:key="index"
@tap="onNavigateTo(item.url)"
v-for="(item, index) in pickingList"
>
<image :src="item.iconSrc" mode="scaleToFill" />
<text>
{{ item.title }}
</text>
</view>
</view> -->
<view class="new-purchase">
<div class="title-text">
<div></div>
<div class="purchase-title">综合查询</div>
</div>
<view
class="purchase-item"
:key="index"
@tap="onNavigateTo(item.url)"
v-for="(item, index) in integratedQueryList"
>
<image :src="item.iconSrc" mode="scaleToFill" />
<text>
{{ item.title }}
</text>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
//
const newInfoList = ref([
{
title: '工器具领料申请',
url: '/pages/business/leaseApply',
iconSrc: '../../static/workbench/bianMa.png',
},
// {
// title: '',
// url: '/pages/business/directApply',
// iconSrc: '../../static/workbench/panDian.png',
// },
// {
// title: '',
// url: '/pages/business/discountApply',
// iconSrc: '../../static/workbench/panDian.png',
// },
])
//
const newPurchaseList = ref([
{
title: '电子档案',
url: '',
iconSrc: '../../static/workbench/purchaseAccept.png',
},
])
//
const pickingList = ref([
{
title: '检验预期',
url: '',
iconSrc: '../../static/workbench/backCreate.png',
},
])
//
const integratedQueryList = ref([
// {
// title: '',
// url: '/pages/integratedQuery/electronicTag/index',
// iconSrc: '../../static/workbench/backCreate.png',
// },
{
title: '工器具领料记录',
url: '/pages/integratedQuery/receiveRecord/index',
iconSrc: '../../static/workbench/backCreate.png',
},
// {
// title: '',
// url: '/pages/integratedQuery/directRotationRecord/index',
// iconSrc: '../../static/workbench/backCreate.png',
// },
// {
// title: '',
// url: '/pages/integratedQuery/derateRecord/index',
// iconSrc: '../../static/workbench/backCreate.png',
// },
// {
// title: '',
// url: '/pages/integratedQuery/settleAccountsRecord/index',
// iconSrc: '../../static/workbench/backCreate.png',
// },
// {
// title: '',
// url: '/pages/integratedQuery/inUseRecord/index',
// iconSrc: '../../static/workbench/backCreate.png',
// },
])
const onNavigateTo = (url) => {
uni.navigateTo({ url })
}
</script>
<style lang="scss">
page {
overflow: hidden;
overflow-y: auto;
}
.content {
padding: 24rpx;
min-height: 100vh;
background-color: #f7f8fa;
//
.new-purchase {
background-color: #fff;
border-radius: 20rpx;
padding: 10rpx 8rpx;
margin-bottom: 8rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
display: flex;
flex-wrap: wrap;
//
.purchase-title {
font-size: 32rpx;
font-weight: 600;
color: #262626;
}
.title-text {
margin-top: 5px;
padding: 0px 0;
display: flex;
align-items: center;
// font-size: 14px;
font-weight: bold;
letter-spacing: 1px;
width: 100%;
}
.title-text div:first-child {
width: 5px;
height: 10px;
margin-right: 8px;
background-color: #2d73cf;
}
//
.purchase-item {
width: 25%;
display: flex;
flex-direction: column;
align-items: center;
padding: 4rpx 0;
transition: all 0.3s ease;
&:active {
transform: scale(0.95);
opacity: 0.8;
}
//
image {
width: 120rpx;
height: 120rpx;
margin-bottom: 2rpx;
}
//
text {
font-size: 28rpx;
color: #262626;
font-weight: 500;
}
}
}
}
</style>

View File

@ -1,233 +1,453 @@
<template> <template>
<view class="content"> <view class="page-bg">
<view class="new-purchase"> <view class="upper-user">
<div class="title-text"> <view class="user-lef">
<div></div> <image src="/src/static/bg1.jpg" mode="" />
<div class="purchase-title">业务办理</div> </view>
</div> <view class="user-rig">
<view <view>你好{{ username }}</view>
class="purchase-item" <view>欢迎使用材料站管理系统</view>
:key="index" </view>
@tap="onNavigateTo(item.url)" </view>
v-for="(item, index) in newInfoList" <view class="sliders">
<view>
<h2>{{ todayDatas.dayLeaseNum || 0 }}</h2>
<span>当日领料</span>
</view>
<view>
<h2>{{ todayDatas.dayBackNum || 0 }}</h2>
<span>当日退料</span>
</view>
<view>
<h2>{{ todayDatas.dayInputNum || 0 }}</h2>
<span>当日入库</span>
</view>
<view>
<h2>{{ todayDatas.dayOutNum || 0 }}</h2>
<span>当日出库</span>
</view>
</view>
<view class="sections">
<view v-for="(part, index) in isUsingList" :key="index" @click="jumpUrl(part.iconMark)">
<image :src="`/src/static/${part.iconMark}.png`" mode="" />
<span>{{ part.iconName }}</span>
</view>
</view>
<h4 style="width: 90%; margin: 3vh auto">业务统计</h4>
<view class="wait-do">
<view class="llsp" @click="jumpUrl('fetchExam')">
<h4>{{ waitList.leaseNum || 0 }}</h4>
<h5>工器具领料</h5>
</view>
<view class="tlsp" @click="jumpUrl('exitExam')">
<h4>{{ waitList.backNum || 0 }}</h4>
<h5>工器具退料</h5>
</view>
<view class="bfsh" @click="jumpUrl('crashExam')">
<h4>{{ waitList.scrapNum || 0 }}</h4>
<h5>材料退料</h5>
</view>
<view class="sysh" @click="jumpUrl('testExam')">
<h4>{{ waitList.trialNum || 0 }}</h4>
<h5>材料领料</h5>
</view>
</view>
<!-- <h4
style="
width: 90%;
margin: 3vh auto;
display: flex;
justify-content: space-between;
align-items: center;
"
> >
<image :src="item.iconSrc" mode="scaleToFill" /> <span>通知公告</span>
<text> <text @click="seeMore" style="color: #5297ff; font-weight: normal; font-size: 12px"
{{ item.title }} >查看更多>></text
</text>
</view>
</view>
<view class="new-purchase">
<div class="title-text">
<div></div>
<div class="purchase-title">电子档案</div>
</div>
<view
class="purchase-item"
:key="index"
@tap="onNavigateTo(item.url)"
v-for="(item, index) in newPurchaseList"
> >
<image :src="item.iconSrc" mode="scaleToFill" /> </h4>
<text>
{{ item.title }}
</text>
</view>
</view>
<view class="new-purchase">
<div class="title-text">
<div></div>
<div class="purchase-title">检验预警</div>
</div>
<view <view
class="purchase-item" class="single-notice"
v-for="(notice, index) in noticeList"
:key="index" :key="index"
@tap="onNavigateTo(item.url)" @click="noticeDetail(notice.noticeId)"
v-for="(item, index) in pickingList"
> >
<image :src="item.iconSrc" mode="scaleToFill" /> <view class="notice-lef">
<text> <image src="/src/static/notice.png" mode="" />
{{ item.title }} </view>
</text> <view class="notice-rig">
<h4>{{ notice.noticeTitle }}</h4>
<h5>{{ notice.createTime }}</h5>
</view> </view>
</view> </view>
<uni-popup ref="popup" type="center" :mask-click="false">
<view class="new-purchase"> <view class="popup">
<div class="title-text"> <view class="pop-top">
<div></div> <h4>公告({{ unreadIndex.value + 1 }}/{{ unreadList.value.length }})</h4>
<div class="purchase-title">综合查询</div> <uni-icons
</div> style="color: #aaaaaa; font-weight: bold"
type="closeempty"
@click="closePopup"
/>
</view>
<view <view
class="purchase-item" class="unread-notice"
v-for="(list, index) in unreadList"
:key="index" :key="index"
@tap="onNavigateTo(item.url)" v-show="index == unreadIndex"
v-for="(item, index) in integratedQueryList"
> >
<image :src="item.iconSrc" mode="scaleToFill" /> <view class="tit">
<text> {{ list.noticeTitle }}
{{ item.title }} </view>
</text> <view class="info">
<view>发布人{{ list.createBy }}</view>
<view>发布时间{{ list.createTime }}</view>
<view>公告内容{{ list.noticeContent }}</view>
</view>
<view
class="read-one"
v-show="unreadIndex.value < unreadList.value.length - 1"
@click="readOneNotice(list.noticeId)"
>
我知道了
</view> </view>
</view> </view>
</view>
</uni-popup> -->
</view> </view>
</template> </template>
<script setup> <script setup>
import { ref } from 'vue' import { ref, reactive, getCurrentInstance, onMounted } from 'vue'
// import { onShow, onNavigationBarButtonTap } from '@dcloudio/uni-app'
const newInfoList = ref([
{
title: '领用申请',
url: '/pages/business/leaseApply',
iconSrc: '../../static/workbench/bianMa.png',
},
{
title: '直转申请',
url: '/pages/business/directApply',
iconSrc: '../../static/workbench/panDian.png',
},
{
title: '费用减免',
url: '/pages/business/discountApply',
iconSrc: '../../static/workbench/panDian.png',
},
])
//
const newPurchaseList = ref([
{
title: '电子档案',
url: '',
iconSrc: '../../static/workbench/purchaseAccept.png',
},
])
// const { proxy } = getCurrentInstance()
const pickingList = ref([ const popup = ref(null)
{
title: '检验预期', const showLoading = ref(false)
url: '', const username = ref(uni.getStorageSync('userInfo').username)
iconSrc: '../../static/workbench/backCreate.png', const noticeList = ref([])
}, const todayDatas = reactive({
dayLeaseNum: '',
dayBackNum: '',
dayInputNum: '',
dayBackNum: '',
dayOutNum: '',
})
const waitList = reactive({
lldsp: '',
tldsp: '',
bfdsh: '',
sydsh: '',
leaseNum: '',
backNum: '',
scrapNum: '',
trialNum: '',
})
const isUsingList = ref([
{ iconMark: 'materialsLease', iconName: '材料领料' },
{ iconMark: 'materialsBack', iconName: '材料退料' },
{ iconMark: 'toolsLease', iconName: '工器具领料' },
{ iconMark: 'toolsBack', iconName: '工器具退料' },
]) ])
const percent = ref('')
const unreadList = ref([])
const unreadIndex = ref(0)
const store = ref([])
// function seeMore() {
const integratedQueryList = ref([ uni.navigateTo({
{ url: '/pages/moreNotice/moreNotice',
title: '电子标签查询', })
url: '/pages/integratedQuery/electronicTag/index',
iconSrc: '../../static/workbench/backCreate.png',
},
{
title: '领用记录',
url: '/pages/integratedQuery/receiveRecord/index',
iconSrc: '../../static/workbench/backCreate.png',
},
{
title: '直转记录',
url: '/pages/integratedQuery/directRotationRecord/index',
iconSrc: '../../static/workbench/backCreate.png',
},
{
title: '结算减免记录',
url: '/pages/integratedQuery/derateRecord/index',
iconSrc: '../../static/workbench/backCreate.png',
},
{
title: '结算记录',
url: '/pages/integratedQuery/settleAccountsRecord/index',
iconSrc: '../../static/workbench/backCreate.png',
},
{
title: '在用查询',
url: '/pages/integratedQuery/inUseRecord/index',
iconSrc: '../../static/workbench/backCreate.png',
},
])
const onNavigateTo = (url) => {
uni.navigateTo({ url })
} }
function noticeDetail(id) {
uni.navigateTo({
url: `/pages/noticeDetail/noticeDetail?noticeId=${id}`,
})
}
function jumpUrl(path) {
uni.navigateTo({
url: `/pages/${path}/${path}`,
})
}
function extractTextFromHTML(htmlString) {
return htmlString.replace(/<[^>]*>/g, '')
}
function openPopup() {
popup.value && popup.value.open()
}
function closePopup() {
const noticeArr = unreadList.value.map((item) => item.noticeId)
uploadUnNotice(noticeArr)
popup.value && popup.value.close()
}
function readOneNotice(noticeId) {
uploadUnNotice([noticeId])
unreadIndex.value++
}
function uploadUnNotice(arr) {
proxy.$api.index
.uploadNotice({
noticeId: arr,
userId: uni.getStorageSync('userInfo').userid,
})
.then((res) => {
//
})
.catch((err) => {
//
})
}
//
onShow(() => {
})
//
onNavigationBarButtonTap((e) => {
if (e.text == '权限') {
uni.navigateTo({
url: '/pages/authManage/authManage',
})
} else if (e.text == '扫一扫') {
uni.scanCode({
success: (res) => {
const fixedRes = res.result.split('=')[1]
uni.navigateTo({
url: `/pages/indexScan/indexScan?scan=${fixedRes}`,
})
},
})
}
})
</script> </script>
<style lang="scss"> <style lang="scss" scoped>
page { .page-bg {
overflow: hidden; background: url('/src/static/bgd.png');
overflow-y: auto; background-repeat: no-repeat;
} background-size: 100% 100%;
.content {
padding: 24rpx;
min-height: 100vh; min-height: 100vh;
background-color: #f7f8fa; }
.upper-user {
width: 85%;
// /* margin: 8vh auto; */
.new-purchase { margin-bottom: 0;
background-color: #fff; box-sizing: border-box;
border-radius: 20rpx; padding: 15rpx;
padding: 10rpx 8rpx; padding-top: 8vh;
margin-bottom: 8rpx; display: flex;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06); .user-lef {
width: 15%;
height: 6vh;
border-radius: 50%;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.user-rig {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-around;
box-sizing: border-box;
padding-left: 20rpx;
view {
width: 100%;
color: #fff;
}
view:first-child {
font-size: 18px;
}
view:last-child {
font-size: 12px;
letter-spacing: 6rpx;
}
}
}
.sliders {
width: 85%;
/* height: 5vh; */
margin: 4vh auto;
margin-bottom: 2vh;
border-radius: 15rpx 15rpx 0 0;
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(2px);
border: 1px solid #b3d3ff;
padding: 1.3vh 0;
display: flex;
view {
width: 25%;
height: 50px;
border-right: 1px solid #cde2ff;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
color: #fff;
h2 {
font-size: 22px;
}
span {
font-size: 12px;
}
}
view:last-child {
border-right: none;
}
}
.sections {
width: 90%;
margin: 15rpx auto;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
box-sizing: border-box;
// padding-top: 2vh;
.purchase-title { view {
font-size: 32rpx;
font-weight: 600;
color: #262626;
}
.title-text {
margin-top: 5px;
padding: 0px 0;
display: flex;
align-items: center;
// font-size: 14px;
font-weight: bold;
letter-spacing: 1px;
width: 100%;
}
.title-text div:first-child {
width: 5px;
height: 10px;
margin-right: 8px;
background-color: #2d73cf;
}
//
.purchase-item {
width: 25%; width: 25%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
padding: 4rpx 0; margin-bottom: 2vh;
transition: all 0.3s ease;
&:active {
transform: scale(0.95);
opacity: 0.8;
}
//
image { image {
width: 120rpx; width: 58%;
height: 120rpx; height: 6vh;
margin-bottom: 2rpx; margin-bottom: 10rpx;
} }
span {
// font-size: 20rpx;
text {
font-size: 28rpx;
color: #262626;
font-weight: 500;
} }
} }
} }
.wait-do {
width: 90%;
margin: 0 auto;
display: flex;
flex-wrap: wrap;
justify-content: space-around;
view {
width: 48%;
height: 13vh;
margin-bottom: 15rpx;
border-radius: 15rpx;
box-sizing: border-box;
padding: 25rpx;
h4 {
margin-bottom: 5rpx;
font-size: 22px;
}
h5 {
font-weight: normal;
font-size: 14px;
}
}
.llsp {
background: url('/src/static/llsp.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.tlsp {
background: url('/src/static/tlsp.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.bfsh {
background: url('/src/static/bfsh.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.sysh {
background: url('/src/static/sysh.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
}
.single-notice {
width: 100%;
margin: 0 auto;
border-bottom: 1px solid #dee3ea;
box-sizing: border-box;
padding: 20rpx 5%;
display: flex;
background-color: #fff;
.notice-lef {
width: 12%;
height: 5.5vh;
border-radius: 50%;
overflow: hidden;
image {
width: 100%;
height: 100%;
}
}
.notice-rig {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-around;
box-sizing: border-box;
padding-left: 20rpx;
h4 {
font-size: 14px;
}
h5 {
font-size: 12px;
color: #8f9298;
font-weight: normal;
}
}
}
.popup {
width: 80vw;
height: 90vh;
background-color: #fff;
border-radius: 15rpx;
overflow-y: auto;
background: linear-gradient(#d9e7fe, #fff, #fff, #fff);
.pop-top {
width: 100%;
height: 5vh;
box-sizing: border-box;
padding: 0 25rpx;
display: flex;
justify-content: space-between;
align-items: center;
}
.unread-notice {
width: 85%;
margin: 40rpx auto;
display: flex;
flex-direction: column;
align-items: center;
.tit {
font-size: 20px;
font-weight: bold;
margin-bottom: 20rpx;
}
.info {
width: 100%;
view {
margin-bottom: 15rpx;
}
view:last-child {
margin-bottom: 0;
}
}
.read-one {
width: 40%;
margin: 40rpx auto;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
border-radius: 15rpx;
padding: 10rpx 0;
background-color: #3788ff;
color: #fff;
}
}
} }
</style> </style>

View File

@ -323,6 +323,7 @@ const options2 = ref([
// //
const onClick = (e, item) => { const onClick = (e, item) => {
console.log("tttttttttt",e,item) console.log("tttttttttt",e,item)
console.log('🚀 ~ onClick ~ taskStatus.value:', taskStatus.value)
if(taskStatus.value==3){// if(taskStatus.value==3){//
console.log("333333333333333333333333333") console.log("333333333333333333333333333")
if (e.index === 0) { if (e.index === 0) {

View File

@ -52,8 +52,8 @@
<span class="code">{{ item.code }}</span> <span class="code">{{ item.code }}</span>
<div class="cont"> <div class="cont">
<uni-tag <uni-tag
:text="item.taskStatus === 3 ? '未完成' : '已完成'" :text="item.taskStatus === 1 ? '未完成' : '已完成'"
:type="item.taskStatus === 3 ? 'warning' : 'success'" :type="item.taskStatus === 1 ? 'warning' : 'success'"
:custom-style="item.taskStatus === 4 ? successStyle : ''" :custom-style="item.taskStatus === 4 ? successStyle : ''"
/> />
</div> </div>
@ -132,7 +132,7 @@ const queryParams = ref({
startTime: '', // startTime: '', //
endTime: '', // endTime: '', //
keyWord: '', // keyWord: '', //
statusList: [3], // statusList: [1], //
pageNum: 1, pageNum: 1,
pageSize: 3, pageSize: 3,
}) })
@ -222,7 +222,7 @@ const changeTab = (index) => {
queryParams.value.pageNum = 1 queryParams.value.pageNum = 1
getTableList(true) getTableList(true)
} else if (index == 1) { } else if (index == 1) {
queryParams.value.statusList = [3] // queryParams.value.statusList = [1] //
queryParams.value.pageNum = 1 queryParams.value.pageNum = 1
getTableList(true) getTableList(true)
} }

View File

@ -0,0 +1,244 @@
<template>
<uni-nav-bar
dark
:fixed="true"
shadow
background-color="#4AA4EA"
status-bar
left-icon="left"
left-text="返回"
title="领料出库"
right-text="新增"
@clickLeft="back"
@clickRight="add"
/>
<div class="content">
<div class="query">
<uni-datetime-picker
v-model="queryParams.range"
type="daterange"
start-placeholder="开始"
end-placeholder="结束"
/>
<uni-easyinput
errorMessage
v-model="queryParams.keyWord"
focus
placeholder="请输入内容"
style="margin: 0 5px"
/>
<button size="mini" style="background-color: #f0a037; color: #fff" @click="handleQuery">
查询
</button>
</div>
<div style="width: 60%; margin: 10px auto">
<uni-segmented-control
:values="items"
:current="current"
@clickItem="onClickItem"
styleType="button"
activeColor="#007aff"
/>
</div>
<!-- 滚动列表 -->
<scroll-view scroll-y @scrolltolower="onScrollTolower">
<uni-swipe-action>
<uni-swipe-action-item
:right-options="current == 0 ? options : []"
v-for="(item, index) in tableList"
:key="index"
@click="(e) => onClickSwipe(e, item)"
>
<div class="list">
<div style="margin-right: 8px">{{ index + 1 }}.</div>
<div class="item">
<div>申请时间: {{ item.createTime }}</div>
<div>领料单号: {{ item.code }}</div>
<div>领料工器具: {{ item.maTypeNames }}</div>
<div>领料班组: {{ item.teamName }}</div>
<div>领料工程: {{ item.projectName }}</div>
<div>领料人: {{ item.leasePerson }}</div>
<div>预领数量: {{ item.preCountNum || 0 }}</div>
<div>已领数量: {{ item.alNum || 0 }}</div>
<div>待领数量: {{ item.waitCountNum || 0 }}</div>
<div>
状态:
<uni-tag
:text="item.taskStatusName"
:inverted="true"
:type="item.taskStatus == 1 ? 'error' : 'success'"
/>
</div>
</div>
</div>
</uni-swipe-action-item>
</uni-swipe-action>
<div style="display: flex; justify-content: center; align-items: center; height: 50px">
{{ finish ? '没有更多数据了~' : '正在加载...' }}
</div>
</scroll-view>
</div>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { ref, reactive, computed } from 'vue'
import { getPickingOutboundListAPI, deleteLeaseApplyApi } from '@/services/picking/outbound.js'
const queryParams = reactive({
pageNum: 1,
pageSize: 10,
range: [],
keyWord: '',
taskStatus: 1,
})
const items = ref(['未完成', '已完成'])
const current = ref(0)
const tableList = ref([])
const total = ref(0)
const options = ref([
{
text: '编辑',
style: {
backgroundColor: '#2f8cf0',
},
},
{
text: '删除',
style: {
backgroundColor: '#ff4949',
},
},
])
const finish = computed(() => {
if (total.value === tableList.value.length) return true
})
const back = () => {
uni.navigateBack({
delta: 1,
})
}
const add = () => {
uni.navigateTo({
url: '/pages/toolsLease/toolsLeaseAdd',
})
}
const handleQuery = () => {
console.log('🚀 ~ handleQuery ~ handleQuery:', queryParams)
getList()
}
const getList = async () => {
const params = {
pageNum: queryParams.pageNum,
pageSize: queryParams.pageSize,
startTime: queryParams.range && queryParams.range[0],
endTime: queryParams.range && queryParams.range[1],
keyWord: queryParams.keyWord,
taskStatus: queryParams.taskStatus,
}
console.log('🚀 ~ getList ~ params:', params)
try {
const res = await getPickingOutboundListAPI(params)
console.log('🚀 ~ getList ~ res:', res)
if (res.code == 200) {
tableList.value = res.data.rows
console.log('🚀 ~ getList ~ tableList.value:', tableList.value)
total.value = res.data.total
}
} catch (error) {
console.log('🚀 ~ getList ~ error:', error)
tableList.value = []
total.value = 0
}
}
//
const onClickItem = (item) => {
current.value = item.currentIndex
queryParams.taskStatus = item.currentIndex == 0 ? 1 : 4
getList()
}
//
const onScrollTolower = () => {
console.log('🚀 ~ onScrollTolower ~ onScrollTolower:')
if (total.value > tableList.value.length) {
queryParams.pageSize += 10
getList()
}
}
//
const onClickSwipe = (e, item) => {
console.log('🚀 ~ onClickSwipe ~ e:', e, item)
if (e.index == 0) {
//
const params = JSON.stringify({
id: item.id,
taskId: item.taskId,
isEdit: true,
})
uni.navigateTo({
url: `/pages/toolsLease/toolsLeaseAdd?params=${params}`,
})
} else {
//
deleteItem(item)
}
}
//
const deleteItem = (item) => {
console.log('🚀 ~ deleteItem ~ item:', item)
uni.showModal({
title: '提示',
content: '确定删除吗?',
success: (res) => {
if (res.confirm) {
deleteLeaseApplyApi([item.id])
.then((res) => {
console.log('🚀 ~ .then ~ res:', res)
if (res.code == 200) {
getList()
}
})
.catch((err) => {
console.log('🚀 ~ deleteItem ~ err:', err)
})
}
},
})
}
onLoad((options) => {
console.log('🚀 ~ onLoad ~ options:', options)
getList()
})
</script>
<style lang="scss" scoped>
.content {
padding: 10px;
height: calc(100vh - 147px);
.query {
display: flex;
justify-content: space-between;
align-items: center;
color: #f0a037;
}
.list {
min-height: 120px;
margin-bottom: 10px;
background: #fafafa;
border-radius: 6px;
padding: 8px;
display: flex;
}
}
</style>

View File

@ -0,0 +1,42 @@
<template>
<uni-nav-bar
dark
:fixed="true"
shadow
background-color="#4AA4EA"
status-bar
left-icon="left"
left-text="返回"
:title="title"
right-icon="scan"
@clickLeft="back"
/>
<div>
新增
</div>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
import { ref, reactive } from 'vue'
const title = ref('新增领料')
const params = ref({})
const back = () => {
uni.navigateBack({
delta: 1
})
}
onLoad((opt) => {
console.log('onLoad', opt)
params.value = JSON.parse(opt.params)
title.value = params.value.isEdit ? '编辑领料' : '新增领料'
console.log('🚀 ~ onLoad ~ params.value:', params.value)
})
</script>
<style lang="scss" scoped>
</style>

View File

@ -196,7 +196,7 @@ export const getDetailsByIdApi = (data) => {
export const leaseTask = (data) => { export const leaseTask = (data) => {
return http({ return http({
method: 'POST', method: 'POST',
url: '/material/leaseTask', url: '/material/lease_apply_info',
data:data, data:data,
}) })
} }
@ -263,3 +263,12 @@ export const directEdit = (data) => {
data:data, data:data,
}) })
} }
// 班组-下拉
export const getBmTeamList = (data) => {
return http({
method: 'GET',
url: '/material/bmTeam/list',
data,
})
}

View File

@ -10,6 +10,14 @@ export const getPickingOutboundListAPI = (data) => {
data, data,
}) })
} }
// 删除
export const deleteLeaseApplyApi = (id) => {
return http({
method: 'delete',
url: `/material/lease_apply_info/${id}`,
data: id
})
}
/** /**
* 领料出库 ---- 任务详情 * 领料出库 ---- 任务详情
*/ */

BIN
src/static/bfsh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
src/static/bg1.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

BIN
src/static/bgd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

BIN
src/static/exitMaterial.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/static/llsp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
src/static/notice.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/static/sysh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
src/static/tlsp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
src/static/toolsBack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
src/static/toolsLease.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -7,10 +7,11 @@ import { useMemberStore } from '@/stores'
*/ */
const ENV = process.env.NODE_ENV const ENV = process.env.NODE_ENV
// export const baseURL = ENV === 'development' ? 'http://192.168.0.244:18580' : 'http://192.168.0.244:18580'//测试 // export const baseURL = ENV === 'development' ? 'http://192.168.0.244:18580' : 'http://192.168.0.244:18580'//测试
export const baseURL = ENV === 'development' ? 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api/' : 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api/'//生产 // export const baseURL = ENV === 'development' ? 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api/' : 'http://sgwpdm.ah.sgcc.com.cn/iws/jiju-api/'//生产
// export const baseURL = ENV === 'development' ? '/api' : '/iws/jiju-api'; // 宏源服务 // export const baseURL = ENV === 'development' ? '/api' : '/iws/jiju-api'; // 宏源服务
// export const baseURL = ENV === 'development' ? 'http://192.168.0.234:18080' : '***' // export const baseURL = ENV === 'development' ? 'http://192.168.0.234:18080' : '***'
// export const baseURL = ENV === 'development' ? 'http://192.168.2.27:18080' : 'http://192.168.2.27:18080'//马 export const baseURL = ENV === 'development' ? 'http://192.168.1.117:18080' : 'http://192.168.1.117:18080'//马
console.log('🚀 ~ baseURL:', baseURL)
// export const baseURL = ENV === 'development' ? '/api' : '***' // export const baseURL = ENV === 'development' ? '/api' : '***'
// **********OCR识别为NVUE文件页面请求URL需要同步配置********** // **********OCR识别为NVUE文件页面请求URL需要同步配置**********

View File

@ -22,8 +22,8 @@ export default defineConfig({
'/api': { '/api': {
// target: 'http://192.168.2.76:18080', // target: 'http://192.168.2.76:18080',
// target: 'http://192.168.0.244:18580', // target: 'http://192.168.0.244:18580',
target: 'http://36.33.26.201:19988/prod-api/', // target: 'http://36.33.26.201:19988/prod-api/',
// target: 'http://192.168.0.234:18080', target: 'http://192.168.1.117:18080',
// target: 'http://localhost:18080', // target: 'http://localhost:18080',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => { rewrite: (path) => {