需求新增

This commit is contained in:
BianLzhaoMin 2025-05-22 14:53:31 +08:00
parent 534d4ec32f
commit 814a0e638a
10 changed files with 634 additions and 26 deletions

View File

@ -20,7 +20,8 @@
{
"path": "pages/workbenches/index",
"style": {
"navigationBarTitleText": "工作台"
"navigationBarTitleText": "工作台",
"navigationStyle": "custom" //
}
},
// tabBar

View File

@ -454,9 +454,12 @@ onReachBottom(
)
//
onPageScroll((e) => {
scrollTop.value = e.scrollTop
})
onPageScroll(
(e) => {
scrollTop.value = e.scrollTop
},
{ passive: true },
)
//
const getClassCountData = async () => {

View File

@ -47,7 +47,7 @@
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入建设地点'"
/>
</up-form-item>
<up-form-item prop="majorName" label="专业">
<up-form-item prop="majorName" label="专业" required>
<up-input
border="none"
readonly
@ -77,7 +77,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="gxName" label="工序">
<up-form-item prop="gxName" label="工序" required>
<up-input
border="none"
readonly
@ -288,8 +288,9 @@ import {
} from '@/services/coordinatePhotos.js'
import TitleTipModal from '@/components/TitleTipModal/index'
import { useMemberStore } from '@/stores'
import { useMemberStore, useCommonStore } from '@/stores'
const memberStore = useMemberStore()
const commonStore = useCommonStore()
const baseURL = import.meta.env.VITE_API_BASE_URL // url
const token = memberStore?.token
@ -352,6 +353,22 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
majorName: [
{
type: 'string',
required: true,
message: '请选择专业名称',
trigger: ['blur', 'change'],
},
],
gxName: [
{
type: 'string',
required: true,
message: '请选择工序名称',
trigger: ['blur', 'change'],
},
],
buildPlace: [
{
type: 'string',
@ -1058,6 +1075,55 @@ watch(
},
)
// storeid
watch(
() => commonStore.projectName,
(newVal) => {
addAndEditModel.proName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorName,
(newVal) => {
addAndEditModel.majorName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.procedureName,
(newVal) => {
addAndEditModel.gxName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.projectId,
(newVal) => {
addAndEditModel.proId = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorId,
(newVal) => {
addAndEditModel.majorId = newVal
//
getProcedureData(newVal)
},
{ immediate: true },
)
watch(
() => commonStore.procedureId,
(newVal) => {
addAndEditModel.gxId = newVal
},
{ immediate: true },
)
onMounted(async () => {
projectList.value = await getProjectList()
projectListAll.value = await getProjectList()

View File

@ -38,7 +38,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="majorName" label="专业">
<!-- <up-form-item prop="majorName" label="专业">
<up-input
border="none"
readonly
@ -95,7 +95,7 @@
</view>
</template>
</up-input>
</up-form-item>
</up-form-item> -->
<TitleTipModal :TitleTip="`重要事项及宣传照片`" />
<up-form-item prop="time" label="日期">

View File

@ -38,7 +38,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="majorName" label="专业">
<up-form-item prop="majorName" label="专业" required>
<up-input
border="none"
readonly
@ -68,7 +68,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="gxName" label="工序">
<up-form-item prop="gxName" label="工序" required>
<up-input
border="none"
readonly
@ -366,8 +366,9 @@ import {
} from '@/services/qualityInspection.js'
import TitleTipModal from '@/components/TitleTipModal/index'
import { useMemberStore } from '@/stores'
import { useMemberStore, useCommonStore } from '@/stores'
const memberStore = useMemberStore()
const commonStore = useCommonStore()
const baseURL = import.meta.env.VITE_API_BASE_URL // url
const token = memberStore?.token
@ -449,6 +450,23 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
majorName: [
{
type: 'string',
required: true,
message: '请选择专业名称',
trigger: ['blur', 'change'],
},
],
gxName: [
{
type: 'string',
required: true,
message: '请选择工序名称',
trigger: ['blur', 'change'],
},
],
vioDate: [
{
type: 'string',
@ -1165,6 +1183,55 @@ watch(
immediate: true,
},
)
// storeid
watch(
() => commonStore.projectName,
(newVal) => {
addAndEditModel.proName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorName,
(newVal) => {
addAndEditModel.majorName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.procedureName,
(newVal) => {
addAndEditModel.gxName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.projectId,
(newVal) => {
addAndEditModel.proId = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorId,
(newVal) => {
addAndEditModel.majorId = newVal
//
getProcedureData(newVal)
},
{ immediate: true },
)
watch(
() => commonStore.procedureId,
(newVal) => {
addAndEditModel.gxId = newVal
},
{ immediate: true },
)
</script>
<style scoped lang="scss">

View File

@ -38,7 +38,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="majorName" label="专业">
<up-form-item prop="majorName" label="专业" required>
<up-input
border="none"
readonly
@ -68,7 +68,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="gxName" label="工序">
<up-form-item prop="gxName" label="工序" required>
<up-input
border="none"
readonly
@ -270,8 +270,9 @@ import {
import { getProcedureApi } from '@/services/common.js'
import TitleTipModal from '@/components/TitleTipModal/index'
import { useMemberStore } from '@/stores'
import { useMemberStore, useCommonStore } from '@/stores'
const memberStore = useMemberStore()
const commonStore = useCommonStore()
const baseURL = import.meta.env.VITE_API_BASE_URL // url
const token = memberStore?.token
@ -332,7 +333,22 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
majorName: [
{
type: 'string',
required: true,
message: '请选择专业名称',
trigger: ['blur', 'change'],
},
],
gxName: [
{
type: 'string',
required: true,
message: '请选择工序名称',
trigger: ['blur', 'change'],
},
],
checkUserName: [
{
trigger: ['blur', 'change'],
@ -889,6 +905,55 @@ watch(
},
)
// storeid
watch(
() => commonStore.projectName,
(newVal) => {
addAndEditModel.proName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorName,
(newVal) => {
addAndEditModel.majorName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.procedureName,
(newVal) => {
addAndEditModel.gxName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.projectId,
(newVal) => {
addAndEditModel.proId = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorId,
(newVal) => {
addAndEditModel.majorId = newVal
//
getProcedureData(newVal)
},
{ immediate: true },
)
watch(
() => commonStore.procedureId,
(newVal) => {
addAndEditModel.gxId = newVal
},
{ immediate: true },
)
onMounted(async () => {
projectList.value = await getProjectList()
projectListAll.value = await getProjectList()

View File

@ -38,7 +38,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="majorName" label="专业">
<up-form-item prop="majorName" label="专业" required>
<up-input
readonly
border="none"
@ -68,7 +68,7 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="gxName" label="工序">
<up-form-item prop="gxName" label="工序" required>
<up-input
readonly
border="none"
@ -368,8 +368,9 @@ import {
} from '@/services/safetyViolations.js'
import TitleTipModal from '@/components/TitleTipModal/index'
import { useMemberStore } from '@/stores'
import { useMemberStore, useCommonStore } from '@/stores'
const memberStore = useMemberStore()
const commonStore = useCommonStore()
const baseURL = import.meta.env.VITE_API_BASE_URL // url
const token = memberStore?.token
@ -450,6 +451,22 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
majorName: [
{
type: 'string',
required: true,
message: '请选择专业名称',
trigger: ['blur', 'change'],
},
],
gxName: [
{
type: 'string',
required: true,
message: '请选择工序名称',
trigger: ['blur', 'change'],
},
],
checkUserName: [
{
trigger: ['blur', 'change'],
@ -1240,6 +1257,55 @@ watch(
},
)
// storeid
watch(
() => commonStore.projectName,
(newVal) => {
addAndEditModel.proName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorName,
(newVal) => {
addAndEditModel.majorName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.procedureName,
(newVal) => {
addAndEditModel.gxName = newVal
},
{ immediate: true },
)
watch(
() => commonStore.projectId,
(newVal) => {
addAndEditModel.proId = newVal
},
{ immediate: true },
)
watch(
() => commonStore.majorId,
(newVal) => {
addAndEditModel.majorId = newVal
//
getProcedureData(newVal)
},
{ immediate: true },
)
watch(
() => commonStore.procedureId,
(newVal) => {
addAndEditModel.gxId = newVal
},
{ immediate: true },
)
onMounted(async () => {
projectList.value = await getProjectList()
projectListAll.value = await getProjectList()

View File

@ -30,7 +30,6 @@ const props = defineProps({
})
//
const uToastRef = ref(null)
//
const onHandleJumpPage = (path) => {

View File

@ -1,15 +1,157 @@
<template>
<!-- 工作台页面 -->
<up-navbar title="工作台" leftIconSize="0" rightIconSize="20" bgColor="#f6f9ff">
<template #right>
<up-icon name="list" size="20" @tap="onHandleSelect"></up-icon>
</template>
</up-navbar>
<view class="workbenches-container">
<iconCard :iconList="iconList_1" :cardTitle="`照片上传`" />
<iconCard :iconList="iconList_2" :cardTitle="`照片查询`" />
<IconCard :iconList="iconList_1" :cardTitle="`照片上传`" />
<IconCard :iconList="iconList_2" :cardTitle="`照片查询`" />
</view>
<up-popup
mode="right"
safeAreaInsetTop
:show="rightPopupShow"
@close="rightPopupShow = !rightPopupShow"
>
<up-form
labelWidth="100"
labelAlign="center"
labelPosition="left"
ref="searchFormRef"
style="padding-right: 20rpx"
:style="{ paddingBottom: safeAreaInsets?.top + 50 + 'px' }"
>
<up-form-item prop="proName" label="工程">
<up-input
readonly
clearable
placeholder="请选择工程名称"
v-model="queryParams.proName"
style="position: relative"
>
<template #suffix>
<view class="handle-box">
<view @tap="onSelectProject" class="select-project-area"> 1 </view>
<up-icon
name="close-circle-fill"
style="margin-right: 12rpx"
v-if="queryParams.proName"
color="#c6c7cb"
@tap="
() => {
queryParams.proName = ''
queryParams.proId = ''
commonStore.setProjectId('')
}
"
/>
<up-icon name="arrow-down" size="16" @tap="onSelectProject" />
</view>
</template>
</up-input>
</up-form-item>
<up-form-item prop="majorName" label="专业">
<up-input
readonly
clearable
placeholder="请选择专业"
style="position: relative"
v-model="queryParams.majorName"
>
<template #suffix>
<view class="handle-box">
<view @tap="onSelectMajor" class="select-project-area">1</view>
<up-icon
name="close-circle-fill"
style="margin-right: 12rpx"
v-if="queryParams.majorName"
color="#c6c7cb"
@tap="
() => {
queryParams.majorName = ''
queryParams.majorId = ''
commonStore.setMajorId('')
}
"
/>
<up-icon name="arrow-down" size="16" @tap="onSelectMajor" />
</view>
</template>
</up-input>
</up-form-item>
<up-form-item prop="gxName" label="工序">
<up-input
readonly
clearable
placeholder="请选择工序"
v-model="queryParams.gxName"
style="position: relative"
>
<template #suffix>
<view class="handle-box">
<view @tap="onSelectProcedure" class="select-project-area"> 1 </view>
<up-icon
name="close-circle-fill"
style="margin-right: 12rpx"
v-if="queryParams.gxName"
color="#c6c7cb"
@tap="
() => {
queryParams.gxName = ''
queryParams.gxId = ''
commonStore.setProcedureId('')
}
"
/>
<up-icon name="arrow-down" size="16" @tap="onSelectProcedure" />
</view>
</template>
</up-input>
</up-form-item>
</up-form>
</up-popup>
<!-- 工程选择器 -->
<up-picker
keyName="name"
closeOnClickOverlay
:show="projectShow"
:columns="projectList"
@confirm="onConfirmProject"
@cancel="projectShow = !projectShow"
@close="projectShow = !projectShow"
/>
<!-- 专业选择器 -->
<up-picker
keyName="name"
:show="majorShow"
:columns="majorList"
closeOnClickOverlay
@confirm="onConfirmMajor"
@cancel="majorShow = !majorShow"
@close="majorShow = !majorShow"
/>
<!-- 工序选择器 -->
<up-picker
keyName="name"
:show="procedureShow"
:columns="procedureList"
closeOnClickOverlay
@confirm="onConfirmProcedure"
@cancel="procedureShow = !procedureShow"
@close="procedureShow = !procedureShow"
/>
</template>
<script setup>
import { ref } from 'vue'
import { useMemberStore } from '@/stores'
import iconCard from './components/icon-card.vue'
import { ref, onMounted } from 'vue'
import { useMemberStore, useCommonStore } from '@/stores'
import { useCommon } from '@/hooks/useCommon.js'
import { getProcedureApi } from '@/services/common.js'
import IconCard from './components/icon-card.vue'
import icon_1 from '../../static/image/home_1.png'
import icon_2 from '../../static/image/home_2.png'
import icon_3 from '../../static/image/home_3.png'
@ -17,7 +159,17 @@ import icon_4 from '../../static/image/home_4.png'
import icon_5 from '../../static/image/home_5.png'
import icon_6 from '../../static/image/home_6.png'
const { getProjectList, getMajorList } = useCommon()
const { safeAreaInsets } = uni.getSystemInfoSync()
const projectShow = ref(false)
const majorShow = ref(false)
const procedureShow = ref(false)
const projectList = ref([])
const majorList = ref([])
const procedureList = ref([])
const searchFormRef = ref(null)
const memberStore = useMemberStore() //
const commonStore = useCommonStore() //
const userPermissions = ref(memberStore.userInfo.permissions || [])
const iconList_1 = ref([
@ -55,20 +207,154 @@ const iconList_2 = ref([
},
])
//
const queryParams = ref({
proId: '', //
proName: '', //
majorId: '', // id
majorName: '', //
gxId: '', // id
gxName: '', //
})
// permissions
if (userPermissions.value.length > 0) {
const permissionSet = new Set(userPermissions.value.map((item) => item.name))
// iconList_1.value = iconList_1.value.filter((item) => permissionSet.has(item.title))
// iconList_2.value = iconList_2.value.filter((item) => permissionSet.has(item.title))
}
const rightPopupShow = ref(false)
//
const onHandleSelect = async () => {
projectList.value.push(await getProjectList())
majorList.value.push(await getMajorList())
rightPopupShow.value = true
}
//
const onSelectProject = () => {
projectShow.value = true
}
//
const onConfirmProject = (item) => {
queryParams.value.proName = item?.value[0]?.name
queryParams.value.proId = item?.value[0]?.id
// id store
commonStore.setProjectId(item?.value[0]?.id)
commonStore.setProjectName(item?.value[0]?.name)
projectShow.value = false
}
//
const onSelectMajor = () => {
majorShow.value = true
}
//
const onConfirmMajor = (item) => {
queryParams.value.majorName = item?.value[0]?.name
queryParams.value.majorId = item?.value[0]?.id
commonStore.setMajorId(item?.value[0]?.id)
commonStore.setMajorName(item?.value[0]?.name)
getProcedureData(item?.value[0]?.id)
majorShow.value = false
}
//
const onSelectProcedure = () => {
procedureShow.value = true
}
//
const onConfirmProcedure = (item) => {
queryParams.value.gxName = item?.value[0]?.name
queryParams.value.gxId = item?.value[0]?.id
commonStore.setProcedureId(item?.value[0]?.id)
commonStore.setProcedureName(item?.value[0]?.name)
procedureShow.value = false
}
//
const getProcedureData = async (pid) => {
console.log(
'%c🔍 获取工序请求入参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
'pid=' + pid,
)
const { data: res } = await getProcedureApi({ pid })
console.log(
'%c🔍 获取工序请求出参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
res,
)
procedureList.value = []
procedureList.value.push(res)
}
</script>
<style lang="scss" scoped>
.workbenches-container {
height: 100%;
background-color: #f6f9ff;
padding-top: 30rpx;
padding-top: 44px;
box-sizing: border-box;
// overflow: hidden;
}
//
.senior-popup {
width: 90vw;
height: 100vh;
overflow: hidden;
.senior-title {
padding: 24rpx 30rpx;
display: flex;
align-items: center;
background-color: #f5f5f5;
& text {
margin-left: 4rpx;
letter-spacing: 2rpx;
}
}
.btns {
width: 100%;
height: 50px;
padding: 18rpx 0;
position: absolute;
bottom: 0;
right: 0;
border-top: 1px solid #cac6c6;
background-color: #fff;
box-sizing: border-box;
& view {
margin-right: 18rpx;
display: flex;
justify-content: flex-end;
}
}
}
.handle-box {
position: absolute;
right: 5%;
top: 50%;
transform: translateY(-50%);
left: 0;
// bottom: 0;
z-index: 100;
display: flex;
align-items: center;
.select-project-area {
flex: 1;
color: transparent;
}
}
</style>

View File

@ -8,6 +8,49 @@ export const useCommonStore = defineStore('common', () => {
// 专业数据
const majorList = ref([])
// 项目id
const projectId = ref('')
// 专业id
const majorId = ref('')
// 工序id
const procedureId = ref('')
// 项目名称
const projectName = ref('')
// 专业名称
const majorName = ref('')
// 工序名称
const procedureName = ref('')
// 存入项目id
const setProjectId = (id) => {
projectId.value = id
}
// 存入项目名称
const setProjectName = (name) => {
projectName.value = name
}
// 存入专业id
const setMajorId = (id) => {
majorId.value = id
}
// 存入专业名称
const setMajorName = (name) => {
majorName.value = name
}
// 存入工序id
const setProcedureId = (id) => {
procedureId.value = id
}
// 存入工序名称
const setProcedureName = (name) => {
procedureName.value = name
}
// 存储项目数据
const getProjectList = async () => {
if (projectList.value.length < 1) {
@ -35,5 +78,17 @@ export const useCommonStore = defineStore('common', () => {
majorList,
getProjectList,
getMajorList,
projectId,
majorId,
procedureId,
projectName,
majorName,
procedureName,
setProjectId,
setMajorId,
setProcedureId,
setProjectName,
setMajorName,
setProcedureName,
}
})