lzq 2026-03-02 16:31:53 +08:00
parent 13884e323c
commit aec179db0d
7 changed files with 319 additions and 158 deletions

View File

@ -66,4 +66,7 @@ export default {
return getFileUrl('/oss/download/' + filename)
}
},
changeIdentity(id: string) {
return get<LoginTypes.UserDetail>('/customer/change_identity', {targetCustomerId: id})
},
}

View File

@ -6,6 +6,156 @@ import {
import Strings from '@/common/utils/strings.ts'
import Evt from '@/common/utils/evt.ts'
interface IdentityInfo {
identityCategory: string
customerId: string
/**
* Idcst_org.id
*/
orgId: string
/**
*
*/
customerName: string
/**
*
*/
phone: string
/**
* YueJie-->YuE-->XianFu-->
*/
settlementWay: string
settlementWayTxt: string
/**
* 0-->1-->
*/
manager: boolean
/**
* GeTiHu-->QiYe-->
*/
orgCategory: string
orgCategoryTxt: string
/**
*
*/
uscc: string
/**
*
*/
orgName: string
/**
*
*/
businessLicense: string
/**
*
*/
licenseStartTime: string
/**
*
*/
licenseEndTime: string
/**
*
*/
legalRepresentative: string
/**
*
*/
idcard: string
/**
*
*/
idcardStartTime: string
/**
*
*/
idcardEndTime: string
/**
*
*/
idcardFront: string
/**
*
*/
idcardBack: string
/**
*
*/
province: string
/**
*
*/
city: string
/**
*
*/
area: string
/**
*
*/
town: string
/**
*
*/
provinceName: string
/**
*
*/
cityName: string
/**
*
*/
areaName: string
/**
*
*/
townName: string
/**
*
*/
address: string
/**
*
*/
lng: string
/**
*
*/
lat: string
}
export const useAppUserStore = defineStore('AppUser', () => {
const userId = ref<string | null>(null)
const roles = ref<string[]>([])
@ -15,12 +165,16 @@ export const useAppUserStore = defineStore('AppUser', () => {
const token = ref<string | null>(null)
const tenantId = ref<string | null>(null)
const tenantName = ref<string | null>(null)
const currentIdentity = ref<IdentityInfo | null>(null)
const identities = ref<IdentityInfo[]>([])
const isAuthenticated = computed(() => !Strings.isEmpty(token.value))
const isXiaoNa = computed(() => {
return false
return roles.value.includes('ROLE_XiaoNa')
})
const isAdmin = computed(() => {
return true
return roles.value.includes('ROLE_ADMIN')
})
function $reset() {
@ -48,6 +202,8 @@ export const useAppUserStore = defineStore('AppUser', () => {
roles,
isXiaoNa,
isAdmin,
identities,
currentIdentity,
$reset,
}
}, {

View File

@ -5,6 +5,7 @@ import { useAppUserStore } from '@/common/app/app-user-store.ts'
import Utils from '@/common/utils'
import type { R } from '@/common/utils/http-util.ts'
import { MenuCategory } from '@/common/app/constants.ts'
import AppApi from '@/common/app/app-api.ts'
const home = {
'id': '-1',
@ -56,9 +57,11 @@ export function hasPermission(resSn?: string) {
return res != null
}
export function isAdmin() {
const appUserStore = useAppUserStore()
return appUserStore.roles != null && appUserStore.roles.includes('ROLE_ADMIN')
export function changeIdentity(id: string) {
return AppApi.changeIdentity(id)
.then(() => {
return reloadUserInfo()
})
}
export function saveFile(r: Promise<R<{ content: Blob, filename: string }>>, defaultName: string = '下载的文件') {

View File

@ -5,6 +5,7 @@
// ------
// Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399
import { GlobalComponents } from 'vue'
export {}

View File

@ -25,6 +25,8 @@ declare global {
menus: AppTypes.Menu[]
token: string
setting: UserSetting
currentCustomerId: string
currentOrgId: string
}

View File

@ -1,51 +1,18 @@
<template>
<FormPage
ref="formPage"
:action-column="actionColumn"
:left-tools="leftTools"
:paging="paging">
<template #searchFormItem="{ searchForm }">
<ElForm inline @submit.prevent="paging">
<ElFormItem label="仓库名称">
<ElInput
v-model="searchForm.warehouseName"
placeholder="仓库名称"/>
</ElFormItem>
<ElFormItem label="位置">
<ElInput
v-model="searchForm.location"
placeholder="位置"/>
</ElFormItem>
<ElFormItem label="创建人 Id sys_user.id">
<ElInput
v-model="searchForm.creatorId"
placeholder="创建人 Id sys_user.id"/>
</ElFormItem>
<ElFormItem label="修改人 Idsys_user.id">
<ElInput
v-model="searchForm.modifierId"
placeholder="修改人 Idsys_user.id"/>
</ElFormItem>
<ElFormItem label="创建时间">
<ElInput
v-model="searchForm.createTime"
placeholder="创建时间"/>
</ElFormItem>
<ElFormItem label="修改时间">
<ElInput
v-model="searchForm.modifyTime"
placeholder="修改时间"/>
</ElFormItem>
</ElForm>
</template>
<template #simpleSearchFormItem="{ searchForm }">
<ElForm inline @submit.prevent="paging">
<ElFormItem label="仓库名称">
<ElInput
v-model="searchForm.warehouseName"
placeholder="仓库名称"/>
</ElFormItem>
</ElForm>
<ATablePage
ref="tablePage"
v-bind="tablePageProps">
<template #simpleFormItem="formData">
<ElFormItem label="仓库名称">
<ElInput
v-model="formData.warehouseName"
placeholder="仓库名称"/>
</ElFormItem>
<ElFormItem label="位置">
<ElInput
v-model="formData.location"
placeholder="位置"/>
</ElFormItem>
</template>
<template #columns>
<ElTableColumn label="Id" prop="id"/>
@ -58,67 +25,71 @@
<!-- <ElTableColumn label="是否删除; 0-->未删除、1-->已删除" prop="deleted"/> -->
</template>
<WarehouseForm ref="warehouseForm" :research="research"/>
</FormPage>
</ATablePage>
</template>
<script lang="ts" setup>
import WarehouseApi from '@/pages/wh/warehouse/warehouse-api.ts'
import WarehouseForm from '@/pages/wh/warehouse/WarehouseForm.vue'
import FormPage from '@/components/page/FormPage.vue'
import type {
ActionColumnType,
ToolType,
} from '@/components/page/a-page-type.ts'
import type { ComponentExposed } from 'vue-component-type-helpers'
import ATablePage, {
type ATablePageInstance,
buildTablePageProps,
} from '@/components/a-page/a-table-page/ATablePage.tsx'
const warehouseFormIns = useTemplateRef<InstanceType<typeof WarehouseForm>>('warehouseForm')
const formPageIns = useTemplateRef<ComponentExposed<typeof FormPage>>('formPage')
const actionColumn = reactive<ActionColumnType<WarehouseTypes.SearchWarehouseResult>>({
tableActions: [
{
tooltip: '编辑',
icon: 'Edit',
type: 'success',
action({row}) {
warehouseFormIns.value?.open(row)
const tablePageIns = useTemplateRef<ATablePageInstance>('tablePage')
const tablePageProps = buildTablePageProps<WarehouseTypes.SearchWarehouseParam, WarehouseTypes.SearchWarehouseResult>({
pageLayout: {
enableHighForm: false,
},
searchForm: {
paging: WarehouseApi.paging,
},
toolBar: {
leftTools: [
{
icon: 'Plus',
label: '新建',
action() {
warehouseFormIns.value?.open()
},
},
},
{
icon: 'Delete',
loading: false,
type: 'danger',
tooltip: '删除',
confirm: {
title: '是否删除当前数据',
},
action({row}) {
return WarehouseApi.del([ row.id! ])
.then(() => {
ElMessage.success('删除成功')
return true
})
},
},
],
})
const leftTools: ToolType[] = [
{
icon: 'Plus',
label: '新建',
action() {
warehouseFormIns.value?.open()
],
},
table: {
actionColumn: {
tableActions: [
{
tooltip: '编辑',
icon: 'Edit',
type: 'success',
action({row}) {
warehouseFormIns.value?.open(row)
},
},
{
icon: 'Delete',
loading: false,
type: 'danger',
tooltip: '删除',
confirm: {
title: '是否删除当前数据',
},
action({row}) {
return WarehouseApi.del([ row.id! ])
.then(() => {
ElMessage.success('删除成功')
return true
})
},
},
],
},
},
]
})
function research() {
formPageIns.value?.doSearch()
}
function paging(param: WarehouseTypes.SearchWarehouseParam) {
return WarehouseApi.paging(param)
tablePageIns.value?.doSearch()
}
</script>

View File

@ -1,26 +1,45 @@
<template>
<AFormPanel
ref="formPanel"
:details-loader="detailsLoader"
:do-submit="doSubmit"
:rules="rules"
:title="status === 'add' ? '新建项目' : '修改项目'"
>
<template #default="{formData}">
v-bind="formPanelProps">
<template #default="formData">
<div class="form-items">
<ElFormItem label="Id" prop="id">
<ElInput v-model="formData.id" placeholder="Id"/>
</ElFormItem>
<ElFormItem label="仓库名称" prop="warehouseName">
<ElInput
v-model="formData.warehouseName"
placeholder="仓库名称"/>
<ElInput v-model="formData.warehouseName" placeholder="仓库名称"/>
</ElFormItem>
<ElFormItem label="仓库类型raw_material-原料库finished_product-成品库" prop="type">
<ElInput v-model="formData.type" placeholder="仓库类型raw_material-原料库finished_product-成品库"/>
</ElFormItem>
<ElFormItem label="所属站点 Id关联站点表主键" prop="stationId">
<ElInput v-model="formData.stationId" placeholder="所属站点 Id关联站点表主键"/>
</ElFormItem>
<ElFormItem label="位置" prop="location">
<ElInput
v-model="formData.location"
placeholder="位置"/>
<ElInput v-model="formData.location" placeholder="位置"/>
</ElFormItem>
<ElFormItem label="最大容量单位m³" prop="maxCapacity">
<ElInput v-model="formData.maxCapacity" placeholder="最大容量单位m³"/>
</ElFormItem>
<ElFormItem label="备注" prop="remark">
<ElInput v-model="formData.remark" placeholder="备注"/>
</ElFormItem>
<ElFormItem label="创建人 Id sys_user.id" prop="creatorId">
<ElInput v-model="formData.creatorId" placeholder="创建人 Id sys_user.id"/>
</ElFormItem>
<ElFormItem label="修改人 Idsys_user.id" prop="modifierId">
<ElInput v-model="formData.modifierId" placeholder="修改人 Idsys_user.id"/>
</ElFormItem>
<ElFormItem label="创建时间" prop="createTime">
<ElInput v-model="formData.createTime" placeholder="创建时间"/>
</ElFormItem>
<ElFormItem label="修改时间" prop="modifyTime">
<ElInput v-model="formData.modifyTime" placeholder="修改时间"/>
</ElFormItem>
<ElFormItem label="是否删除; 0-->未删除、1-->已删除" prop="deleted">
<ElInput v-model="formData.deleted" placeholder="是否删除; 0-->未删除、1-->已删除"/>
</ElFormItem>
</div>
</template>
</AFormPanel>
@ -28,10 +47,11 @@
<script lang="ts" setup>
import WarehouseApi from '@/pages/wh/warehouse/warehouse-api.ts'
import AFormPanel, {
type AFormPanelInstance,
buildFormPanelProps,
} from '@/components/a-form-panel/AFormPanel.tsx'
import Strings from '@/common/utils/strings.ts'
import { type FormRules } from 'element-plus'
import type { ComponentExposed } from 'vue-component-type-helpers'
import AFormPanel from '@/components/a-form-panel/AFormPanel.tsx'
const props = withDefaults(defineProps<{
research?: () => void
@ -39,54 +59,59 @@ const props = withDefaults(defineProps<{
research: () => {
},
})
const rules = reactive<FormRules<WarehouseTypes.SearchWarehouseResult>>({
id: [ {required: true, message: '请填写Id', trigger: 'blur'} ],
warehouseName: [ {required: true, message: '请填写仓库名称', trigger: 'blur'} ],
location: [ {required: true, message: '请填写位置', trigger: 'blur'} ],
creatorId: [ {required: true, message: '请填写创建人 Id sys_user.id', trigger: 'blur'} ],
modifierId: [ {required: true, message: '请填写修改人 Idsys_user.id', trigger: 'blur'} ],
createTime: [ {required: true, message: '请填写创建时间', trigger: 'blur'} ],
modifyTime: [ {required: true, message: '请填写修改时间', trigger: 'blur'} ],
deleted: [ {required: true, message: '请填写是否删除; 0-->未删除、1-->已删除', trigger: 'blur'} ],
})
const formPanelIns = useTemplateRef<ComponentExposed<typeof AFormPanel>>('formPanel')
const formPanelIns = useTemplateRef<AFormPanelInstance>('formPanel')
const status = ref<'add' | 'modify'>('add')
function detailsLoader(id?: string) {
if (Strings.isBlank(id)) {
status.value = 'add'
return Promise.resolve()
} else {
status.value = 'modify'
return WarehouseApi
.detail(id!)
.then(res => res.data)
}
}
function doSubmit(data: WarehouseTypes.SearchWarehouseResult) {
if (status.value === 'add') {
return WarehouseApi.add(data)
.then(props.research)
} else {
return WarehouseApi.modify(data)
.then(props.research)
}
}
const formPanelProps = buildFormPanelProps<WarehouseTypes.SearchWarehouseResult>({
detailsLoader(id?: string) {
if (Strings.isBlank(id)) {
status.value = 'add'
return Promise.resolve()
} else {
status.value = 'modify'
return WarehouseApi
.detail(id!)
.then(res => res.data)
}
},
doSubmit(data) {
if (status.value === 'add') {
return WarehouseApi
.add(data)
.then(props.research)
} else {
return WarehouseApi
.modify(data)
.then(props.research)
}
},
rules: {
id: [ {required: true, message: '请填写Id', trigger: 'blur'} ],
warehouseName: [ {required: true, message: '请填写仓库名称', trigger: 'blur'} ],
type: [ {required: true, message: '请填写仓库类型raw_material-原料库finished_product-成品库', trigger: 'blur'} ],
stationId: [ {required: true, message: '请填写所属站点 Id关联站点表主键', trigger: 'blur'} ],
location: [ {required: true, message: '请填写位置', trigger: 'blur'} ],
maxCapacity: [ {required: true, message: '请填写最大容量单位m³', trigger: 'blur'} ],
remark: [ {required: true, message: '请填写备注', trigger: 'blur'} ],
creatorId: [ {required: true, message: '请填写创建人 Id sys_user.id', trigger: 'blur'} ],
modifierId: [ {required: true, message: '请填写修改人 Idsys_user.id', trigger: 'blur'} ],
createTime: [ {required: true, message: '请填写创建时间', trigger: 'blur'} ],
modifyTime: [ {required: true, message: '请填写修改时间', trigger: 'blur'} ],
deleted: [ {required: true, message: '请填写是否删除; 0-->未删除、1-->已删除', trigger: 'blur'} ],
},
})
watchEffect(() => {
formPanelProps.title = status.value === 'add' ? '新建仓库信息' : '修改仓库信息信息'
})
defineExpose({
open(data?: WarehouseTypes.SearchWarehouseResult) {
formPanelIns.value?.open(data?.id)
},
})
</script>
<style lang="stylus" scoped>
.form-items {
grid-template-columns: 1fr 1fr;
:deep(.el-form-item) {
}
}
</style>