YangJian0701 1 year ago
parent
commit
8e24d51433

+ 73 - 3
src/api/module/essentialinfo.ts

@@ -1,6 +1,12 @@
 
 import $http from '@/utils/index'
 
+
+/**
+ * 总归类
+ */
+
+export const basicData = (params: any) => $http.post('/medicine/basic-data-stat', params)
 /**
  * 品种
  * @param params 
@@ -16,10 +22,74 @@ export const productedit = (params: any) => $http.post('/product/edit', params)
 export const productadd = (params: any) => $http.post('/product/add', params)
 
 
-
+/**
+ * 药品信息管理
+ * @param params 
+ * @returns 
+ */
 // 药品信息管理-列表
 export const medicinelist = (params: any) => $http.post('/medicine-template/list', params)
 // 药品信息管理-添加
 export const medicineAdd = (params: any) => $http.post('/medicine-template/add', params)
-// 药品信息管理-表头
-export const medicinecolumns = (params: any) => $http.post('/medicine-template/columns', params)
+// 药品信息管理-编辑
+export const medicineedit = (params: any) => $http.post('/medicine-template/edit', params)
+// 药品信息管理-删除
+export const medicinedelete = (params: any) => $http.post('/medicine-template/delete', params)
+
+/**
+ * 规格
+ * @param params 
+ * @returns 
+ */
+// 规格-列表
+export const specList = (params: any) => $http.post('/spec/list', params)
+// 规格-添加
+export const specAdd = (params: any) => $http.post('/spec/add', params)
+// 规格-编辑
+export const specEdit = (params: any) => $http.post('/spec/edit', params)
+// 规格-删除
+export const specDelete = (params: any) => $http.post('/spec/delete', params)
+
+
+/**
+ * 剂型
+ * @param params 
+ * @returns 
+ */
+// 剂型-列表
+export const dosageList = (params: any) => $http.post('/dosage-form/list', params)
+// 剂型-添加
+export const dosageAdd = (params: any) => $http.post('/dosage-form/add', params)
+// 剂型-编辑
+export const dosageEdit = (params: any) => $http.post('/dosage-form/edit', params)
+// 剂型-删除
+export const dosageDelete = (params: any) => $http.post('/dosage-form/delete', params)
+
+/**
+ * 单位
+ * @param params 
+ * @returns 
+ */
+// 单位-列表
+export const unitList = (params: any) => $http.post('/unit/list', params)
+// 单位-添加
+export const unitAdd = (params: any) => $http.post('/unit/add', params)
+// 单位-编辑
+export const unitEdit = (params: any) => $http.post('/unit/edit', params)
+// 单位-删除
+export const unitDelete = (params: any) => $http.post('/unit/delete', params)
+
+
+/**
+ * 生产企业
+ * @param params 
+ * @returns 
+ */
+// 生产企业-列表
+export const enterpriseList = (params: any) => $http.post('/enterprise/list', params)
+// 生产企业-添加
+export const enterpriseAdd = (params: any) => $http.post('/enterprise/add', params)
+// 生产企业-编辑
+export const enterpriseEdit = (params: any) => $http.post('/enterprise/edit', params)
+// 生产企业-删除
+export const enterpriseDelete = (params: any) => $http.post('/enterprise/delete', params)

+ 101 - 105
src/components/table.vue

@@ -1,67 +1,67 @@
 <!--  -->
 <template>
-    <div class="y-tabs">
-        <el-table v-loading="loading" :data="tableData" @row-click="props.rowClick"
-            @selection-change="props.selectionChange" :row-key="props.getRowKey"
-            :border="props.border"
-            :row-style="tableRowClassName" table-layout="auto">
-           <!-- 默认插槽 -->
-      <slot></slot>
-      <template v-for="item in tableColumns" :key="item">
-        <!-- selection || index -->
-        <el-table-column
-          v-bind="item"
-          :align="item.align ?? 'center'"
-          :reserve-selection="item.type == 'selection'"
-          v-if="item.type == 'selection' || item.type == 'index'"
-          :show-overflow-tooltip="true"
-        ></el-table-column>
-        <!-- expand 支持 tsx 语法 && 作用域插槽 (tsx > slot) -->
-        <el-table-column v-bind="item" :align="item.align ?? 'center'" v-if="item.type === 'expand'" v-slot="scope" :show-overflow-tooltip="true">
-          <component :is="item.render" :row="scope.row" v-if="item.render"> </component>
-          <slot :name="item.type" :row="scope.row" v-else></slot>
-        </el-table-column>
-        <!-- 普通渲染 -->
-        <el-table-column
-          v-bind="item"
-          :align="item.align ?? 'center'"
-          v-if="!item.type && item.prop && item.name !== item.prop"
-          v-slot="scope" :show-overflow-tooltip="true"
-        >
-          <div v-if="item.prop=='T_wait_audit'" style="color: red;">
-            {{ scope.row[item.prop]==true?'待审核':'' }}
-          </div>
-          <el-tooltip v-if="item.ellipsis" effect="dark" :content="scope.row[item.prop]" placement="bottom">
-            {{ scope.row[item.prop] }}
-          </el-tooltip>
-          <slot v-if="item.fixed" :name="item.fixed" :row="scope.row"></slot>
-        </el-table-column>
-        <!-- 自定义slot -->
-        <el-table-column
-          v-bind="item"
-          :align="item.align ?? 'center'"
-          v-if="!item.type && item.prop && item.name === item.prop"
-          v-slot="scope" :show-overflow-tooltip="true"
-        >
-          <slot :name="item.prop" :row="scope.row"></slot>
-        </el-table-column>
-      </template>
-      <!-- 插入表格最后一行之后的插槽 -->
-      <template #append>
-        <slot name="append"> </slot>
-      </template>
-      <!-- 表格无数据情况 -->
-      <template #empty>
-        <el-empty></el-empty>
-      </template>
-        </el-table>
-        <!-- 分页组件 -->
-        <div style="margin-top: 20px;">
-            <el-pagination v-model:current-page="pageable.pageNum" v-model:page-size="pageable.pageSize"
-         :layout="props.layout" :total="pageable.total"
-         @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+  <div class="y-tabs">
+      <el-table v-loading="loading" :data="tableData" @row-click="props.rowClick"
+          @selection-change="props.selectionChange" :row-key="props.getRowKey"
+          :border="props.border"
+          :row-style="tableRowClassName" table-layout="auto">
+         <!-- 默认插槽 -->
+    <slot></slot>
+    <template v-for="item in tableColumns" :key="item">
+      <!-- selection || index -->
+      <el-table-column
+        v-bind="item"
+        :align="item.align ?? 'center'"
+        :reserve-selection="item.type == 'selection'"
+        v-if="item.type == 'selection' || item.type == 'index'"
+        :show-overflow-tooltip="true"
+      ></el-table-column>
+      <!-- expand 支持 tsx 语法 && 作用域插槽 (tsx > slot) -->
+      <el-table-column v-bind="item" :align="item.align ?? 'center'" v-if="item.type === 'expand'" v-slot="scope" :show-overflow-tooltip="true">
+        <component :is="item.render" :row="scope.row" v-if="item.render"> </component>
+        <slot :name="item.type" :row="scope.row" v-else></slot>
+      </el-table-column>
+      <!-- 普通渲染 -->
+      <el-table-column
+        v-bind="item"
+        :align="item.align ?? 'center'"
+        v-if="!item.type && item.prop && item.name !== item.prop"
+        v-slot="scope" :show-overflow-tooltip="true"
+      >
+        <div v-if="item.prop=='T_wait_audit'" style="color: red;">
+          {{ scope.row[item.prop]==true?'待审核':'' }}
         </div>
-    </div>
+        <el-tooltip v-if="item.ellipsis" effect="dark" :content="scope.row[item.prop]" placement="bottom">
+          {{ scope.row[item.prop] }}
+        </el-tooltip>
+        <slot v-if="item.fixed" :name="item.fixed" :row="scope.row"></slot>
+      </el-table-column>
+      <!-- 自定义slot -->
+      <el-table-column
+        v-bind="item"
+        :align="item.align ?? 'center'"
+        v-if="!item.type && item.prop && item.name === item.prop"
+        v-slot="scope" :show-overflow-tooltip="true"
+      >
+        <slot :name="item.prop" :row="scope.row"></slot>
+      </el-table-column>
+    </template>
+    <!-- 插入表格最后一行之后的插槽 -->
+    <template #append>
+      <slot name="append"> </slot>
+    </template>
+    <!-- 表格无数据情况 -->
+    <template #empty>
+      <el-empty></el-empty>
+    </template>
+      </el-table>
+      <!-- 分页组件 -->
+      <div style="margin-top: 20px;">
+          <el-pagination v-model:current-page="pageable.pageNum" v-model:page-size="pageable.pageSize"
+       :layout="props.layout" :total="pageable.total"
+       @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+      </div>
+  </div>
 </template>
 
 <script setup lang="ts">
@@ -70,46 +70,42 @@ import { useTable } from '@/hooks/useTable'
 import { TableProps } from 'element-plus'
 import { ColumnProps } from './interface/index'
 interface ProTableProps extends Partial<Omit<TableProps<any>, 'data'>> {
-    columns: ColumnProps[] // 列配置项
-    requestApi: (params: any) => Promise<any> // 请求表格数据的api ==> 必传
-    dataCallback?: (data: any) => any // 返回数据的回调函数,可以对数据进行处理 ==> 非必传
-    title?: string // 表格标题,目前只在打印的时候用到 ==> 非必传
-    pagination?: boolean // 是否需要分页组件 ==> 非必传(默认为true)
-    layout?: string
-    initParam?: any // 初始化请求参数 ==> 非必传(默认为{})
-    border?: boolean // 是否带有纵向边框 ==> 非必传(默认为true)
-    toolButton?: boolean // 是否显示表格功能按钮 ==> 非必传(默认为true)
-    selectId?: string // 当表格数据多选时,所指定的 id ==> 非必传(默认为 id)
-    displayHeader?: boolean // 是否隐藏头部
-    rowClick?: (row: any, column: any, event: any) => void // 点击行
-    selectionChange?: (row: any) => void // 选择函数
-    getRowKey?: ((row: any) => string) | string // 用于优化select勾选框
-    tableRowClassName?: (data: any) => CSSProperties
+  columns: ColumnProps[] // 列配置项
+  requestApi: (params: any) => Promise<any> // 请求表格数据的api ==> 必传
+  dataCallback?: (data: any) => any // 返回数据的回调函数,可以对数据进行处理 ==> 非必传
+  title?: string // 表格标题,目前只在打印的时候用到 ==> 非必传
+  pagination?: boolean // 是否需要分页组件 ==> 非必传(默认为true)
+  layout?: string
+  initParam?: any // 初始化请求参数 ==> 非必传(默认为{})
+  border?: boolean // 是否带有纵向边框 ==> 非必传(默认为true)
+  toolButton?: boolean // 是否显示表格功能按钮 ==> 非必传(默认为true)
+  selectId?: string // 当表格数据多选时,所指定的 id ==> 非必传(默认为 id)
+  displayHeader?: boolean // 是否隐藏头部
+  rowClick?: (row: any, column: any, event: any) => void // 点击行
+  selectionChange?: (row: any) => void // 选择函数
+  getRowKey?: ((row: any) => string) | string // 用于优化select勾选框
+  tableRowClassName?: (data: any) => CSSProperties
 }
 // 接受父组件参数,配置默认值
 const props = withDefaults(defineProps<ProTableProps>(), {
-    columns: () => [],//渲染表格
-    pagination: true,
-    // layout: 'total, prev, pager, next, jumper',
-    layout: ' prev, pager, next',
-    initParam: {},//请求参数
-    border: false,
-    toolButton: true,
-    selectId: 'id',
-    searchCol: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 })
+  columns: () => [],//渲染表格
+  pagination: true,
+  // layout: 'total, prev, pager, next, jumper',
+  layout: ' prev, pager, next',
+  initParam: {},//请求参数
+  border: false,
+  toolButton: true,
+  selectId: 'id',
+  searchCol: () => ({ xs: 1, sm: 2, md: 2, lg: 3, xl: 4 })
 })
 
-watch(() =>props.columns , (toPath:any) => {
-    console.log('表头',toPath)
-    props.selectionChange
-}, {immediate:true,deep: true })
 
 // 表格操作 Hooks
 const { tableData, getTableList, pageable, loading, handleSizeChange, handleCurrentChange } = useTable(
-    props.requestApi,
-    props.initParam,
-    props.pagination,
-    props.dataCallback
+  props.requestApi,
+  props.initParam,
+  props.pagination,
+  props.dataCallback
 )
 
 getTableList()
@@ -118,24 +114,24 @@ const tableColumns = ref<ColumnProps[]>(props.columns)
 
 //暴露方法
 defineExpose({
-  getTableList,tableColumns,props
+getTableList,tableColumns,props
 })
 
 </script>
 <style lang="scss">
 .y-tabs {
-    background: var(--y-card-background);
-    border-radius: var(--y-radius);
-    margin-top: var(--y-margin);
+  background: var(--y-card-background);
+  border-radius: var(--y-radius);
+  margin-top: var(--y-margin);
 
-    &-headers {
-        border-bottom: var(--y-border);
-        box-sizing: border-box;
-        padding: var(--y-padding);
-    }
+  &-headers {
+      border-bottom: var(--y-border);
+      box-sizing: border-box;
+      padding: var(--y-padding);
+  }
 
-    &-item {
-        padding: var(--y-padding);
-    }
+  &-item {
+      padding: var(--y-padding);
+  }
 }
 </style>

+ 30 - 4
src/plugins/newData.ts

@@ -1,6 +1,30 @@
+import { 
+    specAdd,//规格
+    dosageAdd,//剂型
+    unitAdd,//单位
+    productadd,//疫苗名称
+    enterpriseAdd,//生产企业
 
-export function newDataFun(data: any) {
-    console.log('发送数据', data)
+} from "@/api";
+export function newDataFun(value:any,command:any) {
+    console.log('发送数据', value,command)
+    switch (command) {
+        case 'b':
+            return specAdd({name:value})
+            break;
+        case 'c':
+            return dosageAdd({name:value})
+            break;
+        case 'd':
+            return unitAdd({name:value})
+            break;
+        case 'e':
+            return productadd({name:value})
+            break;
+        default:
+            return enterpriseAdd({name:value})
+            break;
+    }
 }
 /**
  * 
@@ -22,10 +46,12 @@ export function showDialog(key: any) {
             return '单位'
             break;
         case 'e':
-            return '品种'
+            return '疫苗名称'
             break;
         default:
             return '生产企业'
             break;
     }
-}
+}
+
+

+ 16 - 0
src/plugins/typeData.ts

@@ -0,0 +1,16 @@
+const typeList = [
+    { type: 1, name: '品名' },
+    { type: 2, name: '生产企业' },
+    { type: 3, name: '规格' },
+    { type: 4, name: '剂型' },
+    { type: 5, name: '单位' },
+    { type: 6, name: '文本' },
+    { type: 7, name: '数值(整数)' },
+    { type: 8, name: '数值 (小数)' },
+    { type: 9, name: '日期' },
+    { type: 10, name: '时间' },
+]
+export function typeListFun(type:any){
+    const b = typeList.find(item => item.type ==type)
+    return b?.name
+}

+ 53 - 15
src/views/essentialinfo/dosageForm.vue

@@ -1,10 +1,10 @@
 <!-- 剂型 -->
 <template>
     <div class="">
-        <tables ref="TableRef" :requestApi="salesList" :columns="columns" :initParam="data.initParam" :border="true">
+        <tables ref="TableRef" :requestApi="dosageList" :columns="columns" :initParam="data.initParam" :border="true">
             <template #right="{ row }">
-                <el-button link type="primary" size="small">编辑</el-button>
-                <el-button link type="danger" size="small">删除</el-button>
+                <el-button link type="primary" size="small" @click="showEdit(row)">编辑</el-button>
+                <el-button link type="danger" size="small" @click="deleteFy(row)">删除</el-button>
             </template>
         </tables>
     </div>
@@ -12,26 +12,64 @@
 
 <script setup lang="ts">
 import tables from "@/components/table.vue";
-import { salesList} from "@/api";
-import {reactive } from 'vue'
+import { dosageList,dosageEdit,dosageDelete } from "@/api";
+import { reactive,ref } from 'vue'
+import { ElMessage, ElMessageBox} from 'element-plus'
+const TableRef = ref()
 // 渲染表格
 const columns: any = [
-    { prop: 'date', label: '编号',width:120},
-    { prop: 'receiving_unit', label: '名称',width:300},
-    { prop: 'operation', label: '操作', fixed: 'right',align:'left','min-width':200  }
+    { type: 'index', label: '编号', width: 80 },
+    { prop: 'name', label: '名称', width: 300 },
+    { prop: 'operation', label: '操作', fixed: 'right', align: 'left', 'min-width': 200 }
 ]
-
+const emit:any = defineEmits(['setTable','setBasic'])
 //请求参数
-const data:any = reactive({
+const data: any = reactive({
     initParam: {
-        "endDate": "",
-        "startDate": "",
-        "productId":null,
-        "receivingUnit": ""
+        "name": "",
     }
 })
+/**
+ * 删除
+ * @param data 列数据
+ */
+ const deleteFy = (data: any) => {
+    ElMessageBox.confirm('该字段所有已有数据会一同被删除,且无法恢复', '是否确认删除', {
+        confirmButtonText: '立即删除',
+        cancelButtonText: '取消',
+        type: 'error',
+        center: true,
+    }).then(async() => {
+        const reslut:any = await dosageDelete({id:data.id})
+        if(reslut.code==200)ElMessage.success('删除成功');TableRef.value?.getTableList();emit('setBasic', '')
+    }).catch(() => {
+        ElMessage.info('已取消删除')
+    })
+}
+//编辑
+const showEdit = async (row: any) => {
+    console.log('编辑',row)
+    ElMessageBox.prompt(`编辑规格,请填写正确格式`, '编辑', {
+        confirmButtonText: 'OK',
+        cancelButtonText: 'Cancel',
+        inputValue:row.name,
+        inputPattern: /\S/,
+        inputErrorMessage: `名称格式不能为空`,
+    }).then(async ({ value }) => {
+        const reslut: any = await dosageEdit({id:row.id,name:value})
+        if (reslut.code == 200 && reslut.msg == '更新成功') {
+            ElMessage.success(reslut.msg)
+            emit('setTable', '')
+        }
+    }).catch(() => {
+        ElMessage.info('已取消编辑')
+    })
+}
+//暴露方法
+defineExpose({
+    TableRef
+})
 </script>
 <style lang="scss">
 /* @import url(); 引入css类 */
-
 </style>

+ 134 - 18
src/views/essentialinfo/drugInformation.vue

@@ -1,40 +1,156 @@
 <!-- 药品信息 -->
 <script setup lang="ts">
 import tables from "@/components/table.vue";
-import { medicinelist,medicinecolumns } from "@/api";
-import { reactive,onMounted,nextTick,ref} from 'vue'
+import { medicinelist, medicineedit, medicinedelete } from "@/api";
+import { reactive, ref, nextTick } from 'vue'
+import { typeListFun } from "@/plugins/typeData";
+import { ElMessage, ElMessageBox, FormRules, FormInstance } from 'element-plus'
+import { number } from "echarts";
 const TableRef = ref()
-onMounted(()=>{
-    medicinecolumnsApi()
+const dialogFormVisible = ref(false)
+const ruleFormRef = ref<FormInstance>()
+const formLabelWidth = '80px'
+
+const rules = reactive<FormRules<RuleForm>>({
+    name: [{ required: true, message: '请输入标签名称', trigger: 'blur' }],
 })
-// 渲染表格
-let columns: any = [
-    { prop: 'operation', label: '操作', fixed: 'right','min-width':200 }
-]
+const emit = defineEmits<{ (e: 'setBasic', myvalue: string): void }>()
+interface RuleForm {
+    id: number,
+    name: string
+    width: string
+    sort: number
+    show: number
+    text: string
+}
 
+const ruleForm: any = reactive<RuleForm>({
+    "id": 0,
+    "text": "",
+    "width": '',
+    "sort": 0,
+    "show": 0,
+    "name": ""
+})
+//编辑
+const showEdit = async (row: any) => {
+    Object.keys(ruleForm).forEach((key: any) => {
+        ruleForm[key] = row[key]
+    })
+    dialogFormVisible.value = true
+}
 /**
- * 获取表头
+ * 提交dio
+ * @param formEl 
  */
-const medicinecolumnsApi = async ()=>{
-    columns = [{ prop: 'operation', label: '操作', fixed: 'right','min-width':200 }]
-    const reslut:any = await medicinecolumns({})
-    columns = [...reslut.data.list,...columns]
-    TableRef.value.tableColumns = columns
-    TableRef.value?.getTableList()
+const submitForm = async (formEl: FormInstance | undefined) => {
+    if (!formEl) return
+    await formEl.validate(async (valid, fields) => {
+        if (valid) {
+            const reslut: any = await medicineedit(ruleForm)
+            if (reslut.code == 200 && reslut.msg == "更新成功") {
+                dialogFormVisible.value = false
+                nextTick(() => {
+                    ElMessage.success('编辑成功')
+                    TableRef.value?.getTableList()
+                })
+            }
+            console.log('添加情况', reslut)
+        } else {
+            console.log('error submit!', fields)
+        }
+    })
 }
+// 渲染表格
+let columns: any = [
+    { type: 'index', label: '编号', width: 80, },
+    { prop: 'type', label: '数据类型', name: 'type' },
+    { prop: 'name', label: '标签名称' },
+    { prop: 'width', label: '列宽(px)' },
+    { prop: 'sort', label: '排序' },
+    { prop: 'show', label: '表格展示', name: 'show' },
+    { prop: 'state', label: '类型', name: 'state' },
+    { prop: 'operation', label: '操作', fixed: 'right', 'min-width': 200 }
+]
 //请求参数
 const data: any = reactive({
     initParam: {}
 })
+/**
+ * 删除
+ * @param data 列数据
+ */
+const deleteFy = (data: any) => {
+    ElMessageBox.confirm('该字段所有已有数据会一同被删除,且无法恢复', '是否确认删除', {
+        confirmButtonText: '立即删除',
+        cancelButtonText: '取消',
+        type: 'error',
+        center: true,
+    }).then(async () => {
+        const reslut: any = await medicinedelete({ id: data.id })
+        if (reslut.code == 200) ElMessage.success('删除成功'); TableRef.value?.getTableList(); emit('setBasic', '')
+    }).catch(() => {
+        ElMessage.info('已取消删除')
+    })
+}
+
+//暴露方法
+defineExpose({
+    TableRef
+})
 </script>
 <template>
     <div class="">
-        <tables ref="TableRef" :requestApi="medicinelist" :columns="columns" :initParam="data.initParam" :border="true">
+        <tables ref="TableRef" :requestApi="medicinelist" :columns="columns" :initParam="data.initParam">
             <template #right="{ row }">
-                <el-button link type="primary" size="small">编辑</el-button>
-                <el-button link type="danger" size="small">删除</el-button>
+                <el-button link type="primary" size="small" @click="showEdit(row)">编辑</el-button>
+                <el-button link type="danger" size="small" :disabled="row.state != 1 ? false : true"
+                    @click="deleteFy(row)">删除</el-button>
+            </template>
+            <template #type="{ row }">
+                {{ typeListFun(row.type) }}
+            </template>
+            <template #show="{ row }">
+                <el-tag class="ml-2" :type="row.show === 1 ? '' : 'danger'" effect="dark">{{ row.show === 1 ? '显示' : '隐藏'
+                }}</el-tag>
+            </template>
+            <template #state="{ row }">
+                <el-tag style="width: 100px;" :type="row.state === 1 ? '' : 'danger'" effect="dark">{{ row.state === 1 ?
+                    '系统初始化' : '用户添加' }}</el-tag>
             </template>
         </tables>
+        <el-dialog v-model="dialogFormVisible" title="编辑药品信息管理" draggable :append-to-body="true">
+            <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules">
+                <el-form-item label="标签名称" :label-width="formLabelWidth" prop="name">
+                    <el-input v-model="ruleForm.name" autocomplete="off" placeholder="请输入标签名称" />
+                </el-form-item>
+                <el-form-item label="列宽" :label-width="formLabelWidth">
+                    <el-input v-model.number="ruleForm.width" autocomplete="off" placeholder="请输入列宽">
+                        <template #append>px</template>
+                    </el-input>
+                </el-form-item>
+                <el-form-item label="排序" :label-width="formLabelWidth">
+                    <el-input v-model.number="ruleForm.sort" autocomplete="off" placeholder="请输入排序" />
+                </el-form-item>
+                <el-form-item label="表格展示" :label-width="formLabelWidth">
+                    <el-radio-group v-model="ruleForm.show">
+                        <el-radio :label="1">显示</el-radio>
+                        <el-radio :label="2">隐藏</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item label="描述" :label-width="formLabelWidth" placeholder="请输入描述">
+                    <el-input v-model="ruleForm.text" type="textarea" />
+                </el-form-item>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="dialogFormVisible = false">Cancel</el-button>
+                    <el-button type="primary" @click="submitForm(ruleFormRef)">
+                        Confirm
+                    </el-button>
+                </span>
+            </template>
+        </el-dialog>
     </div>
 </template>
 

+ 65 - 17
src/views/essentialinfo/index.vue

@@ -3,52 +3,53 @@
         <div class="essentialinfo-main">
             <bgPure>
                 <template #bg>
-                    <statistics :imgUrl="require('@/assets/img/1700227167756.jpg')" titles="规格" subhea="2154">
+                    <statistics :imgUrl="require('@/assets/img/1700227167756.jpg')" titles="规格" :subhea="data.basicObj.specCount.toString()">
                     </statistics>
                 </template>
             </bgPure>
             <bgPure #bg>
-                <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="剂型" subhea="87546"></statistics>
+                <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="剂型" :subhea="data.basicObj.dosageFormCount.toString()"></statistics>
             </bgPure>
             <bgPure #bg>
-                <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="单位" subhea="931"></statistics>
+                <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="单位" :subhea="data.basicObj.unitCount.toString()"></statistics>
             </bgPure>
             <bgPure>
                 <template #bg>
-                    <statistics :imgUrl="require('@/assets/img/1700227167756.jpg')" titles="疫苗名称" subhea="2154">
+                    <statistics :imgUrl="require('@/assets/img/1700227167756.jpg')" titles="疫苗名称" :subhea="data.basicObj.productCount.toString()">
                     </statistics>
                 </template>
             </bgPure>
             <bgPure #bg>
-                <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="生产企业" subhea="87546"></statistics>
+                <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="生产企业" :subhea="data.basicObj.enterpriseCount.toString()"></statistics>
             </bgPure>
             <bgPure #bg>
-                <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="药品信息管理" subhea="931"></statistics>
+                <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="药品信息管理" :subhea="data.basicObj.medicineTemplateCount.toString()"></statistics>
             </bgPure>
         </div>
         <bg istitle="基本信息">
             <template #btn>
-                <newData/>
+                <newData @setTable="setTableFun" />
             </template>
             <template #bg>
                 <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
                     <el-tab-pane label="药品信息管理" name="first">
-                        <drugInformation v-if="activeName=='first'"></drugInformation>
+                        <drugInformation ref="drugInfo" @setBasic="basicDataApi()" v-if="activeName == 'first'"></drugInformation>
                     </el-tab-pane>
                     <el-tab-pane label="规格" name="fourth2">
-                        <specification v-if="activeName=='fourth2'"></specification>
+                        <specification ref="specifica" @setTable="setTableFun" @setBasic="basicDataApi()" v-if="activeName == 'fourth2'">
+                        </specification>
                     </el-tab-pane>
                     <el-tab-pane label="剂型" name="second">
-                        <dosageForm v-if="activeName=='second'"></dosageForm>
+                        <dosageForm ref="dosage" @setTable="setTableFun" @setBasic="basicDataApi()" v-if="activeName == 'second'"></dosageForm>
                     </el-tab-pane>
                     <el-tab-pane label="单位" name="third">
-                        <unit v-if="activeName=='third'"></unit>
+                        <unit ref="units" @setTable="setTableFun" @setBasic="basicDataApi()" v-if="activeName == 'third'"></unit>
                     </el-tab-pane>
-                    <el-tab-pane label="品种" name="fourth">
-                        <vaccineName v-if="activeName=='fourth'"></vaccineName>
+                    <el-tab-pane label="疫苗名称" name="fourth">
+                        <vaccineName ref="vaccine" @setTable="setTableFun" @setBasic="basicDataApi()" v-if="activeName == 'fourth'"></vaccineName>
                     </el-tab-pane>
                     <el-tab-pane label="生产企业" name="third1">
-                        <productionEnterprise v-if="activeName=='third1'"></productionEnterprise>
+                        <productionEnterprise @setTable="setTableFun" @setBasic="basicDataApi()" ref="Enterp" v-if="activeName == 'third1'"></productionEnterprise>
                     </el-tab-pane>
                 </el-tabs>
             </template>
@@ -64,14 +65,37 @@ import unit from "./unit.vue";//单位
 import vaccineName from "./vaccineName.vue";//品种
 import productionEnterprise from "./productionEnterprise.vue";//生产企业
 
+import { basicData } from "@/api";
 import newData from "./newData.vue";//药品信息管理
 
 
 import bgPure from '@/components/bgPure.vue'
 import statistics from '@/components/statistics.vue'
-import { ref } from 'vue'
+import { ref, reactive } from 'vue'
 
 import type { TabsPaneContext } from 'element-plus'
+const data: any = reactive({
+    basicObj: {
+        dosageFormCount: 0,
+        enterpriseCount: 0,
+        medicineTemplateCount:0,
+        productCount: 0,
+        specCount: 0,
+        unitCount: 0,
+    }
+})
+//所有归类
+const basicDataApi = async () => {
+    const reslut:any = await basicData({})
+    if (reslut.code == 200 && reslut.msg == '查询成功')data.basicObj = reslut.data
+}
+basicDataApi()
+const drugInfo = ref()//药品信息管理
+const specifica = ref()
+const dosage = ref()
+const units = ref()
+const vaccine = ref()
+const Enterp = ref()
 
 const activeName = ref('first')
 
@@ -79,16 +103,40 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
     console.log(tab, event)
 }
 
-
+//函数
+const setTableFun = async () => {
+    basicDataApi()
+    switch (activeName.value) {
+        case 'first':
+            drugInfo.value.TableRef.getTableList()
+            break;
+        case 'fourth2':
+            specifica.value.TableRef.getTableList()
+            break;
+        case 'second':
+            dosage.value.TableRef.getTableList()
+            break;
+        case 'third':
+            units.value.TableRef.getTableList()
+            break;
+        case 'fourth':
+            vaccine.value.TableRef.getTableList()
+            break;
+        default:
+            Enterp.value.TableRef.getTableList()
+            break;
+    }
+}
 
 </script>
 <style lang="scss">
 .essentialinfo {
     overflow-y: auto;
+
     &-main {
         display: grid;
         grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
-        grid-gap:0 20px;
+        grid-gap: 0 20px;
     }
 }
 </style>

+ 46 - 34
src/views/essentialinfo/newData.vue

@@ -10,39 +10,41 @@
                     <el-dropdown-item :icon="CircleCheck" command="b">规格</el-dropdown-item>
                     <el-dropdown-item :icon="CircleCheck" command="c">剂型</el-dropdown-item>
                     <el-dropdown-item :icon="CircleCheck" command="d">单位</el-dropdown-item>
-                    <el-dropdown-item :icon="CircleCheck" command="e">品种</el-dropdown-item>
+                    <el-dropdown-item :icon="CircleCheck" command="e">疫苗名称</el-dropdown-item>
                     <el-dropdown-item :icon="CircleCheck" command="f">生产企业</el-dropdown-item>
                 </el-dropdown-menu>
             </template>
         </el-dropdown>
-
         <el-dialog v-model="dialogFormVisible" title="新增药品信息管理" draggable :append-to-body="true">
             <el-form ref="ruleFormRef" :model="ruleForm" :rules="rules">
                 <el-form-item label="数据类型" :label-width="formLabelWidth" prop="type">
                     <el-select v-model="ruleForm.type" placeholder="请选择数据类型">
-                        <el-option label="Zone No.1" value="shanghai" />
-                        <el-option label="Zone No.2" value="beijing" />
+                        <el-option label="文本" :value="6" />
+                        <el-option label="数值(整数)" :value="7" />
+                        <el-option label="数值 (小数)" :value="8" />
+                        <el-option label="日期" :value="9" />
+                        <el-option label="时间" :value="10" />
                     </el-select>
                 </el-form-item>
-                <el-form-item label="标签名称" :label-width="formLabelWidth" prop="text">
-                    <el-input v-model="ruleForm.text" autocomplete="off" placeholder="请输入标签名称" />
+                <el-form-item label="标签名称" :label-width="formLabelWidth" prop="name">
+                    <el-input v-model="ruleForm.name" autocomplete="off" placeholder="请输入标签名称" />
                 </el-form-item>
                 <el-form-item label="列宽" :label-width="formLabelWidth">
-                    <el-input v-model="ruleForm.width" autocomplete="off" placeholder="请输入列宽" >
+                    <el-input v-model.number="ruleForm.width" autocomplete="off" placeholder="请输入列宽">
                         <template #append>px</template>
                     </el-input>
                 </el-form-item>
                 <el-form-item label="排序" :label-width="formLabelWidth">
-                    <el-input v-model="ruleForm.sort" autocomplete="off" placeholder="请输入排序" />
+                    <el-input v-model.number="ruleForm.sort" autocomplete="off" placeholder="请输入排序" />
                 </el-form-item>
                 <el-form-item label="表格展示" :label-width="formLabelWidth">
                     <el-radio-group v-model="ruleForm.show">
-                        <el-radio label="1">显示</el-radio>
-                        <el-radio label="2">隐藏</el-radio>
+                        <el-radio :label="1">显示</el-radio>
+                        <el-radio :label="2">隐藏</el-radio>
                     </el-radio-group>
                 </el-form-item>
                 <el-form-item label="描述" :label-width="formLabelWidth" placeholder="请输入描述">
-                    <el-input v-model="ruleForm.name" type="textarea" />
+                    <el-input v-model="ruleForm.text" type="textarea" />
                 </el-form-item>
             </el-form>
             <template #footer>
@@ -60,19 +62,20 @@
 <script setup lang="ts">
 import { CircleCheck } from '@element-plus/icons-vue'
 import { newDataFun, showDialog } from "@/plugins/newData";
-import type { FormInstance, FormRules,ElMessage, ElMessageBox } from 'element-plus'
+import { FormInstance, FormRules, ElMessage, ElMessageBox } from 'element-plus'
 import { reactive, ref } from 'vue'
-import { 
+import {
     medicineAdd,//药品信息管理添加
 } from "@/api";
 
 interface RuleForm {
-    type: string
-    text: string
-    width: string
-    sort: string
-    show: string
+    type: any
     name: string
+    width: number
+    sort: number
+    show: number
+    text: string
+
 }
 
 const ruleFormRef = ref<FormInstance>()
@@ -80,56 +83,65 @@ const dialogFormVisible = ref(false)
 const formLabelWidth = '80px'
 
 const ruleForm = reactive<RuleForm>({
-    "type": '',
+    "type": null,
+    "name": "",
+    "width": 0,
+    "sort": 0,
+    "show": 1,
     "text": "",
-    "width": '',
-    "sort": '',
-    "show": '1',
-    "name": ""
+
 })
 
 const rules = reactive<FormRules<RuleForm>>({
     type: [{ required: true, message: '请选择数据类型', trigger: 'change', }],
-    text: [{ required: true, message: '请输入标签名称', trigger: 'blur' }],
+    name: [{ required: true, message: '请输入标签名称', trigger: 'blur' }],
 })
 
 const handleCommand = (command: string | number | object) => {
     console.log('command', command)
-    if(command=='a'){
+    if (command == 'a') {
         dialogFormVisible.value = true
-    }else{
+    } else {
         otherFun(command)
     }
 }
 
+const emit = defineEmits<{ (e: 'setTable', myvalue: string): void }>()
 
 
 //函数
-const otherFun = async (command:any) => {
+const otherFun = async (command: any) => {
     ElMessageBox.prompt(`新增${showDialog(command)},请填写正确格式`, '新增', {
         confirmButtonText: 'OK',
         cancelButtonText: 'Cancel',
         inputPattern: /\S/,
         inputErrorMessage: `[${showDialog(command)}]名称格式不能为空`,
-    }).then(({ value }) => {
-        console.log('值',value)
+    }).then(async ({ value }) => {
+        const reslut: any = await newDataFun(value, command)
+        if (reslut.code == 200 && reslut.msg == '创建成功') {
+            ElMessage.success(reslut.msg)
+            emit('setTable', '')
+        }
     }).catch(() => {
-        ElMessage.info('已取消新增'+showDialog(command))
+        ElMessage.info('已取消新增' + showDialog(command))
     })
 }
 
 
-
 /**
  * 提交dio
  * @param formEl 
  */
 const submitForm = async (formEl: FormInstance | undefined) => {
     if (!formEl) return
-    await formEl.validate(async(valid, fields) => {
+    await formEl.validate(async (valid, fields) => {
         if (valid) {
-            const reslut = await medicineAdd(ruleForm)
-            console.log('添加情况',reslut)
+            const reslut: any = await medicineAdd(ruleForm)
+            if (reslut.code == 200 && reslut.msg == '创建成功') {
+                dialogFormVisible.value = false
+                ElMessage.success(reslut.msg)
+                emit('setTable', '')
+            }
         } else {
             console.log('error submit!', fields)
         }

+ 53 - 15
src/views/essentialinfo/productionEnterprise.vue

@@ -1,10 +1,10 @@
 <!-- 生产企业 -->
 <template>
     <div class="">
-        <tables ref="TableRef" :requestApi="salesList" :columns="columns" :initParam="data.initParam" :border="true">
+        <tables ref="TableRef" :requestApi="enterpriseList" :columns="columns" :initParam="data.initParam" :border="true">
             <template #right="{ row }">
-                <el-button link type="primary" size="small">编辑</el-button>
-                <el-button link type="danger" size="small">删除</el-button>
+                <el-button link type="primary" size="small" @click="showEdit(row)">编辑</el-button>
+                <el-button link type="danger" size="small" @click="deleteFy(row)">删除</el-button>
             </template>
         </tables>
     </div>
@@ -12,26 +12,64 @@
 
 <script setup lang="ts">
 import tables from "@/components/table.vue";
-import { salesList} from "@/api";
-import {reactive } from 'vue'
+import { enterpriseList,enterpriseEdit,enterpriseDelete } from "@/api";
+import { ElMessage, ElMessageBox} from 'element-plus'
+import { reactive,ref} from 'vue'
+const TableRef = ref()
 // 渲染表格
 const columns: any = [
-    { prop: 'date', label: '编号',width:120},
-    { prop: 'receiving_unit', label: '名称',width:300},
-    { prop: 'operation', label: '操作', fixed: 'right',align:'left','min-width':200  }
+    { type: 'index', label: '编号', width: 80 },
+    { prop: 'name', label: '名称', width: 300 },
+    { prop: 'operation', label: '操作', fixed: 'right', align: 'left', 'min-width': 200 }
 ]
-
+const emit:any = defineEmits(['setTable','setBasic'])
 //请求参数
-const data:any = reactive({
+const data: any = reactive({
     initParam: {
-        "endDate": "",
-        "startDate": "",
-        "productId":null,
-        "receivingUnit": ""
+        "name": "",
     }
 })
+/**
+ * 删除
+ * @param data 列数据
+ */
+ const deleteFy = (data: any) => {
+    ElMessageBox.confirm('该字段所有已有数据会一同被删除,且无法恢复', '是否确认删除', {
+        confirmButtonText: '立即删除',
+        cancelButtonText: '取消',
+        type: 'error',
+        center: true,
+    }).then(async() => {
+        const reslut:any = await enterpriseDelete({id:data.id})
+        if(reslut.code==200)ElMessage.success('删除成功');TableRef.value?.getTableList();emit('setBasic', '')
+    }).catch(() => {
+        ElMessage.info('已取消删除')
+    })
+}
+//编辑
+const showEdit = async (row: any) => {
+    console.log('编辑',row)
+    ElMessageBox.prompt(`编辑规格,请填写正确格式`, '编辑', {
+        confirmButtonText: 'OK',
+        cancelButtonText: 'Cancel',
+        inputValue:row.name,
+        inputPattern: /\S/,
+        inputErrorMessage: `名称格式不能为空`,
+    }).then(async ({ value }) => {
+        const reslut: any = await enterpriseEdit({id:row.id,name:value})
+        if (reslut.code == 200 && reslut.msg == '更新成功') {
+            ElMessage.success(reslut.msg)
+            emit('setTable', '')
+        }
+    }).catch(() => {
+        ElMessage.info('已取消编辑')
+    })
+}
+//暴露方法
+defineExpose({
+    TableRef
+})
 </script>
 <style lang="scss">
 /* @import url(); 引入css类 */
-
 </style>

+ 57 - 11
src/views/essentialinfo/specification.vue

@@ -1,10 +1,10 @@
 <!-- 规格 -->
 <template>
     <div class="">
-        <tables ref="TableRef" :requestApi="salesList" :columns="columns" :initParam="data.initParam" :border="true">
+        <tables ref="TableRef" :requestApi="specList" :columns="columns" :initParam="data.initParam" :border="true">
             <template #right="{ row }">
-                <el-button link type="primary" size="small">编辑</el-button>
-                <el-button link type="danger" size="small">删除</el-button>
+                <el-button link type="primary" size="small" @click="showEdit(row)">编辑</el-button>
+                <el-button link type="danger" size="small" @click="deleteFy(row)">删除</el-button> 
             </template>
         </tables>
     </div>
@@ -12,24 +12,70 @@
 
 <script setup lang="ts">
 import tables from "@/components/table.vue";
-import { salesList} from "@/api";
-import {reactive } from 'vue'
+import { specList,specDelete,specEdit} from "@/api";
+import { ElMessage, ElMessageBox} from 'element-plus'
+import {reactive,ref} from 'vue'
+const TableRef = ref()
 // 渲染表格
 const columns: any = [
-    { prop: 'date', label: '编号',width:120},
-    { prop: 'receiving_unit', label: '名称',width:300},
+    { type: 'index', label: '编号',width:80},
+    { prop: 'name', label: '名称',width:300},
     { prop: 'operation', label: '操作', fixed: 'right',align:'left','min-width':200  }
 ]
 
 //请求参数
 const data:any = reactive({
     initParam: {
-        "endDate": "",
-        "startDate": "",
-        "productId":null,
-        "receivingUnit": ""
+        "name": "",
     }
 })
+
+const emit:any = defineEmits(['setTable','setBasic'])
+// const emit = defineEmits<{ (e: 'setTable', myvalue: string): void }>()
+
+/**
+ * 删除
+ * @param data 列数据
+ */
+ const deleteFy = (data: any) => {
+    ElMessageBox.confirm('该字段所有已有数据会一同被删除,且无法恢复', '是否确认删除', {
+        confirmButtonText: '立即删除',
+        cancelButtonText: '取消',
+        type: 'error',
+        center: true,
+    }).then(async() => {
+        const reslut:any = await specDelete({id:data.id})
+        if(reslut.code==200)ElMessage.success('删除成功');TableRef.value?.getTableList();emit('setBasic', '')
+    }).catch(() => {
+        ElMessage.info('已取消删除')
+    })
+}
+//编辑
+const showEdit = async (row: any) => {
+    console.log('编辑',row)
+    ElMessageBox.prompt(`编辑规格,请填写正确格式`, '编辑', {
+        confirmButtonText: 'OK',
+        cancelButtonText: 'Cancel',
+        inputValue:row.name,
+        inputPattern: /\S/,
+        inputErrorMessage: `名称格式不能为空`,
+    }).then(async ({ value }) => {
+        const reslut: any = await specEdit({id:row.id,name:value})
+        if (reslut.code == 200 && reslut.msg == '更新成功') {
+            ElMessage.success(reslut.msg)
+            emit('setTable', '')
+        }
+    }).catch(() => {
+        ElMessage.info('已取消编辑')
+    })
+}
+
+
+
+//暴露方法
+defineExpose({
+    TableRef
+})
 </script>
 <style lang="scss">
 /* @import url(); 引入css类 */

+ 53 - 14
src/views/essentialinfo/unit.vue

@@ -1,10 +1,10 @@
 <!-- 单位 -->
 <template>
     <div class="">
-        <tables ref="TableRef" :requestApi="salesList" :columns="columns" :initParam="data.initParam" :border="true">
+        <tables ref="TableRef" :requestApi="unitList" :columns="columns" :initParam="data.initParam" :border="true">
             <template #right="{ row }">
-                <el-button link type="primary" size="small">编辑</el-button>
-                <el-button link type="danger" size="small">删除</el-button>
+                <el-button link type="primary" size="small" @click="showEdit(row)">编辑</el-button>
+                <el-button link type="danger" size="small" @click="deleteFy(row)">删除</el-button>
             </template>
         </tables>
     </div>
@@ -12,26 +12,65 @@
 
 <script setup lang="ts">
 import tables from "@/components/table.vue";
-import { salesList} from "@/api";
-import {reactive } from 'vue'
+import { unitList,unitEdit,unitDelete } from "@/api";
+import { reactive,ref} from 'vue'
+import { ElMessage, ElMessageBox} from 'element-plus'
+const TableRef = ref()
 // 渲染表格
 const columns: any = [
-    { prop: 'date', label: '编号',width:120},
-    { prop: 'receiving_unit', label: '名称',width:300},
-    { prop: 'operation', label: '操作', fixed: 'right',align:'left','min-width':200  }
+    { type: 'index', label: '编号', width: 80 },
+    { prop: 'name', label: '名称', width: 300 },
+    { prop: 'operation', label: '操作', fixed: 'right', align: 'left', 'min-width': 200 }
 ]
 
 //请求参数
-const data:any = reactive({
+const data: any = reactive({
     initParam: {
-        "endDate": "",
-        "startDate": "",
-        "productId":null,
-        "receivingUnit": ""
+        "name": "",
     }
 })
+const emit:any = defineEmits(['setTable','setBasic'])
+/**
+ * 删除
+ * @param data 列数据
+ */
+ const deleteFy = (data: any) => {
+    ElMessageBox.confirm('该字段所有已有数据会一同被删除,且无法恢复', '是否确认删除', {
+        confirmButtonText: '立即删除',
+        cancelButtonText: '取消',
+        type: 'error',
+        center: true,
+    }).then(async() => {
+        const reslut:any = await unitDelete({id:data.id})
+        if(reslut.code==200)ElMessage.success('删除成功');TableRef.value?.getTableList();emit('setBasic', '')
+    }).catch(() => {
+        ElMessage.info('已取消删除')
+    })
+}
+//编辑
+const showEdit = async (row: any) => {
+    console.log('编辑',row)
+    ElMessageBox.prompt(`编辑规格,请填写正确格式`, '编辑', {
+        confirmButtonText: 'OK',
+        cancelButtonText: 'Cancel',
+        inputValue:row.name,
+        inputPattern: /\S/,
+        inputErrorMessage: `名称格式不能为空`,
+    }).then(async ({ value }) => {
+        const reslut: any = await unitEdit({id:row.id,name:value})
+        if (reslut.code == 200 && reslut.msg == '更新成功') {
+            ElMessage.success(reslut.msg)
+            emit('setTable', '')
+        }
+    }).catch(() => {
+        ElMessage.info('已取消编辑')
+    })
+}
+//暴露方法
+defineExpose({
+    TableRef
+})
 </script>
 <style lang="scss">
 /* @import url(); 引入css类 */
-
 </style>

+ 34 - 19
src/views/essentialinfo/vaccineName.vue

@@ -3,8 +3,8 @@
     <div class="">
         <tables ref="TableRef" :requestApi="productList" :columns="columns" :initParam="data.initParam" :border="true">
             <template #right="{ row }">
-                <el-button link type="primary" size="small" @click="HaneditFun(row)">编辑</el-button>
-                <el-button link type="danger" size="small" @click="HandeleteFun(row)">删除</el-button>
+                <el-button link type="primary" size="small" @click="showEdit(row)">编辑</el-button>
+                <el-button link type="danger" size="small" @click="deleteFy(row)">删除</el-button>
             </template>
         </tables>
     </div>
@@ -12,16 +12,17 @@
 
 <script setup lang="ts">
 import tables from "@/components/table.vue";
-import { productList, productDel, productedit, productadd } from "@/api";
+import { productList, productDel, productedit } from "@/api";
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { reactive } from 'vue'
+import { reactive,ref} from 'vue'
+const TableRef = ref()
 // 渲染表格
 const columns: any = [
     { type: 'index', label: '编号', width: 80, },
     { prop: 'name', label: '名称', width: 300 },
     { prop: 'operation', label: '操作', fixed: 'right', align: 'left', 'min-width': 200 }
 ]
-
+const emit:any = defineEmits(['setTable','setBasic'])
 //请求参数
 const data: any = reactive({
     initParam: {
@@ -30,31 +31,45 @@ const data: any = reactive({
 })
 
 /**
- * 编辑
- * @param data 列数据
- */
-const HaneditFun = async (data: any)=>{
-    console.log('编辑',data)
-}
-/**
  * 删除
  * @param data 列数据
  */
-const HandeleteFun = async (data: any) => {
-    console.log('删除',data)
-    ElMessageBox.confirm('删除列数据操作,是否继续?', '提示', {
-        confirmButtonText: '删除',
+ const deleteFy = (data: any) => {
+    ElMessageBox.confirm('该字段所有已有数据会一同被删除,且无法恢复', '是否确认删除', {
+        confirmButtonText: '立即删除',
         cancelButtonText: '取消',
-        type: 'warning',
+        type: 'error',
         center: true,
     }).then(async() => {
         const reslut:any = await productDel({id:data.id})
-        console.log('删除',reslut)
-        ElMessage.success('删除成功')
+        if(reslut.code==200)ElMessage.success('删除成功');TableRef.value?.getTableList();emit('setBasic', '')
     }).catch(() => {
         ElMessage.info('已取消删除')
     })
 }
+//编辑
+const showEdit = async (row: any) => {
+    console.log('编辑',row)
+    ElMessageBox.prompt(`编辑规格,请填写正确格式`, '编辑', {
+        confirmButtonText: 'OK',
+        cancelButtonText: 'Cancel',
+        inputValue:row.name,
+        inputPattern: /\S/,
+        inputErrorMessage: `名称格式不能为空`,
+    }).then(async ({ value }) => {
+        const reslut: any = await productedit({id:row.id,name:value})
+        if (reslut.code == 200 && reslut.msg == '更新成功') {
+            ElMessage.success(reslut.msg)
+            emit('setTable', '')
+        }
+    }).catch(() => {
+        ElMessage.info('已取消编辑')
+    })
+}
+//暴露方法
+defineExpose({
+    TableRef
+})
 </script>
 <style lang="scss">
 /* @import url(); 引入css类 */

+ 6 - 8
src/views/stockcontrol/storageInquire/index.vue

@@ -1,7 +1,7 @@
 <!--  -->
 <template>
     <div class="storageInquire">
-        <searchAdd isButtom="查询" :inline="true" :labelWidth="labelWidth">
+        <searchAdd isButtom="查询" :inline="true" :labelWidth="labelWidth" @event="eventFn">
             <template #searchConter>
                 <el-form-item label="疫苗名称" :label-width="labelWidth">
                     <el-input v-model="formInline.user" placeholder="疫苗名称" clearable style="width: 150px;" />
@@ -16,12 +16,8 @@
                     <el-input v-model="formInline.user" placeholder="疫苗批号" clearable style="width: 150px;" />
                 </el-form-item>
                 <el-form-item label="疫苗效期" :label-width="labelWidth">
-                    <el-date-picker v-model="formInline.date" type="date" placeholder="疫苗效期" clearable
-                        style="width: 150px;" />
-                </el-form-item>
-                <el-form-item label="出/入库日期" :label-width="labelWidth">
-                    <el-date-picker v-model="formInline.date" type="date" placeholder="出/入库日期" clearable
-                        style="width: 150px;" />
+                    <el-date-picker v-model="formInline.date" type="daterange" placeholder="疫苗效期" clearable
+                        style="width: 200px;" />
                 </el-form-item>
             </template>
         </searchAdd>
@@ -31,7 +27,7 @@
                 <el-button round :icon="Tickets">打印</el-button>
             </template>
             <template #bg>
-                <tables :requestApi="stockList" :columns="columns" :initParam="initParam">
+                <tables ref="TableRef" :requestApi="stockList" :columns="columns" :initParam="initParam">
                     <template #T_State="{ row }">
                         <div style="width: 10px;height: 10px;border-radius: 50%;background: red;"></div>
                     </template>
@@ -52,6 +48,7 @@ import tables from "@/components/table.vue";
 import bg from '@/components/bg.vue'
 import { Download, Tickets } from '@element-plus/icons-vue'
 import { reactive, ref } from "vue";
+const TableRef = ref()
 const formInline = reactive({
     user: '',
     region: '',
@@ -99,6 +96,7 @@ const initParam = {
  */
 const eventFn = (val: any) => {
     console.log('/', val);
+    TableRef.value?.getTableList()
 }
 </script>
 <style lang="scss">

+ 1 - 1
src/views/usermanagement/user/index.vue

@@ -95,7 +95,7 @@ const columns: any = [
   { type: 'index', label: '编号', width: 80, },
   { prop: 'nickName', label: '名称', width: 200 },
   { prop: 'username', label: '用户名', width: 200 },
-  { prop: 'operation', label: '操作', fixed: 'right', 'min-width': 200 }
+  { prop: 'operation', label: '操作', fixed: 'right',align:'left', 'min-width': 200 }
 ]
 
 const data = reactive({