Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
2b3be91747
|
@ -1,2 +1,2 @@
|
|||
TARO_APP_ID="wx8902ddbfddb820d1"
|
||||
TARO_APP_ID="wx0acd1c4fcf94bdd3"
|
||||
TARO_APP_BASE_API="http://172.10.10.93:8765"
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
"name": "collect_information",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"description": "智慧派出所信息采集小程序",
|
||||
"description": "警保联勤联动小程序",
|
||||
"templateInfo": {
|
||||
"name": "default",
|
||||
"typescript": true,
|
||||
|
@ -71,6 +71,7 @@
|
|||
"@tarojs/webpack5-runner": "3.6.25",
|
||||
"@types/jest": "^29.3.1",
|
||||
"@types/node": "^18.15.11",
|
||||
"@types/qrcode": "^1.5.5",
|
||||
"@types/webpack-env": "^1.13.6",
|
||||
"@typescript-eslint/eslint-plugin": "^6.2.0",
|
||||
"@typescript-eslint/parser": "^6.2.0",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"miniprogramRoot": "dist/",
|
||||
"projectname": "collect_information",
|
||||
"description": "智慧派出所信息采集小程序",
|
||||
"description": "警保联勤联动小程序",
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
"es6": false,
|
||||
|
@ -29,4 +29,4 @@
|
|||
"tabSize": 2
|
||||
},
|
||||
"appid": "wx8902ddbfddb820d1"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@ export default defineAppConfig({
|
|||
pages: [
|
||||
'pages/policeManager/index',
|
||||
'pages/policeDetails/index',
|
||||
|
||||
'pages/myProject/myProject',
|
||||
'pages/projectDetails/projectDetails',
|
||||
'pages/form/form'
|
||||
|
|
|
@ -10,25 +10,25 @@ const pinia = createPinia()
|
|||
// pinia.use(piniaPluginPersistedstate)
|
||||
const App = createApp({
|
||||
onShow(options) {
|
||||
try {
|
||||
const store = useCounterStore()
|
||||
const token = Taro.getStorageSync('token')
|
||||
console.log(token)
|
||||
if (token) {
|
||||
Taro.switchTab({
|
||||
url: '/pages/mine/mine'
|
||||
// url: '/pages/projectManager/index/index'
|
||||
|
||||
})
|
||||
store.setSelected(2)
|
||||
} else {
|
||||
console.log(2222)
|
||||
}
|
||||
console.log('App onShow.')
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
|
||||
}
|
||||
// try {
|
||||
// const store = useCounterStore()
|
||||
// const token = Taro.getStorageSync('token')
|
||||
// console.log(token)
|
||||
// if (token) {
|
||||
// Taro.switchTab({
|
||||
// url: '/pages/mine/mine'
|
||||
// // url: '/pages/projectManager/index/index'
|
||||
//
|
||||
// })
|
||||
// store.setSelected(2)
|
||||
// } else {
|
||||
// console.log(2222)
|
||||
// }
|
||||
// console.log('App onShow.')
|
||||
// } catch (err) {
|
||||
// console.log(err)
|
||||
//
|
||||
// }
|
||||
|
||||
},
|
||||
// 入口组件不需要实现 render 方法,即使实现了也会被 taro 所覆盖
|
||||
|
|
|
@ -1,225 +0,0 @@
|
|||
<template>
|
||||
<view>
|
||||
<nut-form ref="formRef" :model-value="formParams" :rules="rules">
|
||||
<nut-form-item label="街道/社区:" prop="streetCommunity">
|
||||
<view @click="streetCommunitySmallCommunityVisible = true">
|
||||
{{ streetCommunitySmallCommunityLabel || "请选择街道/小区" }}
|
||||
</view>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="楼栋/门户:" prop="residentialDivision">
|
||||
<view @click="buildingFloorHouseVisible = true">
|
||||
{{ buildingFloorHouseLabel || "请选择楼栋/门户" }}
|
||||
</view>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="姓名:" prop="name">
|
||||
<nut-input
|
||||
v-model="formParams.name"
|
||||
placeholder="请输入姓名"
|
||||
type="text"
|
||||
/>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="性别:" prop="sex">
|
||||
<nut-radio-group v-model="formParams.sex" direction="horizontal">
|
||||
<nut-radio v-for="item in SEX" :key="item.value" :label="item.value"
|
||||
>{{ item.label }}
|
||||
</nut-radio>
|
||||
</nut-radio-group>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="出生日期:" prop="dataOfBirth">
|
||||
<view @click="dataOfBirthVisible = true">
|
||||
{{
|
||||
dayjs(formParams.dataOfBirth).format("YYYY-MM-DD") ||
|
||||
"请选择出生日期"
|
||||
}}
|
||||
</view>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="身份证:" prop="idCard">
|
||||
<nut-input
|
||||
v-model="formParams.idCard"
|
||||
placeholder="请输入身份证"
|
||||
type="text"
|
||||
/>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="手机号:" prop="phone">
|
||||
<nut-input
|
||||
v-model="formParams.phone"
|
||||
placeholder="请输入手机号码"
|
||||
type="text"
|
||||
/>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="户籍地:" prop="householdRegistrationAddress">
|
||||
<nut-input
|
||||
v-model="formParams.householdRegistrationAddress"
|
||||
placeholder="请输入户籍地"
|
||||
type="text"
|
||||
/>
|
||||
</nut-form-item>
|
||||
</nut-form>
|
||||
<nut-cascader
|
||||
v-model:visible="streetCommunitySmallCommunityVisible"
|
||||
v-model="formParams.streetCommunitySmallCommunityIds"
|
||||
:options="streetCommunitySmallCommunityTreeData"
|
||||
title="选择街道/社区"
|
||||
text-key="label"
|
||||
@change="streetCommunitySmallCommunityChange"
|
||||
></nut-cascader>
|
||||
<nut-cascader
|
||||
v-model:visible="buildingFloorHouseVisible"
|
||||
v-model="formParams.buildingFloorHouseIds"
|
||||
:options="buildingFloorHouseTreeData"
|
||||
title="选择楼栋/门户"
|
||||
text-key="label"
|
||||
@change="buildingFloorHouseChange"
|
||||
></nut-cascader>
|
||||
<nut-popup v-model:visible="dataOfBirthVisible" position="bottom">
|
||||
<nut-date-picker
|
||||
v-model="formParams.dataOfBirth"
|
||||
:min-date="min"
|
||||
:max-date="max"
|
||||
:three-dimensional="false"
|
||||
@confirm="dataOfBirthVisible = false"
|
||||
></nut-date-picker>
|
||||
</nut-popup>
|
||||
</view>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import { SEX } from "@/enums";
|
||||
import dayjs from "dayjs";
|
||||
import { ref, watch } from "vue";
|
||||
import type { FormRules } from "@nutui/nutui-taro/dist/types/__VUE/form/types";
|
||||
import api from "@/request";
|
||||
import type { FormInstance } from "@nutui/nutui-taro";
|
||||
import { useLoad } from "@tarojs/taro";
|
||||
|
||||
const emits = defineEmits(["update:modelValue"]);
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
modelValue: PersonnelInformation;
|
||||
}>(),
|
||||
{
|
||||
modelValue: () => {
|
||||
return {
|
||||
name: "",
|
||||
sex: 0,
|
||||
dataOfBirth: new Date(),
|
||||
idCard: "",
|
||||
phone: "",
|
||||
householdRegistrationAddress: "",
|
||||
streetCommunitySmallCommunityIds: [],
|
||||
buildingFloorHouseIds: [],
|
||||
} as PersonnelInformation;
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
const defaultParams = { ...props.modelValue };
|
||||
|
||||
const formRef = ref<FormInstance>();
|
||||
const formParams = ref<PersonnelInformation>({
|
||||
...props.modelValue,
|
||||
});
|
||||
const rules: FormRules = {
|
||||
name: [
|
||||
{ required: true, message: "请输入姓名" },
|
||||
{
|
||||
validator: (value) => {
|
||||
return !(value.length < 2 || value.length >= 20);
|
||||
},
|
||||
message: "名字在2~20字符之间",
|
||||
},
|
||||
],
|
||||
sex: [{ required: true, message: "请选择性别" }],
|
||||
idCard: [
|
||||
{ required: true, message: "请输入身份证" },
|
||||
{
|
||||
regex:
|
||||
/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
|
||||
message: "身份证格式错误",
|
||||
},
|
||||
],
|
||||
phone: [
|
||||
{ required: true, message: "请输入手机号码" },
|
||||
{
|
||||
regex: /^400(-?)[0-9]{7}$|^1\d{10}$|^0[0-9]{2,3}-[0-9]{7,8}$/,
|
||||
message: "手机格式错误",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
watch(formParams.value, (n) => {
|
||||
emits("update:modelValue", n);
|
||||
});
|
||||
|
||||
const dataOfBirthVisible = ref(false);
|
||||
const min = new Date(1920, 0, 1);
|
||||
const max = new Date(2025, 10, 1);
|
||||
|
||||
defineExpose<{
|
||||
validate: () => Promise<unknown>;
|
||||
resetForm: () => void;
|
||||
}>({
|
||||
validate: async (): Promise<unknown> => {
|
||||
const result = (await formRef.value?.validate()) as any;
|
||||
if (result.valid) {
|
||||
return Promise.resolve("校验通过");
|
||||
}
|
||||
return Promise.reject("校验不通过");
|
||||
},
|
||||
resetForm: () => {
|
||||
for (let key in defaultParams) {
|
||||
formParams.value[key] = defaultParams[key];
|
||||
}
|
||||
streetCommunitySmallCommunityLabel.value = "";
|
||||
buildingFloorHouseLabel.value = "";
|
||||
buildingFloorHouseTreeData.value = [];
|
||||
},
|
||||
});
|
||||
|
||||
const streetCommunitySmallCommunityTreeData = ref<TreeNode<string>[]>([]);
|
||||
const streetCommunitySmallCommunityVisible = ref<boolean>(false);
|
||||
const streetCommunitySmallCommunityLabel = ref<string>("");
|
||||
const streetCommunitySmallCommunityChange = (
|
||||
value: string,
|
||||
pathNodes: Record<string, any>[]
|
||||
) => {
|
||||
buildingFloorHouseLabel.value = "";
|
||||
formParams.value.buildingFloorHouseIds = [];
|
||||
buildingFloorHouseTreeData.value = [];
|
||||
streetCommunitySmallCommunityLabel.value = pathNodes
|
||||
.map((e) => e.text)
|
||||
.join(",");
|
||||
getBuildingFloorHouseTreeBySmallCommunityId(value[value.length - 1]);
|
||||
};
|
||||
|
||||
const buildingFloorHouseVisible = ref<boolean>(false);
|
||||
const buildingFloorHouseLabel = ref<string>("");
|
||||
const buildingFloorHouseChange = (
|
||||
value: string,
|
||||
pathNodes: Record<string, any>[]
|
||||
) => (buildingFloorHouseLabel.value = pathNodes.map((e) => e.text).join(","));
|
||||
const buildingFloorHouseTreeData = ref<TreeNode<string>[]>([]);
|
||||
|
||||
const getBuildingFloorHouseTreeBySmallCommunityId = (
|
||||
smallCommunityId: string
|
||||
) => {
|
||||
api
|
||||
.get<TreeNode<string>[]>(
|
||||
"/residentialDivision/getBuildingFloorHouseTreeBySmallCommunityId",
|
||||
{ smallCommunityId }
|
||||
)
|
||||
.then((resp) => {
|
||||
buildingFloorHouseTreeData.value = resp.data as TreeNode<string>[];
|
||||
});
|
||||
};
|
||||
|
||||
useLoad(() => {
|
||||
api
|
||||
.get<TreeNode<string>[]>(
|
||||
"/residentialDivision/streetCommunitySmallCommunityTree"
|
||||
)
|
||||
.then((resp) => {
|
||||
streetCommunitySmallCommunityTreeData.value =
|
||||
resp.data as TreeNode<string>[];
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -1,6 +1,5 @@
|
|||
<template>
|
||||
<view class="form">
|
||||
{{ formData }}
|
||||
<nut-form ref="formRef" :model-value="formData" :rules="rules">
|
||||
<nut-form-item label="姓名" prop="name">
|
||||
<nut-input v-model="formData.name" placeholder="请输入姓名" type="text"/>
|
||||
|
@ -25,6 +24,10 @@
|
|||
<nut-form-item label="工作岗位" prop="workPost">
|
||||
<nut-input v-model="formData.workPost" placeholder="请输入工作岗位" type="text"/>
|
||||
</nut-form-item>
|
||||
|
||||
<nut-form-item label="手机号" prop="telephone">
|
||||
<nut-input v-model="formData.telephone" placeholder="请输入手机号" type="text"/>
|
||||
</nut-form-item>
|
||||
<nut-form-item label="籍贯" prop="nativePlace">
|
||||
<nut-input v-model="formData.nativePlace" placeholder="请输入籍贯" type="text"/>
|
||||
</nut-form-item>
|
||||
|
@ -68,6 +71,8 @@ const showPicker = ref(false)
|
|||
const formData = ref<formDate>({} as any)
|
||||
const formRef = ref(null)
|
||||
|
||||
const qrcodeId = ref()
|
||||
|
||||
const rules: FormRules = {
|
||||
name: [
|
||||
{required: true, message: "请输入姓名"},
|
||||
|
@ -79,11 +84,33 @@ const rules: FormRules = {
|
|||
regex: /^(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))((0[1-9])|([12][0-9])|(30|31))\d{3}(\d|X)$)/,
|
||||
message: "身份证格式错误",
|
||||
},
|
||||
],
|
||||
telephone:[
|
||||
{required: true, message: "请输入手机号"},
|
||||
]
|
||||
};
|
||||
|
||||
useLoad((options) => {
|
||||
formData.value = JSON.parse(options.item)
|
||||
qrcodeId.value = options
|
||||
console.log(JSON.parse(options.item))
|
||||
if(options.id === '2'){
|
||||
formData.value = {
|
||||
serviceProjectId: JSON.parse(options.item).serviceProjectId,
|
||||
securityUnitId:JSON.parse(options.item).securityUnitId,
|
||||
name: '',
|
||||
workPost: '',
|
||||
sex: 0,
|
||||
nativePlace: '',
|
||||
idCard: '',
|
||||
dateOfBirth: null,
|
||||
securityNumber: '',
|
||||
remark: '',
|
||||
homeAddress: '',
|
||||
telephone:''
|
||||
}
|
||||
}else{
|
||||
formData.value = JSON.parse(options.item)
|
||||
}
|
||||
})
|
||||
|
||||
const idCardBlur = (e: any) => {
|
||||
|
@ -99,10 +126,17 @@ const idCardBlur = (e: any) => {
|
|||
formData.value.dateOfBirth = new Date(parseInt(year), parseInt(month) - 1, parseInt(day))
|
||||
}
|
||||
|
||||
const url = ref('')
|
||||
const submit = () => {
|
||||
formRef.value?.validate().then(async ({valid}) => {
|
||||
if (valid) {
|
||||
const resp = await api.post('/projectManageIndex/saveOrUpdateSecurityUser', formData.value)
|
||||
if( qrcodeId.value.id === '1'){
|
||||
url.value = '/projectManageIndex/saveOrUpdateSecurityUser'
|
||||
}else{
|
||||
url.value = '/miniProgramUser/qrCodeFormInputSecurityUser'
|
||||
}
|
||||
console.log(formData.value)
|
||||
const resp = await api.post(`${ url.value}`, formData.value)
|
||||
Taro.showToast({
|
||||
title: resp.message,
|
||||
icon: 'success',
|
||||
|
@ -112,6 +146,7 @@ const submit = () => {
|
|||
formData.value = {
|
||||
snowFlakeId: undefined,
|
||||
serviceProjectId: formData.value.serviceProjectId,
|
||||
securityUnitId:formData.value.securityUnitId,
|
||||
name: '',
|
||||
workPost: '',
|
||||
telephone: '',
|
||||
|
|
|
@ -1,23 +1,31 @@
|
|||
<template>
|
||||
<view class="myProject">
|
||||
<view class="myProjectItem" v-for="(item,index) in myProjectList" :key="index">
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<text>{{ item?.name }}</text>
|
||||
<!--<text>进行中</text>-->
|
||||
</view>
|
||||
<view class="myProjectIndex">地址:
|
||||
<text>{{ item?.provinceName }}{{ item.cityName }}{{ item.districtsName }}{{ item.streetName }}</text>
|
||||
</view>
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<text>联系人:{{ item?.contactPersonInfo.name }}</text>
|
||||
<text>电话:{{ item?.contactPersonInfo.telephone }}</text>
|
||||
</view>
|
||||
<view class="project">
|
||||
<view @click="projectClick(items,item?.name)" v-for="(items,index) in item.serviceProjectList" :key="index">
|
||||
{{ items.name }}
|
||||
<view v-if="number !== 0">
|
||||
<view class="myProjectItem" v-for="(item,index) in myProjectList" :key="index">
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<text>{{ item?.name }}</text>
|
||||
<!--<text>进行中</text>-->
|
||||
</view>
|
||||
<view class="myProjectIndex">地址:
|
||||
<text>{{ item?.provinceName }}{{ item.cityName }}{{ item.districtsName }}{{ item.streetName }}</text>
|
||||
</view>
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<text>联系人:{{ item?.contactPersonInfo.name }}</text>
|
||||
<text>电话:{{ item?.contactPersonInfo.telephone }}</text>
|
||||
</view>
|
||||
<view class="project">
|
||||
<view @click="projectClick(items,item?.name)" v-for="(items,index) in item.serviceProjectList" :key="index">
|
||||
{{ items.name }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view v-else class="myProject" >
|
||||
<nut-empty image="empty" description="暂无项目">
|
||||
<div style="margin-top: 10px">
|
||||
</div>
|
||||
</nut-empty>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
@ -28,12 +36,16 @@ import Taro from "@tarojs/taro";
|
|||
import './myproject.scss'
|
||||
|
||||
const myProjectList = ref<MyProjectList[]>()
|
||||
|
||||
const number = ref(0)
|
||||
const getMyServiceProject = async () => {
|
||||
const resp = await api.get<MyProjectList[]>(`/projectManageIndex/getMyServiceProject`)
|
||||
myProjectList.value = resp.data
|
||||
number.value = resp.data.length
|
||||
}
|
||||
|
||||
const projectClick = (items: ServiceProjectList, name: string) => {
|
||||
console.log(items)
|
||||
Taro.navigateTo({
|
||||
url: `/subPages/pages/projectDetails/projectDetails?name=${name}&item=${JSON.stringify(items)}`,
|
||||
})
|
||||
|
|
|
@ -5,8 +5,7 @@
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
.projectDetailsItem{
|
||||
height: 18%;
|
||||
margin: 20px;
|
||||
margin: 10px 20px 10px 20px;
|
||||
border-radius: 10px;
|
||||
background: #ffffff;
|
||||
padding: 15px;
|
||||
|
@ -14,6 +13,10 @@
|
|||
line-height: 65px;
|
||||
color: #333333;
|
||||
.projectDetailsIndex{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
line-height: 44rpx;
|
||||
margin-bottom: 20px;
|
||||
.content{
|
||||
color: #9b9b9f;
|
||||
}
|
||||
|
@ -35,7 +38,16 @@
|
|||
align-items: center;
|
||||
flex-wrap: wrap;
|
||||
font-size: 24px;
|
||||
margin-bottom: 15px
|
||||
margin-bottom: 15px;
|
||||
.projectDetailsTableIndex{
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
text-align: center;
|
||||
view{
|
||||
width: 70px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +60,12 @@
|
|||
right: 0;
|
||||
width: 100%;
|
||||
}
|
||||
.nutPopup{
|
||||
width: 300px;
|
||||
height: 100px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,11 +1,26 @@
|
|||
<template>
|
||||
<view class="projectDetails">
|
||||
<view class="projectDetailsItem">
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<text style="font-size: 18px">{{ nameValue ? nameValue : '' }}{{ '-----' + detailsList?.name }}项目</text>
|
||||
<!--<text>进行中</text>-->
|
||||
<view class="projectDetailsItem" style="line-height: 50rpx">
|
||||
<view>
|
||||
<view style="display: flex;justify-content: space-between">
|
||||
<text style="font-size: 18px">{{ nameValue ? nameValue : '' }}{{ '-----' + detailsList?.name }}项目</text>
|
||||
<!-- <text>进行中</text>-->
|
||||
</view>
|
||||
<view>
|
||||
<view style="float: left;width: 50%;" class="content">
|
||||
经理名称:{{ detailsList?.projectManagerMiniProgramUserInfo.name }}
|
||||
</view>
|
||||
<view class="content">手机号:{{ detailsList?.projectManagerMiniProgramUserInfo.telephone }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="projectDetailsItem">
|
||||
<view class="projectDetailsIndex">
|
||||
<nut-row>
|
||||
<nut-col :span="24">
|
||||
<view class="content">保安证件号:{{ detailsList?.idNumber }}</view>
|
||||
</nut-col>
|
||||
</nut-row>
|
||||
<nut-row>
|
||||
<nut-col :span="12">
|
||||
<view class="content">工作人员数量:{{ detailsList?.staffTotal }}</view>
|
||||
|
@ -23,10 +38,7 @@
|
|||
</nut-col>
|
||||
</nut-row>
|
||||
<nut-row>
|
||||
<nut-col :span="16">
|
||||
<view class="content">证件号:{{ detailsList?.idNumber }}</view>
|
||||
</nut-col>
|
||||
<nut-col :span="8">
|
||||
<nut-col :span="4">
|
||||
<view class="content">户数:{{ detailsList?.houseTotal }}</view>
|
||||
</nut-col>
|
||||
</nut-row>
|
||||
|
|
|
@ -66,6 +66,27 @@
|
|||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.qrcodeVisibleUrl{
|
||||
margin-bottom: 5px;
|
||||
image {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.warp{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
.warpItem{
|
||||
width: 90%;
|
||||
height: 50%;
|
||||
text-align: center;
|
||||
.rect{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -85,9 +85,8 @@
|
|||
</view>
|
||||
<view class="projectDetailsButton">
|
||||
<nut-button style="width: 45%" type="info" @click="formAdd">项目人员录入</nut-button>
|
||||
<nut-button style="width: 45%" type="info">二维码录入</nut-button>
|
||||
<nut-button style="width: 45%" type="info" @click="generateMiniProgramQRCode">二维码录入</nut-button>
|
||||
</view>
|
||||
|
||||
<view>
|
||||
<nut-dialog
|
||||
content="是否确认删除该用户?"
|
||||
|
@ -107,10 +106,31 @@
|
|||
</slot>
|
||||
</nut-dialog>
|
||||
</view>
|
||||
<!-- 二维码-->
|
||||
<view>
|
||||
<nut-dialog no-cancel-btn content="二维码" v-model:visible="qrcodeVisible">
|
||||
<slot>
|
||||
<view class="qrcodeVisibleUrl" @click="showImage">
|
||||
<image style="width: 100%" show-menu-by-longpress='1' :lazy-load="true" :src="qrCodeImage" mode="aspectFit" />
|
||||
</view>
|
||||
</slot>
|
||||
</nut-dialog>
|
||||
</view>
|
||||
<nut-overlay v-model:visible="showOverlay">
|
||||
<view class="warp">
|
||||
<view class="warpItem">
|
||||
<movable-area :scale-area="true">
|
||||
<movable-view direction="all" style="width: 348px; height: 300px;" :scale="true" :scale-min="1" :scale-max="4" :scale-value="1" :x="2" :y="10">
|
||||
<image class="rect" show-menu-by-longpress='1' :src="qrCodeImage" mode="widthFix" />
|
||||
</movable-view>
|
||||
</movable-area>
|
||||
</view>
|
||||
</view>
|
||||
</nut-overlay>
|
||||
</view>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import Taro, {useLoad, useDidShow} from "@tarojs/taro";
|
||||
import Taro, {useDidShow, useLoad} from "@tarojs/taro";
|
||||
import './projectDetails.scss'
|
||||
import {ref} from "vue";
|
||||
import api from "@/request/index";
|
||||
|
@ -119,12 +139,13 @@ import * as dayjs from 'dayjs'
|
|||
const serviceProjectDetails = ref()
|
||||
const nameValue = ref('')
|
||||
const projectData = ref<Records[]>([])
|
||||
|
||||
|
||||
const content = ref<Records>({} as any)
|
||||
// 控制模态框的显示状态
|
||||
const confirmVisible = ref(false);
|
||||
const detailVisible = ref(false)
|
||||
const qrcodeVisible = ref(false)
|
||||
const showOverlay = ref(false)
|
||||
|
||||
useLoad(async (options: MyProjectList) => {
|
||||
nameValue.value = options.name
|
||||
serviceProjectDetails.value = await JSON.parse(options.item)
|
||||
|
@ -154,6 +175,7 @@ const projectDetailsTable = async () => {
|
|||
const formAdd = () => {
|
||||
const params = {
|
||||
serviceProjectId: serviceProjectDetails.value.snowFlakeId,
|
||||
securityUnitId:serviceProjectDetails.value.securityUnitId,
|
||||
snowFlakeId: undefined,
|
||||
name: '',
|
||||
workPost: '',
|
||||
|
@ -163,9 +185,10 @@ const formAdd = () => {
|
|||
dateOfBirth: null,
|
||||
securityNumber: '',
|
||||
remark: '',
|
||||
homeAddress: ''
|
||||
homeAddress: '',
|
||||
telephone:''
|
||||
}
|
||||
Taro.navigateTo({url: `/subPages/pages/form/form?item=${JSON.stringify(params)}`})
|
||||
Taro.navigateTo({url: `/subPages/pages/form/form?item=${JSON.stringify(params)}&&id=${1}`})
|
||||
}
|
||||
const total = ref<any>(null)
|
||||
const current = ref(1)
|
||||
|
@ -209,7 +232,6 @@ const dialogOk = async () => {
|
|||
})
|
||||
initServiceProjectSecurityUserList()
|
||||
}
|
||||
|
||||
// 详情
|
||||
const detail = (item) => {
|
||||
detailVisible.value = true
|
||||
|
@ -220,6 +242,36 @@ const projectEdit = (item) => {
|
|||
Taro.navigateTo({url: `/subPages/pages/form/form?item=${JSON.stringify(params)}`})
|
||||
}
|
||||
|
||||
const qrCodeImage = ref('')
|
||||
const generateMiniProgramQRCode = ()=>{
|
||||
const params = {
|
||||
securityUnitId:serviceProjectDetails.value.securityUnitId,
|
||||
serviceProjectId:serviceProjectDetails.value.snowFlakeId
|
||||
}
|
||||
const value = JSON.stringify(params)
|
||||
const paramsData = {
|
||||
path:`/subPages/pages/form/form?item=${value}&id=${2}`,
|
||||
width:200,
|
||||
}
|
||||
qrcodeVisible.value = true
|
||||
Taro.request({
|
||||
url: 'http://172.10.10.93:8765/projectManageIndex/shareForm_QR_Code',
|
||||
method:'GET',
|
||||
data:paramsData,
|
||||
responseType: 'arraybuffer',
|
||||
success(res) {
|
||||
const base64 = Taro.arrayBufferToBase64(res.data);
|
||||
qrCodeImage.value = 'data:image/jpeg;base64,' + base64
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const showImage = ()=>{
|
||||
showOverlay.value = true
|
||||
qrcodeVisible.value = false
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
|
||||
|
|
|
@ -60,3 +60,19 @@ interface TreeNode<T> {
|
|||
extData?: Record<string, any>,
|
||||
children?: TreeNode<T>[]
|
||||
}
|
||||
|
||||
|
||||
interface TokenInfo<T = Record<string, any>> {
|
||||
name: string;
|
||||
value: string;
|
||||
extData?: T
|
||||
}
|
||||
|
||||
/**
|
||||
* 基本枚举类型
|
||||
*/
|
||||
interface BaseEnum<T, E = Record<string, any>> {
|
||||
value: T;
|
||||
label: string;
|
||||
extData: E;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
interface formDate {
|
||||
snowFlakeId?: string;
|
||||
securityUnitId:string;
|
||||
serviceProjectId: string;
|
||||
name?: string;
|
||||
workPost?: string;
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
remark?: string;
|
||||
serviceProjectList: ServiceProjectList[];
|
||||
snowFlakeId?: string;
|
||||
securityUnitId:string;
|
||||
street?: string;
|
||||
streetName?:string;
|
||||
}
|
||||
|
|
|
@ -113,7 +113,8 @@ const columns: TableProps['columns'] = [
|
|||
dataIndex: 'enterprisesUnitName',
|
||||
title: '企事业单位名称',
|
||||
width: 150,
|
||||
ellipsis: true
|
||||
ellipsis: true,
|
||||
|
||||
},
|
||||
{
|
||||
dataIndex:'type',
|
||||
|
@ -192,7 +193,7 @@ const columns: TableProps['columns'] = [
|
|||
<a-button type="primary" danger>删除</a-button>
|
||||
</a-popconfirm>
|
||||
<a-button type="primary" onClick={ async ()=>{
|
||||
console.log(record)
|
||||
// console.log(record)
|
||||
visible.value = true
|
||||
serviceTitle.value = '编辑服务项目'
|
||||
if(record.isRecruitSecurity === null ){
|
||||
|
@ -207,7 +208,7 @@ const columns: TableProps['columns'] = [
|
|||
idNumberDisabled.value = true
|
||||
}
|
||||
}
|
||||
formParams.value.projectManagerMiniProgramUserId = record.projectManagerMiniProgramUserName
|
||||
formParams.value.projectManagerMiniProgramUserId = record.projectManagerMiniProgramUserId
|
||||
formParams.value.snowFlakeId = record.snowFlakeId
|
||||
formParams.value.name = record.name
|
||||
formParams.value.type = record.type.value
|
||||
|
@ -218,9 +219,7 @@ const columns: TableProps['columns'] = [
|
|||
formParams.value.houseTotal = record.houseTotal
|
||||
formParams.value.staffTotal = record.staffTotal
|
||||
formParams.value. securityUserTotal = record.securityUserTotal
|
||||
|
||||
formParams.value.enterprisesUnitId = record.enterprisesUnitName
|
||||
enterprisesUnitId.value = record.enterprisesUnitId
|
||||
formParams.value.administrativeDivisionCodes = record.enterprisesUnitAdministrativeDivisionCodes
|
||||
}}>编辑</a-button>
|
||||
</a-space>
|
||||
|
@ -278,7 +277,11 @@ const formItemOptions = ref<FormProMaxItemOptions<serviceProjectSaveOrUpdatePara
|
|||
label:'企事业单位',
|
||||
options:enterprisesUnitIdList,
|
||||
componentsProps:{
|
||||
allowClear:true
|
||||
allowClear:true,
|
||||
onChange:async (value:string)=>{
|
||||
console.log(value)
|
||||
enterprisesUnitId.value = value
|
||||
}
|
||||
}
|
||||
},
|
||||
type: {
|
||||
|
@ -368,10 +371,10 @@ const formItemOptions = ref<FormProMaxItemOptions<serviceProjectSaveOrUpdatePara
|
|||
label: '备注',
|
||||
}
|
||||
})
|
||||
const UnitId = ref('')
|
||||
const submit = async()=>{
|
||||
await formRef.value.validate()
|
||||
const snowFlakeId = ref('')
|
||||
const UnitId = ref('')
|
||||
if (serviceTitle.value === '新增服务项目') {
|
||||
snowFlakeId.value = ''
|
||||
UnitId.value = formParams.value.enterprisesUnitId
|
||||
|
|
Loading…
Reference in New Issue