update: 新增人员

This commit is contained in:
admin 2024-03-18 14:17:04 +08:00
parent 8bc4e2f487
commit 92a2a38e18
12 changed files with 474 additions and 82 deletions

View File

@ -347,6 +347,12 @@
"navigationBarTitleText": "出货分类" "navigationBarTitleText": "出货分类"
} }
}, },
{
"path": "user",
"style": {
"navigationBarTitleText": "人员管理"
}
},
{ {
"path": "components/addSupplierType", "path": "components/addSupplierType",
"style": { "style": {
@ -394,6 +400,12 @@
"style": { "style": {
"navigationBarTitleText": "新增库存卡" "navigationBarTitleText": "新增库存卡"
} }
},
{
"path": "components/addUser",
"style": {
"navigationBarTitleText": "新增人员"
}
} }
] ]
} }

View File

@ -51,7 +51,9 @@
@select="(v: any) => handleSelect(item.childKey, v)" @select="(v: any) => handleSelect(item.childKey, v)"
@close="contrlModalParams[item.childKey].isShow = false" @close="contrlModalParams[item.childKey].isShow = false"
:closeOnClickAction="true" :closeOnClickAction="true"
:scroll="true"
></u-action-sheet> ></u-action-sheet>
</block> </block>
</view> </view>
<view class="btn-box"> <view class="btn-box">
@ -168,15 +170,12 @@ const save = () => {
} }
}; };
const getTypeList = () => { const getTypeList = () => {
GoodsApi.getPage({ pageNum: 1, pageSize: 10 }).then((res) => { GoodsApi.allReCategory().then((res) => {
if (res.code === 200) { if (res.code === 200) {
contrlModalParams.reCategory.list = (res.data as any).list.map( contrlModalParams.reCategory.list = (res.data as any).map((item: any) => {
(item: any) => {
return { ...item, name: item.reCategoryName }; return { ...item, name: item.reCategoryName };
} });
);
} }
}); });
}; };

View File

@ -83,20 +83,28 @@ const rules = ref({
}, },
}); });
const contrlModalParams = reactive<any>({ const contrlModalParams = reactive<any>({
cardType: { parent: {
isShow: false, isShow: false,
title: "标题", title: "标题",
list: [{ list: [{
id: 1, id: 0,
name: '出库卡' name: '主分类'
},{
id: 2,
name: '入库卡'
}], }],
} }
}); });
const formAttrList = reactive<any>([ const formAttrList = reactive<any>([
{
name: "上级菜单",
key: "parentName",
type: "select",
required: true,
childKey: "parent",
fn: () => {
contrlModalParams.parent.isShow = true;
contrlModalParams.parent.title = "库存卡类型";
},
},
{ {
name: "出货分类", name: "出货分类",
key: "shmCategoryName", key: "shmCategoryName",
@ -107,9 +115,9 @@ const formAttrList = reactive<any>([
const handleSelect = (key: string, v: any) => { const handleSelect = (key: string, v: any) => {
contrlModalParams[key].isShow = false; contrlModalParams[key].isShow = false;
if (key === "cardType") { if (key === "parent") {
model1.formData.typeName = v.name; model1.formData.parentName = v.name;
model1.formData.type = v.id; model1.formData.parentId = v.id;
} }
}; };
@ -123,7 +131,7 @@ const save = () => {
} }
}); });
} else { } else {
GoodsApi.addShmCategory({...model1.formData, parentId: 0}).then((res) => { GoodsApi.addShmCategory({...model1.formData}).then((res) => {
if (res.code === 200) { if (res.code === 200) {
uni.redirectTo({ uni.redirectTo({
url: "/pagesApp/shipmentType", // url: "/pagesApp/shipmentType", //

View File

@ -0,0 +1,216 @@
<template>
<view class="c-card">
<u-form
labelPosition="left"
:model="model1"
:rules="rules"
ref="form"
:labelWidth="100"
:labelStyle="{ padding: '0rpx 10rpx' }"
>
<u-form-item
:prop="`formData[${item.key}]`"
:label="item.name"
:required="item.required"
v-for="(item, index) in formAttrList"
:key="index"
@click="item.fn"
>
<u-textarea
v-if="item.type === 'textarea'"
v-model="(model1.formData as any)[item.key]"
:placeholder="`请输入${item.name}`"
></u-textarea>
<u-input
v-if="item.type === 'select' || item.type === 'input'"
v-model="(model1.formData as any)[item.key]"
:placeholder="`${item.type === 'select' ? '选择' : '输入'}${
item.name
}`"
:clearable="true"
:customStyle="{}"
border="none"
>
<template #suffix>
<text>
{{ item.unit }}
</text>
</template>
</u-input>
<template #right v-if="item.type === 'select'">
<u-icon name="arrow-right"></u-icon>
</template>
</u-form-item>
</u-form>
<block v-for="(item, index) in formAttrList" :key="index">
<u-action-sheet
v-if="item.type === 'select'"
:actions="contrlModalParams[item.childKey].list"
:title="contrlModalParams[item.childKey].title"
:show="contrlModalParams[item.childKey].isShow"
@select="(v: any) => handleSelect(item.childKey, v)"
@close="contrlModalParams[item.childKey].isShow = false"
:closeOnClickAction="true"
></u-action-sheet>
</block>
</view>
<view class="btn-box">
<u-button type="primary" text="保存" @click="save()"></u-button>
</view>
</template>
<script setup lang="ts">
import { StockCardApi } from "@/services";
import { formatDate } from "@/utils";
import { DeviceType, ImagesType, OrderType, StockCardType } from "@/utils/enum";
import { onLoad } from "@dcloudio/uni-app";
import _ from "underscore";
const model1 = reactive<any>({
formData: {},
});
const rules = ref({
"userInfo.userName": {
type: "string",
required: true,
message: "请输入手机号",
trigger: ["blur", "change"],
},
"userInfo.password": {
type: "string",
required: true,
message: "请输入密码",
trigger: ["blur", "change"],
},
});
const contrlModalParams = reactive<any>({
cardType: {
isShow: false,
title: "标题",
list: [{
id: 1,
name: '出库卡'
},{
id: 2,
name: '入库卡'
}],
}
});
const formAttrList = reactive<any>([
{
name: "姓名",
key: "cardCode",
type: "input",
},
{
name: "性别",
key: "typeName",
type: "select",
childKey: "cardType",
fn: () => {
contrlModalParams.cardType.isShow = true;
contrlModalParams.cardType.title = "库存卡类型";
},
},
{
name: "用户角色",
key: "typeName",
type: "select",
childKey: "cardType",
fn: () => {
contrlModalParams.cardType.isShow = true;
contrlModalParams.cardType.title = "库存卡类型";
},
},
{
name: "用户名",
key: "cardCode",
type: "input",
required: true,
},
{
name: "密码",
key: "cardCode",
type: "input",
required: true,
},
{
name: "联系手机",
key: "cardCode",
type: "input",
},
]);
const handleSelect = (key: string, v: any) => {
contrlModalParams[key].isShow = false;
if (key === "cardType") {
model1.formData.typeName = v.name;
model1.formData.type = v.id;
}
};
const save = () => {
if (model1.formData.id) {
StockCardApi.updateStockCard(model1.formData).then((res) => {
if (res.code === 200) {
uni.redirectTo({
url: "/pagesApp/stockCard", //
});
}
});
} else {
StockCardApi.addStockCard(model1.formData).then((res) => {
if (res.code === 200) {
uni.redirectTo({
url: "/pagesApp/stockCard", //
});
}
});
}
};
onLoad((option) => {
//
const title = (option as any).title;
model1.formData = JSON.parse((option as any).item);
if (model1.formData.type === 1) {
model1.formData.typeName = '出库卡'
}else if (model1.formData.type === 2) {
model1.formData.typeName = '入库卡'
}
//
uni.setNavigationBarTitle({
title: title,
});
});
</script>
<style lang="scss" scoped>
.c-card {
background: #ffffff;
// box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
border-radius: 13rpx;
margin: 30rpx 25rpx;
padding: 10rpx 20rpx;
::v-deep .u-form-item {
height: auto;
}
::v-deep .u-form-item + .u-form-item {
border-top: 1rpx solid rgba(233, 233, 233, 0.76);
}
}
.btn-box {
margin-top: 60rpx;
display: flex;
background: #ffffff;
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 56, 93, 0.12);
border-radius: 13rpx 13rpx 0rpx 0rpx;
padding: 25rpx 50rpx;
position: sticky;
bottom: 0rpx;
z-index: 999;
::v-deep button {
border-radius: 43rpx;
}
}
</style>

View File

@ -72,7 +72,7 @@ const getList = () => {
let params: any = { let params: any = {
pageSize: 10, pageSize: 10,
pageNum: 1, pageNum: 1,
name: state.name, reProductsName: state.name,
}; };
GoodsApi.getReceiveProductListByPage(params).then((res) => { GoodsApi.getReceiveProductListByPage(params).then((res) => {
if (res.code === 200) { if (res.code === 200) {

139
src/pagesApp/user.vue Normal file
View File

@ -0,0 +1,139 @@
<template>
<view class="c-card">
<view class="search">
<u-search
placeholder="请输入人员名称"
v-model="state.name"
:showAction="false"
:bgColor="'#fff'"
:borderColor="'rgba(0, 0, 0, 0.1)'"
:placeholderColor="'#C1C1C1'"
@search="handleSearch()"
></u-search>
<view class="btn" @click="add"> 新增 </view>
</view>
<view class="box">
<view v-for="(item, index) in pageList.list" :key="index">
<view>
<view>{{ item.name }}</view>
<view>{{ item.phone }}</view>
<view>{{ item.roleVos.length > 0 ? item.roleVos[0].roleName : '-'}}</view>
</view>
<view class="op-box">
<view class="btn" @click="edit(item)"> 编辑 </view>
<view class="btn" @click="deleteCustomer(item)"> 删除 </view>
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import { ProfileApi, StockCardApi } from "@/services";
import { StockCardType } from "@/utils/enum";
const keyword = ref("");
const state = reactive<any>({
name: "",
});
const pageList: PageResult<User> = reactive({
total: 0,
list: [],
pageNum: 1,
pageSize: 10,
});
const add = () => {
uni.navigateTo({
url: "/pagesApp/components/addUser", //
});
};
const edit = (item: any) => {
uni.navigateTo({
url:
"/pagesApp/components/addUser?title=编辑人员&item=" +
JSON.stringify(item), //
});
};
const deleteCustomer = (item: any) => {
StockCardApi.updateStockCard({ isDeleted: true, id: item.id }).then((res) => {
if (res.code === 200) {
getList();
}
});
};
const handleSearch = () => {
getList();
};
const getList = () => {
let params: any = {
pageSize: 10,
pageNum: 1,
name: state.name,
};
ProfileApi.getUserListByPage(params).then((res) => {
if (res.code === 200) {
if (res.code === 200) {
(pageList as any).list = (res.data as any).list;
}
}
});
};
onMounted(() => {
getList();
});
</script>
<style lang="scss" scoped>
.c-card {
margin: 30rpx 25rpx;
.search {
display: flex;
align-items: center;
justify-content: space-between;
.btn {
background: #00dcee;
border-radius: 24rpx;
border: 1px solid #00dcee;
font-weight: 500;
font-size: 26rpx;
color: #ffffff;
margin-left: 50rpx;
padding: 6rpx 30rpx;
}
}
.box {
background: #ffffff;
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
border-radius: 13rpx;
padding: 10rpx 25rpx;
font-weight: 400;
font-size: 26rpx;
color: #000000;
line-height: 41rpx;
margin-top: 30rpx;
> view {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20rpx 0rpx;
.op-box {
display: flex;
.btn + .btn {
margin-left: 20rpx;
}
.btn {
background: #ff9d55;
border-radius: 24rpx;
font-weight: 500;
font-size: 26rpx;
color: #ffffff;
padding: 6rpx 30rpx;
}
}
}
> view + view {
border-top: 1px solid rgba(233, 233, 233, 0.76);
}
}
}
</style>

View File

@ -293,15 +293,6 @@ const appList = reactive([
}); });
}, },
}, },
{
icon: "02.png",
title: "出货补单",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentSpl", //
});
},
},
{ {
icon: "03.png", icon: "03.png",
title: "收货明细", title: "收货明细",
@ -311,15 +302,6 @@ const appList = reactive([
}); });
}, },
}, },
{
icon: "04.png",
title: "出货明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentDetail", //
});
},
},
{ {
icon: "05.png", icon: "05.png",
title: "收货作废", title: "收货作废",
@ -329,15 +311,6 @@ const appList = reactive([
}); });
}, },
}, },
{
icon: "06.png",
title: "出货作废",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentCl", //
});
},
},
{ {
icon: "07.png", icon: "07.png",
title: "供应商管理", title: "供应商管理",
@ -347,6 +320,36 @@ const appList = reactive([
}); });
}, },
}, },
{
icon: "02.png",
title: "出货补单",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentSpl", //
});
},
},
{
icon: "04.png",
title: "出货明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentDetail", //
});
},
},
{
icon: "06.png",
title: "出货作废",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentCl", //
});
},
},
{ {
icon: "08.png", icon: "08.png",
title: "客户管理", title: "客户管理",
@ -384,30 +387,39 @@ const appList = reactive([
}, },
}, },
{ {
icon: "12.png", icon: "18.png",
title: "支付明细", title: "出货分类",
fn: () => { fn: () => {
// uni.navigateTo({ uni.navigateTo({
// url: "/pagesApp/shipmentDetail", // url: "/pagesApp/shipmentType", //
// }); });
},
},
{
icon: "13.png",
title: "收入明细",
fn: () => {
// uni.navigateTo({
// url: "/pagesApp/receiveCl", //
// });
}, },
}, },
// {
// icon: "12.png",
// title: "",
// fn: () => {
// // uni.navigateTo({
// // url: "/pagesApp/shipmentDetail", //
// // });
// },
// },
// {
// icon: "13.png",
// title: "",
// fn: () => {
// // uni.navigateTo({
// // url: "/pagesApp/receiveCl", //
// // });
// },
// },
{ {
icon: "14.png", icon: "14.png",
title: "人员管理", title: "人员管理",
fn: () => { fn: () => {
// uni.navigateTo({ uni.navigateTo({
// url: "/pagesApp/shipmentCl", // url: "/pagesApp/user", //
// }); });
}, },
}, },
{ {
@ -420,16 +432,7 @@ const appList = reactive([
}, },
}, },
{ {
icon: "16.png", icon: "17.png",
title: "库存卡管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/stockCard", //
});
},
},
{
icon: "16.png",
title: "供应商分类", title: "供应商分类",
fn: () => { fn: () => {
uni.navigateTo({ uni.navigateTo({
@ -439,13 +442,15 @@ const appList = reactive([
}, },
{ {
icon: "16.png", icon: "16.png",
title: "出货分类", title: "库存卡管理",
fn: () => { fn: () => {
uni.navigateTo({ uni.navigateTo({
url: "/pagesApp/shipmentType", // url: "/pagesApp/stockCard", //
}); });
}, },
}, },
]); ]);
const tabMenuList = reactive([ const tabMenuList = reactive([

BIN
src/pagesHome/static/17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
src/pagesHome/static/18.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -36,6 +36,14 @@ export const getPage = (data: any) => {
}) })
} }
// 收货分类查询所有
export const allReCategory = () => {
return http({
method: 'GET',
url: '/api/recategory/allReCategory',
})
}
// 收货分类修改信息 // 收货分类修改信息
export const editReceiveCategory = (data: any) => { export const editReceiveCategory = (data: any) => {
return http({ return http({

View File

@ -1,4 +1,3 @@
body { body {
} }
.c-layout { .c-layout {
@ -31,3 +30,8 @@ body {
.mt-30 { .mt-30 {
margin-top: 30rpx; margin-top: 30rpx;
} }
.u-action-sheet > view:nth-child(2) {
height: 600rpx;
overflow-y: auto;
}

1
src/types/user.d.ts vendored
View File

@ -19,6 +19,7 @@ interface User {
updateUserName: string; updateUserName: string;
isDeleted: boolean; isDeleted: boolean;
cardCode?: string; // 卡号 cardCode?: string; // 卡号
roleVos?: array
} }
interface Customer { interface Customer {