浏览代码

无菌物品

yeguodong 2 周之前
父节点
当前提交
27d68670d9

+ 10 - 0
src/api/lc/sterile.js

@@ -0,0 +1,10 @@
+import request from "../../utils/request";
+
+//模糊分页查询项目列表
+export function insertSterile(data) {
+    return request({
+        url: '/Sterile/insertSterile',
+        method: 'post',
+        data,
+    })
+}

+ 1 - 1
src/views/medical-advice/advice-management/CqYzPrint.vue

@@ -128,7 +128,7 @@
                   <td v-if="item.pageFlag != '1'">{{ item.time }}</td>
                   <td v-if="item.pageFlag != '1'" style="text-align: left">
                     {{ item.orderGroupNo }} {{ item.newOrderName }}
-                    {{ item.newOrderNameCode }} {{ item.frequCode }}
+                    {{ item.newOrderNameCode }} {{ item.groupNo != '00' ? item.frequCode : ""}}
                   </td>
                   <td v-if="item.pageFlag != '1'" style="text-align: left">
                     {{ item.doctorName }}

+ 256 - 0
src/views/sterile/base/projectInformation/index.vue

@@ -0,0 +1,256 @@
+<template>
+    <div class="layout_display_flex_y">
+        <div class="obviousBox" style="margin-bottom: 6px;">
+            <searchArea :searchData="searchData" @submit="searchByForm"></searchArea>
+        </div>
+
+        <div class="layout_display_flex_y" style="height: 85%">
+            <div style="background-color: #fff;padding: 8px">
+                <el-button type="primary" icon="Plus" @click="onAddItem" style="margin-left: 5px">新增</el-button>
+            </div>
+            <el-table :data="tableData" border style="width: 100%" height="100%" stripe highlight-current-row
+                class="ypClassTable normal-size">
+                <el-table-column prop="projectCode" label="项目编码">
+                </el-table-column>
+                <el-table-column prop="projectName" label="项目名称">
+                </el-table-column>
+                <el-table-column prop="projectSpecifications" label="规格">
+                </el-table-column>
+                <el-table-column prop="projectUnit" label="单位">
+                </el-table-column>
+                <el-table-column prop="priceCode" label="物价码">
+                </el-table-column>
+                <el-table-column prop="projectType" label="项目类型">
+                    <template v-slot="scope">
+                        <span>{{ getLabelByValue(scope.row.projectType, projectTypeOption, {
+                            labelKey:
+                            'typeName',valueKey : 'id'}) }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="delFlag" label="是否停用">
+                    <template v-slot="scope">
+                        <span>{{ getLabelByValue(scope.row.delFlag, delFlagOption) }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column fixed="right" label="操作" min-width="180" width="180" align="center">
+                    <template #default="scope">
+                        <el-button type="primary" size="small" @click="onEditItem(scope.row)">编辑</el-button>
+                        <el-button :type="scope.row.delFlag !== '0' ? 'success' : 'info'" size="small"
+                            @click.prevent="changeDelFlag(scope.row)">
+                            {{ scope.row.delFlag == '0' ? '停用' : '启用' }}
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div>
+            <el-pagination :current-page="pageNumber" :page-size="pageSize" :page-sizes="[10, 15, 20, 25]"
+                :total="total" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+                @size-change="handleSizeChange" @current-change="handleCurrentChange">
+            </el-pagination>
+        </div>
+    </div>
+    <el-dialog v-model="showDialog" :close-on-click-modal="false" :close-on-press-escape="false"
+        :title="(currentEditId ? '编辑' : '新增') + '项目'" width="100%" destroy-on-close fullscreen
+        @close="handleDialogClose">
+        <!-- <YpPrintName :ypPrintNameDetail="ypPrintNameDetail" @closeYpPrintNameEditFor="closeYpPrintName" /> -->
+        <info :currentEditId="currentEditId" @handleDialogClose="handleDialogClose" @init="init"></info>
+    </el-dialog>
+</template>
+<script setup name="YpDict">
+import { ref, onMounted, nextTick } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { getLcProjectList, insertLcProject, getAllLcProjectTypes } from '@/api/lc/project.js'
+import searchArea from '@/components/searchArea/index.vue';
+import info from '@/views/sterile/base/projectInformation/info.vue';
+import { getLabelByValue } from '@/utils/common.js'
+
+const delFlagOption = [{ value: '0', label: '启用' }, { value: '1', label: '停用' }]
+
+const searchData = ref([
+    {
+        label: '项目编码',
+        key: 'projectCode',
+        type: 'input',
+        value: '',
+        clearable: true,
+    },
+    {
+        label: '项目名称',
+        key: 'projectName',
+        type: 'input',
+        value: '',
+    },
+    {
+        label: '项目类型',
+        key: 'projectType',
+        type: 'select',
+        value: '',
+        optionsData: [
+        ],
+    },
+    {
+        label: '是否停用',
+        key: 'delFlag',
+        type: 'select',
+        value: '',
+        optionsData: [
+            {
+                label: '启用',
+                value: '0',
+            },
+            {
+                label: '停用',
+                value: '1',
+            },
+        ],
+    },
+])
+const pageSize = ref(10)
+const pageNumber = ref(1)
+const total = ref(0)
+const currentEditId = ref('')
+
+const tableData = ref([])
+let projectTypeOption = []
+const handleSizeChange = (val) => {
+    pageSize.value = val
+    init()
+}
+const handleCurrentChange = (val) => {
+    pageNumber.value = val
+    init()
+}
+
+let showDialog = ref(false)
+
+const init = (params) => {
+    params = {
+        ...params,
+        ...searchForm.value,
+        lcType: '2',
+        pageSize: pageSize.value,
+        pageNumber: pageNumber.value
+    }
+    getLcProjectList(params).then((res) => {
+        console.log("getLcProjectList", res)
+        total.value = res.total
+        tableData.value = res.records
+        console.log("tableData", tableData.value)
+    }).catch((err) => {
+        ElMessage.error(err)
+    })
+}
+
+const initOptions = () => {
+    getProjectTypeOption()
+}
+
+const getProjectTypeOption = () => {
+    getAllLcProjectTypes().then((res) => {
+        console.log("getAllLcProjectTypes", res)
+        projectTypeOption = res
+        console.log("projectTypeOption", projectTypeOption)
+        searchData.value[2].optionsData = projectTypeOption.map(item => {
+            return {
+                label: item.typeName,
+                value: item.id
+            }
+        })
+        console.log("searchData.value[2]", searchData.value[3].optionsData)
+    }).catch((err) => {
+        console.log("getAllLcProjectTypes", err)
+        ElMessage.error(err)
+    })
+}
+
+onMounted(() => {
+    nextTick(() => {
+        init()
+        initOptions()
+    })
+})
+
+const searchForm = ref({})
+//搜索表单方法
+const searchByForm = (form) => {
+    console.log("search", form)
+    searchForm.value = form
+    init()
+}
+
+// 新增行
+const onAddItem = () => {
+    showDialog.value = true
+}
+
+const onEditItem = (row) => {
+    currentEditId.value = row.id
+    showDialog.value = true
+}
+
+const handleDialogClose = () => {
+    currentEditId.value = ""
+    showDialog.value = false
+}
+
+const changeDelFlag = (row) => {
+    let title = `是否${row.delFlag == '0' ? '停用' : '启用'}`
+    ElMessageBox.confirm(title, {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        let params = { id: row.id, delFlag: row.delFlag == '0' ? '1' : '0' }
+        insertLcProject(params).then(res => {
+            ElMessage.success(row.delFlag == '0' ? '停用成功' : '启用成功')
+            init()
+        }).catch(err => {
+            // ElMessage.error(err.message)
+        })
+    }).catch((action) => {
+        if (action === 'cancel') {
+        }
+    })
+}
+
+</script>
+<style lang="scss" deep>
+.el-dialog__body {
+    // padding: 0 16px;
+    // height: calc(100% - 25px);
+}
+
+.el-tabs {
+    height: calc(100% - 27px);
+
+    .el-tabs__content {
+        padding: 5px;
+        height: calc(100% - 27px);
+    }
+
+    .el-tab-pane {
+        height: calc(100% - 27px);
+        overflow: auto;
+    }
+
+    .el-table__inner-wrapper {
+        height: calc(100% - 10px) !important;
+    }
+
+}
+
+.el-table .warning-row {
+    --el-table-tr-bg-color: #dd7694;
+}
+
+.search-select-pre {
+    padding: 0 12px;
+    color: var(--el-text-color-regular);
+    background: var(--el-fill-color-light);
+    border-right: 1px solid var(--el-border-color);
+    --el-select-input-padding-left: '0'
+}
+</style>

+ 452 - 0
src/views/sterile/base/projectInformation/info.vue

@@ -0,0 +1,452 @@
+<template>
+    <div class="container">
+        <el-form ref="formRef" :model="form" class="form" label-width="127px" size="default" :rules="formRules">
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <div>第一部分</div>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="项目编码" prop="projectCode">
+                        <el-input v-model="form.projectCode" disabled></el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="项目分类" prop="projectType">
+                        <el-select v-model="form.projectType" placeholder="请选择项目分类">
+                            <el-option v-for="item in projectTypeOption" :label="item.typeName"
+                                :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="项目名称" prop="projectName">
+                        <el-input v-model="form.projectName" placeholder="请输入项目名称">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="拼音码" prop="pyCode">
+                        <el-input v-model="form.pyCode" placeholder="请输入项目名称" disabled>
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="五笔码" prop="wbCode">
+                        <el-input v-model="form.wbCode" placeholder="请输入项目名称" disabled>
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="零售价" prop="retailPrice">
+                        <el-input v-model="form.retailPrice" placeholder="请输入零售价" type="number">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="内部结算价" prop="internalSettlementPrice">
+                        <el-input v-model="form.internalSettlementPrice" placeholder="请输入内部结算价" type="number">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="批发价" prop="wholesalePrice">
+                        <el-input v-model="form.wholesalePrice" placeholder="请输入批发价" type="number">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="生产厂家" prop="lcCompanyId">
+                        <el-select v-model="form.lcCompanyId" placeholder="请选择生产厂家">
+                            <el-option v-for="item in lcCompanyOption" :label="item.companyName"
+                                :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <!-- <el-col :span="8">
+                    <el-form-item label="请领月份" prop="name">
+                        <el-date-picker v-model="form.date" type="month" placeholder="请选择日期"></el-date-picker>
+                    </el-form-item>
+                </el-col> -->
+            </el-row>
+
+            <el-row :gutter="20">
+                <div>第二部分</div>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="项目规格" prop="projectSpecifications">
+                        <el-input v-model="form.projectSpecifications" placeholder="请输入项目规格">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="单位" prop="projectUnit">
+                        <el-select v-model="form.projectUnit" placeholder="请选择单位">
+                            <el-option v-for="item in projectUnitOption" :label="item.label"
+                                :value="item.value"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="计费方式" prop="chargingType">
+                        <el-select v-model="form.chargingType" placeholder="请选择计费方式">
+                            <el-option v-for="item in chargingTypeOption" :label="item.label"
+                                :value="item.value"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="最小包装单位" prop="projectMinUnit">
+                        <el-select v-model="form.projectMinUnit" placeholder="请选择最小包装单位">
+                            <el-option v-for="item in projectMinUnitOption" :label="item.label"
+                                :value="item.value"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="包装量" prop="packagingQuantity">
+                        <el-input v-model="form.packagingQuantity" placeholder="请输入包装量" type="number">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="批准文号" prop="approvalNumber">
+                        <el-input v-model="form.approvalNumber" placeholder="请输入批准文号">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="产品编号" prop="productCode">
+                        <el-input v-model="form.productCode" placeholder="请输入产品编号">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="注册证号" prop="registCode">
+                        <el-input v-model="form.registCode" placeholder="请输入注册证号">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="物价码" prop="priceCode">
+                        <el-input v-model="form.priceCode" placeholder="请输入物价码">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="是否停用" prop="delFlag">
+                        <el-select v-model="form.delFlag" placeholder="请选择">
+                            <el-option v-for="item in delFlagOption" :label="item.label"
+                                :value="item.value"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+
+        <!-- <el-divider /> -->
+        <el-row :gutter="20">
+            <el-col :span="8">
+                <div>别名管理</div>
+            </el-col>
+        </el-row>
+        <div style="margin: 10px 0;">
+            <el-button icon="Plus" type="primary" @click="showDialog = true" size="small">新增别名</el-button>
+        </div>
+        <el-table :data="tableData" style="width: 100%" height="500" size="default">
+            <el-table-column fixed="right" label="操作" width="150">
+                <template #default="scope">
+                    <el-button type="primary" size="small" @click="toEditAlias(scope.row, scope.$index)">
+                        编 辑
+                    </el-button>
+                    <el-button type="danger" size="small" @click="deleteAlias(scope.$index)">
+                        删 除
+                    </el-button>
+                    <!-- <el-button link type="primary" size="small">Edit</el-button> -->
+                </template>
+            </el-table-column>
+            <el-table-column type="index" prop="date" label="序号" width="80" />
+            <el-table-column prop="aliasName" label="项目别名" />
+            <el-table-column prop="pyCode" label="别名拼音码" />
+            <el-table-column prop="wbCode" label="别名五笔码" />
+        </el-table>
+        <div class="confirm-area flex-center-row" style="margin: 20px ;">
+            <el-button type="primary" @click="confirm" size="default">确定</el-button>
+            <el-button @click="cancel" size="default">取消</el-button>
+        </div>
+    </div>
+
+    <!-- <el-divider /> -->
+
+
+    <el-dialog v-model="showDialog" :close-on-click-modal="false" :close-on-press-escape="false" title="新增别名"
+        width="30%" top="15%" destroy-on-close @close="handleDialogClose">
+        <div class="flex-center-column ">
+            <el-input v-model="aliasForm.aliasName" placeholder="请输入内容" style="width: 95%;margin-bottom: 20px;"
+                size="default" />
+            <el-button type="primary" @click="addOrEditProjectAlias" size="default">确定</el-button>
+        </div>
+    </el-dialog>
+</template>
+<script setup name="YpDictInfo">
+import { nextTick, onMounted, ref } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { clone } from '@/utils/clone'
+import { Export } from '@/utils/ExportExcel'
+import { getLcCompanyList } from '@/api/lc/company.js'
+import { insertLcProject, getLcProjectById, getAllLcProjectTypes } from '@/api/lc/project.js'
+
+const props = defineProps({
+    //子组件接收父组件传递过来的值
+    currentEditId: String,
+})
+//使用父组件传递过来的值
+const { currentEditId } = toRefs(props)
+//父组件的方法
+const emit = defineEmits(["handleDialogClose", "init"])
+onMounted(() => {
+    nextTick(() => {
+        getCompanyList()
+        getProjectTypes()
+        if (currentEditId.value) {
+            init()
+        }
+    })
+})
+
+const form = ref({
+    delFlag: "0",
+    lcProjectAliasList: [
+
+    ]
+})
+
+const formRef = ref(null)
+const formRules = {
+    projectType: [
+        { required: true, message: "请选择项目分类", trigger: "change" },
+    ],
+    projectName: [
+        { required: true, message: "请输入项目名称", trigger: "blur" },
+    ],
+    // pyCode: [
+    //     { required: true, message: "请输入拼音码", trigger: "blur" },
+    // ],
+    // wbCode: [
+    //     { required: true, message: "请输入五笔码", trigger: "blur" },
+    // ],
+    retailPrice: [
+        { required: true, message: "请输入零售价", trigger: "blur" },
+    ],
+    projectUnit: [
+        { required: true, message: "请选择单位", trigger: "change" },
+    ],
+}
+
+const showDialog = ref(false)
+
+const itemTableData = ref([
+])
+
+let tableData = ref([])
+
+const projectTypeOption = ref([])
+const lcCompanyOption = ref([])
+const projectUnitOption = ref(
+    [
+        { "label": "把", "value": "0" },
+        { "label": "板", "value": "1" },
+        { "label": "包", "value": "2" },
+        { "label": "本", "value": "3" },
+        { "label": "袋", "value": "4" },
+        { "label": "副", "value": "5" },
+        { "label": "个", "value": "6" },
+        { "label": "根", "value": "7" },
+        { "label": "盒", "value": "8" },
+        { "label": "件", "value": "9" },
+        { "label": "卷", "value": "10" },
+        { "label": "块", "value": "11" },
+        { "label": "枚", "value": "12" },
+        { "label": "颗", "value": "13" },
+        { "label": "米", "value": "14" },
+        { "label": "片", "value": "15" },
+        { "label": "瓶", "value": "16" },
+        { "label": "人份", "value": "17" },
+        { "label": "套", "value": "18" },
+        { "label": "条", "value": "19" },
+        { "label": "贴", "value": "20" },
+        { "label": "桶", "value": "21" },
+        { "label": "筒", "value": "22" },
+        { "label": "箱", "value": "23" },
+        { "label": "张", "value": "24" },
+        { "label": "支", "value": "25" },
+        { "label": "只", "value": "26" }
+    ]
+)
+const chargingTypeOption = ref([
+    { "label": "按次", "value": "0" },
+    { "label": "按天", "value": "1" },
+    { "label": "按量", "value": "2" }
+])
+const projectMinUnitOption = ref([
+    { "label": "把", "value": "0" },
+    { "label": "板", "value": "1" },
+    { "label": "包", "value": "2" },
+    { "label": "本", "value": "3" },
+    { "label": "袋", "value": "4" },
+    { "label": "副", "value": "5" },
+    { "label": "个", "value": "6" },
+    { "label": "根", "value": "7" },
+    { "label": "盒", "value": "8" },
+    { "label": "件", "value": "9" },
+    { "label": "卷", "value": "10" },
+    { "label": "块", "value": "11" }
+])
+const delFlagOption = ref([
+    { "label": "启用", "value": "0" },
+    { "label": "停用", "value": "1" }
+])
+
+const init = () => {
+    getLcProjectById(currentEditId.value).then(res => {
+        form.value = res.data
+        tableData.value = res.data.lcProjectAliasList
+    }).catch(err => {
+
+    })
+}
+
+const confirm = () => {
+    formRef.value.validate(valid => {
+        if (valid) {
+            let params = { ...form.value }
+            params.lcProjectAliasList = tableData.value
+            params.lcType='2';
+            if(currentEditId.value) params.id = currentEditId.value
+            console.log("insertLcProject", params)
+            insertLcProject(params).then(res => {
+                ElMessage.success(currentEditId.value ? '修改成功' : '新增成功')
+                centerDialogVisible.value = false
+                emit("handleDialogClose")
+                emit("init")
+            }).catch(err => {
+                // ElMessage.error(err.message)
+            })
+        }
+    })
+}
+
+const cancel = () => {
+    console.log("cancel")
+    emit("handleDialogClose")
+}
+
+const getCompanyList = () => {
+    console.log("getCompanyList")
+    let params = {
+        companyType: "1"
+    }
+    getLcCompanyList(params).then(res => {
+        lcCompanyOption.value = res
+    }).catch(err => {
+
+    })
+}
+
+const getProjectTypes = () => {
+    getAllLcProjectTypes().then(res => {
+        projectTypeOption.value = res
+    }).catch(err => {
+
+    })
+}
+
+const aliasForm = ref({
+    aliasName: ""
+})
+
+const aliasEditIndex = ref(-1)
+const toEditAlias = (row, index) => {
+    aliasForm.value.aliasName = row.aliasName
+    aliasEditIndex.value = index
+    showDialog.value = true
+}
+
+const deleteAlias = (index) => {
+    ElMessageBox.confirm("是否删除", {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        tableData.value.splice(index, 1)
+    }).catch((action) => {
+    })
+}
+const addOrEditProjectAlias = () => {
+    if (!aliasForm.value.aliasName) {
+        return ElMessage.warning("请输入别名")
+    }
+    if (aliasEditIndex.value >= 0) {
+        console.log("target", tableData.value)
+        tableData.value[aliasEditIndex.value].aliasName = aliasForm.value.aliasName
+        showDialog.value = false
+    } else {
+        tableData.value.push({
+            aliasName: aliasForm.value.aliasName
+        })
+        showDialog.value = false
+    }
+}
+
+const handleDialogClose = () => {
+    aliasForm.value = {
+        aliasName: ""
+    }
+    aliasEditIndex.value = -1
+}
+
+
+</script>
+
+<style lang="scss">
+.container {
+    height: 98%;
+    width: 100%;
+
+    .top-area {
+        height: 8%;
+        border-bottom: 1px solid #727070;
+        font-size: 1.2rem;
+    }
+
+    .title-area {
+        font-size: 1.2rem;
+        font-weight: bold;
+    }
+}
+
+
+
+.el-input__icon {
+    cursor: pointer;
+}
+
+.flex-center-row {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.flex-center-column {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+}
+</style>

+ 256 - 0
src/views/sterile/base/sterile/index.vue

@@ -0,0 +1,256 @@
+<template>
+    <div class="layout_display_flex_y">
+        <div class="obviousBox" style="margin-bottom: 6px;">
+            <searchArea :searchData="searchData" @submit="searchByForm"></searchArea>
+        </div>
+
+        <div class="layout_display_flex_y" style="height: 85%">
+            <div style="background-color: #fff;padding: 8px">
+                <el-button type="primary" icon="Plus" @click="onAddItem" style="margin-left: 5px">新增</el-button>
+            </div>
+            <el-table :data="tableData" border style="width: 100%" height="100%" stripe highlight-current-row
+                class="ypClassTable normal-size">
+                <el-table-column prop="projectCode" label="项目编码">
+                </el-table-column>
+                <el-table-column prop="projectName" label="项目名称">
+                </el-table-column>
+                <el-table-column prop="projectSpecifications" label="规格">
+                </el-table-column>
+                <el-table-column prop="projectUnit" label="单位">
+                </el-table-column>
+                <el-table-column prop="priceCode" label="物价码">
+                </el-table-column>
+                <el-table-column prop="projectType" label="项目类型">
+                    <template v-slot="scope">
+                        <span>{{ getLabelByValue(scope.row.projectType, projectTypeOption, {
+                            labelKey:
+                            'typeName',valueKey : 'id'}) }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="delFlag" label="是否停用">
+                    <template v-slot="scope">
+                        <span>{{ getLabelByValue(scope.row.delFlag, delFlagOption) }}</span>
+                    </template>
+                </el-table-column>
+                <el-table-column fixed="right" label="操作" min-width="180" width="180" align="center">
+                    <template #default="scope">
+                        <el-button type="primary" size="small" @click="onEditItem(scope.row)">编辑</el-button>
+                        <el-button :type="scope.row.delFlag !== '0' ? 'success' : 'info'" size="small"
+                            @click.prevent="changeDelFlag(scope.row)">
+                            {{ scope.row.delFlag == '0' ? '停用' : '启用' }}
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div>
+            <el-pagination :current-page="pageNumber" :page-size="pageSize" :page-sizes="[10, 15, 20, 25]"
+                :total="total" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+                @size-change="handleSizeChange" @current-change="handleCurrentChange">
+            </el-pagination>
+        </div>
+    </div>
+    <el-dialog v-model="showDialog" :close-on-click-modal="false" :close-on-press-escape="false"
+        :title="(currentEditId ? '编辑' : '新增') + '项目'" width="100%" destroy-on-close fullscreen
+        @close="handleDialogClose">
+        <!-- <YpPrintName :ypPrintNameDetail="ypPrintNameDetail" @closeYpPrintNameEditFor="closeYpPrintName" /> -->
+        <info :currentEditId="currentEditId" @handleDialogClose="handleDialogClose" @init="init"></info>
+    </el-dialog>
+</template>
+<script setup name="YpDict">
+import { ref, onMounted, nextTick } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { getLcProjectList, insertLcProject, getAllLcProjectTypes } from '@/api/lc/project.js'
+import searchArea from '@/components/searchArea/index.vue';
+import info from '@/views/sterile/base/sterile/info.vue';
+import { getLabelByValue } from '@/utils/common.js'
+
+const delFlagOption = [{ value: '0', label: '启用' }, { value: '1', label: '停用' }]
+
+const searchData = ref([
+    {
+        label: '项目编码',
+        key: 'projectCode',
+        type: 'input',
+        value: '',
+        clearable: true,
+    },
+    {
+        label: '项目名称',
+        key: 'projectName',
+        type: 'input',
+        value: '',
+    },
+    {
+        label: '项目类型',
+        key: 'projectType',
+        type: 'select',
+        value: '',
+        optionsData: [
+        ],
+    },
+    {
+        label: '是否停用',
+        key: 'delFlag',
+        type: 'select',
+        value: '',
+        optionsData: [
+            {
+                label: '启用',
+                value: '0',
+            },
+            {
+                label: '停用',
+                value: '1',
+            },
+        ],
+    },
+])
+const pageSize = ref(10)
+const pageNumber = ref(1)
+const total = ref(0)
+const currentEditId = ref('')
+
+const tableData = ref([])
+let projectTypeOption = []
+const handleSizeChange = (val) => {
+    pageSize.value = val
+    init()
+}
+const handleCurrentChange = (val) => {
+    pageNumber.value = val
+    init()
+}
+
+let showDialog = ref(false)
+
+const init = (params) => {
+    params = {
+        ...params,
+        ...searchForm.value,
+        lcType: '2',
+        pageSize: pageSize.value,
+        pageNumber: pageNumber.value
+    }
+    getLcProjectList(params).then((res) => {
+        console.log("getLcProjectList", res)
+        total.value = res.total
+        tableData.value = res.records
+        console.log("tableData", tableData.value)
+    }).catch((err) => {
+        ElMessage.error(err)
+    })
+}
+
+const initOptions = () => {
+    getProjectTypeOption()
+}
+
+const getProjectTypeOption = () => {
+    getAllLcProjectTypes().then((res) => {
+        console.log("getAllLcProjectTypes", res)
+        projectTypeOption = res
+        console.log("projectTypeOption", projectTypeOption)
+        searchData.value[2].optionsData = projectTypeOption.map(item => {
+            return {
+                label: item.typeName,
+                value: item.id
+            }
+        })
+        console.log("searchData.value[2]", searchData.value[3].optionsData)
+    }).catch((err) => {
+        console.log("getAllLcProjectTypes", err)
+        ElMessage.error(err)
+    })
+}
+
+onMounted(() => {
+    nextTick(() => {
+        init()
+        initOptions()
+    })
+})
+
+const searchForm = ref({})
+//搜索表单方法
+const searchByForm = (form) => {
+    console.log("search", form)
+    searchForm.value = form
+    init()
+}
+
+// 新增行
+const onAddItem = () => {
+    showDialog.value = true
+}
+
+const onEditItem = (row) => {
+    currentEditId.value = row.id
+    showDialog.value = true
+}
+
+const handleDialogClose = () => {
+    currentEditId.value = ""
+    showDialog.value = false
+}
+
+const changeDelFlag = (row) => {
+    let title = `是否${row.delFlag == '0' ? '停用' : '启用'}`
+    ElMessageBox.confirm(title, {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        let params = { id: row.id, delFlag: row.delFlag == '0' ? '1' : '0' }
+        insertLcProject(params).then(res => {
+            ElMessage.success(row.delFlag == '0' ? '停用成功' : '启用成功')
+            init()
+        }).catch(err => {
+            // ElMessage.error(err.message)
+        })
+    }).catch((action) => {
+        if (action === 'cancel') {
+        }
+    })
+}
+
+</script>
+<style lang="scss" deep>
+.el-dialog__body {
+    // padding: 0 16px;
+    // height: calc(100% - 25px);
+}
+
+.el-tabs {
+    height: calc(100% - 27px);
+
+    .el-tabs__content {
+        padding: 5px;
+        height: calc(100% - 27px);
+    }
+
+    .el-tab-pane {
+        height: calc(100% - 27px);
+        overflow: auto;
+    }
+
+    .el-table__inner-wrapper {
+        height: calc(100% - 10px) !important;
+    }
+
+}
+
+.el-table .warning-row {
+    --el-table-tr-bg-color: #dd7694;
+}
+
+.search-select-pre {
+    padding: 0 12px;
+    color: var(--el-text-color-regular);
+    background: var(--el-fill-color-light);
+    border-right: 1px solid var(--el-border-color);
+    --el-select-input-padding-left: '0'
+}
+</style>

+ 321 - 0
src/views/sterile/base/sterile/info.vue

@@ -0,0 +1,321 @@
+<template>
+    <div class="container">
+        <el-form ref="formRef" :model="form" class="form" label-width="127px" size="default" :rules="formRules">
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <div>第一部分</div>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="项目分类" prop="projectType">
+                        <el-select v-model="form.projectType" placeholder="请选择项目分类">
+                            <el-option v-for="item in projectTypeOption" :label="item.typeName"
+                                :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="项目名称" prop="sterileName">
+                        <el-input v-model="form.sterileName" placeholder="请输入项目名称">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="计量单位" prop="sterileUnit">
+                        <el-input v-model="form.sterileUnit" placeholder="请输入计量单位">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="项目规格" prop="projectSpecifications">
+                        <el-input v-model="form.projectSpecifications" placeholder="请输入项目规格">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="是否单次耗材" prop="isSingle">
+                        <el-radio-group v-model="form.isSingle">
+                            <el-radio value="1" size="large">是</el-radio>
+                            <el-radio value="0" size="large">否</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="最大使用次数" prop="maxUse">
+                        <el-input v-model="form.maxUse" placeholder="请输入最大使用次数" type="number">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="有效期" prop="validityDate">
+                        <el-input v-model="form.validityDate" placeholder="请输入有效期">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="有效期类型" prop="projectType">
+                        <el-select v-model="form.validityType" placeholder="请选择有效期类型">
+                            <el-option v-for="item in projectTypeOption" :label="item.typeName"
+                                       :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="总价格" prop="totalPrice">
+                        <el-input v-model="form.totalPrice" placeholder="请输入总价格" type="number">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+            <el-row :gutter="20">
+                <el-col :span="8">
+                    <el-form-item label="是否停用" prop="delFlag">
+                        <el-radio-group v-model="form.delFlag">
+                            <el-radio value="0" size="large">启用</el-radio>
+                            <el-radio value="1" size="large">停用</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                    <el-form-item label="备注" prop="remark">
+                        <el-input v-model="form.remark" placeholder="请输入备注">
+                        </el-input>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+
+         <el-divider />
+
+        <el-form label-width="127px" size="default">
+            <el-row :gutter="20">
+                <el-col :span="5">
+                    <el-form-item label="选择消毒材料" prop="remark">
+                        <el-select
+                            v-model="selectDisinfectProject"
+                            multiple
+                            clearable
+                            collapse-tags
+                            filterable
+                            placeholder="Select"
+                            popper-class="custom-header"
+                            :max-collapse-tags="1"
+                            style="width: 240px"
+                        >
+                            <el-option
+                                v-for="item in disinfectProjects"
+                                :key="item.id"
+                                :label="item.projectName"
+                                :value="item.id"
+                            />
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :span="2">
+                    <el-button type="primary" @click="addDisinfectProjects">新增</el-button>
+                </el-col>
+            </el-row>
+
+        </el-form>
+        <div style="margin: 10px 0;">
+            <el-button icon="Plus" type="primary" @click="showDialog = true" size="small">新增别名</el-button>
+        </div>
+        <el-table :data="tableData" style="width: 100%" height="500" size="default">
+            <el-table-column prop="projectCode" label="项目编号" width="80" />
+            <el-table-column prop="projectName" label="项目名称" />
+            <el-table-column prop="projectSpecifications" label="规格" />
+            <el-table-column prop="projectUnit" label="单位" />
+            <el-table-column prop="retailPrice" label="单价" />
+            <el-table-column prop="priceCode" label="物价码" />
+            <el-table-column fixed="right" label="操作" width="150">
+                <template #default="scope">
+                    <el-button type="danger" size="small" @click="deleteAlias(scope.$index)">
+                        删 除
+                    </el-button>
+                    <!-- <el-button link type="primary" size="small">Edit</el-button> -->
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="confirm-area flex-center-row" style="margin: 20px ;">
+            <el-button type="primary" @click="confirm" size="default">确定</el-button>
+            <el-button @click="cancel" size="default">取消</el-button>
+        </div>
+    </div>
+
+</template>
+<script setup name="YpDictInfo">
+import { nextTick, onMounted, ref, watch } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { getLcProjectById, getLcProjectList,getAllLcProjectTypes } from '@/api/lc/project.js';
+import { insertSterile } from '@/api/lc/sterile.js';
+
+const props = defineProps({
+    //子组件接收父组件传递过来的值
+    currentEditId: String,
+})
+//使用父组件传递过来的值
+const { currentEditId } = toRefs(props)
+//父组件的方法
+const emit = defineEmits(["handleDialogClose", "init"])
+onMounted(() => {
+    nextTick(() => {
+        getDisinfectProjects();
+        getProjectTypes()
+        if (currentEditId.value) {
+            init()
+        }
+    })
+})
+
+const form = ref({
+    delFlag: "0",
+    lcProjectAliasList: [
+
+    ]
+})
+
+const formRef = ref(null)
+const formRules = {
+    projectType: [
+        { required: true, message: "请选择项目分类", trigger: "change" },
+    ],
+    projectName: [
+        { required: true, message: "请输入项目名称", trigger: "blur" },
+    ]
+}
+
+const showDialog = ref(false)
+
+const itemTableData = ref([
+]);
+
+
+const selectDisinfectProject = ref([]);
+
+const disinfectProjects = ref([]);
+
+let tableData = ref([]);
+const addDisinfectProjects = () => {
+    for(let i = 0;i<selectDisinfectProject.value.length;i++) {
+        for(let j = 0;j<disinfectProjects.value.length;j++) {
+            if(selectDisinfectProject.value[i] == disinfectProjects.value[j].id) {
+                tableData.value.push(disinfectProjects.value[j]);
+            }
+        }
+
+    }
+};
+
+const getDisinfectProjects = () => {
+    let params = {
+        projectType: "2"
+    }
+    getLcProjectList(params).then(res => {
+        disinfectProjects.value = res;
+    }).catch(err => {
+
+    })
+};
+
+
+
+const projectTypeOption = ref([])
+
+const init = () => {
+    getLcProjectById(currentEditId.value).then(res => {
+        form.value = res.data
+        tableData.value = res.data.lcProjectAliasList
+    }).catch(err => {
+
+    })
+}
+
+const confirm = () => {
+    formRef.value.validate(valid => {
+        if (valid) {
+            let params = { ...form.value };
+            params.sterileDisinfectList = tableData.value;
+            // if(currentEditId.value) params.id = currentEditId.value
+            insertSterile(params).then(res => {
+                ElMessage.success(currentEditId.value ? '修改成功' : '新增成功');
+                emit("handleDialogClose");
+                emit("init");
+            }).catch(err => {
+                // ElMessage.error(err.message)
+            })
+        }
+    })
+}
+
+const cancel = () => {
+    emit("handleDialogClose")
+}
+
+
+
+const getProjectTypes = () => {
+    getAllLcProjectTypes().then(res => {
+        projectTypeOption.value = res
+    }).catch(err => {
+
+    })
+}
+
+const deleteAlias = (index) => {
+    ElMessageBox.confirm("是否删除", {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        tableData.value.splice(index, 1)
+    }).catch((action) => {
+    })
+}
+
+
+
+</script>
+
+<style lang="scss">
+.container {
+    height: 98%;
+    width: 100%;
+
+    .top-area {
+        height: 8%;
+        border-bottom: 1px solid #727070;
+        font-size: 1.2rem;
+    }
+
+    .title-area {
+        font-size: 1.2rem;
+        font-weight: bold;
+    }
+}
+
+
+
+.el-input__icon {
+    cursor: pointer;
+}
+
+.flex-center-row {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+.flex-center-column {
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+}
+</style>