Merge remote-tracking branch 'origin/main'
# Conflicts: # src/components/common/Header.vue # src/components/common/Mask.vue # src/components/inventory/goods/Edit.vue # src/components/inventory/goods/Search.vue # src/components/outpatient/PharmaceuticalConsumables.vue # src/components/outpatient/ServiceItems.vue # src/components/settings/ItemEdit.vue # src/components/settings/Search.vue # src/components/settings/SectionEdit.vue # src/views/inventory/apply.vue # src/views/inventory/check.vue # src/views/inventory/goods.vue # src/views/inventory/supplier.vue
This commit is contained in:
commit
b774eb806b
|
|
@ -10,7 +10,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.8.4",
|
"axios": "^1.8.4",
|
||||||
"echarts": "^5.6.0",
|
"echarts": "^5.6.0",
|
||||||
"element-plus": "^2.9.7",
|
"element-plus": "^2.9.9",
|
||||||
"pinia": "^3.0.1",
|
"pinia": "^3.0.1",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-router": "^4.5.0"
|
"vue-router": "^4.5.0"
|
||||||
|
|
@ -2511,9 +2511,9 @@
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
"node_modules/element-plus": {
|
"node_modules/element-plus": {
|
||||||
"version": "2.9.7",
|
"version": "2.9.9",
|
||||||
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.7.tgz",
|
"resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.9.9.tgz",
|
||||||
"integrity": "sha512-6vjZh5SXBncLhUwJGTVKS5oDljfgGMh6J4zVTeAZK3YdMUN76FgpvHkwwFXocpJpMbii6rDYU3sgie64FyPerQ==",
|
"integrity": "sha512-gN553+xr7ETkhJhH26YG0fERmd2BSCcQKslbtR8fats0Mc0yCtZOXr00bmoPOt5xGzhuRN1TWc9+f1pCaiA0/Q==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ctrl/tinycolor": "^3.4.1",
|
"@ctrl/tinycolor": "^3.4.1",
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^1.8.4",
|
"axios": "^1.8.4",
|
||||||
"echarts": "^5.6.0",
|
"echarts": "^5.6.0",
|
||||||
"element-plus": "^2.9.7",
|
"element-plus": "^2.9.9",
|
||||||
"pinia": "^3.0.1",
|
"pinia": "^3.0.1",
|
||||||
"vue": "^3.5.13",
|
"vue": "^3.5.13",
|
||||||
"vue-router": "^4.5.0"
|
"vue-router": "^4.5.0"
|
||||||
|
|
|
||||||
|
|
@ -20,5 +20,10 @@
|
||||||
"name": "代理名称",
|
"name": "代理名称",
|
||||||
"qrCode": "qrCode.png",
|
"qrCode": "qrCode.png",
|
||||||
"phone": "18888888888"
|
"phone": "18888888888"
|
||||||
|
},
|
||||||
|
"user": {
|
||||||
|
"name": "智慧医疗诊所",
|
||||||
|
"logo": "/static/images/default_logo.png",
|
||||||
|
"version": "1.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 223 KiB |
|
|
@ -12,7 +12,7 @@
|
||||||
<router-link to="/statistics" class="menu-item" active-class="active active8">统计</router-link>
|
<router-link to="/statistics" class="menu-item" active-class="active active8">统计</router-link>
|
||||||
<router-link to="/settings" class="menu-item" active-class="active active9">设置</router-link>
|
<router-link to="/settings" class="menu-item" active-class="active active9">设置</router-link>
|
||||||
<div class="btn">
|
<div class="btn">
|
||||||
<el-button :icon="Right" style="float: right;color: #fff" @click="logout">退出登录</el-button>
|
<el-button :icon="Right" style="float: right;color: #fff" @click="logout" text>退出登录</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ _width.value = width == null ? 1200 : width;
|
||||||
_height.value = height == null ? 800 : height;
|
_height.value = height == null ? 800 : height;
|
||||||
_close.value = close == null ? true : close;
|
_close.value = close == null ? true : close;
|
||||||
|
|
||||||
|
|
||||||
watch(() => isShow, (newVal) => {
|
watch(() => isShow, (newVal) => {
|
||||||
_isShow.value = newVal == null ? false : newVal;
|
_isShow.value = newVal == null ? false : newVal;
|
||||||
});
|
});
|
||||||
|
|
@ -104,6 +103,7 @@ const closeBtn = () => {
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
line-height: 32px;
|
line-height: 32px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
.close-icon {
|
.close-icon {
|
||||||
color: #6e6e6e;
|
color: #6e6e6e;
|
||||||
|
|
|
||||||
|
|
@ -1,22 +1,46 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Panel from "@/components/common/Panel.vue";
|
import Panel from "@/components/common/Panel.vue";
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {onMounted, ref, defineModel} from "vue";
|
||||||
|
import {formatDate} from "@/utils/dateUtils.ts";
|
||||||
|
import {loadConfig} from "@/utils/config.ts";
|
||||||
|
|
||||||
|
const decryptedText = ref<any>({})
|
||||||
|
const ciphertext = ref<any>('')
|
||||||
|
const init = async () => {
|
||||||
|
ciphertext.value = await post("common/auth/get");
|
||||||
|
decryptedText.value = await post("common/auth/check");
|
||||||
|
}
|
||||||
|
onMounted(async () => {
|
||||||
|
await init()
|
||||||
|
if(localStorage.getItem('logoUrl')){
|
||||||
|
getImageUrl(localStorage.getItem('logoUrl'))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const userMessage = defineModel<any>()
|
||||||
|
const imageUrl = ref<any>()
|
||||||
|
const getImageUrl = (url: any) => {
|
||||||
|
loadConfig().then(res => {
|
||||||
|
imageUrl.value = res.base_url + 'file/getImage/' + url
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Panel title="药房基本信息" class="info">
|
<Panel title="药房基本信息" class="info">
|
||||||
<div class="info-content">
|
<div class="info-content">
|
||||||
<img class="image" src="/static/images/home/app-head.png" alt="app">
|
<img class="image" :src="imageUrl? imageUrl:userMessage.logo" alt="app">
|
||||||
<div class="app_info-content-text">
|
<div class="app_info-content-text">
|
||||||
<el-tooltip
|
<el-tooltip
|
||||||
effect="dark"
|
effect="dark"
|
||||||
:content="'仁德大药房连锁有限公司'"
|
:content="userMessage.name"
|
||||||
placement="bottom-start"
|
placement="bottom-start"
|
||||||
>
|
>
|
||||||
<div class="app_info-title">仁德大药房连锁有限公司</div>
|
<div class="app_info-title">{{ userMessage.name }}</div>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<div>软件版本:V2.5.1</div>
|
<div>软件版本:{{ userMessage.version }}</div>
|
||||||
<div style="margin: 10px 0">授权到期:2024-12-31</div>
|
<div style="margin: 10px 0">授权到期:{{ formatDate(decryptedText.expiryDate) }}</div>
|
||||||
<div>版本类型:专业版</div>
|
<div>版本类型: {{ decryptedText.rule == 1 ? "禁用医保" : decryptedText.rule == 2 ? "全部开放" : "暂无" }}</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
|
||||||
|
|
@ -1,133 +1,140 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="add-panel">
|
<Mask :width="1200" :height="600" :top="100" :is-show="isShow" @close="exit" title="新增领用" :show-footer="true">
|
||||||
<div class="top">
|
<div class="add-panel">
|
||||||
<el-form :inline=true label-position="top" :model="formData" label-width="auto">
|
<div class="top">
|
||||||
<el-form-item label="领用人">
|
<el-form :inline=true label-position="top" :model="formData" label-width="auto">
|
||||||
<el-input v-model="formData.name" disabled></el-input>
|
<el-form-item label="领用人">
|
||||||
</el-form-item>
|
<el-input v-model="formData.name" disabled></el-input>
|
||||||
<el-form-item label="备注" style="width: 50%">
|
</el-form-item>
|
||||||
<el-input v-model="formData.remark"></el-input>
|
<el-form-item label="备注" style="width: 50%">
|
||||||
</el-form-item>
|
<el-input v-model="formData.remark"></el-input>
|
||||||
</el-form>
|
</el-form-item>
|
||||||
</div>
|
</el-form>
|
||||||
<div class="table_content">
|
|
||||||
<div class="add_apply">
|
|
||||||
<span>领用药品</span>
|
|
||||||
<div class="search">
|
|
||||||
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<table class="simple-table" style="margin-top: 15px;width: 100% ;height:300px ;max-height:550px">
|
<div class="table_content">
|
||||||
<thead>
|
<div class="add_apply">
|
||||||
<tr>
|
<span>领用药品</span>
|
||||||
<th>名称</th>
|
<div class="search">
|
||||||
<th>批次</th>
|
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
|
||||||
<th>生产批号</th>
|
</div>
|
||||||
<th>有效期</th>
|
</div>
|
||||||
<th>当前库存</th>
|
<table class="simple-table" style="margin-top: 15px;width: 100% ;height:300px ;max-height:550px">
|
||||||
<th>出库数量</th>
|
<thead>
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<template v-for="(item,index) in tableList">
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.name }}</td>
|
<th>名称</th>
|
||||||
<td>
|
<th>批次</th>
|
||||||
<el-select
|
<th>生产批号</th>
|
||||||
v-model="item.selectList"
|
<th>有效期</th>
|
||||||
multiple
|
<th>当前库存</th>
|
||||||
@change="addLine(item)"
|
<th>出库数量</th>
|
||||||
:teleported="false"
|
|
||||||
style="width: 100px;"
|
|
||||||
collapse-tags
|
|
||||||
popper-class="table-select">
|
|
||||||
<div class="select-header">
|
|
||||||
<span>批次ID</span>
|
|
||||||
<span>生产批号</span>
|
|
||||||
<span>入库数据</span>
|
|
||||||
<span>有效期</span>
|
|
||||||
<span>进价</span>
|
|
||||||
</div>
|
|
||||||
<el-option
|
|
||||||
v-for="(subItem,subIndex) in item.batchList"
|
|
||||||
:key="subItem.id"
|
|
||||||
:label="subItem.id"
|
|
||||||
:value="subItem.id">
|
|
||||||
<div class="option-row">
|
|
||||||
<span>{{ subItem.id }}</span>
|
|
||||||
<span>{{ subItem.productionBatchCode }}</span>
|
|
||||||
<span>{{ subItem.productionDate }}</span>
|
|
||||||
<span>{{ subItem.expiryDate }}</span>
|
|
||||||
<span>{{ subItem.purchaseUnitPrice }}</span>
|
|
||||||
</div>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag == 1">
|
|
||||||
{{ item.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.totalOutWholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag == 1">
|
|
||||||
{{ item.totalFragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<template v-for="subItem in item.children">
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<template v-for="(item,index) in tableList">
|
||||||
<tr>
|
<tr>
|
||||||
<td>-</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>-</td>
|
|
||||||
<td>{{ subItem.productionBatchCode }}</td>
|
|
||||||
<td>{{ subItem.expiryDate }}</td>
|
|
||||||
<td>
|
<td>
|
||||||
{{ subItem.wholeNumber }}{{ subItem.packagingUnit }}
|
<el-select
|
||||||
|
v-model="item.selectList"
|
||||||
|
multiple
|
||||||
|
@change="addLine(item)"
|
||||||
|
:teleported="false"
|
||||||
|
style="width: 100px;"
|
||||||
|
collapse-tags
|
||||||
|
popper-class="table-select">
|
||||||
|
<div class="select-header">
|
||||||
|
<span>批次ID</span>
|
||||||
|
<span>生产批号</span>
|
||||||
|
<span>入库数据</span>
|
||||||
|
<span>有效期</span>
|
||||||
|
<span>进价</span>
|
||||||
|
</div>
|
||||||
|
<el-option
|
||||||
|
v-for="(subItem,subIndex) in item.batchList"
|
||||||
|
:key="subItem.id"
|
||||||
|
:label="subItem.id"
|
||||||
|
:value="subItem.id">
|
||||||
|
<div class="option-row">
|
||||||
|
<span>{{ subItem.id }}</span>
|
||||||
|
<span>{{ subItem.productionBatchCode }}</span>
|
||||||
|
<span>{{ subItem.productionDate }}</span>
|
||||||
|
<span>{{ subItem.expiryDate }}</span>
|
||||||
|
<span>{{ subItem.purchaseUnitPrice }}</span>
|
||||||
|
</div>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ item.wholeNumber }}{{ item.packagingUnit }}
|
||||||
<template v-if="item.trdnFlag == 1">
|
<template v-if="item.trdnFlag == 1">
|
||||||
{{ subItem.fragmentNumber }}{{ subItem.minPackagingUnit }}
|
{{ item.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<el-input v-model.number="subItem.outWholeNumber" size="small" style="width: 50px"
|
{{ item.totalOutWholeNumber }}{{ item.packagingUnit }}
|
||||||
@change="changeOutNumber(item)">
|
<template v-if="item.trdnFlag == 1">
|
||||||
<template #suffix>
|
{{ item.totalFragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
{{ item.packagingUnit }}
|
</template>
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
<el-input v-model.number="subItem.outFragmentNumber" size="small" style="width: 50px"
|
|
||||||
@change="changeOutNumber(item)" v-if="item.trdnFlag == 1">
|
|
||||||
<template #suffix>
|
|
||||||
{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</el-input>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<template v-for="subItem in item.children">
|
||||||
|
<tr>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>{{ subItem.productionBatchCode }}</td>
|
||||||
|
<td>{{ subItem.expiryDate }}</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.wholeNumber }}{{ subItem.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag == 1">
|
||||||
|
{{ subItem.fragmentNumber }}{{ subItem.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<el-input v-model.number="subItem.outWholeNumber" size="small" style="width: 50px"
|
||||||
|
@change="changeOutNumber(item)">
|
||||||
|
<template #suffix>
|
||||||
|
{{ item.packagingUnit }}
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
<el-input v-model.number="subItem.outFragmentNumber" size="small" style="width: 50px"
|
||||||
|
@change="changeOutNumber(item)" v-if="item.trdnFlag == 1">
|
||||||
|
<template #suffix>
|
||||||
|
{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</tbody>
|
||||||
</tbody>
|
</table>
|
||||||
</table>
|
</div>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<el-button type="primary" @click="save">保存</el-button>
|
<el-button type="primary" @click="save">保存</el-button>
|
||||||
<el-button type="primary" @click="exit">关闭</el-button>
|
<el-button type="primary" @click="exit">关闭</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
</div>
|
</Mask>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref, unref} from "vue";
|
import {onMounted, ref, unref} from "vue";
|
||||||
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
|
||||||
|
const isShow = ref<any>(false)
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
const exit = () => {
|
const exit = () => {
|
||||||
|
isShow.value = false
|
||||||
emit('close')
|
emit('close')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
|
|
@ -162,7 +169,7 @@ const goodsSelectCallBack = (inventory: any) => {
|
||||||
if (findIndexForTableList(inventory.goodId) != -1) {
|
if (findIndexForTableList(inventory.goodId) != -1) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
post("inventory/goods/getByGoodsId", {goodsId: inventory.goodId}).then((res: any) => {
|
post("inventory/goods/getByGoodsId", {goodsId: inventory.goodId,isZero:false}).then((res: any) => {
|
||||||
inventory.batchList = res.inventoryGoodsList
|
inventory.batchList = res.inventoryGoodsList
|
||||||
inventory.minPackagingUnit = res.minPackagingUnit
|
inventory.minPackagingUnit = res.minPackagingUnit
|
||||||
inventory.trdnFlag = res.trdnFlag
|
inventory.trdnFlag = res.trdnFlag
|
||||||
|
|
@ -173,7 +180,6 @@ const goodsSelectCallBack = (inventory: any) => {
|
||||||
inventory.packagingUnit = res.packagingUnit
|
inventory.packagingUnit = res.packagingUnit
|
||||||
tableList.value.push(inventory)
|
tableList.value.push(inventory)
|
||||||
})
|
})
|
||||||
console.log(inventory)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface childCheck {
|
interface childCheck {
|
||||||
|
|
@ -228,7 +234,6 @@ const addLine = (row: any) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
row.children = children;
|
row.children = children;
|
||||||
console.log("row", row)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const changeOutNumber = (row: any) => {
|
const changeOutNumber = (row: any) => {
|
||||||
|
|
@ -244,25 +249,6 @@ const changeOutNumber = (row: any) => {
|
||||||
console.log(row)
|
console.log(row)
|
||||||
}
|
}
|
||||||
const save = () => {
|
const save = () => {
|
||||||
let children = [];
|
|
||||||
console.log(tableList.value)
|
|
||||||
// for (let i = 0; i < tableList.value.length; i++) {
|
|
||||||
// let item = tableList.value[i];
|
|
||||||
// for (let j = 0; j < item.children.length; j++) {
|
|
||||||
// let child = item.children[j];
|
|
||||||
// if (child && (child.outWholeNumber > 0 || child.outFragmentNumber > 0)) {
|
|
||||||
// let childrenItem = {
|
|
||||||
// id: child.id,
|
|
||||||
// outWholeNumber: child.outWholeNumber,
|
|
||||||
// outFragmentNumber: child.outFragmentNumber,
|
|
||||||
// }
|
|
||||||
// children.push(childrenItem);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// let dataJson = JSON.stringify(tableList.value);
|
|
||||||
post("inventory/apply/create", {useInfo: formData.value, data: tableList.value}).then((res: any) => {
|
post("inventory/apply/create", {useInfo: formData.value, data: tableList.value}).then((res: any) => {
|
||||||
exit()
|
exit()
|
||||||
})
|
})
|
||||||
|
|
@ -270,15 +256,14 @@ const save = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
const getUserInfo = () => {
|
const getUserInfo = () => {
|
||||||
|
isShow.value = true
|
||||||
post("manager/user/verify", null).then((res: any) => {
|
post("manager/user/verify", null).then((res: any) => {
|
||||||
formData.value.useUserId = res.id;
|
formData.value.useUserId = res.id;
|
||||||
formData.value.name = res.name;
|
formData.value.name = res.name;
|
||||||
formData.value.username = res.username;
|
formData.value.username = res.username;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
defineExpose({getUserInfo})
|
||||||
getUserInfo()
|
|
||||||
})
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.simple-table {
|
.simple-table {
|
||||||
|
|
@ -366,6 +351,7 @@ onMounted(() => {
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
padding: 0 24px;
|
||||||
|
|
||||||
.table_content {
|
.table_content {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
|
|
@ -397,10 +383,10 @@ onMounted(() => {
|
||||||
|
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
margin-top: 10px;
|
height: 100%;
|
||||||
position: absolute;
|
display: flex;
|
||||||
right: 10px;
|
justify-content: flex-end;
|
||||||
top: 175%;
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -1,107 +1,114 @@
|
||||||
<template>
|
<template>
|
||||||
<el-descriptions border label-width="100">
|
<Mask :width="1200" :height="600" :top="100" :is-show="isShow" @close="exit" title="查看领用" :show-footer="true">
|
||||||
<el-descriptions-item label="领用人" width="200">
|
<div style="margin-top: 24px;padding: 0 24px">
|
||||||
<el-input v-model="formData.name" disabled></el-input>
|
<el-descriptions border label-width="100">
|
||||||
</el-descriptions-item>
|
<el-descriptions-item label="领用人" width="200">
|
||||||
<el-descriptions-item label="备注">
|
<el-input v-model="formData.name" disabled></el-input>
|
||||||
<el-input v-model="formData.remark" disabled></el-input>
|
</el-descriptions-item>
|
||||||
</el-descriptions-item>
|
<el-descriptions-item label="备注">
|
||||||
</el-descriptions>
|
<el-input v-model="formData.remark" disabled></el-input>
|
||||||
<table class="simple-table" style="margin-top: 15px">
|
</el-descriptions-item>
|
||||||
<thead>
|
</el-descriptions>
|
||||||
<tr>
|
<table class="simple-table" style="margin-top: 15px">
|
||||||
<th>名称</th>
|
<thead>
|
||||||
<th>批次</th>
|
|
||||||
<th>生产批号</th>
|
|
||||||
<th>有效期</th>
|
|
||||||
<th>当前库存</th>
|
|
||||||
<th>出库数量</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<template v-for="(item,index) in tableList" :key="index">
|
|
||||||
<tr>
|
|
||||||
<td>{{ item.name }}</td>
|
|
||||||
<td>
|
|
||||||
<el-select
|
|
||||||
v-model="item.selectList"
|
|
||||||
multiple
|
|
||||||
@change="addLine(item)"
|
|
||||||
:teleported="false"
|
|
||||||
style="width: 100px;"
|
|
||||||
collapse-tags
|
|
||||||
popper-class="table-select">
|
|
||||||
<div class="select-header">
|
|
||||||
<span>批次ID</span>
|
|
||||||
<span>生产批号</span>
|
|
||||||
<span>入库数据</span>
|
|
||||||
<span>有效期</span>
|
|
||||||
<span>进价</span>
|
|
||||||
</div>
|
|
||||||
<el-option
|
|
||||||
v-for="(subItem) in item.batchList"
|
|
||||||
:key="subItem.id"
|
|
||||||
:label="subItem.id"
|
|
||||||
:value="subItem.id"
|
|
||||||
:disabled="true"
|
|
||||||
>
|
|
||||||
<div class="option-row">
|
|
||||||
<span>{{ subItem.id }}</span>
|
|
||||||
<span>{{ subItem.productionBatchCode }}</span>
|
|
||||||
<span>{{ subItem.productionDate }}</span>
|
|
||||||
<span>{{ subItem.expiryDate }}</span>
|
|
||||||
<span>{{ subItem.purchaseUnitPrice }}</span>
|
|
||||||
</div>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</td>
|
|
||||||
<td></td>
|
|
||||||
<td>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag == 1">
|
|
||||||
{{ item.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.totalOutWholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag == 1">
|
|
||||||
{{ item.totalFragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<template v-for="subItem in item.children">
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>-</td>
|
<th>名称</th>
|
||||||
<td>-</td>
|
<th>批次</th>
|
||||||
<td>{{ subItem.productionBatchCode }}</td>
|
<th>生产批号</th>
|
||||||
<td>{{ subItem.expiryDate }}</td>
|
<th>有效期</th>
|
||||||
<td>
|
<th>当前库存</th>
|
||||||
{{ subItem.wholeNumber }}{{ subItem.packagingUnit }}
|
<th>出库数量</th>
|
||||||
<template v-if="item.trdnFlag == 1">
|
|
||||||
{{ subItem.fragmentNumber }}{{ subItem.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ subItem.outWholeNumber }}{{ subItem.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag == 1">
|
|
||||||
{{ subItem.outFragmentNumber }}{{ subItem.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
</template>
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<template v-for="(item,index) in tableList" :key="index">
|
||||||
|
<tr>
|
||||||
|
<td>{{ item.name }}</td>
|
||||||
|
<td>
|
||||||
|
<el-select
|
||||||
|
v-model="item.selectList"
|
||||||
|
multiple
|
||||||
|
@change="addLine(item)"
|
||||||
|
:teleported="false"
|
||||||
|
style="width: 100px;"
|
||||||
|
collapse-tags
|
||||||
|
popper-class="table-select">
|
||||||
|
<div class="select-header">
|
||||||
|
<span>批次ID</span>
|
||||||
|
<span>生产批号</span>
|
||||||
|
<span>入库数据</span>
|
||||||
|
<span>有效期</span>
|
||||||
|
<span>进价</span>
|
||||||
|
</div>
|
||||||
|
<el-option
|
||||||
|
v-for="(subItem) in item.batchList"
|
||||||
|
:key="subItem.id"
|
||||||
|
:label="subItem.id"
|
||||||
|
:value="subItem.id"
|
||||||
|
:disabled="true"
|
||||||
|
>
|
||||||
|
<div class="option-row">
|
||||||
|
<span>{{ subItem.id }}</span>
|
||||||
|
<span>{{ subItem.productionBatchCode }}</span>
|
||||||
|
<span>{{ subItem.productionDate }}</span>
|
||||||
|
<span>{{ subItem.expiryDate }}</span>
|
||||||
|
<span>{{ subItem.purchaseUnitPrice }}</span>
|
||||||
|
</div>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ item.wholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag == 1">
|
||||||
|
{{ item.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ item.totalOutWholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag == 1">
|
||||||
|
{{ item.totalFragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<template v-for="subItem in item.children">
|
||||||
|
<tr>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>{{ subItem.productionBatchCode }}</td>
|
||||||
|
<td>{{ subItem.expiryDate }}</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.wholeNumber }}{{ subItem.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag == 1">
|
||||||
|
{{ subItem.fragmentNumber }}{{ subItem.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.outWholeNumber }}{{ subItem.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag == 1">
|
||||||
|
{{ subItem.outFragmentNumber }}{{ subItem.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</template>
|
||||||
|
</template>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<div class="bottom">
|
||||||
|
<el-button type="primary" @click="exit">关闭</el-button>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</tbody>
|
</Mask>
|
||||||
</table>
|
|
||||||
<div class="bottom">
|
|
||||||
<el-button type="primary" @click="exit">关闭</el-button>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref, defineProps} from "vue";
|
import {onMounted, ref, defineProps} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
|
@ -109,11 +116,17 @@ const props = defineProps({
|
||||||
default: null
|
default: null
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
const isShow = ref<any>(false)
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
const exit = () => {
|
const exit = () => {
|
||||||
|
formData.value = {
|
||||||
|
useUserId: null,
|
||||||
|
name: '',
|
||||||
|
username: "",
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
isShow.value = false
|
||||||
emit('close')
|
emit('close')
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
|
|
@ -194,22 +207,27 @@ const addLine = (row: any) => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const getUserInfo = () => {
|
const getUserInfo = () => {
|
||||||
post("manager/user/verify", null).then((res: any) => {
|
post("manager/user/verify").then((res: any) => {
|
||||||
formData.value.useUserId = res.id;
|
formData.value.useUserId = res.id;
|
||||||
formData.value.name = res.name;
|
formData.value.name = res.name;
|
||||||
formData.value.username = res.username;
|
formData.value.username = res.username;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const detail = () => {
|
const detail = (id: any) => {
|
||||||
post("inventory/apply/getApplyDetail", {id: props.id}).then((res: any) => {
|
isShow.value = true
|
||||||
|
post("inventory/apply/getApplyDetail", {id}).then((res: any) => {
|
||||||
formData.value = res.useInfo;
|
formData.value = res.useInfo;
|
||||||
tableList.value = JSON.parse(res);
|
tableList.value = JSON.parse(res);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getUserInfo()
|
|
||||||
detail()
|
|
||||||
})
|
})
|
||||||
|
const init=(id: any) => {
|
||||||
|
getUserInfo()
|
||||||
|
detail(id)
|
||||||
|
}
|
||||||
|
defineExpose({init})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.simple-table {
|
.simple-table {
|
||||||
|
|
@ -231,6 +249,7 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tbody {
|
tbody {
|
||||||
tr:hover {
|
tr:hover {
|
||||||
background-color: #f5f7fa; /* 悬停效果 */
|
background-color: #f5f7fa; /* 悬停效果 */
|
||||||
|
|
@ -287,15 +306,17 @@ tbody {
|
||||||
background-color: #fffdec;
|
background-color: #fffdec;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
margin-top: 5px;
|
margin-top: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
margin-top: 10px;
|
height: 100%;
|
||||||
position: absolute;
|
display: flex;
|
||||||
right: 10px;
|
justify-content: flex-end;
|
||||||
bottom: 10px;
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -1,144 +1,335 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="body_wrapper">
|
<Mask :width="1200" :height="540" :is-show="isShow" :top="100" @close="exit" title="新增盘点" :show-footer="true">
|
||||||
<div class="top" style="width: 100%">
|
<div class="body_wrapper">
|
||||||
<el-form :model="form" style="width: 100%" label-width="auto" class="demo-ruleForm" label-position="top">
|
<div class="top" style="width: 100%">
|
||||||
<el-form-item label="备注" style="width: 100%;margin-right: 0">
|
<el-form :model="form" style="width: 100%" label-width="auto" class="demo-ruleForm" label-position="top">
|
||||||
<el-input v-model="form.remark" placeholder="请输入单据编号"></el-input>
|
<el-form-item label="备注" style="width: 100%;margin-right: 0">
|
||||||
</el-form-item>
|
<el-input v-model="form.remark" placeholder="请输入单据编号"></el-input>
|
||||||
</el-form>
|
</el-form-item>
|
||||||
</div>
|
</el-form>
|
||||||
<div class="content">
|
|
||||||
<div class="add_goods">
|
|
||||||
<span>盘点药品</span>
|
|
||||||
<div class="search">
|
|
||||||
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<table class="simple-table" style="margin-top: 15px;">
|
<div class="content">
|
||||||
<thead>
|
<div class="add_goods">
|
||||||
<tr>
|
<span>盘点药品</span>
|
||||||
<th>名称</th>
|
<div class="search">
|
||||||
<th>批次</th>
|
<GoodsSearch @selectCallBack="goodsSelectCallBack"></GoodsSearch>
|
||||||
<th>最小包装数量</th>
|
</div>
|
||||||
<th>库存</th>
|
</div>
|
||||||
<th>改后库存</th>
|
<table class="simple-table" style="margin-top: 15px;">
|
||||||
<th>变化量</th>
|
<thead>
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<template v-for="(item,index) in list">
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.name }}</td>
|
<th>名称</th>
|
||||||
<td>
|
<th>批次</th>
|
||||||
<!--<el-checkbox-group v-model="item.childIdList" @change="addLine(item)">
|
<th>最小包装数量</th>
|
||||||
<el-checkbox v-for="(subItem,subIndex) in item.selectList" :label="subItem.id" :value="subItem.id" />
|
<th>库存</th>
|
||||||
</el-checkbox-group>-->
|
<th>改后库存</th>
|
||||||
<el-select
|
<th>变化量</th>
|
||||||
v-model="item.childIdList"
|
|
||||||
@change="addLine(item)"
|
|
||||||
multiple
|
|
||||||
:teleported="false"
|
|
||||||
style="width: 150px;"
|
|
||||||
collapse-tags
|
|
||||||
popper-class="table-select">
|
|
||||||
<div class="select-header">
|
|
||||||
<span>批次ID</span>
|
|
||||||
<span>生产批号</span>
|
|
||||||
<span>入库时间</span>
|
|
||||||
<span>有效期</span>
|
|
||||||
<span>进价</span>
|
|
||||||
</div>
|
|
||||||
<el-option
|
|
||||||
v-for="(subItem,subIndex) in item.selectList"
|
|
||||||
:key="subItem.id"
|
|
||||||
:label="subItem.id"
|
|
||||||
:value="subItem.id">
|
|
||||||
<div class="option-row">
|
|
||||||
<span>{{ subItem.id }}</span>
|
|
||||||
<span>{{ subItem.productionBatchCode }}</span>
|
|
||||||
<span>{{ subItem.productionDate }}</span>
|
|
||||||
<span>{{ subItem.expiryDate }}</span>
|
|
||||||
<span>{{ subItem.purchaseUnitPrice }}</span>
|
|
||||||
</div>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</td>
|
|
||||||
<td>{{ item.minPackagingNumber }}</td>
|
|
||||||
<td>
|
|
||||||
{{ item.before.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag ==1">
|
|
||||||
{{ item.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<el-form v-show="item.childIdList.length===0">
|
|
||||||
<el-input v-model.number="item.after.wholeNumber" style="width: 60px" @change="setChange(item)">
|
|
||||||
<template #suffix>{{ item.packagingUnit }}</template>
|
|
||||||
</el-input>
|
|
||||||
<el-input v-model.number="item.after.fragmentNumber" style="width: 60px;margin-left: 5px"
|
|
||||||
@change="setChange(item)" v-if="item.trdnFlag ==1">
|
|
||||||
<template #suffix>{{ item.minPackagingUnit }}</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.change.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag ==1">
|
|
||||||
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<template v-for="(subItem,subIndex) in item.children">
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<template v-for="(item,index) in list">
|
||||||
<tr>
|
<tr>
|
||||||
<td>-</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>-</td>
|
<td>
|
||||||
<td>-</td>
|
<!--<el-checkbox-group v-model="item.childIdList" @change="addLine(item)">
|
||||||
<td> {{ subItem.before.wholeNumber }}{{ item.packagingUnit }}
|
<el-checkbox v-for="(subItem,subIndex) in item.selectList" :label="subItem.id" :value="subItem.id" />
|
||||||
|
</el-checkbox-group>-->
|
||||||
|
<el-select
|
||||||
|
v-model="item.childIdList"
|
||||||
|
@change="addLine(item)"
|
||||||
|
multiple
|
||||||
|
:teleported="false"
|
||||||
|
style="width: 150px;"
|
||||||
|
collapse-tags
|
||||||
|
popper-class="table-select">
|
||||||
|
<div class="select-header">
|
||||||
|
<span>批次ID</span>
|
||||||
|
<span>生产批号</span>
|
||||||
|
<span>入库时间</span>
|
||||||
|
<span>有效期</span>
|
||||||
|
<span>进价</span>
|
||||||
|
</div>
|
||||||
|
<el-option
|
||||||
|
v-for="(subItem,subIndex) in item.selectList"
|
||||||
|
:key="subItem.id"
|
||||||
|
:label="subItem.id"
|
||||||
|
:value="subItem.id">
|
||||||
|
<div class="option-row">
|
||||||
|
<span>{{ subItem.id }}</span>
|
||||||
|
<span>{{ subItem.productionBatchCode }}</span>
|
||||||
|
<span>{{ subItem.productionDate }}</span>
|
||||||
|
<span>{{ subItem.expiryDate }}</span>
|
||||||
|
<span>{{ subItem.purchaseUnitPrice }}</span>
|
||||||
|
</div>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</td>
|
||||||
|
<td>{{ item.minPackagingNumber }}</td>
|
||||||
|
<td>
|
||||||
|
{{ item.before.wholeNumber }}{{ item.packagingUnit }}
|
||||||
<template v-if="item.trdnFlag ==1">
|
<template v-if="item.trdnFlag ==1">
|
||||||
{{ subItem.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
{{ item.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<el-input v-model.number="subItem.after.wholeNumber" style="width: 60px" @change="setChange(subItem)">
|
<el-form v-show="item.childIdList.length===0">
|
||||||
<template #suffix>{{ item.packagingUnit }}</template>
|
<el-input v-model.number="item.after.wholeNumber" style="width: 60px" @change="setChange(item)">
|
||||||
</el-input>
|
<template #suffix>{{ item.packagingUnit }}</template>
|
||||||
<el-input v-model.number="subItem.after.fragmentNumber" style="width: 60px;margin-left: 5px"
|
</el-input>
|
||||||
@change="setChange(subItem)" v-if="item.trdnFlag ==1">
|
<el-input v-model.number="item.after.fragmentNumber" style="width: 60px;margin-left: 5px"
|
||||||
<template #suffix>{{ item.minPackagingUnit }}</template>
|
@change="setChange(item)" v-if="item.trdnFlag ==1">
|
||||||
</el-input>
|
<template #suffix>{{ item.minPackagingUnit }}</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ subItem.change.wholeNumber }}{{ item.packagingUnit }}
|
{{ item.change.wholeNumber }}{{ item.packagingUnit }}
|
||||||
<template v-if="item.trdnFlag ==1">
|
<template v-if="item.trdnFlag ==1">
|
||||||
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<template v-for="(subItem,subIndex) in item.children">
|
||||||
|
<tr>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td> {{ subItem.before.wholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag ==1">
|
||||||
|
{{ subItem.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<el-input v-model.number="subItem.after.wholeNumber" style="width: 60px" @change="setChange(subItem)">
|
||||||
|
<template #suffix>{{ item.packagingUnit }}</template>
|
||||||
|
</el-input>
|
||||||
|
<el-input v-model.number="subItem.after.fragmentNumber" style="width: 60px;margin-left: 5px"
|
||||||
|
@change="setChange(subItem)" v-if="item.trdnFlag ==1">
|
||||||
|
<template #suffix>{{ item.minPackagingUnit }}</template>
|
||||||
|
</el-input>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.change.wholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag ==1">
|
||||||
|
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</tbody>
|
||||||
</tbody>
|
</table>
|
||||||
</table>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<template #footer>
|
||||||
|
<div class="bottom">
|
||||||
<div class="bottom">
|
<div class="btn">
|
||||||
<div class="btn">
|
<el-button @click="save" type="primary">保存</el-button>
|
||||||
<el-button @click="save" type="primary">保存</el-button>
|
<el-button @click="exit" type="primary">关闭</el-button>
|
||||||
<el-button @click="exit" type="primary">关闭</el-button>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</template>
|
||||||
|
</Mask>
|
||||||
</template>
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {ref} from "vue";
|
||||||
|
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
|
const form = ref<any>({
|
||||||
|
remark: ""
|
||||||
|
})
|
||||||
|
const state = ref([])
|
||||||
|
const goodsSelectCallBack = (item: any) => {
|
||||||
|
|
||||||
|
if (findIndexForTableList(item.goodId) != -1) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
addRow(item.goodId);
|
||||||
|
state.value = []
|
||||||
|
}
|
||||||
|
const findIndexForTableList = (goodId: any) => {
|
||||||
|
return list.value.findIndex((item: any) => item.goodsId === goodId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
interface Check {
|
||||||
|
id?: number,
|
||||||
|
goodsId: number,
|
||||||
|
name: string,
|
||||||
|
minPackagingUnit: string,
|
||||||
|
packagingUnit: string,
|
||||||
|
minPackagingNumber: number,
|
||||||
|
listSize: number,
|
||||||
|
trdnFlag: number,
|
||||||
|
childIdList: number[],
|
||||||
|
before: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
after: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
change: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
}
|
||||||
|
children: childCheck[],
|
||||||
|
selectList: seletcType[],
|
||||||
|
}
|
||||||
|
|
||||||
|
interface seletcType {
|
||||||
|
id: number,
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
productionBatchCode: string,
|
||||||
|
productionDate: string,
|
||||||
|
expiryDate: string,
|
||||||
|
purchaseUnitPrice: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface childCheck {
|
||||||
|
id?: number,
|
||||||
|
goodsId: number,
|
||||||
|
name: string,
|
||||||
|
minPackagingNumber: number,
|
||||||
|
before: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
after: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
change: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const list = ref<Check[]>([])
|
||||||
|
const emit = defineEmits(['close'])
|
||||||
|
let setChange = function (row: any) {
|
||||||
|
let totalBefore = row.before.wholeNumber * row.minPackagingNumber + row.before.fragmentNumber; // 使用原始数据
|
||||||
|
let totalAfter = row.after.wholeNumber * row.minPackagingNumber + row.after.fragmentNumber; // 使用原始数据
|
||||||
|
console.log(totalBefore, totalAfter)
|
||||||
|
let diff = totalAfter - totalBefore;
|
||||||
|
|
||||||
|
row.change.wholeNumber = Math.trunc(diff / row.minPackagingNumber);
|
||||||
|
row.change.fragmentNumber = diff % row.minPackagingNumber
|
||||||
|
}
|
||||||
|
let addLine = (row: any) => {
|
||||||
|
post("inventory/goods/getListByIds", {idList: row.childIdList}).then((list: any) => {
|
||||||
|
let children = [];
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
let inventoryGoods = list[i];
|
||||||
|
let index = row.children.findIndex((item: any) => item.id === inventoryGoods.id);
|
||||||
|
if (index > -1) {
|
||||||
|
children.push(row.children[index]);
|
||||||
|
} else {
|
||||||
|
let childCheck: childCheck = {
|
||||||
|
name: inventoryGoods.name,
|
||||||
|
id: inventoryGoods.id,
|
||||||
|
goodsId: inventoryGoods.goodId,
|
||||||
|
minPackagingNumber: row.minPackagingNumber,
|
||||||
|
before: {
|
||||||
|
wholeNumber: inventoryGoods.wholeNumber,
|
||||||
|
fragmentNumber: inventoryGoods.fragmentNumber,
|
||||||
|
},
|
||||||
|
after: {
|
||||||
|
wholeNumber: inventoryGoods.wholeNumber,
|
||||||
|
fragmentNumber: inventoryGoods.fragmentNumber,
|
||||||
|
},
|
||||||
|
change: {
|
||||||
|
wholeNumber: 0,
|
||||||
|
fragmentNumber: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
children.push(childCheck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
row.children = children;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let addRow = (goodsId: number) => {
|
||||||
|
post("inventory/goods/getByGoodsId", {goodsId, isZero: true}).then((res: any) => {
|
||||||
|
let check: Check = {
|
||||||
|
goodsId: res.id,
|
||||||
|
name: res.name,
|
||||||
|
listSize: res.listSize,
|
||||||
|
childIdList: [],
|
||||||
|
minPackagingNumber: res.minPackagingNumber,
|
||||||
|
packagingUnit: res.packagingUnit,
|
||||||
|
minPackagingUnit: res.minPackagingUnit,
|
||||||
|
trdnFlag: res.trdnFlag,
|
||||||
|
before: {
|
||||||
|
wholeNumber: res.wholeNumber,
|
||||||
|
fragmentNumber: res.fragmentNumber,
|
||||||
|
},
|
||||||
|
after: {
|
||||||
|
wholeNumber: res.wholeNumber,
|
||||||
|
fragmentNumber: res.fragmentNumber,
|
||||||
|
},
|
||||||
|
change: {
|
||||||
|
wholeNumber: 0,
|
||||||
|
fragmentNumber: 0,
|
||||||
|
},
|
||||||
|
children: [],
|
||||||
|
selectList: [],
|
||||||
|
}
|
||||||
|
let inventoryGoodsList = res.inventoryGoodsList
|
||||||
|
|
||||||
|
for (let i = 0; i < inventoryGoodsList.length; i++) {
|
||||||
|
let inventoryGoods = inventoryGoodsList[i];
|
||||||
|
let childCheck: seletcType = {
|
||||||
|
id: inventoryGoods.id,
|
||||||
|
wholeNumber: inventoryGoods.wholeNumber,
|
||||||
|
fragmentNumber: inventoryGoods.fragmentNumber,
|
||||||
|
productionBatchCode: inventoryGoods.productionBatchCode,
|
||||||
|
productionDate: inventoryGoods.productionDate,
|
||||||
|
expiryDate: inventoryGoods.expiryDate,
|
||||||
|
purchaseUnitPrice: inventoryGoods.purchaseUnitPrice,
|
||||||
|
}
|
||||||
|
check.selectList.push(childCheck)
|
||||||
|
}
|
||||||
|
list.value.push(check)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let save = () => {
|
||||||
|
post("inventory/check/save", {list: list.value, remark: form.value.remark}).then((res: any) => {
|
||||||
|
ElMessage.success('保存成功')
|
||||||
|
exit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
let exit = () => {
|
||||||
|
form.value = {
|
||||||
|
remark: ""
|
||||||
|
}
|
||||||
|
list.value=[]
|
||||||
|
isShow.value = false
|
||||||
|
emit('close');
|
||||||
|
}
|
||||||
|
const isShow = ref<any>(false)
|
||||||
|
const init = () => {
|
||||||
|
isShow.value = true
|
||||||
|
}
|
||||||
|
defineExpose({init})
|
||||||
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.body_wrapper {
|
.body_wrapper {
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
|
padding: 0 24px;
|
||||||
|
|
||||||
.top {
|
.top {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -286,203 +477,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
height: 86px;
|
height: 100%;
|
||||||
width: 100%;
|
display: flex;
|
||||||
margin-top: 10px;
|
justify-content: flex-end;
|
||||||
position: absolute;
|
align-items: center;
|
||||||
right: 10px;
|
padding: 0 24px;
|
||||||
bottom: 0;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
.btn{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script setup lang="ts">
|
|
||||||
import {onMounted} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import {ref} from "vue";
|
|
||||||
import GoodsSearch from "@/components/inventory/GoodsSearch.vue";
|
|
||||||
|
|
||||||
const form = ref<any>({
|
|
||||||
remark: ""
|
|
||||||
})
|
|
||||||
const state = ref([])
|
|
||||||
const options = ref([])
|
|
||||||
|
|
||||||
|
|
||||||
const goodsSelectCallBack = (item: any) => {
|
|
||||||
|
|
||||||
if (findIndexForTableList(item.goodId) != -1) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
addRow(item.goodId);
|
|
||||||
state.value = []
|
|
||||||
}
|
|
||||||
const findIndexForTableList = (goodId: any) => {
|
|
||||||
return list.value.findIndex((item: any) => item.goodsId === goodId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
interface Check {
|
|
||||||
id?: number,
|
|
||||||
goodsId: number,
|
|
||||||
name: string,
|
|
||||||
minPackagingUnit: string,
|
|
||||||
packagingUnit: string,
|
|
||||||
minPackagingNumber: number,
|
|
||||||
listSize: number,
|
|
||||||
trdnFlag: number,
|
|
||||||
childIdList: number[],
|
|
||||||
before: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
after: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
change: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
}
|
|
||||||
children: childCheck[],
|
|
||||||
selectList: seletcType[],
|
|
||||||
}
|
|
||||||
|
|
||||||
interface seletcType {
|
|
||||||
id: number,
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
productionBatchCode: string,
|
|
||||||
productionDate: string,
|
|
||||||
expiryDate: string,
|
|
||||||
purchaseUnitPrice: string
|
|
||||||
}
|
|
||||||
|
|
||||||
interface childCheck {
|
|
||||||
id?: number,
|
|
||||||
goodsId: number,
|
|
||||||
name: string,
|
|
||||||
minPackagingNumber: number,
|
|
||||||
before: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
after: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
change: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const list = ref<Check[]>([])
|
|
||||||
const emit = defineEmits(['close'])
|
|
||||||
onMounted(() => {
|
|
||||||
//addRow(1);
|
|
||||||
})
|
|
||||||
let setChange = function (row: any) {
|
|
||||||
let totalBefore = row.before.wholeNumber * row.minPackagingNumber + row.before.fragmentNumber; // 使用原始数据
|
|
||||||
let totalAfter = row.after.wholeNumber * row.minPackagingNumber + row.after.fragmentNumber; // 使用原始数据
|
|
||||||
console.log(totalBefore, totalAfter)
|
|
||||||
let diff = totalAfter - totalBefore;
|
|
||||||
|
|
||||||
row.change.wholeNumber = Math.trunc(diff / row.minPackagingNumber);
|
|
||||||
row.change.fragmentNumber = diff % row.minPackagingNumber
|
|
||||||
}
|
|
||||||
let addLine = (row: any) => {
|
|
||||||
post("inventory/goods/getListByIds", {idList: row.childIdList}).then((list: any) => {
|
|
||||||
let children = [];
|
|
||||||
for (let i = 0; i < list.length; i++) {
|
|
||||||
let inventoryGoods = list[i];
|
|
||||||
let index = row.children.findIndex((item: any) => item.id === inventoryGoods.id);
|
|
||||||
if (index > -1) {
|
|
||||||
children.push(row.children[index]);
|
|
||||||
} else {
|
|
||||||
let childCheck: childCheck = {
|
|
||||||
name: inventoryGoods.name,
|
|
||||||
id: inventoryGoods.id,
|
|
||||||
goodsId: inventoryGoods.goodId,
|
|
||||||
minPackagingNumber: row.minPackagingNumber,
|
|
||||||
before: {
|
|
||||||
wholeNumber: inventoryGoods.wholeNumber,
|
|
||||||
fragmentNumber: inventoryGoods.fragmentNumber,
|
|
||||||
},
|
|
||||||
after: {
|
|
||||||
wholeNumber: inventoryGoods.wholeNumber,
|
|
||||||
fragmentNumber: inventoryGoods.fragmentNumber,
|
|
||||||
},
|
|
||||||
change: {
|
|
||||||
wholeNumber: 0,
|
|
||||||
fragmentNumber: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
children.push(childCheck);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
row.children = children;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
let addRow = (goodsId: number) => {
|
|
||||||
post("inventory/goods/getByGoodsId", {goodsId}).then((res: any) => {
|
|
||||||
let check: Check = {
|
|
||||||
goodsId: res.id,
|
|
||||||
name: res.name,
|
|
||||||
listSize: res.listSize,
|
|
||||||
childIdList: [],
|
|
||||||
minPackagingNumber: res.minPackagingNumber,
|
|
||||||
packagingUnit: res.packagingUnit,
|
|
||||||
minPackagingUnit: res.minPackagingUnit,
|
|
||||||
trdnFlag: res.trdnFlag,
|
|
||||||
before: {
|
|
||||||
wholeNumber: res.wholeNumber,
|
|
||||||
fragmentNumber: res.fragmentNumber,
|
|
||||||
},
|
|
||||||
after: {
|
|
||||||
wholeNumber: res.wholeNumber,
|
|
||||||
fragmentNumber: res.fragmentNumber,
|
|
||||||
},
|
|
||||||
change: {
|
|
||||||
wholeNumber: 0,
|
|
||||||
fragmentNumber: 0,
|
|
||||||
},
|
|
||||||
children: [],
|
|
||||||
selectList: [],
|
|
||||||
}
|
|
||||||
let inventoryGoodsList = res.inventoryGoodsList
|
|
||||||
|
|
||||||
for (let i = 0; i < inventoryGoodsList.length; i++) {
|
|
||||||
let inventoryGoods = inventoryGoodsList[i];
|
|
||||||
let childCheck: seletcType = {
|
|
||||||
id: inventoryGoods.id,
|
|
||||||
wholeNumber: inventoryGoods.wholeNumber,
|
|
||||||
fragmentNumber: inventoryGoods.fragmentNumber,
|
|
||||||
productionBatchCode: inventoryGoods.productionBatchCode,
|
|
||||||
productionDate: inventoryGoods.productionDate,
|
|
||||||
expiryDate: inventoryGoods.expiryDate,
|
|
||||||
purchaseUnitPrice: inventoryGoods.purchaseUnitPrice,
|
|
||||||
}
|
|
||||||
check.selectList.push(childCheck)
|
|
||||||
}
|
|
||||||
list.value.push(check)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
let save = () => {
|
|
||||||
post("inventory/check/save", {list: list.value, remark: form.value.remark}).then((res: any) => {
|
|
||||||
emit('close');
|
|
||||||
})
|
|
||||||
// emit('close');
|
|
||||||
}
|
|
||||||
let exit = () => {
|
|
||||||
emit('close');
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,130 +1,226 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="body_wrapper">
|
<Mask :width="1200" :height="540" :is-show="isShow" :top="100" @close="exit" title="查看盘点" :show-footer="true">
|
||||||
<div class="top">
|
<div class="body_wrapper">
|
||||||
<el-form :model="form" style="width: 100%" label-width="auto" class="demo-ruleForm" label-position="top">
|
<div class="top">
|
||||||
<el-form-item label="备注" style="width: 100%;margin-right: 0">
|
<el-form :model="form" style="width: 100%" label-width="auto" class="demo-ruleForm" label-position="top">
|
||||||
<el-input disabled v-model="form.remark"></el-input>
|
<el-form-item label="备注" style="width: 100%;margin-right: 0">
|
||||||
</el-form-item>
|
<el-input disabled v-model="form.remark"></el-input>
|
||||||
</el-form>
|
</el-form-item>
|
||||||
</div>
|
</el-form>
|
||||||
<div class="content">
|
</div>
|
||||||
<table class="simple-table" style="margin-top: 15px;">
|
<div class="content">
|
||||||
<thead>
|
<table class="simple-table" style="margin-top: 15px;">
|
||||||
<tr>
|
<thead>
|
||||||
<th>名称</th>
|
|
||||||
<th>批次</th>
|
|
||||||
<th>最小包装数量</th>
|
|
||||||
<th>库存</th>
|
|
||||||
<th>改后库存</th>
|
|
||||||
<th>变化量</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<template v-for="(item,index) in list">
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ item.name }}</td>
|
<th>名称</th>
|
||||||
<td v-if="item.childIdList.length=0">无</td>
|
<th>批次</th>
|
||||||
<td v-else>
|
<th>最小包装数量</th>
|
||||||
<el-select
|
<th>库存</th>
|
||||||
v-model="item.childIdList"
|
<th>改后库存</th>
|
||||||
multiple
|
<th>变化量</th>
|
||||||
:teleported="false"
|
|
||||||
style="width: 150px;"
|
|
||||||
collapse-tags
|
|
||||||
popper-class="table-select"
|
|
||||||
:collapse-tags-tooltip="true"
|
|
||||||
>
|
|
||||||
<div class="select-header">
|
|
||||||
<span>批次ID</span>
|
|
||||||
<span>生产批号</span>
|
|
||||||
<span>入库时间</span>
|
|
||||||
<span>有效期</span>
|
|
||||||
<span>进价</span>
|
|
||||||
</div>
|
|
||||||
<el-option
|
|
||||||
v-for="(subItem,subIndex) in item.selectList"
|
|
||||||
:key="subItem.id"
|
|
||||||
:label="subItem.id"
|
|
||||||
:value="subItem.id"
|
|
||||||
disabled
|
|
||||||
>
|
|
||||||
<div class="option-row">
|
|
||||||
<span>{{ subItem.id }}</span>
|
|
||||||
<span>{{ subItem.productionBatchCode }}</span>
|
|
||||||
<span>{{ subItem.productionDate }}</span>
|
|
||||||
<span>{{ subItem.expiryDate }}</span>
|
|
||||||
<span>{{ subItem.purchaseUnitPrice }}</span>
|
|
||||||
</div>
|
|
||||||
</el-option>
|
|
||||||
</el-select>
|
|
||||||
</td>
|
|
||||||
<td>{{ item.minPackagingNumber }}</td>
|
|
||||||
<td>
|
|
||||||
{{ item.before.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag ==1">
|
|
||||||
{{ item.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.after.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag ==1">
|
|
||||||
{{ item.after.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{{ item.change.wholeNumber }}{{ item.packagingUnit }}
|
|
||||||
<template v-if="item.trdnFlag ==1">
|
|
||||||
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
|
||||||
</template>
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<template v-for="(subItem,subIndex) in item.children">
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<template v-for="(item,index) in list">
|
||||||
<tr>
|
<tr>
|
||||||
<td>-</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>-</td>
|
<td v-if="item.childIdList.length=0">无</td>
|
||||||
<td>-</td>
|
<td v-else>
|
||||||
|
<el-select
|
||||||
|
v-model="item.childIdList"
|
||||||
|
multiple
|
||||||
|
:teleported="false"
|
||||||
|
style="width: 150px;"
|
||||||
|
collapse-tags
|
||||||
|
popper-class="table-select"
|
||||||
|
:collapse-tags-tooltip="true"
|
||||||
|
>
|
||||||
|
<div class="select-header">
|
||||||
|
<span>批次ID</span>
|
||||||
|
<span>生产批号</span>
|
||||||
|
<span>入库时间</span>
|
||||||
|
<span>有效期</span>
|
||||||
|
<span>进价</span>
|
||||||
|
</div>
|
||||||
|
<el-option
|
||||||
|
v-for="(subItem,subIndex) in item.selectList"
|
||||||
|
:key="subItem.id"
|
||||||
|
:label="subItem.id"
|
||||||
|
:value="subItem.id"
|
||||||
|
disabled
|
||||||
|
>
|
||||||
|
<div class="option-row">
|
||||||
|
<span>{{ subItem.id }}</span>
|
||||||
|
<span>{{ subItem.productionBatchCode }}</span>
|
||||||
|
<span>{{ subItem.productionDate }}</span>
|
||||||
|
<span>{{ subItem.expiryDate }}</span>
|
||||||
|
<span>{{ subItem.purchaseUnitPrice }}</span>
|
||||||
|
</div>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
</td>
|
||||||
|
<td>{{ item.minPackagingNumber }}</td>
|
||||||
<td>
|
<td>
|
||||||
{{ subItem.before.wholeNumber }}{{ item.packagingUnit }}
|
{{ item.before.wholeNumber }}{{ item.packagingUnit }}
|
||||||
<template v-if="item.trdnFlag ==1">
|
<template v-if="item.trdnFlag ==1">
|
||||||
{{ subItem.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
{{ item.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ subItem.after.wholeNumber }}{{ item.packagingUnit }}
|
{{ item.after.wholeNumber }}{{ item.packagingUnit }}
|
||||||
<template v-if="item.trdnFlag ==1">
|
<template v-if="item.trdnFlag ==1">
|
||||||
{{ subItem.after.fragmentNumber }}{{ item.minPackagingUnit }}
|
{{ item.after.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
{{ subItem.change.wholeNumber }}{{ item.packagingUnit }}
|
{{ item.change.wholeNumber }}{{ item.packagingUnit }}
|
||||||
<template v-if="item.trdnFlag ==1">
|
<template v-if="item.trdnFlag ==1">
|
||||||
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
</template>
|
</template>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<template v-for="(subItem,subIndex) in item.children">
|
||||||
|
<tr>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>-</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.before.wholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag ==1">
|
||||||
|
{{ subItem.before.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.after.wholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag ==1">
|
||||||
|
{{ subItem.after.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{{ subItem.change.wholeNumber }}{{ item.packagingUnit }}
|
||||||
|
<template v-if="item.trdnFlag ==1">
|
||||||
|
{{ item.change.fragmentNumber }}{{ item.minPackagingUnit }}
|
||||||
|
</template>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</tbody>
|
||||||
</tbody>
|
</table>
|
||||||
</table>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<template #footer>
|
||||||
|
<div class="bottom">
|
||||||
|
<div class="btn">
|
||||||
|
<el-button @click="exit" type="primary">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</Mask>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<div class="bottom">
|
|
||||||
<div class="btn">
|
|
||||||
<el-button @click="exit" type="primary">关闭</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {onMounted,defineProps} from "vue";
|
||||||
|
import {post} from "@/utils/request.ts";
|
||||||
|
import {ref} from "vue";
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
const props = defineProps({
|
||||||
|
id: {
|
||||||
|
type: String,
|
||||||
|
default: null
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const form=ref<any>({
|
||||||
|
remark: "",
|
||||||
|
})
|
||||||
|
interface Check {
|
||||||
|
id?: number,
|
||||||
|
goodsId: number,
|
||||||
|
name: string,
|
||||||
|
minPackagingUnit: string,
|
||||||
|
packagingUnit: string,
|
||||||
|
minPackagingNumber: number,
|
||||||
|
listSize: number,
|
||||||
|
trdnFlag: number,
|
||||||
|
childIdList: number[],
|
||||||
|
before: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
after: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
change: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
}
|
||||||
|
children: childCheck[],
|
||||||
|
selectList: seletcType[],
|
||||||
|
}
|
||||||
|
|
||||||
|
interface seletcType {
|
||||||
|
id: number,
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
productionBatchCode: string,
|
||||||
|
productionDate: string,
|
||||||
|
expiryDate: string,
|
||||||
|
purchaseUnitPrice: string
|
||||||
|
}
|
||||||
|
|
||||||
|
interface childCheck {
|
||||||
|
id?: number,
|
||||||
|
goodsId: number,
|
||||||
|
name: string,
|
||||||
|
minPackagingNumber: number,
|
||||||
|
before: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
after: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
},
|
||||||
|
change: {
|
||||||
|
wholeNumber: number,
|
||||||
|
fragmentNumber: number,
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const list = ref<Check[]>([])
|
||||||
|
const emit = defineEmits(['close'])
|
||||||
|
let exit = () => {
|
||||||
|
form.value = {
|
||||||
|
remark: ""
|
||||||
|
}
|
||||||
|
list.value=[]
|
||||||
|
isShow.value = false
|
||||||
|
emit('close');
|
||||||
|
}
|
||||||
|
const detail = (id: any) => {
|
||||||
|
isShow.value = true
|
||||||
|
post("inventory/check/getCheckDetail",{id}).then((res: any) => {
|
||||||
|
list.value = JSON.parse(res);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const isShow = ref(false)
|
||||||
|
defineExpose({detail})
|
||||||
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.body_wrapper {
|
.body_wrapper {
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
|
padding: 0 24px;
|
||||||
|
|
||||||
.top {
|
.top {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -258,104 +354,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
height: 86px;
|
height: 100%;
|
||||||
width: 100%;
|
display: flex;
|
||||||
margin-top: 10px;
|
justify-content: flex-end;
|
||||||
position: absolute;
|
align-items: center;
|
||||||
right: 10px;
|
padding: 0 24px;
|
||||||
bottom: 0;
|
|
||||||
border-top: 1px solid #EAEAEC;
|
|
||||||
.btn{
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<script setup lang="ts">
|
|
||||||
import {onMounted,defineProps} from "vue";
|
|
||||||
import {post} from "@/utils/request.ts";
|
|
||||||
import {ref} from "vue";
|
|
||||||
const props = defineProps({
|
|
||||||
id: {
|
|
||||||
type: String,
|
|
||||||
default: null
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const form=ref<any>({
|
|
||||||
remark: "",
|
|
||||||
})
|
|
||||||
interface Check {
|
|
||||||
id?: number,
|
|
||||||
goodsId: number,
|
|
||||||
name: string,
|
|
||||||
minPackagingUnit: string,
|
|
||||||
packagingUnit: string,
|
|
||||||
minPackagingNumber: number,
|
|
||||||
listSize: number,
|
|
||||||
trdnFlag: number,
|
|
||||||
childIdList: number[],
|
|
||||||
before: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
after: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
change: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
}
|
|
||||||
children: childCheck[],
|
|
||||||
selectList: seletcType[],
|
|
||||||
}
|
|
||||||
|
|
||||||
interface seletcType {
|
|
||||||
id: number,
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
productionBatchCode: string,
|
|
||||||
productionDate: string,
|
|
||||||
expiryDate: string,
|
|
||||||
purchaseUnitPrice: string
|
|
||||||
}
|
|
||||||
|
|
||||||
interface childCheck {
|
|
||||||
id?: number,
|
|
||||||
goodsId: number,
|
|
||||||
name: string,
|
|
||||||
minPackagingNumber: number,
|
|
||||||
before: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
after: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
},
|
|
||||||
change: {
|
|
||||||
wholeNumber: number,
|
|
||||||
fragmentNumber: number,
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
const list = ref<Check[]>([])
|
|
||||||
const emit = defineEmits(['close'])
|
|
||||||
onMounted(() => {
|
|
||||||
detail()
|
|
||||||
})
|
|
||||||
let exit = () => {
|
|
||||||
emit('close');
|
|
||||||
}
|
|
||||||
const detail = () => {
|
|
||||||
post("inventory/check/getCheckDetail",{id: props.id}).then((res: any) => {
|
|
||||||
list.value = JSON.parse(res);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
defineExpose({detail})
|
|
||||||
</script>
|
|
||||||
|
|
@ -1,89 +1,96 @@
|
||||||
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<CloseBtn @click="close"></CloseBtn>
|
<Mask :width="400" :height="600" :top="100" :is-show="isShow" @close="isShow=false" :show-fotter="true" title="药品列表">
|
||||||
<!-- <div class="close" @click="close"><el-icon><Close /></el-icon></div>-->
|
<el-table
|
||||||
<el-table
|
:data="cateList"
|
||||||
:data="cateList"
|
style="width: 100%"
|
||||||
style="width: 100%"
|
>
|
||||||
>
|
<el-table-column
|
||||||
<el-table-column
|
width="200">
|
||||||
width="200">
|
<template #default="scope">
|
||||||
<template #default="scope">
|
<el-input v-model="scope.row.name" v-if="scope.row.isEdit"></el-input>
|
||||||
<el-input v-model="scope.row.name" v-if="scope.row.isEdit"></el-input>
|
<span v-else>{{ scope.row.name }}</span>
|
||||||
<span v-else>{{ scope.row.name }}</span>
|
</template>
|
||||||
</template>
|
</el-table-column>
|
||||||
</el-table-column>
|
<el-table-column
|
||||||
<el-table-column
|
width="120">
|
||||||
width="120">
|
<template #default="scope">
|
||||||
<template #default="scope">
|
<div>
|
||||||
<div >
|
<div v-if="scope.row.isAdd" style="display: flex;">
|
||||||
<div v-if="scope.row.isAdd" style="display: flex;">
|
<el-button type="primary" size="small" @click="saveDo" class="btn">确定</el-button>
|
||||||
<el-button type="primary" size="small" @click="saveDo" class="btn">确定</el-button>
|
<el-button size="small" @click="cancelAdd" class="btn">取消</el-button>
|
||||||
<el-button size="small" @click="cancelAdd" class="btn">取消</el-button>
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<span @click="move(-1,scope.row)" class="btn"><el-icon><ArrowUpBold/></el-icon></span>
|
||||||
|
<span @click="move(1,scope.row)" class="btn"><el-icon><ArrowDownBold/></el-icon></span>
|
||||||
|
<span @click="scope.row.isEdit=true" class="btn" id="edit"><el-icon><Edit/></el-icon></span>
|
||||||
|
<span @click="getCountByCateId(scope.row.id)" class="btn"> <el-icon><Delete/></el-icon></span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
</template>
|
||||||
<span @click="move(-1,scope.row)" class="btn" ><el-icon><ArrowUpBold /></el-icon></span>
|
</el-table-column>
|
||||||
<span @click="move(1,scope.row)" class="btn"><el-icon><ArrowDownBold /></el-icon></span>
|
</el-table>
|
||||||
<span @click="scope.row.isEdit=true" class="btn" id="edit"><el-icon><Edit /></el-icon></span>
|
<template #footer>
|
||||||
<span @click="getCountByCateId(scope.row.id)" class="btn"> <el-icon><Delete /></el-icon></span>
|
<div class="bottom">
|
||||||
</div>
|
<el-button type="primary" @click="add" id="add">添加</el-button>
|
||||||
</div>
|
<el-button type="primary" @click="save">保存</el-button>
|
||||||
</template>
|
</div>
|
||||||
</el-table-column>
|
</template>
|
||||||
</el-table>
|
</Mask>
|
||||||
<el-divider/>
|
|
||||||
<el-button type="primary" @click="add" id="add">添加</el-button>
|
|
||||||
<el-button type="primary" @click="save">保存</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, onUnmounted, ref} from "vue";
|
import {onMounted, onUnmounted, ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {ElMessageBox} from "element-plus";
|
import {ElMessageBox} from "element-plus";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {ArrowUpBold, ArrowDownBold, Delete, Edit} from "@element-plus/icons-vue";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
type: {
|
type: {
|
||||||
type: Number,
|
type: Number,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
interface CateItem {
|
interface CateItem {
|
||||||
id?: number;
|
id?: number;
|
||||||
name: string;
|
name: string;
|
||||||
type: number|undefined;
|
type: number | undefined;
|
||||||
isEdit: boolean;
|
isEdit: boolean;
|
||||||
isAdd: boolean;
|
isAdd: boolean;
|
||||||
sort: number;
|
sort: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
const cateList = ref<CateItem[]>([]);
|
const cateList = ref<CateItem[]>([]);
|
||||||
const getCateList = () => {
|
const getCateList = () => {
|
||||||
post("goods/cate/list",{type:props.type}).then((res:any)=>{
|
post("goods/cate/list", {type: props.type}).then((res: any) => {
|
||||||
cateList.value=res
|
cateList.value = res
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(()=>{
|
onMounted(() => {
|
||||||
getCateList()
|
getCateList()
|
||||||
document.addEventListener("click", handleClickOutside);
|
document.addEventListener("click", handleClickOutside);
|
||||||
})
|
})
|
||||||
onUnmounted(()=>{
|
onUnmounted(() => {
|
||||||
document.removeEventListener("click", handleClickOutside);
|
document.removeEventListener("click", handleClickOutside);
|
||||||
})
|
})
|
||||||
const handleClickOutside = (event: MouseEvent) => {
|
const handleClickOutside = (event: MouseEvent) => {
|
||||||
const target = event.target as HTMLElement;
|
const target = event.target as HTMLElement;
|
||||||
if (!target.closest('.el-input')&&!target.closest('#edit')&&!target.closest('#add')) {
|
if (!target.closest('.el-input') && !target.closest('#edit') && !target.closest('#add')) {
|
||||||
cateList.value.forEach(item => {
|
cateList.value.forEach(item => {
|
||||||
item.isEdit = false;
|
item.isEdit = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const emit = defineEmits(['close'])
|
const emit = defineEmits(['close'])
|
||||||
const close = () => {
|
const close = () => {
|
||||||
emit('close')
|
isShow.value = false
|
||||||
|
emit('close')
|
||||||
}
|
}
|
||||||
const getCountByCateId = (cateId:any)=>{
|
const isShow = ref<any>(false)
|
||||||
let count =0;
|
const getCountByCateId = (cateId: any) => {
|
||||||
post("goods/goods/getByCateId",{cateId:cateId}).
|
let count = 0;
|
||||||
then((res:any)=>{
|
post("goods/goods/getByCateId", {cateId: cateId}).then((res: any) => {
|
||||||
count=res
|
count = res
|
||||||
ElMessageBox.confirm(
|
ElMessageBox.confirm(
|
||||||
`有${count}个西药属于该二级分类,删除后将一同清空西药的分类。是否确定删除?`,
|
`有${count}个西药属于该二级分类,删除后将一同清空西药的分类。是否确定删除?`,
|
||||||
'Warning',
|
'Warning',
|
||||||
|
|
@ -98,26 +105,25 @@ const getCountByCateId = (cateId:any)=>{
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
const del = async (id:any) => {
|
const del = async (id: any) => {
|
||||||
await post("goods/cate/del",{id})
|
await post("goods/cate/del", {id})
|
||||||
getCateList()
|
getCateList()
|
||||||
}
|
}
|
||||||
const saveDo = async ()=>{
|
const saveDo = async () => {
|
||||||
cateList.value.forEach((item,index)=>{
|
cateList.value.forEach((item, index) => {
|
||||||
item.sort=index+1
|
item.sort = index + 1
|
||||||
if(item.name === ''){
|
if (item.name === '') {
|
||||||
removeItemByIndex(index)
|
removeItemByIndex(index)
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
await post("goods/cate/save",{cateList:cateList.value})
|
await post("goods/cate/save", {cateList: cateList.value})
|
||||||
getCateList()
|
getCateList()
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
const save = ()=>{
|
const save = () => {
|
||||||
saveDo()
|
saveDo()
|
||||||
close()
|
close()
|
||||||
}
|
}
|
||||||
|
|
@ -137,27 +143,27 @@ const add = () => {
|
||||||
type: props.type,
|
type: props.type,
|
||||||
isEdit: true,
|
isEdit: true,
|
||||||
isAdd: true,
|
isAdd: true,
|
||||||
sort: cateList.value.length+1
|
sort: cateList.value.length + 1
|
||||||
}
|
}
|
||||||
cateList.value.push(newCate)
|
cateList.value.push(newCate)
|
||||||
}
|
}
|
||||||
//移动 -1上移 1下移
|
//移动 -1上移 1下移
|
||||||
const move = (direction:number,row :any)=>{
|
const move = (direction: number, row: any) => {
|
||||||
const index = cateList.value.findIndex(item => item.id === row.id);
|
const index = cateList.value.findIndex(item => item.id === row.id);
|
||||||
if(index === -1)return;
|
if (index === -1) return;
|
||||||
const targetIndex = index + direction;
|
const targetIndex = index + direction;
|
||||||
if(targetIndex<0||targetIndex>=cateList.value.length)return;
|
if (targetIndex < 0 || targetIndex >= cateList.value.length) return;
|
||||||
// 交换元素位置
|
// 交换元素位置
|
||||||
[cateList.value[index], cateList.value[targetIndex]] = [cateList.value[targetIndex], cateList.value[index]];
|
[cateList.value[index], cateList.value[targetIndex]] = [cateList.value[targetIndex], cateList.value[index]];
|
||||||
console.log(cateList)
|
console.log(cateList)
|
||||||
|
|
||||||
}
|
}
|
||||||
const cancelAdd = ()=>{
|
const cancelAdd = () => {
|
||||||
cateList.value.pop()
|
cateList.value.pop()
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.close{
|
.close {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
|
|
@ -165,8 +171,17 @@ const cancelAdd = ()=>{
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
z-index: 1999;
|
z-index: 1999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.bottom {
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -1,357 +1,358 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="header">
|
<Mask :is-show="isShow" :height="900" @close="exit" title="新增" :show-footer="true">
|
||||||
<el-button type="primary" style="margin-top: 10px" round class="btn" @click="openCreateSearch" v-if="_type!=0" plain>
|
<div class="header">
|
||||||
一键建档
|
<el-button type="primary" style="margin-top: 10px" round class="btn" @click="openCreateSearch" v-if="_type!=0"
|
||||||
</el-button>
|
plain>
|
||||||
</div>
|
一键建档
|
||||||
<div class="common-layout">
|
</el-button>
|
||||||
<el-container>
|
</div>
|
||||||
<el-aside width="800px">
|
<div class="common-layout">
|
||||||
<div class="body">
|
<el-container>
|
||||||
<el-form ref="formRef"
|
<el-aside width="800px">
|
||||||
:model="edit_data"
|
<div class="body">
|
||||||
:rules="rules" style="width: 100%">
|
<el-form ref="formRef"
|
||||||
<el-descriptions title="基础" border direction="vertical">
|
:model="edit_data"
|
||||||
<el-descriptions-item label="名称">
|
:rules="rules" style="width: 100%">
|
||||||
<el-form-item label="" prop="name" class="form-item">
|
<el-descriptions title="基础" border direction="vertical">
|
||||||
<el-input v-model="edit_data.name"/>
|
<el-descriptions-item label="名称">
|
||||||
</el-form-item>
|
<el-form-item label="" prop="name" class="form-item">
|
||||||
</el-descriptions-item>
|
<el-input v-model="edit_data.name"/>
|
||||||
<el-descriptions-item label="类型" style="display: flex">
|
</el-form-item>
|
||||||
<el-form-item label="" prop="cateId" class="form-item">
|
</el-descriptions-item>
|
||||||
<el-select v-model="edit_data.cateId" placeholder="请选择" style="width: 70%">
|
<el-descriptions-item label="类型" style="display: flex">
|
||||||
|
<el-form-item label="" prop="cateId" class="form-item">
|
||||||
|
<el-select v-model="edit_data.cateId" placeholder="请选择" style="width: 70%">
|
||||||
|
<el-option
|
||||||
|
v-for="item in cate_list"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id">
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
|
<el-button @click="showCateEdit(true)">
|
||||||
|
<el-icon>
|
||||||
|
<Setting/>
|
||||||
|
</el-icon>
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="进口|国产" v-if="_type==1306">
|
||||||
|
<el-select
|
||||||
|
v-model="edit_data.extra.maintainCate"
|
||||||
|
placeholder="进口|国产"
|
||||||
|
clearable
|
||||||
|
style="width: 240px"
|
||||||
|
>
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in cate_list"
|
v-for="item in imported"
|
||||||
:key="item.id"
|
:key="item.label"
|
||||||
:label="item.name"
|
:label="item.label"
|
||||||
:value="item.id">
|
:value="item.label"
|
||||||
</el-option>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
<el-button @click="showCateEdit(true)">
|
</el-descriptions-item>
|
||||||
<el-icon>
|
<el-descriptions-item label="批准文号" v-if="_type==1301">
|
||||||
<Setting/>
|
<el-form-item lable="" prop="approvalCode" class="form-item">
|
||||||
</el-icon>
|
<el-input v-model="edit_data.approvalCode" class="input">
|
||||||
</el-button>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="进口|国产" v-if="_type==1306">
|
|
||||||
<el-select
|
|
||||||
v-model="edit_data.extra.maintainCate"
|
|
||||||
placeholder="进口|国产"
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in imported"
|
|
||||||
:key="item.label"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="批准文号" v-if="_type==1301">
|
|
||||||
<el-form-item lable="" prop="approvalCode" class="form-item">
|
|
||||||
<el-input v-model="edit_data.approvalCode" class="input">
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
|
|
||||||
<el-descriptions-item label="进价参考">
|
|
||||||
<el-form-item label="" prop="purchaseUnitPrice" class="form-item">
|
|
||||||
<el-input v-model.number="edit_data.purchaseUnitPrice">
|
|
||||||
<template #append>元</template>
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
|
|
||||||
<el-descriptions-item label="生产企业" v-if="_type!=1302">
|
|
||||||
<el-form-item label="" prop="producer" class="form-item">
|
|
||||||
<el-input v-model="edit_data.producer"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
|
|
||||||
|
|
||||||
<el-descriptions-item label="注册证名称" v-if="_type==1306">
|
|
||||||
<el-form-item>
|
|
||||||
<el-input v-model="edit_data.extra.registrationCertificateName" class="input">
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
|
|
||||||
<el-descriptions-item label="条形码">
|
|
||||||
<el-form-item>
|
|
||||||
<el-input v-model="edit_data.barcode"/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="规格" v-if="_type==1302||_type==1306||_type==0">
|
|
||||||
<el-form-item>
|
|
||||||
<el-input v-model="edit_data.medicineDosageNum" class="input">
|
|
||||||
</el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="最小制剂数量|单位" v-if="_type==1301">
|
|
||||||
<el-form-item>
|
|
||||||
<div class="unit-item">
|
|
||||||
<el-input ref="medicineDosageRef" v-model="edit_data.medicineDosageNum" class="input"
|
|
||||||
style="width: 200px;">
|
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-popover
|
</el-form-item>
|
||||||
placement="bottom"
|
</el-descriptions-item>
|
||||||
title="Title"
|
|
||||||
:width="200"
|
<el-descriptions-item label="进价参考">
|
||||||
trigger="click"
|
<el-form-item label="" prop="purchaseUnitPrice" class="form-item">
|
||||||
>
|
<el-input v-model.number="edit_data.purchaseUnitPrice">
|
||||||
<template #reference>
|
<template #append>元</template>
|
||||||
<div class="unit">{{ edit_data.medicineDosageUnit }}</div>
|
|
||||||
</template>
|
|
||||||
<UnitSelector :units="dosageUnitList" v-model="edit_data.medicineDosageUnit"></UnitSelector>
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
</el-form-item>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="最小包装数量|单位">
|
|
||||||
<el-form-item>
|
|
||||||
<div class="unit-item">
|
|
||||||
<el-input ref="minPackagingRef" v-model="edit_data.minPackagingNumber" type="number" class="input"
|
|
||||||
style="width: 200px;">
|
|
||||||
</el-input>
|
</el-input>
|
||||||
<el-popover
|
</el-form-item>
|
||||||
placement="bottom"
|
</el-descriptions-item>
|
||||||
title="Title"
|
|
||||||
:width="200"
|
<el-descriptions-item label="生产企业" v-if="_type!=1302">
|
||||||
trigger="click"
|
<el-form-item label="" prop="producer" class="form-item">
|
||||||
>
|
<el-input v-model="edit_data.producer"/>
|
||||||
<template #reference>
|
</el-form-item>
|
||||||
<div class="unit">{{ edit_data.minPackagingUnit }}</div>
|
</el-descriptions-item>
|
||||||
</template>
|
|
||||||
<UnitSelector :units="packagingUnit" v-model="edit_data.minPackagingUnit"></UnitSelector>
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
|
|
||||||
</el-descriptions-item>
|
<el-descriptions-item label="注册证名称" v-if="_type==1306">
|
||||||
<el-descriptions-item label="包装单位">
|
<el-form-item>
|
||||||
<el-form-item>
|
<el-input v-model="edit_data.extra.registrationCertificateName" class="input">
|
||||||
<div class="unit-item">
|
</el-input>
|
||||||
<el-popover
|
</el-form-item>
|
||||||
placement="bottom"
|
</el-descriptions-item>
|
||||||
title="Title"
|
|
||||||
:width="200"
|
|
||||||
trigger="click"
|
|
||||||
>
|
|
||||||
<template #reference>
|
|
||||||
<div class="unit" style="width: 232px">{{ edit_data.packagingUnit }}</div>
|
|
||||||
</template>
|
|
||||||
<UnitSelector :units="packagingUnit" v-model="edit_data.packagingUnit"></UnitSelector>
|
|
||||||
</el-popover>
|
|
||||||
</div>
|
|
||||||
</el-form-item>
|
|
||||||
|
|
||||||
</el-descriptions-item>
|
<el-descriptions-item label="条形码">
|
||||||
<!-- <el-descriptions-item :label="_type==1301?'国药准字':'国械注准'" v-if="_type==1301 || _type==1306">-->
|
<el-form-item>
|
||||||
<!-- <el-input v-model="edit_data.approvalCode"/>-->
|
<el-input v-model="edit_data.barcode"/>
|
||||||
<!-- </el-descriptions-item>-->
|
</el-form-item>
|
||||||
<el-descriptions-item label="注册剂型" v-if="_type==1301">
|
</el-descriptions-item>
|
||||||
<el-form-item>
|
<el-descriptions-item label="规格" v-if="_type==1302||_type==1306||_type==0">
|
||||||
<el-input v-model="edit_data.extra.regType" class="input">
|
<el-form-item>
|
||||||
</el-input>
|
<el-input v-model="edit_data.medicineDosageNum" class="input">
|
||||||
</el-form-item>
|
</el-input>
|
||||||
</el-descriptions-item>
|
</el-form-item>
|
||||||
<el-descriptions-item label="药品标识码">
|
</el-descriptions-item>
|
||||||
<el-form-item>
|
<el-descriptions-item label="最小制剂数量|单位" v-if="_type==1301">
|
||||||
<el-popover
|
<el-form-item>
|
||||||
:visible="showPopover"
|
<div class="unit-item">
|
||||||
placement="bottom"
|
<el-input ref="medicineDosageRef" v-model="edit_data.medicineDosageNum" class="input"
|
||||||
:width="200"
|
style="width: 200px;">
|
||||||
id="code-pop"
|
</el-input>
|
||||||
class="code-popo"
|
<el-popover
|
||||||
>
|
placement="bottom"
|
||||||
<div style="color: #6c6b6b;font-size: 12px">已关联({{ idCodeList ? idCodeList.length : 0 }})</div>
|
title="Title"
|
||||||
<Divider/>
|
:width="200"
|
||||||
<div class="item">
|
trigger="click"
|
||||||
<div v-for="(item,index) in idCodeList" :key="index">
|
>
|
||||||
<div class="remove">
|
<template #reference>
|
||||||
<el-icon @click="removeIdCode(item)" id="code-remove">
|
<div class="unit">{{ edit_data.medicineDosageUnit }}</div>
|
||||||
<Close/>
|
</template>
|
||||||
</el-icon>
|
<UnitSelector :units="dosageUnitList" v-model="edit_data.medicineDosageUnit"></UnitSelector>
|
||||||
</div>
|
</el-popover>
|
||||||
<div style="width: 70%" class="text">
|
|
||||||
{{ item }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="最小包装数量|单位">
|
||||||
|
<el-form-item>
|
||||||
|
<div class="unit-item">
|
||||||
|
<el-input ref="minPackagingRef" v-model="edit_data.minPackagingNumber" type="number" class="input"
|
||||||
|
style="width: 200px;">
|
||||||
|
</el-input>
|
||||||
|
<el-popover
|
||||||
|
placement="bottom"
|
||||||
|
title="Title"
|
||||||
|
:width="200"
|
||||||
|
trigger="click"
|
||||||
|
>
|
||||||
|
<template #reference>
|
||||||
|
<div class="unit">{{ edit_data.minPackagingUnit }}</div>
|
||||||
|
</template>
|
||||||
|
<UnitSelector :units="packagingUnit" v-model="edit_data.minPackagingUnit"></UnitSelector>
|
||||||
|
</el-popover>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<template #reference>
|
|
||||||
<el-input v-model="idCode" id="code-input" @keydown.enter="addIdCode"
|
</el-descriptions-item>
|
||||||
@click="clickIdCodeInput"></el-input>
|
<el-descriptions-item label="包装单位">
|
||||||
</template>
|
<el-form-item>
|
||||||
</el-popover>
|
<div class="unit-item">
|
||||||
</el-form-item>
|
<el-popover
|
||||||
</el-descriptions-item>
|
placement="bottom"
|
||||||
<el-descriptions-item label="标签">
|
title="Title"
|
||||||
<el-form-item>
|
:width="200"
|
||||||
<el-input-tag
|
trigger="click"
|
||||||
draggable
|
>
|
||||||
v-model="edit_data.tags"
|
<template #reference>
|
||||||
class="input"
|
<div class="unit" style="width: 232px">{{ edit_data.packagingUnit }}</div>
|
||||||
|
</template>
|
||||||
|
<UnitSelector :units="packagingUnit" v-model="edit_data.packagingUnit"></UnitSelector>
|
||||||
|
</el-popover>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
</el-descriptions-item>
|
||||||
|
<!-- <el-descriptions-item :label="_type==1301?'国药准字':'国械注准'" v-if="_type==1301 || _type==1306">-->
|
||||||
|
<!-- <el-input v-model="edit_data.approvalCode"/>-->
|
||||||
|
<!-- </el-descriptions-item>-->
|
||||||
|
<el-descriptions-item label="注册剂型" v-if="_type==1301">
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="edit_data.extra.regType" class="input">
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="药品标识码">
|
||||||
|
<el-form-item>
|
||||||
|
<el-popover
|
||||||
|
:visible="showPopover"
|
||||||
|
placement="bottom"
|
||||||
|
:width="200"
|
||||||
|
id="code-pop"
|
||||||
|
class="code-popo"
|
||||||
|
>
|
||||||
|
<div style="color: #6c6b6b;font-size: 12px">已关联({{ idCodeList ? idCodeList.length : 0 }})</div>
|
||||||
|
<Divider/>
|
||||||
|
<div class="item">
|
||||||
|
<div v-for="(item,index) in idCodeList" :key="index">
|
||||||
|
<div class="remove">
|
||||||
|
<el-icon @click="removeIdCode(item)" id="code-remove">
|
||||||
|
<Close/>
|
||||||
|
</el-icon>
|
||||||
|
</div>
|
||||||
|
<div style="width: 70%" class="text">
|
||||||
|
{{ item }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<template #reference>
|
||||||
|
<el-input v-model="idCode" id="code-input" @keydown.enter="addIdCode"
|
||||||
|
@click="clickIdCodeInput"></el-input>
|
||||||
|
</template>
|
||||||
|
</el-popover>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="标签">
|
||||||
|
<el-form-item>
|
||||||
|
<el-input-tag
|
||||||
|
draggable
|
||||||
|
v-model="edit_data.tags"
|
||||||
|
class="input"
|
||||||
|
>
|
||||||
|
</el-input-tag>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备注">
|
||||||
|
<el-form-item>
|
||||||
|
<el-input v-model="edit_data.remark" class="input"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<el-descriptions title="扩展" border style="margin-top: 20px" direction="vertical">
|
||||||
|
<el-descriptions-item label="养护分类">
|
||||||
|
<el-select
|
||||||
|
v-model="edit_data.extra.maintainCate"
|
||||||
|
placeholder="选择养护分类"
|
||||||
|
clearable
|
||||||
|
style="width: 240px"
|
||||||
>
|
>
|
||||||
</el-input-tag>
|
<el-option
|
||||||
</el-form-item>
|
v-for="item in maintainOptions"
|
||||||
</el-descriptions-item>
|
:key="item.label"
|
||||||
<el-descriptions-item label="备注">
|
:label="item.label"
|
||||||
<el-form-item>
|
:value="item.label"
|
||||||
<el-input v-model="edit_data.remark" class="input"/>
|
/>
|
||||||
</el-form-item>
|
</el-select>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
<el-descriptions-item label="储存条件">
|
||||||
<el-descriptions title="扩展" border style="margin-top: 20px" direction="vertical">
|
<el-select
|
||||||
<el-descriptions-item label="养护分类">
|
v-model="edit_data.extra.storageConditions"
|
||||||
<el-select
|
placeholder="选择养护分类"
|
||||||
v-model="edit_data.extra.maintainCate"
|
clearable
|
||||||
placeholder="选择养护分类"
|
style="width: 240px;"
|
||||||
clearable
|
>
|
||||||
style="width: 240px"
|
<el-option
|
||||||
>
|
v-for="item in storageConditionsOptions"
|
||||||
|
:key="item.label"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.label"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="保质期">
|
||||||
|
<el-input v-model="edit_data.expiryTime" type="number">
|
||||||
|
<template #append>月</template>
|
||||||
|
</el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="柜号">
|
||||||
|
<el-input v-model="edit_data.extra.cabinetNumber">
|
||||||
|
</el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="用法用量" v-if="_type==1301">
|
||||||
|
<el-input v-model="edit_data.extra.usage">
|
||||||
|
</el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="处方药/OTC" v-if="_type==1301">
|
||||||
|
<el-select
|
||||||
|
v-model="edit_data.extra.drugCategory"
|
||||||
|
placeholder="选择药品分类"
|
||||||
|
clearable
|
||||||
|
style="width: 240px"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in drugCategoryOptions"
|
||||||
|
:key="item.label"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.label"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="精麻毒放" v-if="_type==1301">
|
||||||
|
<el-input v-model="edit_data.extra.JMDF"></el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="抗菌药物" v-if="_type==1301">
|
||||||
|
<el-input v-model="edit_data.extra.isAntibacterialAgents"></el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
|
||||||
|
<el-descriptions-item label="基药" v-if="_type==1301">
|
||||||
|
<el-input v-model="edit_data.extra.baseMedicine"></el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="医疗器械分类" v-if="_type==1306">
|
||||||
|
<el-input v-model="edit_data.extra.instrumentCategroy"></el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="上市许可持有人">
|
||||||
|
<el-input v-model="edit_data.extra.authorizationMaster"></el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="批准文号有效期" v-if="_type==1306">
|
||||||
|
<el-input v-model="edit_data.extra.approvalNumberExpirDate"></el-input>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</el-aside>
|
||||||
|
<el-aside width="350px" style="border-left: 1px #ddd solid">
|
||||||
|
<el-form style="width: 100%;" label-width="100px">
|
||||||
|
<el-descriptions title="定价" border direction="vertical" :column="2" style="margin-left: 5px">
|
||||||
|
<el-descriptions-item label="定价模式" width="180">
|
||||||
|
<el-select v-model="edit_data.pricingModel" placeholder="请选择">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in maintainOptions"
|
v-for="item in pricingModelOptions"
|
||||||
:key="item.label"
|
:key="item.value"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:value="item.label"
|
:value="item.value">
|
||||||
/>
|
</el-option>
|
||||||
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="储存条件">
|
<el-descriptions-item label="加成率" v-if="edit_data.pricingModel==1">
|
||||||
<el-select
|
<el-input v-model="edit_data.makeUp" type="number">
|
||||||
v-model="edit_data.extra.storageConditions"
|
<template #append>%</template>
|
||||||
placeholder="选择养护分类"
|
</el-input>
|
||||||
clearable
|
|
||||||
style="width: 240px;"
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="零售价格" v-if="edit_data.pricingModel==2">
|
||||||
|
<el-input v-model="edit_data.unitPrice" type="number"
|
||||||
>
|
>
|
||||||
<el-option
|
<template #prefix>¥</template>
|
||||||
v-for="item in storageConditionsOptions"
|
<template #append>/{{ edit_data.packagingUnit }}</template>
|
||||||
:key="item.label"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="保质期">
|
|
||||||
<el-input v-model="edit_data.expiryTime" type="number">
|
|
||||||
<template #append>月</template>
|
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="柜号">
|
|
||||||
<el-input v-model="edit_data.extra.cabinetNumber">
|
|
||||||
</el-input>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="用法用量" v-if="_type==1301">
|
|
||||||
<el-input v-model="edit_data.extra.usage">
|
|
||||||
</el-input>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="处方药/OTC" v-if="_type==1301">
|
|
||||||
<el-select
|
|
||||||
v-model="edit_data.extra.drugCategory"
|
|
||||||
placeholder="选择药品分类"
|
|
||||||
clearable
|
|
||||||
style="width: 240px"
|
|
||||||
>
|
|
||||||
<el-option
|
|
||||||
v-for="item in drugCategoryOptions"
|
|
||||||
:key="item.label"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.label"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="精麻毒放" v-if="_type==1301" >
|
|
||||||
<el-input v-model="edit_data.extra.JMDF"></el-input >
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="抗菌药物" v-if="_type==1301" >
|
|
||||||
<el-input v-model="edit_data.extra.isAntibacterialAgents"></el-input>
|
|
||||||
</el-descriptions-item>
|
|
||||||
|
|
||||||
<el-descriptions-item label="基药" v-if="_type==1301" >
|
<el-descriptions-item>
|
||||||
<el-input v-model="edit_data.extra.baseMedicine"></el-input>
|
<template #label>
|
||||||
</el-descriptions-item>
|
<el-checkbox v-model="edit_data.trdnFlag" label="是否允许拆零" size="large"/>
|
||||||
<el-descriptions-item label="医疗器械分类" v-if="_type==1306" >
|
</template>
|
||||||
<el-input v-model="edit_data.extra.instrumentCategroy"></el-input>
|
<el-input v-model="edit_data.disassemblyPrice" type="number" :disabled="!edit_data.trdnFlag">
|
||||||
</el-descriptions-item>
|
<template #prefix>¥</template>
|
||||||
<el-descriptions-item label="上市许可持有人" >
|
<template #append>/{{ edit_data.minPackagingUnit }}</template>
|
||||||
<el-input v-model="edit_data.extra.authorizationMaster"></el-input>
|
</el-input>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="批准文号有效期" v-if="_type==1306" >
|
</el-descriptions>
|
||||||
<el-input v-model="edit_data.extra.approvalNumberExpirDate"></el-input>
|
<el-descriptions title="医保" border direction="vertical" :column="1" style="margin-left: 5px">
|
||||||
|
<el-descriptions-item label="医保对码">
|
||||||
|
<SocialInfo v-model="edit_data.hilistCode" v-if="edit_data.hilistCode"
|
||||||
|
@openSearch="openContrastCodeSearch"></SocialInfo>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</el-aside>
|
||||||
</el-aside>
|
</el-container>
|
||||||
<el-aside width="350px" style="border-left: 1px #ddd solid">
|
</div>
|
||||||
<el-form style="width: 100%;" label-width="100px">
|
<template #footer>
|
||||||
<el-descriptions title="定价" border direction="vertical" :column="2" style="margin-left: 5px">
|
<div class="footer">
|
||||||
<el-descriptions-item label="定价模式" width="180">
|
<el-button @click="returnInit" type="primary" v-if="edit_data.id != null">医保库存重新初始化</el-button>
|
||||||
<el-select v-model="edit_data.pricingModel" placeholder="请选择">
|
<el-button @click="save" type="primary">保存</el-button>
|
||||||
<el-option
|
<el-button @click="exit" plain>关闭</el-button>
|
||||||
v-for="item in pricingModelOptions"
|
</div>
|
||||||
:key="item.value"
|
</template>
|
||||||
:label="item.label"
|
</Mask>
|
||||||
:value="item.value">
|
|
||||||
</el-option>
|
|
||||||
|
|
||||||
</el-select>
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="加成率" v-if="edit_data.pricingModel==1">
|
|
||||||
<el-input v-model="edit_data.makeUp" type="number">
|
|
||||||
<template #append>%</template>
|
|
||||||
</el-input>
|
|
||||||
|
|
||||||
</el-descriptions-item>
|
|
||||||
<el-descriptions-item label="零售价格" v-if="edit_data.pricingModel==2">
|
|
||||||
<el-input v-model="edit_data.unitPrice" type="number"
|
|
||||||
>
|
|
||||||
<template #prefix>¥</template>
|
|
||||||
<template #append>/{{ edit_data.packagingUnit }}</template>
|
|
||||||
</el-input>
|
|
||||||
</el-descriptions-item>
|
|
||||||
|
|
||||||
<el-descriptions-item>
|
|
||||||
<template #label>
|
|
||||||
<el-checkbox v-model="edit_data.trdnFlag" label="是否允许拆零" size="large"/>
|
|
||||||
</template>
|
|
||||||
<el-input v-model="edit_data.disassemblyPrice" type="number" :disabled="!edit_data.trdnFlag">
|
|
||||||
<template #prefix>¥</template>
|
|
||||||
<template #append>/{{ edit_data.minPackagingUnit }}</template>
|
|
||||||
</el-input>
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
<el-descriptions title="医保" border direction="vertical" :column="1" style="margin-left: 5px">
|
|
||||||
<el-descriptions-item label="医保对码">
|
|
||||||
<SocialInfo v-model="edit_data.hilistCode" v-if="edit_data.hilistCode" @openSearch="openContrastCodeSearch"></SocialInfo>
|
|
||||||
</el-descriptions-item>
|
|
||||||
</el-descriptions>
|
|
||||||
</el-form>
|
|
||||||
</el-aside>
|
|
||||||
</el-container>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 新增关闭按钮 -->
|
<!-- 新增关闭按钮 -->
|
||||||
<div class="footer">
|
|
||||||
<el-button @click="returnInit" type="primary" v-if="edit_data.id != null">医保库存重新初始化</el-button>
|
|
||||||
<el-button @click="save" type="primary">保存</el-button>
|
|
||||||
<el-button @click="exit" plain>关闭</el-button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Search ref="createSearchRef" @confirm="createConfirm"/>
|
<Search ref="createSearchRef" @confirm="createConfirm"/>
|
||||||
<Search ref="contrastCodeSearch" @confirm="contrastCodeConfirm"/>
|
<Search ref="contrastCodeSearch" @confirm="contrastCodeConfirm"/>
|
||||||
<Mask :width="400" :height="600" :is-show="show_cate">
|
<Cate :type="_type" @close="cateCloseCallBack"/>
|
||||||
<Cate :type="_type" @close="cateCloseCallBack"/>
|
|
||||||
</Mask>
|
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
||||||
|
|
@ -370,6 +371,7 @@ import SocialInfo from "@/components/inventory/goods/SocialInfo.vue";
|
||||||
let _type = ref(0);
|
let _type = ref(0);
|
||||||
let type = ref(0);
|
let type = ref(0);
|
||||||
let show_cate = ref(false)
|
let show_cate = ref(false)
|
||||||
|
const isShow = ref<any>(false)
|
||||||
const imported = [{
|
const imported = [{
|
||||||
label: '进口',
|
label: '进口',
|
||||||
}, {label: '国产'}]
|
}, {label: '国产'}]
|
||||||
|
|
@ -458,6 +460,7 @@ const removeIdCode = (item: string) => {
|
||||||
showPopover.value = idCodeList.value.length > 0;
|
showPopover.value = idCodeList.value.length > 0;
|
||||||
}
|
}
|
||||||
const init = (type: number, id: number) => {
|
const init = (type: number, id: number) => {
|
||||||
|
isShow.value = true
|
||||||
_type.value = type;
|
_type.value = type;
|
||||||
if (id != null && id != 0) {
|
if (id != null && id != 0) {
|
||||||
post("goods/goods/get", {id: id}).then((res: any) => {
|
post("goods/goods/get", {id: id}).then((res: any) => {
|
||||||
|
|
@ -478,7 +481,7 @@ defineExpose({init});
|
||||||
const createSearchRef = ref<InstanceType<typeof Search>>();
|
const createSearchRef = ref<InstanceType<typeof Search>>();
|
||||||
const openCreateSearch = () => {
|
const openCreateSearch = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
createSearchRef.value?.init(_type.value,edit_data.value.name);
|
createSearchRef.value?.init(_type.value, edit_data.value.name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const createConfirm = (data: any) => {
|
const createConfirm = (data: any) => {
|
||||||
|
|
@ -487,7 +490,7 @@ const createConfirm = (data: any) => {
|
||||||
const contrastCodeSearch = ref()
|
const contrastCodeSearch = ref()
|
||||||
const openContrastCodeSearch = () => {
|
const openContrastCodeSearch = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
contrastCodeSearch.value?.init(_type.value,edit_data.value.name);
|
contrastCodeSearch.value?.init(_type.value, edit_data.value.name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const contrastCodeConfirm = (data: any) => {
|
const contrastCodeConfirm = (data: any) => {
|
||||||
|
|
@ -525,6 +528,7 @@ const cateCloseCallBack = () => {
|
||||||
}
|
}
|
||||||
let exit = () => {
|
let exit = () => {
|
||||||
document.addEventListener("click", handleClickOutside);
|
document.addEventListener("click", handleClickOutside);
|
||||||
|
isShow.value = false
|
||||||
emit('close');
|
emit('close');
|
||||||
}
|
}
|
||||||
const handleClickOutside = (event: MouseEvent) => {
|
const handleClickOutside = (event: MouseEvent) => {
|
||||||
|
|
@ -606,8 +610,6 @@ const drugCategoryOptions = [
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.header {
|
.header {
|
||||||
|
|
@ -626,6 +628,7 @@ const drugCategoryOptions = [
|
||||||
|
|
||||||
.common-layout {
|
.common-layout {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
|
padding: 0 24px 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
|
|
@ -661,14 +664,13 @@ const drugCategoryOptions = [
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
position: absolute;
|
height: 100%;
|
||||||
right: 10px;
|
display: flex;
|
||||||
bottom: 10px;
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,108 +1,104 @@
|
||||||
<template>
|
<template>
|
||||||
<Mask :width="800" :height="600" :is-show="show">
|
<Mask :width="800" :height="720" :is-show="show" :top="100" @close="show=false" title="药品" :show-footer="true">
|
||||||
<div class="search_content_wrapper">
|
<div class="search_content_wrapper">
|
||||||
<div class="search_wrapper">
|
<div class="search_wrapper">
|
||||||
<span>药品名称:</span>
|
<span>药品名称:</span>
|
||||||
<el-input
|
<el-input
|
||||||
class="input"
|
class="input"
|
||||||
v-model="keyword"
|
v-model="keyword"
|
||||||
placeholder="请输入药品名称或者编号"
|
placeholder="请输入药品名称或者编号"
|
||||||
@keydown.enter="search_social"
|
@keydown.enter="search_social"
|
||||||
clearable />
|
clearable/>
|
||||||
<button @click="search_social" >搜索</button>
|
<el-button @click="search_social">搜索</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="search_result">
|
<div class="search_result">
|
||||||
|
<div class="result_table" style="width: 100%; height: 100%;overflow: hidden">
|
||||||
<div class="result_table" style="width: 100%; height: 100%;overflow: hidden">
|
<el-scrollbar>
|
||||||
<el-table v-loading="isloading" :data="search_result.list" style="width: 100%;height: 350px"
|
<el-table v-loading="isloading" :data="search_result.list" style="width: 100%"
|
||||||
highlight-current-row @current-change="change_current_search_data_index"
|
highlight-current-row @current-change="change_current_search_data_index"
|
||||||
:row-class-name="tableRowClassName">
|
:row-class-name="tableRowClassName">
|
||||||
<el-table-column prop="name" label="名称" fixed width="180" show-overflow-tooltip/>
|
<el-table-column prop="name" label="名称" fixed width="180" show-overflow-tooltip/>
|
||||||
<el-table-column prop="json.approval_number" fixed label="国药准字" width="180" show-overflow-tooltip/>
|
<el-table-column prop="json.approval_number" fixed label="国药准字" width="180" show-overflow-tooltip/>
|
||||||
<el-table-column prop="producer" label="生产企业" width="180" show-overflow-tooltip/>
|
<el-table-column prop="producer" label="生产企业" width="180" show-overflow-tooltip/>
|
||||||
<el-table-column v-if="type==1301" prop="json.reg_specifications" label="注册规格" width="80"
|
<el-table-column v-if="type==1301" prop="json.reg_specifications" label="注册规格" width="80"
|
||||||
show-overflow-tooltip/>
|
show-overflow-tooltip/>
|
||||||
<el-table-column v-if="type==1301" prop="json.min_packaging_unit" label="包装单位" width="80"
|
<el-table-column v-if="type==1301" prop="json.min_packaging_unit" label="包装单位" width="80"
|
||||||
show-overflow-tooltip/>
|
show-overflow-tooltip/>
|
||||||
<el-table-column v-if="type==1301" prop="json.min_packaging_number" label="包装数量" width="80"
|
<el-table-column v-if="type==1301" prop="json.min_packaging_number" label="包装数量" width="80"
|
||||||
show-overflow-tooltip/>
|
show-overflow-tooltip/>
|
||||||
<el-table-column v-if="type==1301" prop="json.min_preparation_unit" label="制剂单位" width="80"
|
<el-table-column v-if="type==1301" prop="json.min_preparation_unit" label="制剂单位" width="80"
|
||||||
show-overflow-tooltip/>
|
show-overflow-tooltip/>
|
||||||
<el-table-column prop="code" label="医保编码" width="180" show-overflow-tooltip/>
|
<el-table-column prop="code" label="医保编码" width="180" show-overflow-tooltip/>
|
||||||
<el-table-column prop="enddate" label="有效期至" width="180" show-overflow-tooltip/>
|
<el-table-column prop="enddate" label="有效期至" width="180" show-overflow-tooltip/>
|
||||||
</el-table>
|
</el-table>
|
||||||
<div class="page_btn_list">
|
</el-scrollbar>
|
||||||
<el-pagination background layout="prev, pager, next" :page-count="search_result.totalPage"
|
|
||||||
v-model:current-page="current_page" @current-change="change_page"/>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="search_bottom">
|
<template #footer>
|
||||||
<el-button type="primary" @click="confirm">确认</el-button>
|
<div class="bottom">
|
||||||
<el-button type="primary" @click="close">关闭</el-button>
|
<div class="page_btn_list">
|
||||||
</div>
|
<el-pagination background layout="prev, pager, next" :page-count="search_result.total_page"
|
||||||
</div>
|
v-model:current-page="current_page" @current-change="change_page"/>
|
||||||
|
</div>
|
||||||
|
<div class="btn">
|
||||||
|
<el-button type="primary" @click="confirm">确认</el-button>
|
||||||
|
<el-button type="primary" @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</Mask>
|
</Mask>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref,defineProps} from "vue";
|
import {onMounted, ref, defineProps} from "vue";
|
||||||
import {post} from '@/utils/request.ts'
|
import {post} from '@/utils/request.ts'
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
|
||||||
let current_search_data: any = null;
|
let current_search_data: any = null;
|
||||||
let keyword = ref('');
|
let keyword = ref('');
|
||||||
let produce=ref("");
|
let produce = ref("");
|
||||||
let type = ref(0);
|
let type = ref(0);
|
||||||
let current_page=ref(1)
|
let current_page = ref(1)
|
||||||
const show = ref(false);
|
const show = ref(false);
|
||||||
|
|
||||||
const emit = defineEmits(["confirm"])
|
const emit = defineEmits(["confirm"])
|
||||||
|
|
||||||
let search_result = ref({
|
let search_result = ref({
|
||||||
totalPage: 0,
|
total_page: 0,
|
||||||
list: [],
|
list: [],
|
||||||
pageNum: 1,
|
page: 1,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
let tableRowClassName = (res: any) => {
|
let tableRowClassName = (res: any) => {
|
||||||
if(current_search_data!=null && current_search_data.id==res.row.id){
|
if (current_search_data != null && current_search_data.id == res.row.id) {
|
||||||
return 'invalid';
|
return 'invalid';
|
||||||
}
|
}
|
||||||
return 'valid'
|
return 'valid'
|
||||||
}
|
}
|
||||||
|
|
||||||
let change_page=(page:number)=>{
|
let change_page = (page: number) => {
|
||||||
search_social()
|
search_social()
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
|
||||||
})
|
|
||||||
const change_current_search_data_index = (val: any) => {
|
const change_current_search_data_index = (val: any) => {
|
||||||
current_search_data = JSON.parse(JSON.stringify(val));
|
current_search_data = JSON.parse(JSON.stringify(val));
|
||||||
// proos.changeData(current_search_data)
|
// proos.changeData(current_search_data)
|
||||||
}
|
}
|
||||||
const init = (_type: number,_name:string) => {
|
const init = (_type: number, _name: string) => {
|
||||||
type.value = _type;
|
type.value = _type;
|
||||||
keyword.value=_name;
|
keyword.value = _name;
|
||||||
show.value = true;
|
show.value = true;
|
||||||
init_search_data()
|
|
||||||
debugger
|
|
||||||
if (keyword.value && keyword.value != ""){
|
|
||||||
search_social()
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
defineExpose({init});
|
defineExpose({init});
|
||||||
|
|
||||||
function init_search_data() {
|
function init_search_data() {
|
||||||
isloading.value=false;
|
isloading.value = false;
|
||||||
current_search_data = null;
|
current_search_data = null;
|
||||||
// proos.changeData(null)
|
// proos.changeData(null)
|
||||||
search_result.value = {
|
search_result.value = {
|
||||||
totalPage: 0,
|
total_page: 0,
|
||||||
list: [],
|
list: [],
|
||||||
pageNum: 1,
|
page: 1,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,24 +119,30 @@ let confirm = () => {
|
||||||
minPackagingUnit: jsondata.min_preparation_unit,
|
minPackagingUnit: jsondata.min_preparation_unit,
|
||||||
expiryTime: 10,
|
expiryTime: 10,
|
||||||
approvalCode: jsondata.approval_number || jsondata.reg_number || '',
|
approvalCode: jsondata.approval_number || jsondata.reg_number || '',
|
||||||
medicineDosageUnit:jsondata.min_measure_unit,
|
medicineDosageUnit: jsondata.min_measure_unit,
|
||||||
medicineDosageNum:jsondata.specification,
|
medicineDosageNum: jsondata.specification,
|
||||||
extra: {
|
extra: {
|
||||||
regType: jsondata.reg_type,
|
regType: jsondata.reg_type,
|
||||||
approvalNumber: jsondata.approval_number,
|
approvalNumber: jsondata.approval_number,
|
||||||
category:jsondata.category
|
category: jsondata.category
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
emit('confirm',data)
|
emit('confirm', data)
|
||||||
show.value = false;
|
show.value = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
let isloading=ref(false);
|
let isloading = ref(false);
|
||||||
let search_social = () => {
|
let search_social = () => {
|
||||||
isloading.value=true;
|
isloading.value = true;
|
||||||
post("social/directory/search", {keyword: keyword.value,produce:produce.value, page: current_page.value, size: 20, type: type.value}, {catch_error: true}).then((res: any) => {
|
post("social/directory/search", {
|
||||||
|
keyword: keyword.value,
|
||||||
|
produce: produce.value,
|
||||||
|
page: current_page.value,
|
||||||
|
size: 20,
|
||||||
|
type: type.value
|
||||||
|
}, {catch_error: true}).then((res: any) => {
|
||||||
init_search_data()
|
init_search_data()
|
||||||
let list = res.list;
|
let list = res.list;
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
|
@ -158,12 +160,12 @@ let search_social = () => {
|
||||||
|
|
||||||
}
|
}
|
||||||
search_result.value = {
|
search_result.value = {
|
||||||
totalPage: res.total_page,
|
total_page: res.total_page,
|
||||||
list: list,
|
list: list,
|
||||||
pageNum: 1,
|
page: 1,
|
||||||
}
|
}
|
||||||
}).catch(()=>{
|
}).catch(() => {
|
||||||
isloading.value=false;
|
isloading.value = false;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const close = () => {
|
const close = () => {
|
||||||
|
|
@ -171,53 +173,62 @@ const close = () => {
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.search_bottom {
|
.bottom {
|
||||||
display: block;
|
display: flex;
|
||||||
margin-top: 10px;
|
padding: 0 24px;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search_content_wrapper {
|
.search_content_wrapper {
|
||||||
|
height: 522px;
|
||||||
background-color: #FFF;
|
background-color: #FFF;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
|
||||||
overflow: hidden;
|
|
||||||
margin: auto;
|
|
||||||
margin-top: 20px;
|
|
||||||
border-radius: 10px;
|
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 10px;
|
padding: 0 24px;
|
||||||
}
|
margin-top: 24px;
|
||||||
|
|
||||||
.search_wrapper {
|
|
||||||
position: relative;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
margin: 0 auto;
|
flex-direction: column;
|
||||||
height: 60px;
|
|
||||||
span{
|
.search_wrapper {
|
||||||
position: relative;
|
position: relative;
|
||||||
display: block;
|
width: 100%;
|
||||||
width: 100px;
|
display: flex;
|
||||||
text-align: right;
|
margin: 0 auto;
|
||||||
line-height: 40px;
|
height: 60px;
|
||||||
|
|
||||||
|
span {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
width: 100px;
|
||||||
|
text-align: right;
|
||||||
|
line-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
display: block;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 80px;
|
||||||
|
line-height: 40px;
|
||||||
|
color: #FFF;
|
||||||
|
margin-left: 10px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: #409EFF;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.input{
|
.search_result {
|
||||||
display: block;
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
min-height: 0;
|
||||||
|
|
||||||
|
|
||||||
button {
|
|
||||||
width: 80px;
|
|
||||||
line-height: 40px;
|
|
||||||
color: #FFF;
|
|
||||||
margin-left: 10px;
|
|
||||||
height: 40px;
|
|
||||||
background-color: #409EFF;
|
|
||||||
border: none;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
:deep(.invalid) {
|
:deep(.invalid) {
|
||||||
color: #409EFF;
|
color: #409EFF;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,71 +1,77 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="add-supplier" style="width:100%;margin-top: 24px">
|
<Mask :width="540" :height="603" :is-show="isShow" :top="100" @close="close" :title="id?'编辑':'添加供应商'" :show-footer="true">
|
||||||
<div class="form">
|
<div class="add-supplier" style="width:100%;margin-top: 24px;padding: 0 24px">
|
||||||
<el-form style="width: 100%" ref="ruleFormRef" :model="formData" :inline=true label-position="top">
|
<div class="form">
|
||||||
<el-form-item label="供货商名称" style="width: 100%;margin-right: 0">
|
<el-form style="width: 100%" ref="ruleFormRef" :model="formData" :inline=true label-position="top">
|
||||||
<el-input style="width: 100%" v-model="formData.name" placeholder="请输入供货商名称"></el-input>
|
<el-form-item label="供货商名称" style="width: 100%;margin-right: 0">
|
||||||
</el-form-item>
|
<el-input style="width: 100%" v-model="formData.name" placeholder="请输入供货商名称"></el-input>
|
||||||
<el-row style="width: 100%">
|
</el-form-item>
|
||||||
<el-col :span="12">
|
<el-row style="width: 100%">
|
||||||
<el-form-item label="启用状态">
|
<el-col :span="12">
|
||||||
<el-radio-group v-model="formData.turn" size="large">
|
<el-form-item label="启用状态">
|
||||||
<el-radio-button label="禁用" :value="0"/>
|
<el-radio-group v-model="formData.turn" size="large">
|
||||||
<el-radio-button label="启用" :value="1"/>
|
<el-radio-button label="禁用" :value="0"/>
|
||||||
</el-radio-group>
|
<el-radio-button label="启用" :value="1"/>
|
||||||
</el-form-item>
|
</el-radio-group>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
<el-col :span="12">
|
</el-col>
|
||||||
<el-form-item label="许可证号" style="margin-right: 0">
|
<el-col :span="12">
|
||||||
<el-input v-model="formData.licenseCode" placeholder="请输入许可证号"></el-input>
|
<el-form-item label="许可证号" style="margin-right: 0">
|
||||||
</el-form-item>
|
<el-input v-model="formData.licenseCode" placeholder="请输入许可证号"></el-input>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
</el-row>
|
</el-col>
|
||||||
<el-row style="width: 100%">
|
</el-row>
|
||||||
<el-col :span="12">
|
<el-row style="width: 100%">
|
||||||
<el-form-item label="联系人">
|
<el-col :span="12">
|
||||||
<el-input v-model="formData.contactName" placeholder="请输入联系人名称"></el-input>
|
<el-form-item label="联系人">
|
||||||
</el-form-item>
|
<el-input v-model="formData.contactName" placeholder="请输入联系人名称"></el-input>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
<el-col :span="12">
|
</el-col>
|
||||||
<el-form-item label="联系方式" style="margin-right: 0">
|
<el-col :span="12">
|
||||||
<el-input v-model="formData.contactTel" placeholder="请输入联系方式"></el-input>
|
<el-form-item label="联系方式" style="margin-right: 0">
|
||||||
</el-form-item>
|
<el-input v-model="formData.contactTel" placeholder="请输入联系方式"></el-input>
|
||||||
</el-col>
|
</el-form-item>
|
||||||
</el-row>
|
</el-col>
|
||||||
<el-form-item label="备注" style="margin-right: 0;width: 100%">
|
</el-row>
|
||||||
<el-input v-model="formData.reamark"
|
<el-form-item label="备注" style="margin-right: 0;width: 100%">
|
||||||
type="textarea" rows="5"
|
<el-input v-model="formData.reamark"
|
||||||
max="200"
|
type="textarea" rows="5"
|
||||||
show-word-limit
|
max="200"
|
||||||
placeholder="请输入备注"
|
show-word-limit
|
||||||
style="width: 100%"
|
placeholder="请输入备注"
|
||||||
>
|
style="width: 100%"
|
||||||
</el-input>
|
>
|
||||||
</el-form-item>
|
</el-input>
|
||||||
</el-form>
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<template #footer>
|
||||||
<div class="btn">
|
<div class="bottom">
|
||||||
<el-button type="primary" @click="save">确定</el-button>
|
<el-button type="primary" @click="save">确定</el-button>
|
||||||
<el-button @click="close">取消</el-button>
|
<el-button @click="close">取消</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
|
</Mask>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {ref} from "vue";
|
import {ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import CloseBtn from "@/components/CloseBtn.vue";
|
import CloseBtn from "@/components/CloseBtn.vue";
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
|
||||||
const formData = ref({
|
const formData = ref({
|
||||||
name: null,
|
name: null,
|
||||||
turn: 1,
|
turn: 0,
|
||||||
contactName: null,
|
contactName: null,
|
||||||
contactTel: null,
|
contactTel: null,
|
||||||
reamark: null,
|
reamark: null,
|
||||||
licenseCode: null,
|
licenseCode: null,
|
||||||
})
|
})
|
||||||
const errorMsg = ref('')
|
const errorMsg = ref('')
|
||||||
const emit = defineEmits(['close', 'saveSuccess'])
|
const isShow = ref(false)
|
||||||
|
const emit = defineEmits(['close'])
|
||||||
|
|
||||||
const save = () => {
|
const save = () => {
|
||||||
if (formData.value.name === '' || formData.value.name === null) {
|
if (formData.value.name === '' || formData.value.name === null) {
|
||||||
|
|
@ -73,15 +79,19 @@ const save = () => {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
post("inventory/supplier/save", {inventorySupplier: formData.value}).then((res: any) => {
|
post("inventory/supplier/save", {inventorySupplier: formData.value}).then((res: any) => {
|
||||||
emit('saveSuccess')
|
|
||||||
close()
|
close()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const id = ref<any>(null)
|
||||||
const edit = (supplierData: any) => {
|
const editInit = (supplierData: any) => {
|
||||||
|
isShow.value = true
|
||||||
|
id.value = supplierData.id
|
||||||
formData.value = supplierData
|
formData.value = supplierData
|
||||||
}
|
}
|
||||||
defineExpose({edit})
|
const addInit = () => {
|
||||||
|
isShow.value = true
|
||||||
|
}
|
||||||
|
defineExpose({addInit, editInit})
|
||||||
|
|
||||||
const close = () => {
|
const close = () => {
|
||||||
formData.value = {
|
formData.value = {
|
||||||
|
|
@ -93,14 +103,19 @@ const close = () => {
|
||||||
licenseCode: null,
|
licenseCode: null,
|
||||||
}
|
}
|
||||||
errorMsg.value = ''
|
errorMsg.value = ''
|
||||||
|
isShow.value = false
|
||||||
|
id.value = null
|
||||||
emit('close')
|
emit('close')
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.btn {
|
.bottom {
|
||||||
position: absolute;
|
height: 100%;
|
||||||
right: 10px;
|
display: flex;
|
||||||
bottom: 10px;
|
justify-content: flex-end;
|
||||||
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -2,23 +2,19 @@
|
||||||
<Panel :title="'服务项目'">
|
<Panel :title="'服务项目'">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<ul>
|
<ul>
|
||||||
<li class="item" v-for="(item, index) in list" :key="index">
|
<li class="item" v-for="(item, index) in list" :key="index">
|
||||||
<span class="index">{{ index + 1 }}</span>
|
<span class="index">{{ index + 1 }}</span>
|
||||||
<span class="name">{{ item.itemName }}</span>
|
<span class="name">{{ item.itemName }}</span>
|
||||||
<span class="price">¥{{ item.unitPrice }}元</span>
|
<span class="code">{{ item.itemSocialCode }}</span>
|
||||||
<span class="code">{{ item.itemSocialCode }}</span>
|
<span class="price">¥{{ item.unitPrice }}元</span>
|
||||||
<span class="unit">
|
<span class="delete">
|
||||||
<el-input-number v-model="item.selectedNum" min="1"></el-input-number>
|
<el-button text @click="deleteItem(item.id)">
|
||||||
<span style="line-height: 30px;margin-left: 10px">{{ item.unit }}</span>
|
|
||||||
</span>
|
|
||||||
<span class="delete">
|
|
||||||
<el-button @click="deleteItem(item.id)">
|
|
||||||
<el-icon><CircleClose/></el-icon>
|
<el-icon><CircleClose/></el-icon>
|
||||||
</el-button>
|
</el-button>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="search">
|
<div class="search">
|
||||||
<div class="search-input">
|
<div class="search-input">
|
||||||
|
|
@ -30,7 +26,7 @@
|
||||||
>
|
>
|
||||||
</SearchInput>
|
</SearchInput>
|
||||||
</div>
|
</div>
|
||||||
<span style="margin-right: 24px">¥{{ list.reduce((acc, cur) => acc + cur.unitPrice*cur.selectedNum, 0) }}元</span></div>
|
<span style="margin-right: 24px">¥{{ list.reduce((acc, cur) => acc + cur.unitPrice, 0) }}元</span></div>
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -55,7 +51,6 @@ const serviceShowConfig = [
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
const serviceSelect = (row: any) => {
|
const serviceSelect = (row: any) => {
|
||||||
row.selectedNum = 1
|
|
||||||
list.value.push(row)
|
list.value.push(row)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,40 +75,35 @@ const deleteItem = (id: any) => {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
.index{
|
||||||
.index {
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
border-right: 1px solid #EAEAEC;
|
border-right: 1px solid #EAEAEC;
|
||||||
line-height: 64px;
|
line-height: 64px;
|
||||||
}
|
}
|
||||||
|
.name{
|
||||||
.name {
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
border-right: 1px solid #EAEAEC;
|
border-right: 1px solid #EAEAEC;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
line-height: 64px;
|
line-height: 64px;
|
||||||
}
|
}
|
||||||
|
.code{
|
||||||
.code {
|
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
border-right: 1px solid #EAEAEC;
|
border-right: 1px solid #EAEAEC;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
line-height: 64px;
|
line-height: 64px;
|
||||||
}
|
}
|
||||||
|
.price{
|
||||||
.price {
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
line-height: 64px;
|
line-height: 64px;
|
||||||
border-right: 1px solid #EAEAEC;
|
border-right: 1px solid #EAEAEC;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
.delete{
|
||||||
.delete {
|
|
||||||
height: 100%;
|
height: 100%;
|
||||||
width: 50px;
|
width: 50px;
|
||||||
line-height: 64px;
|
line-height: 64px;
|
||||||
|
|
@ -127,7 +117,6 @@ const deleteItem = (id: any) => {
|
||||||
border-top: 1px solid #EAEAEC;
|
border-top: 1px solid #EAEAEC;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.search-input {
|
.search-input {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.purchaseUnitPrice">
|
<el-input v-model="form.purchaseUnitPrice">
|
||||||
<template #append>
|
<template #append>
|
||||||
<el-button @click="imageURL">¥</el-button>
|
<el-button text @click="imageURL">¥</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -42,7 +42,7 @@
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input v-model="form.unitPrice">
|
<el-input v-model="form.unitPrice">
|
||||||
<template #append>
|
<template #append>
|
||||||
<el-button @click="imageURL">¥</el-button>
|
<el-button type="text" @click="imageURL">¥</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -56,12 +56,12 @@
|
||||||
</el-form>
|
</el-form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<ItemSearch ref="createSearchRef" @confirm="selectedCallBack"/>
|
<Search ref="createSearchRef" @confirm="createConfirm"/>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {defineProps, defineEmits, ref, nextTick, onMounted} from 'vue'
|
import {defineProps, defineEmits, ref, nextTick, onMounted} from 'vue'
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import ItemSearch from "./ItemSearch.vue";
|
import Search from "./Search.vue";
|
||||||
import {ElMessage} from "element-plus";
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -130,11 +130,11 @@ const openCreateSearch = () => {
|
||||||
createSearchRef.value?.init(form.value.itemName);
|
createSearchRef.value?.init(form.value.itemName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const selectedCallBack = (searchResult: any) => {
|
const createConfirm = (data: any) => {
|
||||||
console.log(searchResult, 'data')
|
console.log(data, 'data')
|
||||||
form.value.itemName = searchResult.name;
|
form.value = data
|
||||||
form.value.itemSocialCode = searchResult.code;
|
form.value.itemName = data.name
|
||||||
form.value.unit = searchResult.unit;
|
form.value.itemSocialCode = data.hilistCode
|
||||||
}
|
}
|
||||||
const deleteDetail = () => {
|
const deleteDetail = () => {
|
||||||
post("item/delete", {id: props.id}).then((res: any) => {
|
post("item/delete", {id: props.id}).then((res: any) => {
|
||||||
|
|
|
||||||
|
|
@ -1,121 +1,139 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form :model="userInfo" label-width="auto" :rules="rules" ref="ruleFormRef">
|
<Mask :is-show="isShow" @close="exit" :width="800" :height="600" title="成员管理" :show-footer="true">
|
||||||
<el-descriptions
|
<div style="padding: 24px">
|
||||||
title="基本信息"
|
<el-form :model="userInfo" label-width="auto" :rules="rules" ref="ruleFormRef">
|
||||||
:column="3"
|
<el-descriptions
|
||||||
direction="vertical"
|
title="基本信息"
|
||||||
border
|
:column="3"
|
||||||
>
|
direction="vertical"
|
||||||
<el-descriptions-item label="账号">
|
border
|
||||||
<el-form-item prop="username">
|
>
|
||||||
<el-input v-model="userInfo.username"/>
|
<el-descriptions-item label="账号">
|
||||||
</el-form-item>
|
<el-form-item prop="username">
|
||||||
</el-descriptions-item>
|
<el-input v-model="userInfo.username"/>
|
||||||
<el-descriptions-item label="密码">
|
</el-form-item>
|
||||||
<el-form-item prop="password">
|
</el-descriptions-item>
|
||||||
<el-input v-model="userInfo.password" show-password/>
|
<el-descriptions-item label="密码">
|
||||||
</el-form-item>
|
<el-form-item prop="password">
|
||||||
</el-descriptions-item>
|
<el-input v-model="userInfo.password" show-password/>
|
||||||
<el-descriptions-item label="用户名">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="userInfo.name"/>
|
<el-descriptions-item label="用户名">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="userInfo.name"/>
|
||||||
</el-descriptions>
|
</el-form-item>
|
||||||
</el-form>
|
</el-descriptions-item>
|
||||||
<el-form :model="memberInfo" label-width="auto">
|
</el-descriptions>
|
||||||
<el-descriptions
|
</el-form>
|
||||||
title="扩展信息"
|
<el-form :model="memberInfo" label-width="auto">
|
||||||
:column="3"
|
<el-descriptions
|
||||||
direction="vertical"
|
title="扩展信息"
|
||||||
border
|
:column="3"
|
||||||
>
|
direction="vertical"
|
||||||
<el-descriptions-item label="姓名">
|
border
|
||||||
<el-form-item>
|
>
|
||||||
<el-input v-model="memberInfo.name"/>
|
<el-descriptions-item label="姓名">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="memberInfo.name"/>
|
||||||
<el-descriptions-item label="性别">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="memberInfo.gender"/>
|
<el-descriptions-item label="性别">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-select
|
||||||
<el-descriptions-item label="年龄">
|
v-model="memberInfo.gender"
|
||||||
<el-form-item>
|
placeholder="选择性别"
|
||||||
<el-input v-model="memberInfo.age"/>
|
>
|
||||||
</el-form-item>
|
<el-option
|
||||||
</el-descriptions-item>
|
v-for="item in ['男', '女']"
|
||||||
<el-descriptions-item label="手机号">
|
:key="item"
|
||||||
<el-form-item>
|
:label="item"
|
||||||
<el-input v-model="memberInfo.tel"/>
|
:value="item"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-descriptions-item>
|
</el-select>
|
||||||
<el-descriptions-item label="角色">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-select
|
<el-descriptions-item label="年龄">
|
||||||
v-model="memberInfo.role"
|
<el-form-item>
|
||||||
placeholder="选择角色"
|
<el-input v-model="memberInfo.age"/>
|
||||||
size="large"
|
</el-form-item>
|
||||||
>
|
</el-descriptions-item>
|
||||||
<el-option
|
<el-descriptions-item label="手机号">
|
||||||
v-for="item in roleList"
|
<el-form-item>
|
||||||
:key="item.value"
|
<el-input v-model="memberInfo.tel"/>
|
||||||
:label="item.label"
|
</el-form-item>
|
||||||
:value="item.value"
|
</el-descriptions-item>
|
||||||
/>
|
<el-descriptions-item label="角色">
|
||||||
</el-select>
|
<el-form-item>
|
||||||
</el-form-item>
|
<el-select
|
||||||
</el-descriptions-item>
|
v-model="memberInfo.role"
|
||||||
<el-descriptions-item label="身份证号">
|
placeholder="选择角色"
|
||||||
<el-form-item>
|
size="large"
|
||||||
<el-input v-model="memberInfo.idCardNumber"/>
|
>
|
||||||
</el-form-item>
|
<el-option
|
||||||
</el-descriptions-item>
|
v-for="item in roleList"
|
||||||
<el-descriptions-item label="科室">
|
:key="item.value"
|
||||||
<el-form-item>
|
:label="item.label"
|
||||||
<el-select
|
:value="item.value"
|
||||||
v-model="memberInfo.sectionId"
|
/>
|
||||||
placeholder="选择科室"
|
</el-select>
|
||||||
>
|
</el-form-item>
|
||||||
<el-option
|
</el-descriptions-item>
|
||||||
v-for="item in sectionList"
|
<el-descriptions-item label="身份证号">
|
||||||
:key="item.id"
|
<el-form-item>
|
||||||
:label="item.name"
|
<el-input v-model="memberInfo.idCardNumber"/>
|
||||||
:value="item.id"
|
</el-form-item>
|
||||||
/>
|
</el-descriptions-item>
|
||||||
</el-select>
|
<el-descriptions-item label="科室">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-select
|
||||||
<el-descriptions-item label="医保人员代码">
|
v-model="memberInfo.sectionId"
|
||||||
<el-form-item>
|
placeholder="选择科室"
|
||||||
<el-input v-model="memberInfo.socialMemberCode"/>
|
>
|
||||||
</el-form-item>
|
<el-option
|
||||||
</el-descriptions-item>
|
v-for="item in sectionList"
|
||||||
<el-descriptions-item label="备注">
|
:key="item.id"
|
||||||
<el-form-item>
|
:label="item.name"
|
||||||
<el-input v-model="memberInfo.memo"/>
|
:value="item.id"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-descriptions-item>
|
</el-select>
|
||||||
<el-descriptions-item label="电子签名">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<UpLoad v-model="uploadURL" ref="uploadRef" @uploadSuccess="(url)=>{memberInfo.electronicSignature=url}"></UpLoad>
|
<el-descriptions-item label="医保人员代码">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="memberInfo.socialMemberCode"/>
|
||||||
</el-descriptions>
|
</el-form-item>
|
||||||
<div class="demo-button">
|
</el-descriptions-item>
|
||||||
<el-button type="primary" @click="save()">保存</el-button>
|
<el-descriptions-item label="备注">
|
||||||
<el-button @click="onSubmit">取消</el-button>
|
<el-form-item>
|
||||||
<el-button v-if="props.id" type="danger" @click="deleteDetail">删除</el-button>
|
<el-input v-model="memberInfo.memo"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="电子签名">
|
||||||
|
<el-form-item>
|
||||||
|
<UpLoad v-model="uploadURL" ref="uploadRef"
|
||||||
|
@uploadSuccess="(url)=>{memberInfo.electronicSignature=url}"></UpLoad>
|
||||||
|
</el-form-item>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
<template #footer>
|
||||||
|
<div class="bottom">
|
||||||
|
<el-button type="primary" @click="save()">保存</el-button>
|
||||||
|
<el-button @click="exit">取消</el-button>
|
||||||
|
<el-button v-if="props.id" type="danger" @click="deleteDetail">删除</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</Mask>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {defineProps, defineEmits, ref, onMounted} from 'vue'
|
import {defineProps, defineEmits, ref, onMounted} from 'vue'
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {loadConfig} from "@/utils/config.ts";
|
import {loadConfig} from "@/utils/config.ts";
|
||||||
import depts from "@/assets/config/directory/depts.json"
|
|
||||||
import UpLoad from "@/components/UpLoad.vue";
|
import UpLoad from "@/components/UpLoad.vue";
|
||||||
import {ElMessage} from 'element-plus'
|
import {ElMessage} from 'element-plus'
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
id: {
|
id: {
|
||||||
|
|
@ -170,77 +188,65 @@ const memberInfo = ref<any>({
|
||||||
memo: '',// 备注
|
memo: '',// 备注
|
||||||
password: "",
|
password: "",
|
||||||
})
|
})
|
||||||
const userInfo= ref<any>({
|
const userInfo = ref<any>({
|
||||||
username: "", // 账号
|
username: "", // 账号
|
||||||
name: "",
|
name: "",
|
||||||
password: "",
|
password: "",
|
||||||
})
|
})
|
||||||
const rules= {
|
const rules = {
|
||||||
username: [
|
username: [
|
||||||
{required: true, message: '请输入账号', trigger: 'blur'},
|
{required: true, message: '请输入账号', trigger: 'blur'},
|
||||||
],
|
],
|
||||||
password: [
|
password: [
|
||||||
{required: true, message: '请输入密码', trigger: 'blur'},
|
{required: true, message: '请输入密码', trigger: 'blur'},
|
||||||
],
|
],
|
||||||
}
|
|
||||||
const emit = defineEmits(['onSubmit'])
|
|
||||||
const onSubmit = () => {
|
|
||||||
emit('onSubmit')
|
|
||||||
}
|
}
|
||||||
const ruleFormRef= ref<any>('')
|
const isShow = ref(false)
|
||||||
|
const emit = defineEmits(['close'])
|
||||||
|
const exit = () => {
|
||||||
|
memberInfo.value = {}
|
||||||
|
userInfo.value = {}
|
||||||
|
isShow.value = false
|
||||||
|
emit('close')
|
||||||
|
}
|
||||||
|
const ruleFormRef = ref<any>('')
|
||||||
const save = () => {
|
const save = () => {
|
||||||
let form={
|
let form = {
|
||||||
memberInfo:memberInfo.value,
|
memberInfo: memberInfo.value,
|
||||||
userInfo:userInfo.value,
|
userInfo: userInfo.value,
|
||||||
}
|
}
|
||||||
ruleFormRef.value.validate((valid: any) => {
|
ruleFormRef.value.validate((valid: any) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
if (props.id) {
|
if (props.id) {
|
||||||
post("organization/member/edit", {data: form}).then((res) => {
|
post("organization/member/edit", {data: form}).then(() => {
|
||||||
onSubmit()
|
exit()
|
||||||
memberInfo.value = {}
|
ElMessage.success('已修改')
|
||||||
userInfo.value = {}
|
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
post("organization/member/add", {data: form}).then((res) => {
|
post("organization/member/add", {data: form}).then(() => {
|
||||||
onSubmit()
|
exit()
|
||||||
memberInfo.value = {}
|
ElMessage.success('已添加')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
const options = Object.entries(depts).map(([key, value]) => {
|
|
||||||
if (typeof value === 'string') {
|
|
||||||
return {value: key, label: value};
|
|
||||||
} else {
|
|
||||||
return {
|
|
||||||
value: key,
|
|
||||||
label: value.name,
|
|
||||||
children: Object.entries(value.children).map(([childKey, childValue]) => ({
|
|
||||||
value: childKey,
|
|
||||||
label: childValue,
|
|
||||||
})),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const uploadRef = ref<any>('')
|
const uploadRef = ref<any>('')
|
||||||
const init = (id: any) => {
|
const getById = () => {
|
||||||
memberInfo.value = {}
|
memberInfo.value = {}
|
||||||
userInfo.value = {}
|
userInfo.value = {}
|
||||||
post("organization/member/getById", {id}).then((res: any) => {
|
post("organization/member/getById", {id: props.id}).then((res: any) => {
|
||||||
memberInfo.value = res.memberInfo
|
memberInfo.value = res.memberInfo
|
||||||
if(res.userInfo){
|
if (res.userInfo) {
|
||||||
userInfo.value = res.userInfo
|
userInfo.value = res.userInfo
|
||||||
}
|
}
|
||||||
if(memberInfo.value.electronicSignature){
|
if (memberInfo.value.electronicSignature) {
|
||||||
uploadRef.value?.getImageUrl(memberInfo.value.electronicSignature)
|
uploadRef.value?.getImageUrl(memberInfo.value.electronicSignature)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const uploadURL = ref('')
|
const uploadURL = ref('')
|
||||||
const imageURL= ref('')
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
loadConfig().then((res: any) => {
|
loadConfig().then((res: any) => {
|
||||||
uploadURL.value = res.base_url + "file/upload";
|
uploadURL.value = res.base_url + "file/upload";
|
||||||
|
|
@ -254,17 +260,25 @@ const list = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const deleteDetail = () => {
|
const deleteDetail = () => {
|
||||||
post("organization/member/delete", {id: props.id}).then((res: any) => {
|
post("organization/member/delete", {id: props.id}).then(() => {
|
||||||
onSubmit()
|
exit()
|
||||||
ElMessage.error('已删除');
|
ElMessage.error('已删除');
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
const init = () => {
|
||||||
|
isShow.value = true
|
||||||
|
if(props.id){
|
||||||
|
getById()
|
||||||
|
}
|
||||||
|
}
|
||||||
defineExpose({init})
|
defineExpose({init})
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.demo-button {
|
.bottom {
|
||||||
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
margin-top: 20px;
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -0,0 +1,230 @@
|
||||||
|
<template>
|
||||||
|
<Mask :width="800" :height="600" :is-show="show" :top="100">
|
||||||
|
<div class="search_content_wrapper">
|
||||||
|
<div class="search_wrapper">
|
||||||
|
<span>项目名称:</span>
|
||||||
|
<el-input
|
||||||
|
class="input"
|
||||||
|
v-model="keyword"
|
||||||
|
placeholder="请输入药品名称或者编号"
|
||||||
|
@keydown.enter="search_social"
|
||||||
|
clearable/>
|
||||||
|
<button @click="search_social">搜索</button>
|
||||||
|
</div>
|
||||||
|
<div class="search_result">
|
||||||
|
|
||||||
|
<div class="result_table" style="width: 100%; height: 100%;overflow: hidden">
|
||||||
|
<el-table v-loading="isloading" :data="search_result.list" style="width: 100%;height: 350px"
|
||||||
|
highlight-current-row @current-change="change_current_search_data_index"
|
||||||
|
:row-class-name="tableRowClassName">
|
||||||
|
<el-table-column prop="name" label="名称" fixed width="180" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="json.approval_number" fixed label="国药准字" width="180" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="producer" label="生产企业" width="180" show-overflow-tooltip/>
|
||||||
|
<el-table-column v-if="type==1301" prop="json.reg_specifications" label="注册规格" width="80"
|
||||||
|
show-overflow-tooltip/>
|
||||||
|
<el-table-column v-if="type==1301" prop="json.min_packaging_unit" label="包装单位" width="80"
|
||||||
|
show-overflow-tooltip/>
|
||||||
|
<el-table-column v-if="type==1301" prop="json.min_packaging_number" label="包装数量" width="80"
|
||||||
|
show-overflow-tooltip/>
|
||||||
|
<el-table-column v-if="type==1301" prop="json.min_preparation_unit" label="制剂单位" width="80"
|
||||||
|
show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="code" label="医保编码" width="180" show-overflow-tooltip/>
|
||||||
|
<el-table-column prop="enddate" label="有效期至" width="180" show-overflow-tooltip/>
|
||||||
|
</el-table>
|
||||||
|
<div class="page_btn_list">
|
||||||
|
<el-pagination background layout="prev, pager, next" :page-count="search_result.total_page"
|
||||||
|
v-model:current-page="current_page" @current-change="change_page"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="search_bottom">
|
||||||
|
<el-button type="primary" @click="confirm">确认</el-button>
|
||||||
|
<el-button type="primary" @click="close">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Mask>
|
||||||
|
</template>
|
||||||
|
<script setup lang="ts">
|
||||||
|
import {onMounted, ref, defineProps} from "vue";
|
||||||
|
import {post} from '@/utils/request.ts'
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
|
||||||
|
let current_search_data: any = null;
|
||||||
|
let keyword = ref('');
|
||||||
|
let produce = ref("");
|
||||||
|
let type = ref(0);
|
||||||
|
let current_page = ref(1)
|
||||||
|
const show = ref(false);
|
||||||
|
|
||||||
|
const emit = defineEmits(["confirm"])
|
||||||
|
|
||||||
|
let search_result = ref({
|
||||||
|
total_page: 0,
|
||||||
|
list: [],
|
||||||
|
page: 1,
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
let tableRowClassName = (res: any) => {
|
||||||
|
if (current_search_data != null && current_search_data.id == res.row.id) {
|
||||||
|
return 'invalid';
|
||||||
|
}
|
||||||
|
return 'valid'
|
||||||
|
}
|
||||||
|
|
||||||
|
let change_page = (page: number) => {
|
||||||
|
search_social()
|
||||||
|
}
|
||||||
|
// onMounted(() => {
|
||||||
|
// search_social()
|
||||||
|
// })
|
||||||
|
const change_current_search_data_index = (val: any) => {
|
||||||
|
current_search_data = JSON.parse(JSON.stringify(val));
|
||||||
|
console.log(current_search_data.id)
|
||||||
|
// proos.changeData(current_search_data)
|
||||||
|
}
|
||||||
|
const init = (_name: string) => {
|
||||||
|
keyword.value = _name;
|
||||||
|
show.value = true;
|
||||||
|
init_search_data()
|
||||||
|
search_social()
|
||||||
|
};
|
||||||
|
defineExpose({init});
|
||||||
|
|
||||||
|
function init_search_data() {
|
||||||
|
isloading.value = false;
|
||||||
|
current_search_data = null;
|
||||||
|
search_result.value = {
|
||||||
|
total_page: 0,
|
||||||
|
list: [],
|
||||||
|
page: 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let confirm = () => {
|
||||||
|
let jsondata = current_search_data.json;
|
||||||
|
let data = {
|
||||||
|
id: null,
|
||||||
|
type: null,
|
||||||
|
name: jsondata.name,
|
||||||
|
commonName: jsondata.common_name,
|
||||||
|
hilistCode: jsondata.code,
|
||||||
|
unitPrice: null,
|
||||||
|
purchaseUnitPrice: null,
|
||||||
|
producer: jsondata.producer,
|
||||||
|
barcode: null,
|
||||||
|
minPackagingNumber: jsondata.min_packaging_number,
|
||||||
|
packagingUnit: jsondata.min_packaging_unit,
|
||||||
|
minPackagingUnit: jsondata.min_preparation_unit,
|
||||||
|
expiryTime: 10,
|
||||||
|
approvalCode: jsondata.approval_number || jsondata.reg_number || '',
|
||||||
|
medicineDosageUnit: jsondata.min_measure_unit,
|
||||||
|
medicineDosageNum: jsondata.specification,
|
||||||
|
extra: {
|
||||||
|
regType: jsondata.reg_type,
|
||||||
|
approvalNumber: jsondata.approval_number,
|
||||||
|
category: jsondata.category
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("data", data)
|
||||||
|
emit('confirm', data)
|
||||||
|
show.value = false;
|
||||||
|
|
||||||
|
}
|
||||||
|
let isloading = ref(false);
|
||||||
|
let search_social = () => {
|
||||||
|
isloading.value = true;
|
||||||
|
post("social/directory/search", {
|
||||||
|
keyword: keyword.value,
|
||||||
|
}, {catch_error: true}).then((res: any) => {
|
||||||
|
init_search_data()
|
||||||
|
let list = res.list;
|
||||||
|
for (let i = 0; i < list.length; i++) {
|
||||||
|
let end_datetime = list[i].enddate;
|
||||||
|
//和当前时间比较
|
||||||
|
if (new Date().getTime() < new Date(end_datetime).getTime() || end_datetime == "" || end_datetime == null) {
|
||||||
|
let time_diff = new Date(end_datetime).getTime() - new Date().getTime();
|
||||||
|
// list[i].data.is_valid = true
|
||||||
|
} else {
|
||||||
|
// list[i].data.is_valid = false
|
||||||
|
}
|
||||||
|
if (end_datetime == "" || end_datetime == null) {
|
||||||
|
list[i].enddate = "长期有效";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
search_result.value = {
|
||||||
|
total_page: res.total_page,
|
||||||
|
list: list,
|
||||||
|
page: 1,
|
||||||
|
}
|
||||||
|
}).catch(() => {
|
||||||
|
isloading.value = false;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const close = () => {
|
||||||
|
show.value = false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.search_bottom {
|
||||||
|
display: block;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search_content_wrapper {
|
||||||
|
background-color: #FFF;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
margin: auto;
|
||||||
|
margin-top: 24px;
|
||||||
|
border-radius: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search_wrapper {
|
||||||
|
position: relative;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
margin: 0 auto;
|
||||||
|
height: 60px;
|
||||||
|
|
||||||
|
span {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
width: 100px;
|
||||||
|
text-align: right;
|
||||||
|
line-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
display: block;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 80px;
|
||||||
|
line-height: 40px;
|
||||||
|
color: #FFF;
|
||||||
|
margin-left: 10px;
|
||||||
|
height: 40px;
|
||||||
|
background-color: #409EFF;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.invalid) {
|
||||||
|
color: #409EFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search_result {
|
||||||
|
width: 100%;
|
||||||
|
height: 400px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -1,121 +1,130 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form :model="form" label-width="auto">
|
<Mask :is-show="isShow" @close="exit" :height="570" :title="props.id?'编辑':'新增'" :show-footer="true">
|
||||||
<el-descriptions
|
<div style="padding: 24px">
|
||||||
:column="4"
|
<el-form :model="form" label-width="auto">
|
||||||
direction="vertical"
|
<el-descriptions
|
||||||
border
|
:column="4"
|
||||||
>
|
direction="vertical"
|
||||||
<el-descriptions-item label="科室名称">
|
border
|
||||||
<el-form-item>
|
>
|
||||||
<el-input v-model="form.name"/>
|
<el-descriptions-item label="科室名称">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.name"/>
|
||||||
<el-descriptions-item label="科室类别">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-cascader :props="{ checkStrictly: true }" v-model="form.caty" :options="options"/>
|
<el-descriptions-item label="科室类别">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-cascader :props="{ checkStrictly: true }" v-model="form.caty" :options="options"/>
|
||||||
<el-descriptions-item label="开始日期">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<div class="demo-date-picker">
|
<el-descriptions-item label="开始日期">
|
||||||
<el-date-picker
|
<el-form-item>
|
||||||
v-model="form.beginDate"
|
<div class="demo-date-picker">
|
||||||
type="date"
|
<el-date-picker
|
||||||
placeholder="请选择开始日期"
|
v-model="form.beginDate"
|
||||||
/>
|
type="date"
|
||||||
</div>
|
placeholder="请选择开始日期"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-descriptions-item>
|
</div>
|
||||||
<el-descriptions-item label="结束日期">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<div class="demo-date-picker">
|
<el-descriptions-item label="结束日期">
|
||||||
<el-date-picker
|
<el-form-item>
|
||||||
v-model="form.endDate"
|
<div class="demo-date-picker">
|
||||||
type="date"
|
<el-date-picker
|
||||||
placeholder="请选择结束日期"
|
v-model="form.endDate"
|
||||||
/>
|
type="date"
|
||||||
</div>
|
placeholder="请选择结束日期"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-descriptions-item>
|
</div>
|
||||||
<el-descriptions-item label="成立时间">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<div class="demo-date-picker">
|
<el-descriptions-item label="成立时间">
|
||||||
<el-date-picker
|
<el-form-item>
|
||||||
v-model="form.creationDate"
|
<div class="demo-date-picker">
|
||||||
type="date"
|
<el-date-picker
|
||||||
placeholder="请选择成立时间"
|
v-model="form.creationDate"
|
||||||
:default-value="new Date(2010, 9, 1)"
|
type="date"
|
||||||
/>
|
placeholder="请选择成立时间"
|
||||||
</div>
|
:default-value="new Date(2010, 9, 1)"
|
||||||
</el-form-item>
|
/>
|
||||||
</el-descriptions-item>
|
</div>
|
||||||
<el-descriptions-item label="简介">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="form.info" :show-word-limit="true" :clearable="true" :size="'large'"/>
|
<el-descriptions-item label="简介">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.info" type="text" :show-word-limit="true" :clearable="true" :size="'large'"/>
|
||||||
<el-descriptions-item label="负责人姓名">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="form.resperName"/>
|
<el-descriptions-item label="负责人姓名">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.resperName"/>
|
||||||
<el-descriptions-item label="负责人电话">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="form.resperTel"/>
|
<el-descriptions-item label="负责人电话">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.resperTel"/>
|
||||||
<el-descriptions-item label="医疗服务范围">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="form.medServScp"/>
|
<el-descriptions-item label="医疗服务范围">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.medServScp"/>
|
||||||
<el-descriptions-item label="批准床位数">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="form.bedCnt" type="number"/>
|
<el-descriptions-item label="批准床位数">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.bedCnt" type="number"/>
|
||||||
<el-descriptions-item label="医保认可床位数量">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model.number="form.socialBedCnt" type="number"/>
|
<el-descriptions-item label="医保认可床位数量">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model.number="form.socialBedCnt" type="number"/>
|
||||||
<el-descriptions-item label="医师人数">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model.number="form.drPsncnt" type="number"/>
|
<el-descriptions-item label="医师人数">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model.number="form.drPsncnt" type="number"/>
|
||||||
<el-descriptions-item label="药师人数">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model.number="form.pharPsncnt" type="number"/>
|
<el-descriptions-item label="药师人数">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model.number="form.pharPsncnt" type="number"/>
|
||||||
<el-descriptions-item label="护士人数">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model.number="form.nursPsncnt" type="number"/>
|
<el-descriptions-item label="护士人数">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model.number="form.nursPsncnt" type="number"/>
|
||||||
<el-descriptions-item label="技术人员人数">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model.number="form.tecnPsncnt" type="number"/>
|
<el-descriptions-item label="技术人员人数">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model.number="form.tecnPsncnt" type="number"/>
|
||||||
<el-descriptions-item label="备注">
|
</el-form-item>
|
||||||
<el-form-item>
|
</el-descriptions-item>
|
||||||
<el-input v-model="form.memo" :show-word-limit="true" :clearable="true" />
|
<el-descriptions-item label="备注">
|
||||||
</el-form-item>
|
<el-form-item>
|
||||||
</el-descriptions-item>
|
<el-input v-model="form.memo" type="text" :show-word-limit="true" :clearable="true"/>
|
||||||
</el-descriptions>
|
</el-form-item>
|
||||||
<div class="demo-button">
|
</el-descriptions-item>
|
||||||
<el-button type="primary" @click="save()">保存</el-button>
|
</el-descriptions>
|
||||||
<el-button @click="onSubmit">取消</el-button>
|
</el-form>
|
||||||
<el-button v-if="props.id" @click="deleteDetail" type="danger">删除</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</el-form>
|
<template #footer>
|
||||||
|
<div class="bottom">
|
||||||
|
<el-button type="primary" @click="save()">保存</el-button>
|
||||||
|
<el-button @click="exit">取消</el-button>
|
||||||
|
<el-button v-if="props.id" @click="deleteDetail" type="danger">删除</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</Mask>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {defineProps, onMounted, ref} from 'vue'
|
import {defineProps, onMounted, ref} from 'vue'
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import depts from "@/assets/config/directory/depts.json"
|
import depts from "@/assets/config/directory/depts.json"
|
||||||
|
import Mask from "@/components/common/Mask.vue";
|
||||||
|
import {ElMessage} from "element-plus";
|
||||||
|
|
||||||
// do not use same name with ref
|
// do not use same name with ref
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
|
|
@ -142,21 +151,29 @@ const form = ref<any>({
|
||||||
tecnPsncnt: '',
|
tecnPsncnt: '',
|
||||||
memo: '',
|
memo: '',
|
||||||
})
|
})
|
||||||
|
const isShow = ref<any>(false)
|
||||||
const emit = defineEmits(['onSubmit'])
|
const emit = defineEmits(['onSubmit'])
|
||||||
const onSubmit = () => {
|
const exit = () => {
|
||||||
|
form.value = {}
|
||||||
|
isShow.value = false
|
||||||
emit('onSubmit')
|
emit('onSubmit')
|
||||||
}
|
}
|
||||||
|
const openDialog= () => {
|
||||||
|
isShow.value = true
|
||||||
|
if (props.id) {
|
||||||
|
init(props.id)
|
||||||
|
}
|
||||||
|
}
|
||||||
const save = () => {
|
const save = () => {
|
||||||
if (props.id) {
|
if (props.id) {
|
||||||
post("organization/section/edit", {data: form.value}).then((res) => {
|
post("organization/section/edit", {data: form.value}).then((res) => {
|
||||||
onSubmit()
|
exit()
|
||||||
form.value = {}
|
ElMessage.success('已修改')
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
post("organization/section/add", {data: form.value}).then((res) => {
|
post("organization/section/add", {data: form.value}).then((res) => {
|
||||||
onSubmit()
|
exit()
|
||||||
form.value = {}
|
ElMessage.success('已添加')
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -180,18 +197,20 @@ const init = (id: any) => {
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
const deleteDetail=()=>{
|
const deleteDetail = () => {
|
||||||
post("organization/section/delete", {id:props.id}).then((res: any) => {
|
post("organization/section/delete", {id: props.id}).then((res: any) => {
|
||||||
onSubmit()
|
exit()
|
||||||
ElMessage.error('已删除');
|
ElMessage.error('已删除');
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
defineExpose({init})
|
defineExpose({openDialog})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.demo-button{
|
.bottom {
|
||||||
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
margin-top: 20px;
|
align-items: center;
|
||||||
|
padding: 0 24px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -1,10 +1,15 @@
|
||||||
import { ref, computed } from 'vue'
|
|
||||||
|
import { ref } from 'vue'
|
||||||
import { defineStore } from 'pinia'
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
export const singStatus = defineStore('counter', () => {
|
export const useLogoStore = defineStore('logo', () => {
|
||||||
const singShow = ref<any>(null)
|
const logoUrl = ref<string>("")
|
||||||
function setSingShow(val:any){
|
function setLogoUrl(url: string) {
|
||||||
singShow.value = val
|
logoUrl.value = url
|
||||||
}
|
}
|
||||||
return { singShow,setSingShow}
|
function getLogoUrl() {
|
||||||
})
|
return logoUrl.value
|
||||||
|
}
|
||||||
|
// 返回需要暴露的方法和变量
|
||||||
|
return { logoUrl, setLogoUrl, getLogoUrl }
|
||||||
|
})
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
<PaymentDetails></PaymentDetails>
|
<PaymentDetails></PaymentDetails>
|
||||||
</div>
|
</div>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<Card></Card>
|
<Card v-model="userMessage"></Card>
|
||||||
<CustomerService v-model="proxyMessage"></CustomerService>
|
<CustomerService v-model="proxyMessage"></CustomerService>
|
||||||
<SystemMessage v-model="systemMessage"></SystemMessage>
|
<SystemMessage v-model="systemMessage"></SystemMessage>
|
||||||
<Banner></Banner>
|
<Banner></Banner>
|
||||||
|
|
@ -40,6 +40,7 @@ onMounted(() => {
|
||||||
})
|
})
|
||||||
const systemMessage = ref("")
|
const systemMessage = ref("")
|
||||||
const proxyMessage = ref("")
|
const proxyMessage = ref("")
|
||||||
|
const userMessage = ref("")
|
||||||
let appConfig: any = null;
|
let appConfig: any = null;
|
||||||
|
|
||||||
async function getData() {
|
async function getData() {
|
||||||
|
|
@ -47,6 +48,7 @@ async function getData() {
|
||||||
appConfig = await response.json();
|
appConfig = await response.json();
|
||||||
systemMessage.value = appConfig.systemMessage
|
systemMessage.value = appConfig.systemMessage
|
||||||
proxyMessage.value = appConfig.proxy
|
proxyMessage.value = appConfig.proxy
|
||||||
|
userMessage.value = appConfig.user
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="container-wrapper">
|
<div class="container-wrapper">
|
||||||
<div class="top">
|
<div class="top">
|
||||||
<el-button type="primary" :icon="Plus" @click="is_add = true">新增领用</el-button>
|
<el-button type="primary" :icon="Plus" @click="clickApply">新增领用</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<el-table :data="dataList" style="width: 100%" @row-click="rowClick">
|
<el-table :data="dataList" style="width: 100%" @row-click="rowClick">
|
||||||
|
|
@ -28,33 +28,29 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Mask :width="1200" :height="600" :is-show="is_add" @close="is_add=false" title="新增领用">
|
<AddApply ref="addApplyRef" @close="closeAddApply"/>
|
||||||
<AddApply @close="closeAddApply"/>
|
<DetailApply ref="detailApplyRef" @close="closeDetailApply"/>
|
||||||
</Mask>
|
|
||||||
<Mask :width="1200" :height="600" :is-show="is_detail" @close="is_detail=false" title="查看领用">
|
|
||||||
<DetailApply :id="id" @close="closeDetailApply"/>
|
|
||||||
</Mask>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
import AddApply from "@/components/inventory/apply/AddApply.vue";
|
import AddApply from "@/components/inventory/apply/AddApply.vue";
|
||||||
import {onMounted, ref} from "vue";
|
import {nextTick, onMounted, ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import DetailApply from "@/components/inventory/apply/DetailApply.vue";
|
import DetailApply from "@/components/inventory/apply/DetailApply.vue";
|
||||||
import {Plus} from "@element-plus/icons-vue";
|
import {Plus} from "@element-plus/icons-vue";
|
||||||
|
|
||||||
const is_add = ref(false)
|
const is_add = ref(false)
|
||||||
const is_detail = ref(false)
|
const is_detail = ref(false)
|
||||||
const id = ref('')
|
|
||||||
const dataList = ref([])
|
const dataList = ref([])
|
||||||
const getList = () => {
|
const getList = () => {
|
||||||
const query = {
|
const query = {
|
||||||
pageNum: 1,
|
pageNum: page.value,
|
||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
}
|
}
|
||||||
post("inventory/apply/list", {query: query}).then((res: any) => {
|
post("inventory/apply/list", {query: query}).then((res: any) => {
|
||||||
dataList.value = res.list
|
dataList.value = res.list
|
||||||
|
total.value = res.total_count
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
@ -66,14 +62,7 @@ let total = ref(0)
|
||||||
let page = ref(1)
|
let page = ref(1)
|
||||||
let changePage = (value: number) => {
|
let changePage = (value: number) => {
|
||||||
page.value = value
|
page.value = value
|
||||||
const query = {
|
getList()
|
||||||
pageNum: value,
|
|
||||||
pageSize: pageSize.value,
|
|
||||||
}
|
|
||||||
post("inventory/apply/list", {query: query}).then((res: any) => {
|
|
||||||
dataList.value = res.list
|
|
||||||
total.value = res.total_count
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
const closeAddApply = () => {
|
const closeAddApply = () => {
|
||||||
is_add.value = false
|
is_add.value = false
|
||||||
|
|
@ -87,14 +76,23 @@ const formatDate = (isoStr: any) => {
|
||||||
const date = new Date(isoStr);
|
const date = new Date(isoStr);
|
||||||
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')}`;
|
||||||
}
|
}
|
||||||
|
const detailApplyRef = ref()
|
||||||
const rowClick = (row: any) => {
|
const rowClick = (row: any) => {
|
||||||
id.value = row.id
|
nextTick(()=>{
|
||||||
is_detail.value = true
|
detailApplyRef.value?.init(row.id)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const addApplyRef = ref()
|
||||||
|
const clickApply = () => {
|
||||||
|
nextTick(() => {
|
||||||
|
addApplyRef.value?.getUserInfo()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@use "@/assets/scss/base.scss";
|
@use "@/assets/scss/base.scss";
|
||||||
|
|
||||||
.container-wrapper {
|
.container-wrapper {
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
|
|
@ -102,12 +100,14 @@ const rowClick = (row: any) => {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
margin-top: base.$margin-base;
|
margin-top: base.$margin-base;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,19 @@
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</div>
|
</div>
|
||||||
<div class="content_list">
|
<div class="content_list">
|
||||||
<el-table :data="tableData" @cell-click="editCheck">
|
<el-scrollbar>
|
||||||
<el-table-column label="订单号" prop="code" width="250">
|
<el-table :data="tableData" @cell-click="editCheck">
|
||||||
</el-table-column>
|
<el-table-column label="订单号" prop="code" width="250">
|
||||||
<el-table-column label="状态" prop="state" width="250"></el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建时间" prop="createDatetime" width="250">
|
<el-table-column label="状态" prop="state" width="250"></el-table-column>
|
||||||
<template #default="scope">
|
<el-table-column label="创建时间" prop="createDatetime" width="250">
|
||||||
{{ formatDate(scope.row.createDatetime) }}
|
<template #default="scope">
|
||||||
</template>
|
{{ formatDate(scope.row.createDatetime) }}
|
||||||
</el-table-column>
|
</template>
|
||||||
<el-table-column label="备注" prop="remark"></el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
<el-table-column label="备注" prop="remark"></el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<div class="page_btn_list">
|
<div class="page_btn_list">
|
||||||
|
|
@ -31,15 +33,11 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Mask :width="1200" :height="540" :is-show="showAdd" @close="showAdd = false" title="新增盘点">
|
<Add ref="addRef" @close="getCheck()"/>
|
||||||
<Add @close="showAdd = false;getCheck()"/>
|
<Detail ref="detailRef" @close="getCheck()"/>
|
||||||
</Mask>
|
|
||||||
<Mask :width="1200" :height="540" :is-show="showDetail" @close="showDetail = false" title="查看盘点">
|
|
||||||
<Detail :id="id" @close="showDetail = false;getCheck()"/>
|
|
||||||
</Mask>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref} from "vue";
|
import {nextTick, onMounted, ref} from "vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import Mask from "@/components/common/Mask.vue";
|
import Mask from "@/components/common/Mask.vue";
|
||||||
import Add from "@/components/inventory/check/Add.vue";
|
import Add from "@/components/inventory/check/Add.vue";
|
||||||
|
|
@ -49,12 +47,13 @@ import {Plus} from "@element-plus/icons-vue";
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
const getCheck = () => {
|
const getCheck = () => {
|
||||||
const query = {
|
const query = {
|
||||||
pageNum: 1,
|
pageNum: page.value,
|
||||||
pageSize: 20
|
pageSize: 20
|
||||||
}
|
}
|
||||||
post("inventory/check/list", {query: query}).then(
|
post("inventory/check/list", {query: query}).then(
|
||||||
(res: any) => {
|
(res: any) => {
|
||||||
tableData.value = res.list
|
tableData.value = res.list
|
||||||
|
total.value = res.total_count
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -62,12 +61,17 @@ const detailCheckRef = ref<any>('');
|
||||||
const showAdd = ref(false)
|
const showAdd = ref(false)
|
||||||
const showDetail = ref(false)
|
const showDetail = ref(false)
|
||||||
const id = ref('')
|
const id = ref('')
|
||||||
|
const addRef = ref<any>('');
|
||||||
const openAdd = () => {
|
const openAdd = () => {
|
||||||
showAdd.value = true
|
nextTick(() => {
|
||||||
|
addRef.value?.init()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
const detailRef = ref<any>('');
|
||||||
const editCheck = (row: any) => {
|
const editCheck = (row: any) => {
|
||||||
id.value = row.id
|
nextTick(() => {
|
||||||
showDetail.value = true
|
detailRef.value?.detail(row.id)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
@ -79,14 +83,7 @@ let total = ref(0)
|
||||||
let page = ref(1)
|
let page = ref(1)
|
||||||
let changePage = (value: number) => {
|
let changePage = (value: number) => {
|
||||||
page.value = value
|
page.value = value
|
||||||
const query = {
|
getCheck()
|
||||||
pageNum: value,
|
|
||||||
pageSize: pageSize.value,
|
|
||||||
}
|
|
||||||
post("goods/goods/searchDetail", {query: query}).then((res: any) => {
|
|
||||||
tableData.value = res.list
|
|
||||||
total.value = res.total_count
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// 转成YYYY-MM-DD格式
|
// 转成YYYY-MM-DD格式
|
||||||
const formatDate = (isoStr: any) => {
|
const formatDate = (isoStr: any) => {
|
||||||
|
|
@ -105,8 +102,8 @@ const formatDate = (isoStr: any) => {
|
||||||
|
|
||||||
.content_list {
|
.content_list {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
overflow: hidden;
|
|
||||||
margin-top: base.$margin-base;
|
margin-top: base.$margin-base;
|
||||||
|
min-height: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.bottom {
|
.bottom {
|
||||||
|
|
|
||||||
|
|
@ -161,10 +161,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Mask :is-show="is_add" :height="900" @close="is_add = false" title="新增">
|
<Edit ref="editRef" @close="is_add = false;init()"/>
|
||||||
<Edit ref="editRef" @close="is_add = false;init()"/>
|
<Mask :is-show="open" :top="50" :height="600" @close="open = false" title="编辑">
|
||||||
</Mask>
|
|
||||||
<Mask :is-show="open" :height="600" @close="open = false" title="编辑">
|
|
||||||
<el-tabs v-model="activeName" @tab-change="changeTab">
|
<el-tabs v-model="activeName" @tab-change="changeTab">
|
||||||
<el-tab-pane label="商品信息" name="first">
|
<el-tab-pane label="商品信息" name="first">
|
||||||
<Edit ref="editRef" @close="open = false;init()"/>
|
<Edit ref="editRef" @close="open = false;init()"/>
|
||||||
|
|
@ -289,7 +287,6 @@ let init = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
let open_edit = (type: number, id: number) => {
|
let open_edit = (type: number, id: number) => {
|
||||||
is_add.value = true
|
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
editRef.value?.init(type, id);
|
editRef.value?.init(type, id);
|
||||||
});
|
});
|
||||||
|
|
@ -415,11 +412,13 @@ const resetSearch = () => {
|
||||||
.search {
|
.search {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
.left{
|
|
||||||
|
.left {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-right: 24px;
|
margin-right: 24px;
|
||||||
|
|
||||||
.el-form-item {
|
.el-form-item {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,33 +6,35 @@
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</div>
|
</div>
|
||||||
<div class="content_list">
|
<div class="content_list">
|
||||||
<el-table :data="tableData" style="width: 100%" @row-click="open_edit">
|
<el-scrollbar>
|
||||||
<el-table-column fixed label="进货单号" width="250" show-overflow-tooltip>
|
<el-table :data="tableData" style="width: 100%" @row-click="open_edit">
|
||||||
<template #default="scope">
|
<el-table-column fixed label="进货单号" width="250" show-overflow-tooltip>
|
||||||
<div class="link">{{ scope.row.code }}</div>
|
<template #default="scope">
|
||||||
</template>
|
<div class="link">{{ scope.row.code }}</div>
|
||||||
</el-table-column>
|
</template>
|
||||||
<el-table-column label="品种" prop="kindCount" width="100">
|
</el-table-column>
|
||||||
|
<el-table-column label="品种" prop="kindCount" width="100">
|
||||||
|
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="入库金额" width="100">
|
<el-table-column label="入库金额" width="100">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
¥{{ scope.row.totalPrice.toFixed(2) }}
|
¥{{ scope.row.totalPrice.toFixed(2) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="采购人" prop="managerUserName" width="100"></el-table-column>
|
<el-table-column label="采购人" prop="managerUserName" width="100"></el-table-column>
|
||||||
<el-table-column label="供应商" prop="supplierName"></el-table-column>
|
<el-table-column label="供应商" prop="supplierName"></el-table-column>
|
||||||
<el-table-column prop="purchaseDate" label="采购时间">
|
<el-table-column prop="purchaseDate" label="采购时间">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ formatDate(scope.row.purchaseDate) }}
|
{{ formatDate(scope.row.purchaseDate) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="createDatetime" label="创建时间">
|
<el-table-column prop="createDatetime" label="创建时间">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ formatDate(scope.row.createDatetime) }}
|
{{ formatDate(scope.row.createDatetime) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<div class="bottom">
|
<div class="bottom">
|
||||||
<div class="page_btn_list">
|
<div class="page_btn_list">
|
||||||
|
|
@ -83,11 +85,12 @@ let open_edit = (row: any) => {
|
||||||
|
|
||||||
let init = () => {
|
let init = () => {
|
||||||
const query = {
|
const query = {
|
||||||
page: 1,
|
page: page.value,
|
||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
}
|
}
|
||||||
post("inventory/order/list", {query: query}).then((res: any) => {
|
post("inventory/order/list", {query: query}).then((res: any) => {
|
||||||
tableData.value = res.list
|
tableData.value = res.list
|
||||||
|
total.value = res.total_count
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -105,14 +108,7 @@ let total = ref(0)
|
||||||
let page = ref(1)
|
let page = ref(1)
|
||||||
let changePage = (value: number) => {
|
let changePage = (value: number) => {
|
||||||
page.value = value
|
page.value = value
|
||||||
const query = {
|
init()
|
||||||
pageNum: value,
|
|
||||||
pageSize: pageSize.value,
|
|
||||||
}
|
|
||||||
post("goods/goods/searchDetail", {query: query}).then((res: any) => {
|
|
||||||
tableData.value = res.list
|
|
||||||
total.value = res.total_count
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
// 转成YYYY-MM-DD格式
|
// 转成YYYY-MM-DD格式
|
||||||
const formatDate = (isoStr: any) => {
|
const formatDate = (isoStr: any) => {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="container-wrapper">
|
<div class="container-wrapper">
|
||||||
<div class="top">
|
<div class="top">
|
||||||
<el-dropdown>
|
<el-dropdown>
|
||||||
<el-button type="primary" :icon="Plus" @click="openAdd">添加供应商</el-button>
|
<el-button type="primary" :icon="Plus" @click="addSupplier(null)">添加供应商</el-button>
|
||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
</div>
|
</div>
|
||||||
<div class="content_list">
|
<div class="content_list">
|
||||||
|
|
@ -33,9 +33,7 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Mask :width="540" :height="603" :is-show="showAdd" @close="showAdd = false" :title="id?'编辑':'添加供应商'">
|
<AddSupplier ref="addSupplierRef" @close="getSupplier()"></AddSupplier>
|
||||||
<AddSupplier @close="showAdd = false" @saveSuccess="getSupplier()" ref="addSupplierRef"></AddSupplier>
|
|
||||||
</Mask>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
|
@ -48,29 +46,28 @@ import {Plus} from "@element-plus/icons-vue";
|
||||||
const tableData = ref([])
|
const tableData = ref([])
|
||||||
const getSupplier = () => {
|
const getSupplier = () => {
|
||||||
const query = {
|
const query = {
|
||||||
page: 1,
|
page: page.value,
|
||||||
pageSize: 20,
|
pageSize: 20,
|
||||||
}
|
}
|
||||||
post("inventory/supplier/list", {query: query}, null).then(
|
post("inventory/supplier/list", {query: query}, null).then(
|
||||||
(res: any) => {
|
(res: any) => {
|
||||||
tableData.value = res.list
|
tableData.value = res.list
|
||||||
|
total.value = res.total_count
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
const addSupplierRef = ref();
|
const addSupplierRef = ref();
|
||||||
|
|
||||||
const openAdd = () => {
|
|
||||||
showAdd.value = true
|
|
||||||
}
|
|
||||||
const id = ref('')
|
|
||||||
const editSupplier = (row: any) => {
|
const editSupplier = (row: any) => {
|
||||||
id.value = row.id
|
|
||||||
openAdd()
|
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
addSupplierRef.value.edit(row)
|
addSupplierRef.value.editInit(row)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
const addSupplier = (row: any) => {
|
||||||
|
nextTick(() => {
|
||||||
|
addSupplierRef.value.addInit()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const showAdd = ref(false)
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getSupplier()
|
getSupplier()
|
||||||
})
|
})
|
||||||
|
|
@ -80,14 +77,7 @@ let total = ref(0)
|
||||||
let page = ref(1)
|
let page = ref(1)
|
||||||
let changePage = (value: number) => {
|
let changePage = (value: number) => {
|
||||||
page.value = value
|
page.value = value
|
||||||
const query = {
|
getSupplier()
|
||||||
pageNum: value,
|
|
||||||
pageSize: pageSize.value,
|
|
||||||
}
|
|
||||||
post("goods/goods/searchDetail", {query: query}).then((res: any) => {
|
|
||||||
tableData.value = res.list
|
|
||||||
total.value = res.total_count
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
||||||
|
|
@ -44,12 +44,17 @@
|
||||||
<el-input v-model="ruleForm.social_certUrl"/>
|
<el-input v-model="ruleForm.social_certUrl"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="16">
|
<el-col :span="8">
|
||||||
<el-form-item label="数字签名" prop="social_cainfo">
|
<el-form-item label="上传logo">
|
||||||
<el-input v-model="ruleForm.social_cainfo" type="textarea" :rows="5"/>
|
<UpLoad v-model="uploadURL" ref="uploadRef" @uploadSuccess="(url)=>{ruleForm.logourl=url}"></UpLoad>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-form-item label="数字签名" prop="social_cainfo">
|
||||||
|
<el-input v-model="ruleForm.social_cainfo" type="textarea" :rows="5"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex;justify-content: flex-end;padding: 0 24px">
|
<div style="display: flex;justify-content: flex-end;padding: 0 24px">
|
||||||
|
|
@ -64,6 +69,8 @@ import {onMounted, reactive, ref} from 'vue'
|
||||||
import {ElMessage, type FormInstance, type FormRules} from 'element-plus'
|
import {ElMessage, type FormInstance, type FormRules} from 'element-plus'
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import Panel from "@/components/common/Panel.vue";
|
import Panel from "@/components/common/Panel.vue";
|
||||||
|
import UpLoad from "@/components/UpLoad.vue";
|
||||||
|
import {loadConfig} from "@/utils/config.ts";
|
||||||
|
|
||||||
const ruleFormRef = ref<FormInstance>()
|
const ruleFormRef = ref<FormInstance>()
|
||||||
const ruleForm = reactive<any>({
|
const ruleForm = reactive<any>({
|
||||||
|
|
@ -74,12 +81,17 @@ const ruleForm = reactive<any>({
|
||||||
social_insuplcAdmdvs: '',
|
social_insuplcAdmdvs: '',
|
||||||
social_cainfo: '',
|
social_cainfo: '',
|
||||||
social_url: "",
|
social_url: "",
|
||||||
social_certUrl: ""
|
social_certUrl: "",
|
||||||
|
logoUrl: "",
|
||||||
})
|
})
|
||||||
|
const uploadRef = ref<any>()
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
loadConfig().then((res: any) => {
|
||||||
|
uploadURL.value = res.base_url + "file/upload";
|
||||||
|
})
|
||||||
|
uploadRef.value?.getImageUrl(localStorage.getItem('logoUrl'))
|
||||||
post("common/config/list", null).then((list: any) => {
|
post("common/config/list", null).then((list: any) => {
|
||||||
for (let i = 0; i < list.length; i++) {
|
for (let i = 0; i < list.length; i++) {
|
||||||
console.log(list[i].k)
|
|
||||||
ruleForm[list[i].k] = list[i].val
|
ruleForm[list[i].k] = list[i].val
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -94,16 +106,16 @@ const rules = reactive<FormRules<any>>({
|
||||||
social_url: {required: true, message: '医保接口不能为空', trigger: 'blur'},
|
social_url: {required: true, message: '医保接口不能为空', trigger: 'blur'},
|
||||||
social_certUrl: {required: true, message: '电子平转增接口不能为空', trigger: 'blur'},
|
social_certUrl: {required: true, message: '电子平转增接口不能为空', trigger: 'blur'},
|
||||||
})
|
})
|
||||||
|
|
||||||
const submitForm = async (formEl: FormInstance | undefined) => {
|
const submitForm = async (formEl: FormInstance | undefined) => {
|
||||||
if (!formEl) return
|
if (!formEl) return
|
||||||
await formEl.validate((valid, fields) => {
|
await formEl.validate((valid, fields) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
post("common/config/edit", ruleForm).then((res: any) => {
|
post("common/config/edit", ruleForm).then((res: any) => {
|
||||||
ElMessage.success("保存成功")
|
ElMessage.success("保存成功")
|
||||||
|
if (ruleForm.logourl) {
|
||||||
|
localStorage.setItem('logoUrl', ruleForm.logourl)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
} else {
|
|
||||||
console.log('error submit!', fields)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -117,12 +129,16 @@ const options = Array.from({length: 10000}).map((_, idx) => ({
|
||||||
value: `${idx + 1}`,
|
value: `${idx + 1}`,
|
||||||
label: `${idx + 1}`,
|
label: `${idx + 1}`,
|
||||||
}))
|
}))
|
||||||
|
//上传图片
|
||||||
|
const uploadURL = ref<any>()
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.container-wrapper{
|
.container-wrapper {
|
||||||
padding:0 24px;
|
padding: 0 24px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.form {
|
.form {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0 24px;
|
padding: 0 24px;
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
<div class="title-btn">
|
<div class="title-btn">
|
||||||
<el-button type="primary" @click="init()">查询</el-button>
|
<el-button type="primary" @click="init()">查询</el-button>
|
||||||
<el-button type="primary" @click="resetSearch">重置</el-button>
|
<el-button type="primary" @click="resetSearch">重置</el-button>
|
||||||
<el-button type="primary" :icon="Plus" @click="isShow=true">新增</el-button>
|
<el-button type="primary" :icon="Plus" @click="openDialog">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -72,14 +72,11 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Mask :is-show="isShow" @close="isShow=false" :width="800" :height="600" title="成员管理">
|
<MemberEdit :id="id" ref="memberEditRef" @close="init()"></MemberEdit>
|
||||||
<MemberEdit :id="id" ref="memberEditRef" @onSubmit="init()"></MemberEdit>
|
|
||||||
</Mask>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {onMounted, ref, nextTick} from "vue"
|
import {onMounted, ref, nextTick} from "vue"
|
||||||
import Mask from '@/components/common/Mask.vue'
|
|
||||||
import MemberEdit from "@/components/settings/MemberEdit.vue";
|
import MemberEdit from "@/components/settings/MemberEdit.vue";
|
||||||
import {post} from "@/utils/request.ts";
|
import {post} from "@/utils/request.ts";
|
||||||
import {formatDate} from "@/utils/dateUtils.ts";
|
import {formatDate} from "@/utils/dateUtils.ts";
|
||||||
|
|
@ -91,9 +88,11 @@ const tableData = ref<any>([]);
|
||||||
const memberEditRef = ref<any>(null)
|
const memberEditRef = ref<any>(null)
|
||||||
const rowClick = (row: any) => {
|
const rowClick = (row: any) => {
|
||||||
id.value = row.memberInfo.id
|
id.value = row.memberInfo.id
|
||||||
isShow.value = true
|
openDialog()
|
||||||
|
}
|
||||||
|
const openDialog= () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
memberEditRef.value?.init(id.value)
|
memberEditRef.value?.init()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const roleList = [
|
const roleList = [
|
||||||
|
|
|
||||||
|
|
@ -12,14 +12,15 @@
|
||||||
<el-input v-model="search.resperName" placeholder="负责人姓名" style="width: 200px"></el-input>
|
<el-input v-model="search.resperName" placeholder="负责人姓名" style="width: 200px"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-cascader :props="{ checkStrictly: true }" v-model="search.caty" :options="options" placeholder="科室类别"/>
|
<el-cascader :props="{ checkStrictly: true }" v-model="search.caty" :options="options"
|
||||||
|
placeholder="科室类别"/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</div>
|
</div>
|
||||||
<div class="title-btn">
|
<div class="title-btn">
|
||||||
<el-button type="primary" @click="init()">查询</el-button>
|
<el-button type="primary" @click="init()">查询</el-button>
|
||||||
<el-button type="primary" @click="resetSearch">重置</el-button>
|
<el-button type="primary" @click="resetSearch">重置</el-button>
|
||||||
<el-button type="primary" :icon="Plus" @click="isShow=true">新增</el-button>
|
<el-button type="primary" :icon="Plus" @click="openDialog">新增</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="table">
|
<div class="table">
|
||||||
|
|
@ -62,9 +63,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Mask :is-show="isShow" @close="init()" :height="570" :title="id?'编辑':'新增'">
|
<SectionEdit :id="id" ref="sectionRef" @onSubmit="init()"></SectionEdit>
|
||||||
<SectionEdit :id="id" ref="sectionRef" @onSubmit="init()"></SectionEdit>
|
|
||||||
</Mask>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import {nextTick, onMounted, ref} from "vue"
|
import {nextTick, onMounted, ref} from "vue"
|
||||||
|
|
@ -77,28 +76,15 @@ import depts from "@/assets/config/directory/depts.json";
|
||||||
import {Plus} from "@element-plus/icons-vue";
|
import {Plus} from "@element-plus/icons-vue";
|
||||||
|
|
||||||
const id = ref<any>("")
|
const id = ref<any>("")
|
||||||
const isShow = ref(false)
|
|
||||||
const ChildMenuList = ref([
|
|
||||||
{
|
|
||||||
name: '首页',
|
|
||||||
path: '/settings/index',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '科室',
|
|
||||||
path: '/settings/section',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '成员',
|
|
||||||
path: '/settings/member',
|
|
||||||
}
|
|
||||||
])
|
|
||||||
const tableData = ref<any>([])
|
const tableData = ref<any>([])
|
||||||
const sectionRef = ref<any>()
|
const sectionRef = ref<any>()
|
||||||
const rowClick = (row: any) => {
|
const rowClick = (row: any) => {
|
||||||
id.value = row.id
|
id.value = row.id
|
||||||
isShow.value = true
|
openDialog()
|
||||||
|
}
|
||||||
|
const openDialog = () => {
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
sectionRef.value?.init(row.id)
|
sectionRef.value?.openDialog()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
@ -110,7 +96,6 @@ interface Dept {
|
||||||
}
|
}
|
||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
isShow.value = false
|
|
||||||
post('organization/section/list', {page: page.value, size: pageSize.value, ...search.value}).then((res: any) => {
|
post('organization/section/list', {page: page.value, size: pageSize.value, ...search.value}).then((res: any) => {
|
||||||
tableData.value = res.list
|
tableData.value = res.list
|
||||||
tableData.value.forEach((item: any) => {
|
tableData.value.forEach((item: any) => {
|
||||||
|
|
@ -155,6 +140,7 @@ const resetSearch = () => {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
height: 60px;
|
height: 60px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue