村庄管理

This commit is contained in:
du 2024-02-22 17:29:54 +08:00
parent cdc209485f
commit 9ad7a9e201
14 changed files with 303 additions and 244 deletions

View File

@ -13,8 +13,8 @@ VITE_PROXY_API = /dev-api
# http://42.193.40.239:8017/doc.html//线上 http://192.168.110.186:8017/doc.html//本地 # http://42.193.40.239:8017/doc.html//线上 http://192.168.110.186:8017/doc.html//本地
VITE_PROXY = [ ["/dev-api", "http://42.193.40.239:8017" ],["/dev-img-api", "http://file.sczysoft.com" ]] # VITE_PROXY = [ ["/dev-api", "http://42.193.40.239:8017" ],["/dev-img-api", "http://file.sczysoft.com" ]]
# VITE_PROXY = [ ["/dev-api", "http://192.168.110.186:8017" ],["/dev-img-api", "http://file.sczysoft.com" ]] VITE_PROXY = [ ["/dev-api", "http://192.168.110.186:8017" ],["/dev-img-api", "http://file.sczysoft.com" ]]
# #
VITE_GLOB_UPLOAD_URL=/dev-api VITE_GLOB_UPLOAD_URL=/dev-api
VITE_UPLOAD_IMG_URL=/dev-img-api VITE_UPLOAD_IMG_URL=/dev-img-api

23
src/api/base.ts Normal file
View File

@ -0,0 +1,23 @@
import request from "@/utils/request";
/**
*-
*/
export function orgPage(data) {
return request({
url: `/common/sysorg/orgPage`,
method: "GET",
params: data
});
}
/**
*-
*/
export function orgAdd(params) {
return request({
url: `/common/sysorg/orgAdd`,
method: "POST",
data: params
});
}

View File

@ -42,7 +42,7 @@ export default {
meta: { meta: {
icon: 'point', icon: 'point',
auth: "emer.house", auth: "emer.house",
title: '物资管理', title: '应急仓库',
breadcrumb: true, //是否显示面包屑 breadcrumb: true, //是否显示面包屑
}, },
children: [ children: [

View File

@ -7,10 +7,10 @@ const useUserStore = defineStore(
'user', 'user',
{ {
state: () => ({ state: () => ({
user: localStorage.user || '', user: localStorage.user_df || '',
account: localStorage.account || '', account: localStorage.account_df || '',
token: localStorage.token || '', token: localStorage.token_df || '',
failure_time: localStorage.failure_time || '', failure_time: localStorage.failure_time_df || '',
permissions: [] permissions: []
}), }),
getters: { getters: {
@ -31,12 +31,13 @@ const useUserStore = defineStore(
login(data) { login(data) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
loginIn(data).then(res => { loginIn(data).then(res => {
console.log(res,'res====>');
if (res.code == 1) { if (res.code == 1) {
conpanyInfo(res.data.sysuserid).then(result => { conpanyInfo(res.data.sysuserid).then(result => {
localStorage.setItem('user-df', JSON.stringify(res.data)) localStorage.setItem('user_df', JSON.stringify(res.data))
localStorage.setItem('account-df', res.data.postName) localStorage.setItem('account_df', res.data.postName)
localStorage.setItem('token-df', res.data.tokenValue) localStorage.setItem('token_df', res.data.tokenValue)
localStorage.setItem('failure_time-df', 1664008260) localStorage.setItem('failure_time_df', 1664008260)
resolve() resolve()
}).catch(error => { }).catch(error => {
reject(error) reject(error)
@ -53,10 +54,10 @@ const useUserStore = defineStore(
return new Promise(resolve => { return new Promise(resolve => {
const routeStore = useRouteStore() const routeStore = useRouteStore()
const menuStore = useMenuStore() const menuStore = useMenuStore()
localStorage.removeItem('account-df') localStorage.removeItem('account_df')
localStorage.removeItem('token-df') localStorage.removeItem('token_df')
localStorage.removeItem('user-df') localStorage.removeItem('user_df')
localStorage.removeItem('failure_time-df') localStorage.removeItem('failure_time_df')
this.account = '' this.account = ''
this.token = '' this.token = ''
this.failure_time = '' this.failure_time = ''

View File

@ -38,9 +38,9 @@ function configRequest(service: {
service.interceptors.request.use( service.interceptors.request.use(
(config: { headers: { [x: string]: string } }) => { (config: { headers: { [x: string]: string } }) => {
// tokencancel 跳转白名单不携带token // tokencancel 跳转白名单不携带token
const token = localStorage.getItem("token"); const token = localStorage.getItem("token_df");
const tokencancel = localStorage.getItem('token-cancel'); const tokencancel = localStorage.getItem('token-cancel');
let user= JSON.parse(localStorage.getItem("user")); let user= JSON.parse(localStorage.getItem("user_df"));
if (!tokencancel && token) { if (!tokencancel && token) {
// config.headers["userToken"] = token || ""; // config.headers["userToken"] = token || "";
config.headers[user.tokenName] = user.tokenValue; config.headers[user.tokenName] = user.tokenValue;
@ -62,13 +62,13 @@ function configRequest(service: {
const code = (res.data && res.data.code) || res.status; const code = (res.data && res.data.code) || res.status;
const msg = res.data.msg; const msg = res.data.msg;
if (code === 401) { if (code === 401) {
localStorage.setItem('token', "") localStorage.setItem('token_df', "")
} else if (code === 500) { } else if (code === 500) {
alert(msg); alert(msg);
return Promise.reject("error"); return Promise.reject("error");
} else if (code == 28) { } else if (code == 28) {
alert("登录状态已过期,请重新登录!"); alert("登录状态已过期,请重新登录!");
localStorage.setItem('token', "") localStorage.setItem('token_df', "")
location.reload(); location.reload();
} else { } else {
return res.data; return res.data;

View File

@ -16,23 +16,43 @@
:model="formData" :model="formData"
class="center-form" class="center-form"
> >
<el-form-item label="村庄名称" prop="cName" style="width: 94%"> <el-form-item label="村庄名称" prop="orgname">
<el-input <el-input
placeholder="请输入" placeholder="请输入"
type="input" type="input"
v-model="formData.cName" v-model="formData.orgname"
/> />
</el-form-item> </el-form-item>
<el-form-item label="村长姓名" prop="name"> <el-form-item prop="superiororgcode" label="所属区域">
<el-input placeholder="请输入" type="input" v-model="formData.name" /> <el-cascader
ref="cascader"
v-model="formData.superiororgcode"
placeholder="请选择地区"
:options="orgList"
:props="{
checkStrictly: true,
label: 'orgname',
value: 'orgcode',
}"
clearable
></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="联系电话" prop="phone"> <el-form-item label="负责人" prop="charger">
<el-input placeholder="请输入负责人" type="input" v-model="formData.charger" />
</el-form-item>
<el-form-item label="联系电话" prop="telephone">
<el-input <el-input
placeholder="请输入" placeholder="请输入联系电话"
type="input" type="input"
v-model="formData.phone" v-model="formData.telephone"
/> />
</el-form-item> </el-form-item>
<el-form-item prop="sortId" label="排序">
<el-input-number
v-model="formData.sortId"
:min="1"
></el-input-number>
</el-form-item>
</el-form> </el-form>
</div> </div>
</BaseDialog> </BaseDialog>
@ -40,7 +60,12 @@
<script setup lang='ts'> <script setup lang='ts'>
import { reactive, ref, onMounted, watch } from "vue"; import { reactive, ref, onMounted, watch } from "vue";
import { ElMessage, FormInstance, FormRules } from "element-plus"; import { ElMessage, FormInstance, FormRules } from "element-plus";
import { areaTree } from "@/api/account";
import { orgAdd } from "@/api/base";
import useUserStore from "@/store/modules/user";
const userStore = useUserStore();
const user = ref(JSON.parse(userStore.userInfo));
const userId = ref(user.value.userId);
const props = defineProps({ const props = defineProps({
visible: { visible: {
type: Boolean, type: Boolean,
@ -49,12 +74,15 @@ const props = defineProps({
form: Object, form: Object,
}); });
const emits = defineEmits(["close"]); const emits = defineEmits(["close"]);
const titleName = ref("新增"); const titleName = ref("新增");
// //
const formRef = ref<FormInstance>(); const formRef = ref<FormInstance>();
const ruleForm = reactive<FormRules>({ const ruleForm = reactive<FormRules>({
itemTitle: [{ required: true, message: "请输入内容", trigger: "blur" }], orgname: [{ required: true, message: "请输入村庄名称", trigger: "blur" }],
sortId: [{ required: true, message: "请输入排序", trigger: "blur" }],
superiororgcode: [{ required: true, message: "请选择所属地区", trigger: "blur" }],
}); });
const formData = ref<any>({}); const formData = ref<any>({});
@ -62,25 +90,62 @@ const formData = ref<any>({});
const handleSubmit = () => { const handleSubmit = () => {
formRef.value?.validate((valid) => { formRef.value?.validate((valid) => {
if (valid) { if (valid) {
let params = {
orgname:formData.value.orgname,
superiororgcode:'',
sortId:formData.value.sortId,
charger:formData.value.charger,
telephone:formData.value.telephone,
orgcode:formData.value.orgcode?formData.value.orgcode:null,
};
if (formData.value.superiororgcode instanceof Array) {
params.superiororgcode = formData.value.superiororgcode[formData.value.superiororgcode.length - 1];
}else{
params.superiororgcode = formData.value.superiororgcode;
};
orgAdd(params).then((res: any) => {
if (res.code == 1) {
ElMessage({
message: "保存成功",
type: "success",
});
onclone();
}else{
ElMessage({
message: res.message,
type: "error",
});
}
});
} }
return false; return false;
}); });
}; };
//
const orgList = ref([]);
const getareaTree = () => {
areaTree(userId.value).then((res: any) => {
orgList.value = res.data;
});
};
// //
const onclone = () => { const onclone = () => {
formRef.value?.clearValidate(); formRef.value?.clearValidate();
formData.value = {}; formData.value = {};
emits("close"); emits("close");
}; };
onMounted(() => {}); onMounted(() => {
getareaTree();
});
watch( watch(
() => props.form, () => props.form,
(val: any) => { (val: any) => {
titleName.value = val.id ? "编辑" : "新增"; titleName.value = val.id ? "编辑" : "新增";
formData.value = JSON.parse(JSON.stringify(val)); formData.value = JSON.parse(JSON.stringify(val));
} }
); );
</script> </script>
<style scoped></style> <style scoped lang="scss">
</style>

View File

@ -18,7 +18,7 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 30%"> <div style="width: 30%;">
<div> <div>
<el-input <el-input
v-model="search" v-model="search"
@ -55,21 +55,21 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="cName" prop="orgname"
:resizable="true" :resizable="true"
align="center" align="center"
label="村庄名称" label="村庄名称"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="name" prop="charger"
:resizable="true" :resizable="true"
align="center" align="center"
label="村长" label="负责人"
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="phone" prop="telephone"
:resizable="true" :resizable="true"
align="center" align="center"
label="联系电话" label="联系电话"
@ -89,13 +89,6 @@
<svg-icon name="edit" class="icon"></svg-icon> <svg-icon name="edit" class="icon"></svg-icon>
<span class="edit">编辑</span> <span class="edit">编辑</span>
</span> </span>
<span
class="operate"
@click="(currentItem = scope.row), (visible = true)"
>
<svg-icon name="detail" class="icon"></svg-icon>
<span class="detail">详情</span>
</span>
<span class="operate" @click="del(scope.row, '删除')"> <span class="operate" @click="del(scope.row, '删除')">
<svg-icon name="delete" class="icon"></svg-icon> <svg-icon name="delete" class="icon"></svg-icon>
<span class="func">删除</span> <span class="func">删除</span>
@ -119,7 +112,7 @@
<add-edit <add-edit
:visible="dialogVisible" :visible="dialogVisible"
:form="currentItem" :form="currentItem"
@close="(dialogVisible = false), (currentItem = {})" @close="onclone()"
/> />
</div> </div>
</template> </template>
@ -129,9 +122,11 @@ import { ElMessageBox } from "element-plus";
import { onMounted, reactive, ref } from "vue"; import { onMounted, reactive, ref } from "vue";
import AddEdit from "./dialog/add-edit.vue"; import AddEdit from "./dialog/add-edit.vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { orgPage } from "@/api/base";
const router = useRouter(); const router = useRouter();
const search = ref([]); const tableDataloading = ref(false);
const search = ref('');
const currentPage = ref(1); const currentPage = ref(1);
const pageSize = ref(10); const pageSize = ref(10);
const total = ref(0); const total = ref(0);
@ -152,8 +147,29 @@ const del = (item, tips) => {
type: "warning", type: "warning",
}).then(() => {}); }).then(() => {});
}; };
const getList = () => {
tableDataloading.value = true;
let params = {
limit: pageSize.value,
page: currentPage.value,
condition: search.value,
};
orgPage(params).then((res: any) => {
tableData.value = res.data.list;
total.value = res.data.total;
tableDataloading.value = false;
});
};
onMounted(() => {}); //
const onclone = () => {
dialogVisible.value = false;
currentItem.value = {};
getList();
};
onMounted(() => {
getList();
});
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -161,17 +177,12 @@ onMounted(() => {});
width: 100%; width: 100%;
background: #fff; background: #fff;
border-radius: 0.26042vw; border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1); box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%; height: 100%;
padding: 0.83333vw; padding: 0.83333vw;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden !important; overflow-x: hidden !important;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
.table { .table {
margin-top: 16px; margin-top: 16px;
} }

View File

@ -117,15 +117,9 @@
:disabled="props.readonly" :disabled="props.readonly"
> >
<img <img
<<<<<<< HEAD:src/views/emergency/equip/inventory/AddWarehouse.vue
v-if="addPostFactorForm.equipPhoto"
:src="addPostFactorForm.equipPhoto"
style="width: 100%; height: 100%;"
=======
v-if="addForm.equipPhoto" v-if="addForm.equipPhoto"
:src="baseImgUrl + addForm.equipPhoto" :src="baseImgUrl + addForm.equipPhoto"
style="width: 100%; height: 100%" style="width: 100%; height: 100%;"
>>>>>>> e36af856493c21fdd846c5881a8f69d73962aad5:src/views/emergency/house/dialog/add-equip-dialog.vue
/> />
<el-icon v-else class="avatar-uploader-icon"> <el-icon v-else class="avatar-uploader-icon">
<Plus /> <Plus />

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="percentage-content"> <div class="percentage-content">
<div class="content"> <div class="content">
<div style="margin-bottom: 16px" class="h-layout space-between h-center"> <div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div> <div>
<div class="h-layout"> <div class="h-layout">
<div <div
@ -17,7 +17,7 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 30%"> <div style="width: 30%;">
<div> <div>
<el-input <el-input
v-model="search" v-model="search"
@ -214,14 +214,18 @@ onMounted(() => {
// flex: auto; // flex: auto;
background: #fff; background: #fff;
border-radius: 0.26042vw; border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1); box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%; height: 100%;
padding: 0.83333vw; padding: 0.83333vw;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden !important; overflow-x: hidden !important;
/* stylelint-disable-next-line property-no-vendor-prefix */
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-o-box-sizing: border-box; -o-box-sizing: border-box;
/* stylelint-disable-next-line property-no-vendor-prefix */
-ms-box-sizing: border-box; -ms-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }

View File

@ -38,23 +38,7 @@
clearable clearable
></el-cascader> ></el-cascader>
</el-form-item> </el-form-item>
<el-form-item prop="possession" label="队伍层级">
<el-select v-model="addPostFactorForm.possession" placeholder="请选择队伍层级">
<el-option
v-for="item in levelList"
:key="item.value"
:label="item.value"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="personnum" label="人数">
<el-input-number
v-model="addPostFactorForm.personnum"
:min="1"
></el-input-number>
</el-form-item>
<el-form-item prop="chkbillname" label="负责人"> <el-form-item prop="chkbillname" label="负责人">
<el-input <el-input
placeholder="请输入负责人" placeholder="请输入负责人"
@ -69,7 +53,13 @@
> >
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="chkbillname" style="width: 100%" label="队伍简介"> <el-form-item prop="personnum" label="人数">
<el-input-number
v-model="addPostFactorForm.personnum"
:min="1"
></el-input-number>
</el-form-item>
<el-form-item prop="chkbillname" style="width: 100%;" label="队伍简介">
<el-input <el-input
placeholder="请输入队伍简介" placeholder="请输入队伍简介"
type="textarea" type="textarea"
@ -97,12 +87,6 @@ const userId = ref(user.value.userId);
const planId = ref(""); const planId = ref("");
const indexClassify = ref([]); const indexClassify = ref([]);
const fileList = ref<any>([]); const fileList = ref<any>([]);
const levelList = ref([
{ value: "区级" },
{ value: "镇级" },
{ value: "园区" },
{ value: "企业" },
]);
const ruleForm = reactive<FormRules>({ const ruleForm = reactive<FormRules>({
teamname: [{ required: true, message: "请输入队伍名称", trigger: "change" }], teamname: [{ required: true, message: "请输入队伍名称", trigger: "change" }],
orgcode: [{ required: true, message: "请选择所属区域", trigger: "blur" }], orgcode: [{ required: true, message: "请选择所属区域", trigger: "blur" }],

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="percentage-content"> <div class="percentage-content">
<div class="content"> <div class="content">
<div style="margin-bottom: 16px" class="h-layout space-between h-center"> <div style="margin-bottom: 16px;" class="h-layout space-between h-center">
<div> <div>
<div class="h-layout"> <div class="h-layout">
<div class="tool-item" @click="(dialogVisible = true), (form = {})"> <div class="tool-item" @click="(dialogVisible = true), (form = {})">
@ -14,7 +14,7 @@
</div> </div>
</div> </div>
</div> </div>
<div style="width: 30%"> <div style="width: 30%;">
<div> <div>
<el-input <el-input
v-model="search" v-model="search"
@ -53,7 +53,7 @@
> >
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="orgcode" prop="areaName"
:resizable="true" :resizable="true"
align="center" align="center"
label="所属区域" label="所属区域"
@ -183,6 +183,7 @@ const todetail = (id) => {
const onclone = () => { const onclone = () => {
dialogVisible.value = false; dialogVisible.value = false;
form.value = {}; form.value = {};
getList();
}; };
onMounted(() => { onMounted(() => {
getList(); getList();
@ -194,15 +195,12 @@ onMounted(() => {
// flex: auto; // flex: auto;
background: #fff; background: #fff;
border-radius: 0.26042vw; border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1); box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%; height: 100%;
padding: 0.83333vw; padding: 0.83333vw;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden !important; overflow-x: hidden !important;
-moz-box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box;
-o-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
</style> </style>

View File

@ -57,30 +57,6 @@
clearable clearable
></el-cascader> ></el-cascader>
</el-form-item> </el-form-item>
<el-form-item label="队伍层级">
<el-select
:readonly="!readonly"
v-model="detailForm.possession"
placeholder="请选择队伍层级"
>
<el-option
v-for="item in levelList"
:key="item.value"
:label="item.value"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="人数" prop="personnum">
<el-input
type="number"
min="0"
:readonly="!readonly"
v-model="detailForm.personnum"
onkeyup="value=value.replace(/[^\d^\.]+/g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')"
></el-input>
</el-form-item>
<el-form-item label="负责人"> <el-form-item label="负责人">
<el-input <el-input
:readonly="!readonly" :readonly="!readonly"
@ -93,7 +69,16 @@
v-model="detailForm.principaltel" v-model="detailForm.principaltel"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="队伍简介" style="width: 100%"> <el-form-item label="人数" prop="personnum">
<el-input
type="number"
min="0"
:readonly="!readonly"
v-model="detailForm.personnum"
onkeyup="value=value.replace(/[^\d^\.]+/g,'').replace('.','$#$').replace(/\./g,'').replace('$#$','.')"
></el-input>
</el-form-item>
<el-form-item label="队伍简介" style="width: 100%;">
<el-input <el-input
:readonly="!readonly" :readonly="!readonly"
type="textarea" type="textarea"
@ -136,7 +121,7 @@
:data="tableData" :data="tableData"
border border
header-row-class-name="el-one-header" header-row-class-name="el-one-header"
style="width: 100%; margin-top: 30px" style="width: 100%; margin-top: 30px;"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
> >
<el-table-column type="selection" align="center" width="55"> <el-table-column type="selection" align="center" width="55">
@ -307,12 +292,6 @@ const ruleForm = reactive<FormRules>({
personnum: [{ required: true, message: "请输入人数", trigger: "change" }], personnum: [{ required: true, message: "请输入人数", trigger: "change" }],
}); });
const readonly = ref(false); const readonly = ref(false);
const levelList = ref([
{ value: "区级" },
{ value: "镇级" },
{ value: "园区" },
{ value: "企业" },
]);
const tableDataloading = ref(false); const tableDataloading = ref(false);
const tableData = ref([]); const tableData = ref([]);
@ -447,15 +426,14 @@ onMounted(() => {
width: 100%; width: 100%;
background: #fff; background: #fff;
border-radius: 0.26042vw; border-radius: 0.26042vw;
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1); box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
height: 100%; height: 100%;
padding: 0.83333vw; padding: 0.83333vw;
overflow-y: scroll; overflow-y: scroll;
overflow-x: hidden !important; overflow-x: hidden !important;
-moz-box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box; box-sizing: border-box;
-o-box-sizing: border-box; box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
.detailForm-content { .detailForm-content {

View File

@ -56,6 +56,7 @@ function handleLogin() {
path: "/home/index", path: "/home/index",
}); });
router.go(0); router.go(0);
}) })
.catch((res) => { .catch((res) => {
getCode(); getCode();