Przeglądaj źródła

企业信息维护

zengfanwei 4 tygodni temu
rodzic
commit
6063412aaa

+ 399 - 0
src/views/logisticsMaterials/logisticsBasicData/enterpriseInformation/index.vue

@@ -0,0 +1,399 @@
+<template>
+    <div class="layout_display_flex_y">
+        <div class="obviousBox">
+            <searchArea :searchData="searchData" @submit="searchByForm"></searchArea>
+        </div>
+        <div class="layout_display_flex_y">
+            <el-tabs class="el-tabs__fill" v-model="currentCompanyType" type="border-card" @tab-click="handleClick">
+                <div style="padding: 6px; background-color: #fff;">
+                    <el-button type="primary" icon="Plus" @click="centerDialogVisible = true"
+                        style="margin-left: 5px">新增</el-button>
+                </div>
+                <el-tab-pane key="ypClass" label="供应商字典" name="0" style="height: 90%;">
+                    <div class="layout_display_flex_y">
+                        <div class="layout_flex_1-y">
+                            <el-table :data="tableData" border style="width: 100%" height="100%" stripe
+                                highlight-current-row class="ypClassTable normal-size">
+                                <el-table-column prop="companyCode" label="供应商编码" width="80">
+                                </el-table-column>
+                                <el-table-column prop="companyName" label="供应商名称" width="200">
+                                </el-table-column>
+                                <el-table-column prop="pyCode" label="拼音码" width="140" />
+                                <el-table-column prop="dcode" label="五笔码" width="140" />
+                                <el-table-column prop="companyType" label="厂商类型" width="200">
+                                    <template v-slot="scope">
+                                        <span>{{ getLabelByValue(scope.row.companyType, companyTypeOption) }}</span>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="companyAddr" label="地址" width="200">
+                                </el-table-column>
+                                <el-table-column prop="companyPhone" label="电话" width="140">
+                                </el-table-column>
+                                =<el-table-column prop="companyAccount" label="账号" width="140">
+                                </el-table-column>
+                                <el-table-column prop="companyBank" label="开户银行" width="140">
+                                </el-table-column>
+                                <el-table-column prop="delFlag" label="是否停用" width="100">
+                                    <template v-slot="scope">
+                                        {{ getLabelByValue(scope.row.delFlag, delFlagOption) }}
+                                    </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="editItem(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-tab-pane>
+                <el-tab-pane key="drugKind" label="生产厂家字典" name="1" style="height: 90%;">
+                    <div class="layout_display_flex_y">
+                        <div class="layout_flex_1-y">
+                            <el-table :data="tableData" border style="width: 100%" height="100%" stripe
+                                highlight-current-row class="drugKindTable normal-size">
+                                <el-table-column prop="companyCode" label="厂家编码" width="80">
+                                </el-table-column>
+                                <el-table-column prop="companyName" label="厂家名称" width="200">
+                                </el-table-column>
+                                <el-table-column prop="pyCode" label="拼音码" width="140" />
+                                <el-table-column prop="dcode" label="五笔码" width="140" />
+                                <el-table-column prop="name" label="厂商类型" width="200">
+                                    <template v-slot="scope">
+                                        <span>{{ getLabelByValue(scope.row.companyType, companyTypeOption) }}</span>
+                                    </template>
+                                </el-table-column>
+                                <el-table-column prop="companyAddr" label="地址" width="200">
+                                </el-table-column>
+                                <el-table-column prop="companyPhone" label="电话" width="140">
+                                </el-table-column>
+                                =<el-table-column prop="companyAccount" label="账号" width="140">
+                                </el-table-column>
+                                <el-table-column prop="nacompanyBanke" label="开户银行" width="140">
+                                </el-table-column>
+                                <el-table-column prop="delFlag" label="是否停用" width="100">
+                                    <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="editItem(scope.row)">编辑</el-button>
+                                        <el-button type="success" 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-tab-pane>
+            </el-tabs>
+        </div>
+
+        <el-dialog v-model="centerDialogVisible" :title="(addItemForm.companyCode ? '编辑' : '新增') + currentTabLabel"
+            width="800" center @close="handleDialogClose">
+            <template #footer>
+                <el-form ref="ruleFormRef" :model="addItemForm" label-width="auto" :rules="formRules">
+                    <el-row type="flex" justify="center" :gutter="20">
+                        <el-col :span="colSize">
+                            <el-form-item label="企业编码" prop="companyCode">
+                                <el-input v-model="addItemForm.companyCode" disabled />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="企业名称" prop="companyName">
+                                <el-input v-model="addItemForm.companyName" />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="企业类型类型" prop="companyType">
+                                <el-select v-model="addItemForm.companyType" placeholder="">
+                                    <el-option v-for="item in companyTypeOption" :label="item.label" :value="item.value"
+                                        :key="item.value">
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="产品类型" prop="companyProductType">
+                                <el-select v-model="addItemForm.companyProductType" placeholder="">
+                                    <el-option label="医用材料" value="0" />
+                                    <el-option label="固定资产" value="1" />
+                                    <el-option label="物资材料" value="2" />
+                                </el-select>
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="企业地址" prop="companyAddr">
+                                <el-input v-model="addItemForm.companyAddr" />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="企业电话" prop="companyPhone">
+                                <el-input v-model="addItemForm.companyPhone" />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="企业账号" prop="companyAccount">
+                                <el-input v-model="addItemForm.companyAccount" />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="开户银行" prop="companyBank">
+                                <el-input v-model="addItemForm.companyBank" />
+                            </el-form-item>
+                        </el-col>
+                        <el-col :span="colSize">
+                            <el-form-item label="是否停用" prop="delFlag">
+                                <el-select v-model="addItemForm.delFlag" placeholder="">
+                                    <el-option v-for="item in delFlagOption" :key="item.value" :label="item.label"
+                                        :value="item.value" />
+                                </el-select>
+                            </el-form-item>
+                        </el-col>
+                    </el-row>
+                </el-form>
+                <div class="dialog-footer">
+                    <el-button @click="centerDialogVisible = false">取消</el-button>
+                    <el-button type="primary" @click="addOrEditItem">
+                        确定
+                    </el-button>
+                </div>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+<script setup name="YpDict">
+import { ref, onMounted, nextTick } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import {
+    delYpClassByCode,
+} from '@/api/yp-dict/yp-dict-base.js'
+import { getLcCompanyList, insertLcCompany } from '@/api/lc/company.js'
+import searchArea from '@/components/searchArea/index.vue';
+import { getLabelByValue } from '@/utils/common.js'
+
+const currentCompanyType = ref('0')
+const searchData = ref([
+    {
+        label: '企业名称',
+        key: 'vehicleName',
+        type: 'input',
+        value: '',
+        clearable: true,
+    },
+])
+
+let addItemForm = ref({
+    delFlag: '0',
+})
+
+let centerDialogVisible = ref(false)
+
+let currentTabLabel = ref('供应商')
+
+const colSize = ref(8)
+const handleSizeChange = (val) => {
+    pageSize.value = val
+}
+const handleCurrentChange = (val) => {
+    pageNumber.value = val
+}
+
+const formRules = {
+    companyName: [
+        { required: true, message: '请输入企业名称', trigger: 'blur' },
+    ],
+    companyType: [
+        { required: true, message: '请选择企业类型', trigger: 'change' },
+    ],
+    companyProductType: [
+        { required: true, message: '请选择产品类型', trigger: 'change' },
+    ],
+    delFlag: [
+        { required: true, message: '请选择是否停用', trigger: 'change' },
+    ],
+}
+
+const total = ref(0)
+const pageSize = ref(10)
+const pageNumber = ref(1)
+const tableData = ref([])
+
+const companyTypeOption = [
+    { label: '供应商', value: '0' },
+    { label: '生产厂家', value: '1' },
+]
+
+const delFlagOption = [
+    { label: '启用', value: '0' },
+    { label: '停用', value: '1' },
+]
+
+const ruleFormRef = ref(null)
+
+onMounted(() => {
+    nextTick(() => {
+        queryCompanyList()
+    })
+})
+
+const searchForm = ref({})
+//搜索表单方法
+const searchByForm = (form) => {
+    console.log("search", form)
+    searchForm.value = form
+    queryCompanyList()
+}
+
+const handleDialogClose = () => {
+    addItemForm.value = { delFlag: '0' }
+    ruleFormRef.value.resetFields();
+}
+
+const editItem = (row) => {
+    if (row) {
+        addItemForm.value = row
+    }
+    centerDialogVisible.value = true
+}
+
+// 新增
+const addOrEditItem = (row) => {
+    console.log("addItemForm", addItemForm)
+    ruleFormRef.value.validate(valid => {
+        if (valid) {
+            insertLcCompany(addItemForm.value).then(res => {
+                ElMessage.success(addItemForm.value.id ? '修改成功' : '新增成功')
+                queryCompanyList()
+                centerDialogVisible.value = false
+            }).catch(err => {
+                // ElMessage.error(err.message)
+            })
+        }
+    })
+}
+
+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'}
+        insertLcCompany(params).then(res => {
+                ElMessage.success(row.delFlag == '0' ? '停用成功' : '启用成功')
+                queryCompanyList()
+            }).catch(err => {
+                // ElMessage.error(err.message)
+            })
+    }).catch((action) => {
+        if (action === 'cancel') {
+        }
+    })
+}
+
+const deleteItem = (index, row) => {
+    let title = '请确认是否删除<span style="color:#d12020;">' + row.name + '</span>?'
+    ElMessageBox.confirm(title, {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        delYpClassByCode(row.code).then((res) => {
+            ElMessage({
+                type: "success",
+                message: res.cg,
+                duration: 2500,
+                showClose: true,
+            });
+        })
+    }).catch((action) => {
+        if (action === 'cancel') {
+        }
+    })
+}
+
+const handleClick = (tab, event) => {
+    // 查询哪个tab页面
+    currentCompanyType.value = tab.props.name
+    pageNumber.value = "1"
+    pageSize.value = "10"
+    queryCompanyList()
+}
+
+const queryCompanyList = (params) => {
+    params = {
+        ...params,
+        ...searchForm.value,
+        companyType: currentCompanyType.value,
+        pageSize: pageSize.value,
+        pageNumber: pageNumber.value
+    }
+    getLcCompanyList(params).then((res) => {
+        console.log("queryCompanyList", res)
+        total.value = res.total
+        tableData.value = res.records
+        console.log("tableData", tableData.value)
+    }).catch((err) => {
+        ElMessage.error(err)
+    })
+}
+
+</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;
+}
+</style>

+ 709 - 0
src/views/logisticsMaterials/logisticsBasicData/projectInformation/index.vue

@@ -0,0 +1,709 @@
+<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="Search" @click="queryItem" style="margin-left: 5px">查询</el-button> -->
+                <el-button type="primary" icon="Plus" @click="onAddItem" style="margin-left: 5px">新增</el-button>
+                <!-- <el-button type="primary" icon="Download" @click="exportData" style="margin-left: 5px">导出</el-button> -->
+            </div>
+            <el-table
+                :data="ypClassData.slice(pageSizeClass * (currentPageClass - 1), pageSizeClass * currentPageClass)"
+                border style="width: 100%" height="100%" stripe highlight-current-row class="ypClassTable normal-size">
+                <el-table-column prop="code" label="请领单号">
+                </el-table-column>
+                <el-table-column prop="name" label="请领科室">
+                </el-table-column>
+                <el-table-column prop="name" label="请领月份">
+                </el-table-column>
+                <el-table-column prop="name" label="申请人">
+                </el-table-column>
+                <el-table-column prop="name" label="申请时间">
+                </el-table-column>
+                <el-table-column prop="delFlag" label="服务库房">
+                </el-table-column>
+                <el-table-column prop="delFlag" label="审核人">
+                </el-table-column>
+                <el-table-column prop="delFlag" label="状态">
+                </el-table-column>
+                <el-table-column fixed="right" label="操作" min-width="180" width="180" center>
+                    <template #default="scope">
+                        <el-button type="primary" size="small" v-if="!scope.row.isEdit"
+                            @click="editYpClass(scope.row)">编辑</el-button>
+                        <el-button type="primary" size="small" v-if="scope.row.isEdit"
+                            @click="updateYpClass(scope.row)">保存</el-button>
+                        <el-button type="primary" size="small" v-if="scope.row.isEdit"
+                            @click="cancelYpClass(scope.row)">取消
+                        </el-button>
+                        <el-button type="danger" size="small" @click.prevent="deleteYpClass(scope.$index, scope.row)">
+                            删除
+                        </el-button>
+                        <el-button type="success" size="small">
+                            查看
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div>
+            <el-pagination :current-page="currentPageClass" :page-size="pageSizeClass" :page-sizes="[10, 15, 20, 25]"
+                :total="ypClassData.length" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
+                @size-change="handleSizeChangeClass" @current-change="handleCurrentChangeClass">
+            </el-pagination>
+        </div>
+    </div>
+    <el-dialog v-model="showDialog" :close-on-click-modal="false" :close-on-press-escape="false"
+        :title="(currentEditCode ? '编辑' : '新增') + '科室采购计划'" width="100%" destroy-on-close fullscreen>
+        <!-- <YpPrintName :ypPrintNameDetail="ypPrintNameDetail" @closeYpPrintNameEditFor="closeYpPrintName" /> -->
+        <info :currentEditCode="currentEditCode"></info>
+    </el-dialog>
+</template>
+<script setup name="YpDict">
+import { ref, onMounted, nextTick } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import {
+    selectYpClass, saveYpClass, delYpClassByCode,
+    selectDrugKind,
+    selectYpDosage,
+    selectYpUnit,
+    selectYpChargeGroup,
+    selectYpVisibleFlag,
+    selectYpSupply,
+    selectYpManuFactory,
+} from '@/api/yp-dict/yp-dict-base.js'
+import searchArea from '@/components/searchArea/index.vue';
+import info from '@/views/logisticsMaterials/logisticsBasicData/projectInformation/info.vue';
+
+const editableTabsValue = ref('ypClass')
+const msgTip = '分类编码(code)有变更,原始字典记录存在关联,请谨慎做更改,是否确认!!!'
+
+const searchData = ref([
+    {
+        label: '请领单号',
+        key: 'vehicleName',
+        type: 'input',
+        value: '',
+        clearable: true,
+    },
+    {
+        label: '申请状态',
+        key: 'vehicleType',
+        type: 'select',
+        value: '',
+        optionsData: [ //(0:轿车,1:面包车,2:越野车,3:吉普车,4:巴士,5:卡车)
+            {
+                label: '轿车',
+                value: '0',
+            },
+            {
+                label: '面包车',
+                value: '1',
+            },
+        ],
+    },
+    {
+        label: '请领月份',
+        key: 'vehicleType',
+        type: 'monthDatePicker',
+        value: '',
+    },
+    {
+        label: '请领科室',
+        key: 'vehicleType',
+        type: 'select',
+        value: '',
+        optionsData: [ //(0:轿车,1:面包车,2:越野车,3:吉普车,4:巴士,5:卡车)
+            {
+                label: '轿车',
+                value: '0',
+            },
+            {
+                label: '面包车',
+                value: '1',
+            },
+        ],
+    },
+])
+const pageSizeClass = ref(20)
+const currentPageClass = ref(1)
+const handleSizeChangeClass = (val) => {
+    pageSizeClass.value = val
+}
+const handleCurrentChangeClass = (val) => {
+    currentPageClass.value = val
+}
+
+const pageSizeKind = ref(20)
+const currentPageKind = ref(1)
+
+const pageSizeDosage = ref(20)
+const currentPageDosage = ref(1)
+
+const pageSizeUnit = ref(20)
+const currentPageUnit = ref(1)
+
+const pageSizeSupply = ref(20)
+const currentPageSupply = ref(1)
+
+const pageSizeManuFactory = ref(20)
+const currentPageManuFactory = ref(1)
+
+const ypClassData = ref([])
+const drugKindData = ref([])
+const ypDosageData = ref([])
+const ypUnitData = ref([])
+const ypChargeGroupData = ref([])
+const visibleFlagData = ref([])
+const ypSupplyData = ref([])
+const ypManuFactoryData = ref([])
+
+let showDialog = ref(false)
+
+const text = ref('')
+onMounted(() => {
+    nextTick(() => {
+        queryYpClass()
+    })
+})
+
+//搜索表单方法
+const searchByForm = (form) => {
+    console.log("search", form)
+}
+
+// 查询药品字典-药性字典
+const queryYpClass = () => {
+    selectYpClass(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            ypClassData.value = res
+        })
+        .catch(() => {
+            ypClassData.value = []
+        })
+}
+
+// 查询药品字典-药品分类字典
+const queryDrugKind = () => {
+    selectDrugKind(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            drugKindData.value = res
+        })
+        .catch(() => {
+            drugKindData.value = []
+        })
+}
+
+// 查询药品字典-药品剂型字典
+const queryYpDosage = () => {
+    selectYpDosage(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            ypDosageData.value = res
+        })
+        .catch(() => {
+            ypDosageData.value = []
+        })
+}
+
+// 查询药品字典-药品单位字典
+const queryYpUnit = () => {
+    selectYpUnit(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            ypUnitData.value = res
+        })
+        .catch(() => {
+            ypUnitData.value = []
+        })
+}
+
+// 查询药品字典-药品费别字典
+const queryYpChargeGroup = () => {
+    selectYpChargeGroup(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            ypChargeGroupData.value = res
+        })
+        .catch(() => {
+            ypChargeGroupData.value = []
+        })
+}
+
+// 查询药房药品停用情况
+const flagFilter = ref('')
+const queryVisibleFlag = () => {
+    selectYpVisibleFlag(text.value, flagFilter.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            visibleFlagData.value = res
+        })
+        .catch(() => {
+            visibleFlagData.value = []
+        })
+}
+
+// 查询药品字典-药品厂家字典
+const queryYpSupply = () => {
+    selectYpSupply(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            ypSupplyData.value = res
+        })
+        .catch(() => {
+            ypSupplyData.value = []
+        })
+}
+
+// 查询药品字典-药品供应商字典
+const queryYpManuFactory = () => {
+    selectYpManuFactory(text.value)
+        .then((res) => {
+            res.forEach(row => {
+                // 是否标记
+                row['isEdit'] = false
+                // 是否新增
+                row['isAdd'] = false
+            })
+            ypManuFactoryData.value = res
+        })
+        .catch(() => {
+            ypManuFactoryData.value = []
+        })
+}
+
+// 查询
+const queryItem = () => {
+    if (editableTabsValue.value === 'ypClass') {
+        queryYpClass()
+    } else if (editableTabsValue.value === 'drugKind') {
+        queryDrugKind()
+    } else if (editableTabsValue.value === 'ypDosage') {
+        queryYpDosage()
+    } else if (editableTabsValue.value === 'ypUnit') {
+        queryYpUnit()
+    } else if (editableTabsValue.value === 'ypChargeGroup') {
+        queryYpChargeGroup()
+    } else if (editableTabsValue.value === 'visibleFlag') {
+        queryVisibleFlag()
+    } else if (editableTabsValue.value === 'ypSupply') {
+        queryYpSupply()
+    } else if (editableTabsValue.value === 'ypManuFactory') {
+        queryYpManuFactory()
+    }
+}
+
+// 新增行
+const onAddItem = () => {
+    showDialog.value = true
+    return
+
+    if (editableTabsValue.value === 'ypClass') {
+        let count
+        if (ypClassData.value.length % pageSizeClass.value === 0) {
+            count = Math.ceil(ypClassData.value.length / pageSizeClass.value) + 1
+        } else {
+            count = Math.ceil(ypClassData.value.length / pageSizeClass.value)
+        }
+        currentPageClass.value = count
+        ypClassData.value.push({
+            code: '',
+            name: '',
+            pyCode: '',
+            dcode: '',
+            delFlag: '',
+            isEdit: true,
+            isAdd: true,
+        })
+        const el = document.querySelector('.ypClassTable .el-scrollbar__wrap')
+        const el2 = document.querySelector('.ypClassTable .el-table__body tbody')
+        setTimeout(() => {
+            const height = el2.clientHeight - el.clientHeight
+            if (height > 0) {
+                el.scrollTop = height
+            }
+        }, 100)
+    } else if (editableTabsValue.value === 'drugKind') {
+        let count
+        if (drugKindData.value.length % pageSizeKind.value === 0) {
+            count = Math.ceil(drugKindData.value.length / pageSizeKind.value) + 1
+        } else {
+            count = Math.ceil(drugKindData.value.length / pageSizeKind.value)
+        }
+        currentPageKind.value = count
+        drugKindData.value.push({
+            code: '',
+            name: '',
+            pyCode: '',
+            dcode: '',
+            ypType: '',
+            mzBillCode: '',
+            zyBillCode: '',
+            isEdit: true,
+            isAdd: true,
+        })
+        const el = document.querySelector('.drugKindTable .el-scrollbar__wrap')
+        const el2 = document.querySelector('.drugKindTable .el-table__body tbody')
+        setTimeout(() => {
+            const height = el2.clientHeight - el.clientHeight
+            if (height > 0) {
+                el.scrollTop = height
+            }
+        }, 100)
+    } else if (editableTabsValue.value === 'ypDosage') {
+        let count
+        if (ypDosageData.value.length % pageSizeDosage.value === 0) {
+            count = Math.ceil(ypDosageData.value.length / pageSizeDosage.value) + 1
+        } else {
+            count = Math.ceil(ypDosageData.value.length / pageSizeDosage.value)
+        }
+        currentPageDosage.value = count
+        ypDosageData.value.push({
+            code: '',
+            name: '',
+            pyCode: '',
+            dcode: '',
+            dosaType: '',
+            dosaRemark: '',
+            orderNo: '',
+            delFlag: '',
+            ybCode: '',
+            hnsybCode: '',
+            isEdit: true,
+            isAdd: true,
+        })
+        const el = document.querySelector('.ypDosageTable .el-scrollbar__wrap')
+        const el2 = document.querySelector('.ypDosageTable .el-table__body tbody')
+        setTimeout(() => {
+            const height = el2.clientHeight - el.clientHeight
+            if (height > 0) {
+                el.scrollTop = height
+            }
+        }, 100)
+    } else if (editableTabsValue.value === 'ypUnit') {
+        let count
+        if (ypUnitData.value.length % pageSizeUnit.value === 0) {
+            count = Math.ceil(ypUnitData.value.length / pageSizeUnit.value) + 1
+        } else {
+            count = Math.ceil(ypUnitData.value.length / pageSizeUnit.value)
+        }
+        currentPageUnit.value = count
+        ypUnitData.value.push({
+            code: '',
+            name: '',
+            pyCode: '',
+            dcode: '',
+            orderNo: '',
+            delFlag: '',
+            refundableFees: '',
+            isEdit: true,
+            isAdd: true,
+        })
+        const el = document.querySelector('.ypUnitTable .el-scrollbar__wrap')
+        const el2 = document.querySelector('.ypUnitTable .el-table__body tbody')
+        setTimeout(() => {
+            const height = el2.clientHeight - el.clientHeight
+            if (height > 0) {
+                el.scrollTop = height
+            }
+        }, 100)
+    } else if (editableTabsValue.value === 'ypChargeGroup') {
+        ypChargeGroupData.value.push({
+            code: '',
+            name: '',
+            pyCode: '',
+            dcode: '',
+            delFlag: '',
+            isEdit: true,
+            isAdd: true,
+        })
+    } else if (editableTabsValue.value === 'visibleFlag') {
+        ElMessage({
+            type: "warning",
+            message: "不能新增药房药品停用,需先维护药品信息!",
+            duration: 2500,
+            showClose: true,
+        });
+    } else if (editableTabsValue.value === 'ypSupply') {
+        let count
+        if (ypSupplyData.value.length % pageSizeSupply.value === 0) {
+            count = Math.ceil(ypSupplyData.value.length / pageSizeSupply.value) + 1
+        } else {
+            count = Math.ceil(ypSupplyData.value.length / pageSizeSupply.value)
+        }
+        currentPageSupply.value = count
+        ypSupplyData.value.push({
+            code: '',
+            name: '',
+            abbrName: '',
+            address: '',
+            zipCode: '',
+            telNo: '',
+            relName: '',
+            busiRange: '',
+            comment: '',
+            useFlag: '',
+            pyCode: '',
+            dcode: '',
+            delFlag: '',
+            isEdit: true,
+            isAdd: true,
+        })
+        const el = document.querySelector('.ypSupplyTable .el-scrollbar__wrap')
+        const el2 = document.querySelector('.ypSupplyTable .el-table__body tbody')
+        setTimeout(() => {
+            const height = el2.clientHeight - el.clientHeight
+            if (height > 0) {
+                el.scrollTop = height
+            }
+        }, 100)
+    } else if (editableTabsValue.value === 'ypManuFactory') {
+        let count
+        if (ypManuFactoryData.value.length % pageSizeManuFactory.value === 0) {
+            count = Math.ceil(ypManuFactoryData.value.length / pageSizeManuFactory.value) + 1
+        } else {
+            count = Math.ceil(ypManuFactoryData.value.length / pageSizeManuFactory.value)
+        }
+        currentPageManuFactory.value = count
+        ypManuFactoryData.value.push({
+            code: '',
+            name: '',
+            abbrName: '',
+            address: '',
+            zipCode: '',
+            telNo: '',
+            relName: '',
+            productRange: '',
+            comment: '',
+            useFlag: '',
+            pyCode: '',
+            dcode: '',
+            delFlag: '',
+            isEdit: true,
+            isAdd: true,
+        })
+        const el = document.querySelector('.ypManuFactoryTable .el-scrollbar__wrap')
+        const el2 = document.querySelector('.ypManuFactoryTable .el-table__body tbody')
+        setTimeout(() => {
+            const height = el2.clientHeight - el.clientHeight
+            if (height > 0) {
+                el.scrollTop = height
+            }
+        }, 100)
+    }
+}
+
+// 药品字典-药性字典增删改存开始
+// 编辑
+const editYpClass = (row) => {
+    // 备份原始数据
+    row['oldRow'] = JSON.parse(JSON.stringify(row))
+    row.isEdit = true
+}
+// 取消
+const cancelYpClass = (row) => {
+    // 如果是新增的数据
+    if (row.isAdd) {
+        ypClassData.value.splice(ypClassData.value.length - 1, 1)
+    } else {
+        // 不是新增的数据  还原数据
+        for (const i in row.oldRow) {
+            row[i] = row.oldRow[i]
+        }
+    }
+}
+// 保存
+const updateYpClass = (row) => {
+    if (!row.code || !row.name) {
+        ElMessage({
+            type: "warning",
+            message: "药性字典编码或名称不存在,请检查!",
+            duration: 2500,
+            showClose: true,
+        });
+        return
+    }
+
+    if (row.isAdd) {
+        let fe = 0
+        for (let num in ypClassData.value) {
+            if (ypClassData.value[num].code === row.code) {
+                fe++
+            }
+        }
+        if (fe === 2) {
+            ElMessage({
+                type: "warning",
+                message: "存在重复的药性字典,请核对!",
+                duration: 2500,
+                showClose: true,
+            });
+        } else {
+            callSaveYpClass(row, null)
+        }
+
+    } else {
+        let oldCode = row.oldRow.code
+        if (oldCode !== row.code) {
+            ElMessageBox.confirm(msgTip, {
+                cancelButtonText: '取消',
+                confirmButtonText: '确定',
+                type: 'warning',
+                distinguishCancelAndClose: true,
+                dangerouslyUseHTMLString: true
+            }).then(() => {
+                callSaveYpClass(row, oldCode)
+            }).catch((action) => {
+                if (action === 'cancel') {
+                    queryYpClass()
+                }
+            })
+        } else {
+            callSaveYpClass(row, oldCode)
+        }
+    }
+}
+
+const callSaveYpClass = (row, oldCode) => {
+    let title = '请确认是否保存<span style="color:#d12020;">' + row.name + '</span>?'
+    ElMessageBox.confirm(title, {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        saveYpClass(row).then((res) => {
+            ElMessage({
+                type: "success",
+                message: res.cg,
+                duration: 2500,
+                showClose: true,
+            });
+            if (oldCode !== null && oldCode !== row.code) {
+                // 删除原始数据
+                delYpClassByCode(oldCode).then((res) => {
+                    queryYpClass()
+                })
+            } else {
+                queryYpClass()
+            }
+        })
+    }).catch((action) => {
+        if (action === 'cancel') {
+            queryYpClass()
+        }
+    })
+}
+
+const deleteYpClass = (index, row) => {
+    let title = '请确认是否删除<span style="color:#d12020;">' + row.name + '</span>?'
+    ElMessageBox.confirm(title, {
+        cancelButtonText: '取消',
+        confirmButtonText: '确定',
+        type: 'warning',
+        distinguishCancelAndClose: true,
+        dangerouslyUseHTMLString: true
+    }).then(() => {
+        delYpClassByCode(row.code).then((res) => {
+            ElMessage({
+                type: "success",
+                message: res.cg,
+                duration: 2500,
+                showClose: true,
+            });
+            queryYpClass()
+        })
+    }).catch((action) => {
+        if (action === 'cancel') {
+            queryYpClass()
+        }
+    })
+}
+
+const currentEditCode = ref('')
+
+const tableEdit = (row) => {
+    currentEditCode.value = row.code
+}
+
+
+
+
+</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>

+ 177 - 0
src/views/logisticsMaterials/logisticsBasicData/projectInformation/info.vue

@@ -0,0 +1,177 @@
+<template>
+  <div class="container">
+    <el-form ref="formRef" :model="form" class="form" label-width="127px" size="default">
+      <el-row gutter="20">
+        <el-col :span="8">
+          <el-form-item label="服务库房" prop="name">
+            <el-input v-model="form.name" disabled></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="8">
+          <el-form-item label="请领科室" prop="name">
+            <el-select v-model="form.type" placeholder="请选择请领科室">
+              <el-option label="请领科室" value=""></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-col :span="8">
+          <el-form-item label="项目名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入项目名称">
+              <template #prefix>
+                <el-icon class="el-input__icon" @click="handleSearch">
+                  <search />
+                </el-icon>
+              </template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+
+    <el-divider />
+    <div class="title-area">
+      采购明细
+    </div>
+    <el-table :data="detailTableData" style="width: 100%" height="500" size="default">
+      <el-table-column fixed="left" label="操作" width="80">
+        <template #default>
+          <el-button type="danger" size="small" @click="handleClick">
+            删 除
+          </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="name" label="项目编码" />
+      <el-table-column prop="state" label="项目名称" />
+      <el-table-column prop="city" label="规格" />
+      <el-table-column prop="city" label="单位" />
+      <el-table-column prop="city" label="请领数量">
+        <template #default="scope">
+          <el-input v-model="scope.row.city" type="number" />
+        </template>
+      </el-table-column>
+    </el-table>
+    <div class="confirm-area flex-center-row" style="margin-top: 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="70%"
+    destroy-on-close>
+    <el-table :data="itemTableData" style="width: 100%" height="450">
+      <el-table-column prop="date" label="项目编码" />
+      <el-table-column prop="name" label="项目名称" />
+      <el-table-column prop="address" label="规格" />
+      <el-table-column prop="address" label="单位" />
+    </el-table>
+  </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'
+
+const props = defineProps({
+  //子组件接收父组件传递过来的值
+  currentEditCode: String,
+})
+//使用父组件传递过来的值
+const { currentEditCode } = toRefs(props)
+
+onMounted(() => {
+  nextTick(() => {
+
+  })
+})
+
+let form = ref({
+  code: ""
+})
+
+let showDialog = ref(false)
+
+let itemTableData = ref([
+  {
+    date: '2016-05-03',
+    name: 'Tom',
+    address: 'No. 189, Grove St, Los Angeles',
+  },
+  {
+    date: '2016-05-02',
+    name: 'Tom',
+    address: 'No. 189, Grove St, Los Angeles',
+  },
+  {
+    date: '2016-05-04',
+    name: 'Tom',
+    address: 'No. 189, Grove St, Los Angeles',
+  },
+])
+
+let detailTableData = ref([
+  {
+    date: '2016-05-03',
+    name: 'Tom',
+    address: 'No. 189, Grove St, Los Angeles',
+  },
+  {
+    date: '2016-05-02',
+    name: 'Tom',
+    address: 'No. 189, Grove St, Los Angeles',
+  },
+  {
+    date: '2016-05-04',
+    name: 'Tom',
+    address: 'No. 189, Grove St, Los Angeles',
+  },
+])
+
+
+
+const handleSearch = () => {
+  console.log(form.value)
+  showDialog.value = true
+}
+
+</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;
+}
+</style>