Merge remote-tracking branch 'origin/main'

This commit is contained in:
luozhun 2024-12-11 11:27:26 +08:00
commit ddc0a7362e
13 changed files with 123 additions and 145 deletions

View File

@ -5,11 +5,14 @@
"appid": "touristappid", "appid": "touristappid",
"setting": { "setting": {
"urlCheck": false, "urlCheck": false,
"es6": false, "es6": true,
"enhance": false, "enhance": false,
"minified": true,
"minifyWXSS": true,
"minifyWXML": true,
"compileHotReLoad": false, "compileHotReLoad": false,
"postcss": false, "postcss": true,
"minified": false "minified": true
}, },
"compileType": "miniprogram" "compileType": "miniprogram"
} }

View File

@ -24,6 +24,40 @@ const App = createApp({
}) })
} }
}, },
onShow(){
const updateManager = Taro.getUpdateManager()
updateManager.onCheckForUpdate(function(res) {
// 请求完新版本信息的回调
if (res.hasUpdate) {
// 新版本已经下载好,调用 applyUpdate 应用新版本并重启
updateManager.applyUpdate()
}
})
updateManager.onUpdateReady(function() {
// 新版本已经准备好,可以提示用户更新
Taro.showModal({
title: '更新提示',
content: '发现新版本,是否重启应用?',
success: function (res) {
if (res.confirm) {
// 新的版本已经准备好,调用 applyUpdate 应用新版本
updateManager.applyUpdate()
}
}
}).then(res=>{
console.log(res)
})
})
updateManager.onUpdateFailed(function() {
// 新版本下载失败,可进行一些提示用户的操作
Taro.showModal({
title: '已有新版本',
content: '请删除当前小程序,重新从搜索界面打开获取最新版本',
}).then(res => {
console.log(res)
})
})
}
// 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖 // 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖
}) })

View File

@ -10,3 +10,11 @@
height: 140px height: 140px
} }
} }
.uploadPictures{
display: flex;
justify-content: center;
align-items: center;
width: 220px;
height: 254px;
border: 2px solid #d5d3d3;
}

View File

@ -2,6 +2,12 @@
<view class="form"> <view class="form">
<nut-form ref="formRef" :model-value="formData" :rules="rules"> <nut-form ref="formRef" :model-value="formData" :rules="rules">
<nut-form-item label="头像" prop="avatar"> <nut-form-item label="头像" prop="avatar">
<!-- <view class="uploadPictures" @click="chooseImage">-->
<!-- <view v-if="!formData.photo">-->
<!-- <IconFont name="uploader" size="25" color="#98a7b0"></IconFont>-->
<!-- </view>-->
<!-- <image v-else :src="minioBaseUrl +formData.photo" style="width: 100%; height: 100%"></image>-->
<!-- </view>-->
<view @click="chooseImage" size> <view @click="chooseImage" size>
<image v-if="!formData.photo" src="@/assets/logo/avatar1.png" style="width: 50px; height: 50px"></image> <image v-if="!formData.photo" src="@/assets/logo/avatar1.png" style="width: 50px; height: 50px"></image>
<image v-else :src="minioBaseUrl +formData.photo" style="width: 160px; height: 128px"></image> <image v-else :src="minioBaseUrl +formData.photo" style="width: 160px; height: 128px"></image>
@ -29,7 +35,6 @@
<nut-form-item label="工作岗位" prop="workPost"> <nut-form-item label="工作岗位" prop="workPost">
<nut-input v-model="formData.workPost" placeholder="请输入工作岗位" type="text" /> <nut-input v-model="formData.workPost" placeholder="请输入工作岗位" type="text" />
</nut-form-item> </nut-form-item>
<nut-form-item label="手机号" prop="telephone"> <nut-form-item label="手机号" prop="telephone">
<nut-input v-model="formData.telephone" placeholder="请输入手机号" type="text" /> <nut-input v-model="formData.telephone" placeholder="请输入手机号" type="text" />
</nut-form-item> </nut-form-item>
@ -85,6 +90,7 @@ import dayjs from 'dayjs'
import { SecurityUserFormParams, securityNumberByIdCard } from '@/types/subPages/projectManager/securityUserForm' import { SecurityUserFormParams, securityNumberByIdCard } from '@/types/subPages/projectManager/securityUserForm'
import { FormInstance } from '@nutui/nutui-taro' import { FormInstance } from '@nutui/nutui-taro'
import { generateSimpleObjectName, getResignedObjectUrl } from '@/utils' import { generateSimpleObjectName, getResignedObjectUrl } from '@/utils'
import {IconFont} from "@nutui/icons-vue-taro";
const SEX = enumSelectNodes('Sex') const SEX = enumSelectNodes('Sex')
const minioBaseUrl = process.env.TARO_APP_MINIO_URL const minioBaseUrl = process.env.TARO_APP_MINIO_URL
@ -112,7 +118,6 @@ const rules: FormRules = {
} }
useLoad((options) => { useLoad((options) => {
console.log(options)
type.value = options.type type.value = options.type
if (type.value === 'QcCodeInput') { if (type.value === 'QcCodeInput') {
formData.value = { formData.value = {
@ -191,7 +196,7 @@ const chooseImage = () => {
count: 1, // count: 1, //
mediaType: ['image', 'video'], mediaType: ['image', 'video'],
sourceType: ['album', 'camera'], sourceType: ['album', 'camera'],
maxDuration: 30, sizeType:['original', 'compressed'],
camera: 'front', camera: 'front',
success: async (res) => { success: async (res) => {
Url.value = res.tempFiles[0].tempFilePath Url.value = res.tempFiles[0].tempFilePath

View File

@ -12,6 +12,7 @@
"@vueuse/core": "^11.2.0", "@vueuse/core": "^11.2.0",
"ant-design-vue": "^4.2.3", "ant-design-vue": "^4.2.3",
"axios": "^1.7.5", "axios": "^1.7.5",
"dayjs": "^1.11.13",
"jsencrypt": "^3.3.2", "jsencrypt": "^3.3.2",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"pinia": "^2.2.2", "pinia": "^2.2.2",
@ -1950,8 +1951,9 @@
}, },
"node_modules/dayjs": { "node_modules/dayjs": {
"version": "1.11.13", "version": "1.11.13",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
"license": "MIT"
}, },
"node_modules/de-indent": { "node_modules/de-indent": {
"version": "1.0.2", "version": "1.0.2",

View File

@ -14,6 +14,7 @@
"@vueuse/core": "^11.2.0", "@vueuse/core": "^11.2.0",
"ant-design-vue": "^4.2.3", "ant-design-vue": "^4.2.3",
"axios": "^1.7.5", "axios": "^1.7.5",
"dayjs": "^1.11.13",
"jsencrypt": "^3.3.2", "jsencrypt": "^3.3.2",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"pinia": "^2.2.2", "pinia": "^2.2.2",

View File

@ -144,7 +144,7 @@ const props = withDefaults(defineProps<TableProMaxProps<T, P>>(), {
showExpandColumn: undefined, showExpandColumn: undefined,
sticky: undefined, sticky: undefined,
}) })
console.log(props) // console.log(props)
const slots = defineSlots<TableProMaxSlots<T>>() const slots = defineSlots<TableProMaxSlots<T>>()
@ -189,7 +189,7 @@ const {
props.dataCallback, props.dataCallback,
props.requestError props.requestError
) )
console.log('pageParams', pageParams) // console.log('pageParams', pageParams)
onMounted(() => props.requestAuto && requestGetTableData(true)) onMounted(() => props.requestAuto && requestGetTableData(true))

View File

@ -1,3 +1,4 @@
import dayjs from 'dayjs'
import { TableProMaxProps, TableProMaxSlots } from '@/types/components/table' import { TableProMaxProps, TableProMaxSlots } from '@/types/components/table'
import { EnterprisesUnitPagerQueryParams, securityUnitIdListPagerVo, securityUnitIdListParams, PoliceUnitPagerVo } from '@/types/views/unitManage/police/policeUnit.ts' import { EnterprisesUnitPagerQueryParams, securityUnitIdListPagerVo, securityUnitIdListParams, PoliceUnitPagerVo } from '@/types/views/unitManage/police/policeUnit.ts'
import { reactive, ref, h } from 'vue' import { reactive, ref, h } from 'vue'
@ -34,7 +35,20 @@ const _formParams = reactive<securityUnitIdListParams>({
homeAddress: '', homeAddress: '',
remark: '', remark: '',
}) })
const cardBlur = () => {
let value = _formParams.idCard
if (!value?.length || value.length < 18) {
_formParams.dateOfBirth = ''
return
}
const birthDate = value.substring(6, 14)
const year = birthDate.substring(0, 4)
const month = birthDate.substring(4, 6)
const day = birthDate.substring(6, 8)
var _data = new Date(parseInt(year), parseInt(month) - 1, parseInt(day))
_formParams.dateOfBirth = dayjs(_data).format('YYYY-MM-DD HH:mm:ss')
console.log('🚀 ~ cardBlur ~ _data:', _formParams.dateOfBirth)
}
const searchSecurityUnitId = debounce(async () => { const searchSecurityUnitId = debounce(async () => {
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
console.log('process.env.NODE_ENV === development') console.log('process.env.NODE_ENV === development')
@ -47,13 +61,15 @@ const searchSecurityUnitId = debounce(async () => {
} }
} else { } else {
const res = await api.get<any>('/common/querySecurityNumberByIdCard', { idCard: _formParams.idCard }) const res = await api.get<any>('/common/querySecurityNumberByIdCard', { idCard: _formParams.idCard })
if (res.data?.data?.hasOwnProperty('bayzh')) { console.log(res)
_formParams.securityNumber = res.data.data.bayzh if (res.data?.hasOwnProperty('bayzh')) {
message.success(res.data.message) _formParams.securityNumber = res.data.bayzh
message.success(res.message)
} else { } else {
message.error('未查询到保安证件号') message.error('未查询到保安证件号')
} }
} }
cardBlur()
}, 300) }, 300)
const saveOrUpdateEnterprisesUnit = (callback: Function, params, type: string) => { const saveOrUpdateEnterprisesUnit = (callback: Function, params, type: string) => {
// console.log('🚀 ~ saveOrUpdateEnterprisesUnit ~ params:', params) // console.log('🚀 ~ saveOrUpdateEnterprisesUnit ~ params:', params)
@ -165,9 +181,15 @@ const saveOrUpdateEnterprisesUnit = (callback: Function, params, type: string) =
..._formParams, ..._formParams,
}) })
message.success(resp.message) message.success(resp.message)
clearForm()
callback && callback() callback && callback()
}, },
onCancel: async () => { onCancel: async () => {
clearForm()
},
})
}
const clearForm = () => {
_formParams.snowFlakeId = '' _formParams.snowFlakeId = ''
_formParams.serviceProjectId = '' _formParams.serviceProjectId = ''
_formParams.securityUnitId = '' _formParams.securityUnitId = ''
@ -183,10 +205,7 @@ const saveOrUpdateEnterprisesUnit = (callback: Function, params, type: string) =
_formParams.noSecurityNumberDesc = '' _formParams.noSecurityNumberDesc = ''
_formParams.homeAddress = '' _formParams.homeAddress = ''
_formParams.remark = '' _formParams.remark = ''
},
})
} }
export const showEnterprisesUnit = (record_) => { export const showEnterprisesUnit = (record_) => {
// console.log('🚀 ~ showEnterprisesUnit ~ record_:', record_) // console.log('🚀 ~ showEnterprisesUnit ~ record_:', record_)
const _tableRef = ref<ComponentExposed<typeof TableProMax>>(null) const _tableRef = ref<ComponentExposed<typeof TableProMax>>(null)
@ -232,7 +251,7 @@ export const showEnterprisesUnit = (record_) => {
{ {
dataIndex: 'securityNumber', dataIndex: 'securityNumber',
title: '保安证号', title: '保安证号',
width: 120, width: 150,
ellipsis: true, ellipsis: true,
}, },
{ {

View File

@ -148,7 +148,7 @@ const columns: TableProps['columns'] = [
] ]
// const x: number = columns.reduce((a, b) => a + (b.width as number), 0) // const x: number = columns.reduce((a, b) => a + (b.width as number), 0)
const x: number = columns.reduce((a, b) => { const x: number = columns.reduce((a, b) => {
console.log('x_____________________', a, b, b.width) // console.log('x_____________________', a, b, b.width)
return a + (b.width as number) return a + (b.width as number)
}, 0) }, 0)

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<script type="module" src="/src/assets/iconfont/iconfont.js"></script> <script type="module" src="/src/assets/iconfont/iconfont.js"></script>
<title>Vite + Vue + TS</title> <title>保安后台</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@ -15,14 +15,10 @@
<SystemMenus/> <SystemMenus/>
</a-layout-sider> </a-layout-sider>
<a-layout> <a-layout>
<a-layout-header <a-layout-header class="layout-header">
class="layout-header"
>
<layout-header v-model:collapsed="collapsed"/> <layout-header v-model:collapsed="collapsed"/>
</a-layout-header> </a-layout-header>
<a-layout-content <a-layout-content class="layout-content" >
class="layout-content"
>
<router-view v-slot="{ Component, route }"> <router-view v-slot="{ Component, route }">
<transition appear name="fade-transform" mode="out-in"> <transition appear name="fade-transform" mode="out-in">
<keep-alive :include="keepAliveNames"> <keep-alive :include="keepAliveNames">

View File

@ -159,7 +159,7 @@ const transformData = (val:any,tree:any)=>{
} }
// 2 // 2
const filter: ShowSearchType['filter'] = (inputValue, path) => { const filter: ShowSearchType['filter'] = (inputValue, path) => {
return path.some(option => option.label.toLowerCase().indexOf(inputValue.toLowerCase()) > -1); return path?.some(option => option.label.toLowerCase().indexOf(inputValue?.toLowerCase()) > -1);
}; };
// //

View File

@ -1,114 +1,24 @@
<template> <template>
<div class="search" id="search"> <AdministrativeDivisionsTree v-model:value="value" :show-search="{ filter }" @change="searchAdministrativeDivisionTree"></AdministrativeDivisionsTree>
<a-input v-model="valueInput" @input="searchInput" placeholder="请进行搜索"></a-input>
<div v-if="valueInput">
<ul>
<li v-for="item in searchResults" :key="item.id">{{item}}</li>
</ul>
</div>
<div v-else >
没有找到相关结果
</div>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {onMounted, ref,} from "vue"; import AdministrativeDivisionsTree from "@/components/tree/AdministrativeDivisionsTree.vue";
const valueInput = ref('') import {ref} from "vue";
const list = ref([]) import {ShowSearchType} from "ant-design-vue/es/cascader";
const dataList = ref([
{
id:0,
value:'齐家园'
},
{
id:1,
value:'刘德华'
},
{
id:2,
value:'张学友'
},{
id:3,
value:'黎明'
},
{
id:4,
value:'家具城'
},
{
id:5,
value:'左岸春天'
},
{
id:6,
value:'麦德龙商城'
},
{
id:7,
value:'世纪酒店'
},
{
id:8,
value:'四方小学'
},
{
id:9,
value:'海洋半岛'
},
{
id:10,
value:'育英小学'
},
{
id:11,
value:'明德小学'
},{
id:12,
value:'希望小学',
}
])
const searchResults = ref([])
const searchInput = (e:any)=>{
valueInput.value = e.target.value
if (!valueInput.value) {
searchResults.value = []
return;
}else{
searchResults.value = list.value.filter(item =>
item.toLowerCase().includes(valueInput.value.toLowerCase())
);
}
}
// watch(()=>valueInput.value,(value)=>{
// if(!value){
// searchResults.value = []
// }
// })
onMounted(()=>{ const value = ref([ "110000", "110100", "110116", "110116005" ])
dataList.value.map((item)=>{
return list.value.push(item.value) const filter: ShowSearchType['filter'] = (inputValue, path) => {
}) return path?.some(option => option.label.toLowerCase().indexOf(inputValue?.toLowerCase()) > -1);
}) };
const searchAdministrativeDivisionTree = (e:Array<string>)=>{
value.value = e as any
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.search{
padding: 0 10px;
overflow: hidden;
border: 1px solid #4e71f2;
margin: 1px 5px;
border-radius: 10px;
width: 30%;
.ceShi{
height: 300px;
background: #ccc;
}
}
.nut-input{
padding: 20rpx 20rpx;
margin: 5px 0;
}
</style> </style>