安全违章新增接口调试完成

This commit is contained in:
BianLzhaoMin 2025-04-03 18:21:40 +08:00
parent 78539242b6
commit 67c26f9f77
8 changed files with 352 additions and 146 deletions

View File

@ -20,7 +20,10 @@
"delay" : 0
},
/* */
"modules" : {},
"modules" : {
"Barcode" : {},
"Camera" : {}
},
/* */
"distribute" : {
/* android */

View File

@ -44,7 +44,7 @@
<!-- 文字内容 -->
</view>
<view class="text-content">
<view style="position: absolute; left: 0; top: -8rpx"">
<view style="position: absolute; left: 0; top: -5rpx">
<up-button
size="mini"
text="建设前"
@ -71,7 +71,7 @@ uni-app是基VuejsVue和View(延伸为UI、视图之意)同音同时view
</view>
</view>
<view class="text-content">
<view style="position: absolute; left: 0; top: -8rpx"">
<view style="position: absolute; left: 0; top: -5rpx">
<up-button
size="mini"
text="建设中"
@ -98,7 +98,7 @@ uni-app是基VuejsVue和View(延伸为UI、视图之意)同音同时view
</view>
</view>
<view class="text-content">
<view style="position: absolute; left: 0; top: -8rpx">
<view style="position: absolute; left: 0; top: -5rpx">
<up-button
size="mini"
text="恢复后"
@ -232,6 +232,7 @@ const onClickSwiper = (e) => {
.swiper-container {
position: relative;
margin-bottom: 14rpx;
.swiper-count {
position: absolute;

View File

@ -117,39 +117,34 @@ const onSubmitLogin = debounce(() => {
.validate()
.then(async (valid) => {
if (valid) {
uni.$u.toast('登录成功')
try {
console.log(
'%c🔍 登录请求入参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
opinionModel.value,
)
const res = await loginApi(opinionModel.value)
console.log(
'%c🔍 登录请求出参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
res,
)
sendLoading.value = false
if (res.code === 200) {
memberStore.setToken(res.token)
uni.$u.toast('登录成功')
getUserInfo()
setTimeout(() => {
uni.switchTab({ url: '/pages/workbenches/index' })
}, 500)
// try {
// console.log(
// '%c🔍 %c',
// 'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
// '',
// opinionModel.value,
// )
// const res = await loginApi(opinionModel.value)
// console.log(
// '%c🔍 %c',
// 'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
// '',
// res,
// )
// sendLoading.value = false
// if (res.code === 200) {
// memberStore.setToken(res.token)
// uni.$u.toast('')
// getUserInfo()
// setTimeout(() => {
// uni.switchTab({ url: '/pages/workbenches/index' })
// }, 500)
// } else {
// uni.$u.toast('' + res.message)
// }
// } catch (error) {
// sendLoading.value = false
// }
} else {
uni.$u.toast('登录失败' + res.message)
}
} catch (error) {
sendLoading.value = false
}
}
})
.catch(() => {

View File

@ -10,23 +10,23 @@
style="background-color: #fff; padding: 0 30rpx 20rpx"
>
<TitleTipModal :TitleTip="`项目信息`" />
<up-form-item prop="projectName" label="项目名称" required>
<up-form-item prop="proName" label="项目名称" required>
<up-input
readonly
border="none"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择项目'"
v-model="addAndEditModel.projectName"
v-model="addAndEditModel.proName"
>
<template #suffix v-if="props.addAndEditFormType != 3">
<up-icon name="arrow-right" @tap="onSelectProject" />
</template>
</up-input>
</up-form-item>
<up-form-item prop="major" label="专业">
<up-form-item prop="majorName" label="专业">
<up-input
border="none"
readonly
v-model="addAndEditModel.major"
v-model="addAndEditModel.majorName"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择专业'"
>
<template #suffix v-if="props.addAndEditFormType != 3">
@ -34,11 +34,11 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="procedure" label="工序">
<up-form-item prop="gxName" label="工序">
<up-input
border="none"
readonly
v-model="addAndEditModel.procedure"
v-model="addAndEditModel.gxName"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择工序'"
>
<template #suffix v-if="props.addAndEditFormType != 3">
@ -48,32 +48,33 @@
</up-form-item>
<TitleTipModal :TitleTip="`违章信息`" />
<up-form-item prop="examiner" label="检查人">
<up-form-item prop="checkUserName" label="检查人">
<up-input
border="none"
v-model="addAndEditModel.checkUserName"
:readonly="props.addAndEditFormType == 3"
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入检查人'"
/>
</up-form-item>
<up-form-item prop="inspectTime" label="检查日期">
<up-form-item prop="vioDate" label="违章日期">
<up-input
readonly
border="none"
inputAlign="right"
v-model="addAndEditModel.inspectTime"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择检查日期'"
v-model="addAndEditModel.vioDate"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择违章日期'"
>
<template #suffix v-if="props.addAndEditFormType != 3">
<up-icon name="arrow-right" @tap="onSelectDate(1)" />
</template>
</up-input>
</up-form-item>
<up-form-item prop="correctionTerm" label="整改期限" required>
<up-form-item prop="rectDate" label="整改期限" required>
<up-input
readonly
border="none"
inputAlign="right"
v-model="addAndEditModel.correctionTerm"
v-model="addAndEditModel.rectDate"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择整改期限'"
>
<template #suffix v-if="props.addAndEditFormType != 3">
@ -81,27 +82,27 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="vrLocation" label="违章地点" required>
<up-form-item prop="vioPlace" label="违章地点" required>
<up-input
border="none"
v-model="addAndEditModel.vrLocation"
v-model="addAndEditModel.vioPlace"
:readonly="props.addAndEditFormType == 3"
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入违章地点'"
/>
</up-form-item>
<up-form-item prop="vrDescribe" label="违章描述" required>
<up-form-item prop="vioDesc" label="违章描述" required>
<up-textarea
autoHeight
border="none"
v-model="addAndEditModel.vrDescribe"
v-model="addAndEditModel.vioDesc"
:readonly="props.addAndEditFormType == 3"
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入违章描述'"
/>
</up-form-item>
<up-form-item
required
prop="vrImgList"
:label="props.addAndEditFormType == 3 ? '违章照片' : '违章照片(最多9张)'"
required
>
<up-upload
name="1"
@ -113,20 +114,20 @@
/>
</up-form-item>
<TitleTipModal :TitleTip="`整改信息`" />
<up-form-item prop="correctionPerson" label="整改人" required>
<up-form-item prop="rectUserName" label="整改人" required>
<up-input
border="none"
:readonly="props.addAndEditFormType == 3"
v-model="addAndEditModel.correctionPerson"
v-model="addAndEditModel.rectUserName"
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入整改人'"
/>
</up-form-item>
<up-form-item prop="correctionTime" label="整改日期">
<up-form-item prop="rectTime" label="整改日期">
<up-input
readonly
border="none"
inputAlign="right"
v-model="addAndEditModel.correctionTime"
v-model="addAndEditModel.rectTime"
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择整改日期'"
>
<template #suffix v-if="props.addAndEditFormType != 3">
@ -134,12 +135,12 @@
</template>
</up-input>
</up-form-item>
<up-form-item prop="correctionDescribe" label="整改说明" required>
<up-form-item prop="rectDesc" label="整改说明" required>
<up-textarea
autoHeight
border="none"
:readonly="props.addAndEditFormType == 3"
v-model="addAndEditModel.correctionDescribe"
v-model="addAndEditModel.rectDesc"
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入整改说明'"
/>
</up-form-item>
@ -180,12 +181,12 @@
<!-- 工程列表 -->
<view class="project-list">
<up-list @scrolltolower="onScrollTolower" style="width: 100%">
<up-list-item v-for="item in 20" :key="item">
<up-cell :title="`xxxxxxxxx工程-${item}`" @tap="onSelectProjectItem(item)">
<up-list @scrolltolower="onScrollTolower" style="width: 100%" pagingEnabled>
<up-list-item v-for="(item, index) in projectList" :key="item.id">
<up-cell :title="item.name" @tap="onSelectProjectItem(item)">
<template #icon>
<text style="margin-right: 10rpx">
{{ item }}
{{ index + 1 }}
</text>
</template>
</up-cell>
@ -197,7 +198,7 @@
<!-- 专业选择器 -->
<up-picker
keyName="label"
keyName="name"
:show="majorShow"
:columns="majorList"
@confirm="onConfirmMajor"
@ -205,7 +206,7 @@
/>
<!-- 工序选择器 -->
<up-picker
keyName="label"
keyName="name"
:show="procedureShow"
:columns="procedureList"
@confirm="onConfirmProcedure"
@ -233,10 +234,12 @@
<script setup>
import { reactive, ref } from 'vue'
import { debounce } from 'lodash-es' //
import { debounce, set } from 'lodash-es' //
import { getProjectApi, getMajorApi, getProcedureApi } from '@/services/common.js'
import { addSafetyViolationsApi } from '@/services/safetyViolations.js'
import TitleTipModal from '@/components/TitleTipModal/index'
const addAndEditModelRef = ref(null)
const addAndEditModelRef = ref(null)
const projectShow = ref(false) //
const majorShow = ref(false) //
const procedureShow = ref(false) //
@ -257,19 +260,33 @@ console.log(props.addAndEditFormType, '表单类型')
//
const addAndEditModel = reactive({
projectName: '',
procedure: '',
major: '',
examiner: '',
inspectTime: '',
correctionTerm: '',
vrLocation: '',
vrDescribe: '',
vrImgList: [],
correctionPerson: '',
correctionDescribe: '',
correctionTime: '',
correctionImgList: [],
dataSource: 2,
proId: '', // id
proName: '', //
majorId: '', // id
majorName: '', //
gxId: '', // id
gxName: '', //
checkUserName: '', //
vioDate: '', //
vioPlace: '', //
vioDesc: '', //
rectDate: '', //
rectUserName: '', //
rectTime: '', //
rectDesc: '', //
// procedure: '',
// major: '',
// examiner: '',
// inspectTime: '',
// correctionTerm: '',
// vrLocation: '',
// vrDescribe: '',
vrImgList: [], //
// correctionPerson: '',
// correctionDescribe: '',
// correctionTime: '',
correctionImgList: [], //
})
//
@ -282,7 +299,7 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
correctionTerm: [
rectDate: [
{
type: 'string',
required: true,
@ -290,7 +307,7 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
vrLocation: [
vioPlace: [
{
type: 'string',
required: true,
@ -298,7 +315,7 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
vrDescribe: [
vioDesc: [
{
type: 'string',
required: true,
@ -308,13 +325,13 @@ const addAndEditModelRules = ref({
],
vrImgList: [
{
type: 'string',
type: 'array',
required: true,
message: '请上传违章照片',
trigger: ['blur', 'change'],
},
],
correctionPerson: [
rectUserName: [
{
type: 'string',
required: true,
@ -322,7 +339,7 @@ const addAndEditModelRules = ref({
trigger: ['blur', 'change'],
},
],
correctionDescribe: [
rectDesc: [
{
type: 'string',
required: true,
@ -333,48 +350,63 @@ const addAndEditModelRules = ref({
})
//
const projectList = ref([])
//
const getProjectData = async () => {
console.log(
'%c🔍 获取项目请求入参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
{},
)
const res = await getProjectApi({})
projectList.value = res.data
console.log(
'%c🔍 获取项目请求出参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
res,
)
}
getProjectData()
//
const majorList = reactive([
[
{
label: '专业1',
value: 2021,
},
{
label: '专业2',
value: 2022,
},
{
label: '专业3',
value: 2023,
},
{
label: '专业4',
value: 2024,
},
],
])
const majorList = reactive([])
//
const getMajorData = async () => {
const { data: res } = await getMajorApi()
console.log(
'%c🔍 获取专业请求出参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
res,
)
majorList.push(res)
}
getMajorData()
//
const procedureList = reactive([
[
{
label: '工序1',
id: 2021,
},
{
label: '工序2',
id: 2022,
},
{
label: '工序3',
id: 2023,
},
{
label: '工序4',
id: 2024,
},
],
])
const procedureList = reactive([])
//
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,
)
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.push(res)
}
// getProcedureData()
//
const formatter = (type, value) => {
@ -408,7 +440,8 @@ const onScrollTolower = () => {
//
const onSelectProjectItem = (item) => {
addAndEditModel.projectName = 'xxxxxx工程' + item
addAndEditModel.proName = item.name
addAndEditModel.proId = item.id
projectShow.value = false
}
@ -425,8 +458,10 @@ const onSelectMajor = () => {
//
const onConfirmMajor = (item) => {
console.log('---确定', item.value[0].label)
addAndEditModel.major = item.value[0].label
console.log('---确定', item.value[0].name)
addAndEditModel.majorName = item.value[0].name
addAndEditModel.majorId = item.value[0].id
getProcedureData(item.value[0].id)
majorShow.value = false
}
//
@ -436,13 +471,14 @@ const onSelectProcedure = () => {
//
const onConfirmProcedure = (item) => {
addAndEditModel.procedure = item.value[0].label
addAndEditModel.gxName = item.value[0].name
addAndEditModel.gxId = item.value[0].id
procedureShow.value = false
}
//
const onSelectDate = (type) => {
// type 1. 2. 3.
// type 1. 2. 3.
dateType.value = type
dateShow.value = true
}
@ -451,13 +487,13 @@ const onSelectDate = (type) => {
const onConfirmDate = (item) => {
const formatDateValue = formatDate(dateValue.value)
if (dateType.value === 1) {
addAndEditModel.inspectTime = formatDateValue
addAndEditModel.vioDate = formatDateValue
}
if (dateType.value === 2) {
addAndEditModel.correctionTerm = formatDateValue
addAndEditModel.rectDate = formatDateValue
}
if (dateType.value === 3) {
addAndEditModel.correctionTime = formatDateValue
addAndEditModel.rectTime = formatDateValue
}
dateShow.value = false
console.log('---日期确定', formatDateValue)
@ -501,16 +537,142 @@ const onDeleteCorrectionImgList = (event) => {
//
const onSubmitForm = debounce(() => {
console.log('---提交')
sendLoading.value = true
addAndEditModelRef.value.validate().then((valid) => {
console.log(
'%c🔍 表单提交入参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
addAndEditModel,
)
addAndEditModelRef.value
.validate()
.then(async (valid) => {
if (valid) {
console.log('校验通过')
//
sendLoading.value = true
let successVrImgList = []
let successCorrectionImgList = []
if (addAndEditModel.vrImgList.length > 0) {
successVrImgList = await uploadImgFun(addAndEditModel.vrImgList, 1)
}
if (addAndEditModel.correctionImgList.length > 0) {
successCorrectionImgList = await uploadImgFun(
addAndEditModel.correctionImgList,
2,
)
}
//
const {
dataSource,
proId, // id
proName, //
majorId, // id
majorName, //
gxId, // id
gxName, //
checkUserName, //
vioDate, //
vioPlace, //
vioDesc, //
rectDate, //
rectUserName, //
rectTime, //
rectDesc, //
} = addAndEditModel
const addParams = {
dataSource,
proId, // id
proName, //
majorId, // id
majorName, //
gxId, // id
gxName, //
checkUserName, //
vioDate, //
vioPlace, //
vioDesc, //
rectDate, //
rectUserName, //
rectTime, //
rectDesc, //
fileList: [...successVrImgList, ...successCorrectionImgList],
uploadType: 1,
}
const res = await addSafetyViolationsApi(addParams)
console.log(
'%c🔍 表单提交出参 %c',
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
'',
res,
)
sendLoading.value = false
if (res.code === 200) {
uni.$u.toast('新增成功')
setTimeout(() => {
uni.navigateBack({
delta: 1,
})
}, 500)
} else {
uni.$u.toast('新增失败' + res.data)
}
}
})
.catch((error) => {})
}, 1000)
//
const uploadImgFun = async (list, type) => {
return new Promise((resolve, reject) => {
let successList = []
let files = []
list.forEach((f) => {
let d = {
file: f.url,
name: 'files',
uri: f.url,
}
files.push(d)
})
sendLoading.value = true
uni.uploadFile({
url: '/imgTool/sys/file/uploadFile',
files: files,
name: 'files',
formData: {
params: JSON.stringify({
uploadType: 1,
sourceType: type,
sourceTypeName: type === 1 ? '安全违章-违章照片' : '安全违章-整改照片',
}),
},
success: (res) => {
sendLoading.value = false
res = JSON.parse(res.data)
if (res.code === 200) {
successList = res.data
resolve(successList) //
} else {
uni.$u.toast('上传失败' + res.msg)
reject(new Error('上传失败: ' + res.msg))
}
},
fail: (err) => {
sendLoading.value = false
reject(new Error('网络错误: ' + err.errMsg))
},
})
})
}
//
const getFormDetail = () => {
console.log('---获取详情数据')

29
src/services/common.js Normal file
View File

@ -0,0 +1,29 @@
import { http } from '@/utils/http'
// 获取项目
export const getProjectApi = (data) => {
return http({
method: 'POST',
url: '/imgTool/sys/select/getProsSelect',
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
data,
})
}
// 获取专业
export const getMajorApi = () => {
return http({
method: 'GET',
url: '/imgTool/sys/select/getProfessionSelect',
isNull: true,
})
}
// 获取工序
export const getProcedureApi = (data) => {
return http({
method: 'GET',
url: '/imgTool/sys/select/getProcessSelect',
data,
})
}

View File

@ -0,0 +1,13 @@
import { http } from '@/utils/http'
// 安全违章表单提交接口
export const addSafetyViolationsApi = (data) => {
return http({
method: 'POST',
url: '/imgTool/imgUpload/safetyViolation/insertSafetyViolation',
data,
header: {
'Content-Type': 'application/x-www-form-urlencoded',
},
})
}

View File

@ -29,10 +29,12 @@ const httpInterceptor = {
}
}
} else {
if (!options.isNull) {
options.data = {
encryptedData: encrypt(JSON.stringify(options.data)),
}
}
}
// 2. 设置请求超时时间默认为60s设置为 10s
options.timeout = 10000

View File

@ -8,7 +8,8 @@ export default defineConfig({
proxy: {
// 在此处编写代理规则
'/api': {
target: 'http://192.168.0.133:11997', // 梁超
// target: 'http://192.168.0.133:11997', // 梁超
target: 'http://192.168.0.137:11997', // 方亮
changeOrigin: true,
rewrite: (path) => {
return path.replace(/\/api/, '')