YangJian0701 1 year ago
parent
commit
34d3d82600
37 changed files with 728 additions and 258 deletions
  1. 1 0
      env.d.ts
  2. 1 0
      src/api/index.ts
  3. 10 0
      src/api/module/storageOrderGoods.ts
  4. BIN
      src/assets/img/404.png
  5. 20 0
      src/components/404.vue
  6. 31 10
      src/components/breadcrumb.vue
  7. 0 74
      src/components/routerMenu.vue
  8. 4 4
      src/components/table.vue
  9. 1 1
      src/hooks/useTable.ts
  10. 34 0
      src/plugins/eventBus.ts
  11. 1 1
      src/router/index.ts
  12. 128 65
      src/router/module/dynamicRoutes.ts
  13. 5 5
      src/utils/index.ts
  14. 65 0
      src/views/essentialinfo/index.vue
  15. 1 1
      src/views/layout/index.vue
  16. 0 0
      src/views/layout/logo.vue
  17. 2 4
      src/views/layout/menu.vue
  18. 0 0
      src/views/layout/popover.vue
  19. 96 0
      src/views/layout/routerMenu.vue
  20. 10 0
      src/views/salesmanagement/index.vue
  21. 1 1
      src/views/salesmanagement/sellManage/index.vue
  22. 56 0
      src/views/salesmanagement/storageOrderGoods/down.vue
  23. 105 0
      src/views/salesmanagement/storageOrderGoods/index.vue
  24. 10 0
      src/views/stockcontrol/index.vue
  25. 0 0
      src/views/stockcontrol/storageFrom/index.vue
  26. 0 0
      src/views/stockcontrol/storageInquire/index.vue
  27. 0 0
      src/views/stockcontrol/storagePut/Labour.vue
  28. 0 0
      src/views/stockcontrol/storagePut/index.vue
  29. 0 0
      src/views/stockcontrol/storagePut/scanCode.vue
  30. 135 0
      src/views/stockcontrol/transmitReceive/index.vue
  31. 0 91
      src/views/storageOrderGoods/index.vue
  32. 0 0
      src/views/usermanagement/company/index.vue
  33. 10 0
      src/views/usermanagement/index.vue
  34. 0 0
      src/views/usermanagement/user/adduser.vue
  35. 0 0
      src/views/usermanagement/user/index.vue
  36. 0 0
      src/views/usermanagement/user/progres.vue
  37. 1 1
      tsconfig.json

+ 1 - 0
env.d.ts

@@ -1,2 +1,3 @@
 declare module 'element-plus/dist/locale/zh-cn.mjs'
 declare module 'element-plus/dist/locale/en.mjs'
+

+ 1 - 0
src/api/index.ts

@@ -4,4 +4,5 @@ export * from './module/company'
 export * from './module/storageInquire'
 export * from './module/sellManage'
 
+export * from './module/storageOrderGoods'
 

+ 10 - 0
src/api/module/storageOrderGoods.ts

@@ -0,0 +1,10 @@
+
+import $http from '@/utils/index'
+
+
+
+// 销售订单-列表
+export const orderList = (params: any) => $http.post('/sales/order_list', params)
+
+
+

BIN
src/assets/img/404.png


+ 20 - 0
src/components/404.vue

@@ -0,0 +1,20 @@
+<template>
+  <div class="not-container">
+    <img src="@/assets/img/404.png" class="not-img" alt="404" />
+    <div class="not-detail">
+      <h2>404</h2>
+      <h4>抱歉,您访问的页面不存在~🤷‍♂️🤷‍♀️</h4>
+      <el-button type="primary" @click="router.push('/')">返回首页</el-button>
+    </div>
+    1
+  </div>
+</template>
+
+<script setup lang="ts" name="404">
+import { useRouter } from 'vue-router'
+const router = useRouter()
+</script>
+
+<style scoped lang="scss">
+// @import './index.scss';
+</style>

+ 31 - 10
src/components/breadcrumb.vue

@@ -1,30 +1,51 @@
 <template>
     <div class="y-breadcrumb">
+        <div class="y-breadcrumb-ico" @click="collapseFun">
+            <el-icon v-if="data.iscollapse"><Expand /></el-icon>
+            <el-icon v-else><Fold /></el-icon>
+        </div>
         <el-breadcrumb :separator-icon="ArrowRight">
             <el-breadcrumb-item>宝智达</el-breadcrumb-item>
             <el-breadcrumb-item>系统首页</el-breadcrumb-item>
-            <el-breadcrumb-item>{{data.isRouter}}</el-breadcrumb-item>
+            <el-breadcrumb-item>{{ data.isRouter }}</el-breadcrumb-item>
         </el-breadcrumb>
     </div>
 </template>
   
 <script lang="ts" setup>
+import Bus from '@/plugins/eventBus'
 import router from '@/router/index'
 import { ArrowRight } from '@element-plus/icons-vue'
-import { useRouter } from 'vue-router';
+import { useStore } from 'vuex';
 import { reactive, watch } from 'vue'
-// let router = useRouter()
+let store = useStore()
 //当前路由
 const data = reactive({
-    isRouter:''
+    isRouter: '',
+    iscollapse:true
 })
-watch(() =>router , (toPath:any) => {
+watch(() => router, (toPath: any) => {
     data.isRouter = toPath.currentRoute._value.meta.title
-}, {immediate:true,deep: true })
+}, { immediate: true, deep: true })
 
+
+const collapseFun = async ()=>{
+    data.iscollapse = !data.iscollapse
+    Bus.emit('on-click',data.iscollapse);
+}
 </script>
 <style lang="scss">
-.y-breadcrumb{
-    padding-bottom:var(--y-padding);
-}
-</style>
+.y-breadcrumb {
+    padding-bottom: var(--y-padding);
+    display: flex;
+    align-items: center;
+    &-ico{
+        padding-right: 20px;
+        display: flex;
+        align-items: center;
+        font-size: 22px;
+        font-weight: 100;
+        cursor: pointer;
+        color: var(--el-text-color-regular);
+    }
+}</style>

+ 0 - 74
src/components/routerMenu.vue

@@ -1,74 +0,0 @@
-<template>
-  <div class="routerMenu">
-    <el-menu background-color="none" :default-active="data.isRouter" :ellipsis="false" router>
-      <el-menu-item :index="item.path" v-for="item, index in routerData" :key="index" @click="setTag(item)">
-        <span class="iconfont" :class="item.icon" style="font-size: 17px;font-weight: 600;"></span>
-        <span style="padding:0 15px;">{{ item.meta.title }}</span>
-      </el-menu-item>
-    </el-menu>
-  </div>
-</template>
-
-<script lang="ts" setup>
-import { watch, reactive } from "vue";
-import { useRouter } from 'vue-router';
-import { useStore } from 'vuex'
-
-import { ref } from 'vue'
-
-
-const store = useStore()
-let router = useRouter()
-
-//当前路由
-const data = reactive({
-  isRouter: router.options.history.location
-})
-let isRouter =
-
-  watch(() => router, (toPath: any) => {
-    data.isRouter = toPath.options.history.location
-  }, { immediate: true, deep: true })
-
-
-const screenWidth = ref()
-const routerData: any = ref([])
-routerData.value = router.options.routes[0].children
-screenWidth.value = document.body.clientWidth
-window.onresize = () => (() => {
-  screenWidth.value = document.body.clientWidth
-})();
-
-
-const setTag = (data: any) => {
-  store.commit('addTab', {
-    title: data.meta.title,
-    path: data.path,
-    name: data.name
-  })
-
-}
-
-</script>
-
-<style scoped lang="scss">
-.routerMenu {
-  height: 100%;
-  overflow-y: auto;
-}
-
-/*去掉左侧菜单自带的右侧边框*/
-.el-menu--horizontal.el-menu {
-  border: none !important;
-  user-select: none;
-}
-
-.el-menu-item.is-active {
-  color: var(--el-menu-active-color);
-  background: #f6f8fa;
-}
-
-.el-menu {
-  border: none !important;
-  --el-menu-hover-bg-color: none !important; //解决去掉导航背景色后鼠标放上去颜色为黑色
-}</style>

+ 4 - 4
src/components/table.vue

@@ -13,10 +13,10 @@
           :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">
+        <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>
@@ -25,7 +25,7 @@
           v-bind="item"
           :align="item.align ?? 'center'"
           v-if="!item.type && item.prop && item.name !== item.prop"
-          v-slot="scope"
+          v-slot="scope" :show-overflow-tooltip="true"
         >
           <div v-if="item.prop=='T_wait_audit'" style="color: red;">
             {{ scope.row[item.prop]==true?'待审核':'' }}
@@ -40,7 +40,7 @@
           v-bind="item"
           :align="item.align ?? 'center'"
           v-if="!item.type && item.prop && item.name === item.prop"
-          v-slot="scope"
+          v-slot="scope" :show-overflow-tooltip="true"
         >
           <slot :name="item.prop" :row="scope.row"></slot>
         </el-table-column>

+ 1 - 1
src/hooks/useTable.ts

@@ -39,7 +39,7 @@ export const useTable = (
       // 当前页数
       pageNum: 1,
       // 每页显示条数
-      pageSize: 2,
+      pageSize: 8,
       // 总条数
       total: 0,
       RemainingTime: 0,

+ 34 - 0
src/plugins/eventBus.ts

@@ -0,0 +1,34 @@
+type BusClass = {
+    emit: (name: string) => void,
+    on: (name: string, callback: Function) => void
+}
+
+type Pramskey = string | number | symbol;
+
+type List = {
+    [key: Pramskey]: Array<Function>
+}
+
+class Bus implements BusClass {
+    list: List
+    constructor() {
+        this.list = {}
+    }
+    emit(name: string, ...args: Array<any>) {
+        let evenentName: Array<Function> = this.list[name];
+        evenentName.forEach(fn => {
+            fn.apply(this, args)
+        })
+
+    }
+
+    on(name: string, callback: Function) {
+        let fn: Array<Function> = this.list[name] || [];
+        fn.push(callback);
+        this.list[name] = fn;
+    }
+
+
+}
+
+export default new Bus();

+ 1 - 1
src/router/index.ts

@@ -1,5 +1,5 @@
 import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'
-import { dynamicRoutes } from "./module/dynamicRoutes";
+import { dynamicRoutes,errorRouter } from "./module/dynamicRoutes";
 import { globalRoutes } from "./module/globalRoutes";
 import { useStore } from 'vuex'
 

+ 128 - 65
src/router/module/dynamicRoutes.ts

@@ -6,84 +6,147 @@ export const dynamicRoutes = [{
     redirect: '/home',
     children: [{
         path: '/home',
-        name: 'home', 
-        icon: "icon-zhuye",
+        name: 'home',
+        icon: "icon-shouye_zhuyehui",
         component: () => import('@/views/home/index.vue'),
         meta: {
-            roles:false,
-            title: '系统首页',
+            roles: false,
+            title: '工作台',
         },
-    },{
-        path: '/user',
-        name: 'user', 
-        icon: "icon-icon-",
-        component: () => import('@/views/user/index.vue'),
-        meta: {
-            roles:false,
-            title: '用户管理',
-        },
-    },{
-        path: '/company',
-        name: 'company', 
+    }, {
+        path: '/essentialinfo',
+        name: 'essentialinfo',
         icon: "icon-zhuye1",
-        component: () => import('@/views/company/index.vue'),
+        component: () => import('@/views/essentialinfo/index.vue'),
         meta: {
-            roles:false,
-            title: '公司管理',
+            roles: false,
+            title: '基本信息',
         },
-    },{
-        path: '/storageInquire',
-        name: 'storageInquire', 
-        icon: "icon-fenxixiangmuku",
-        component: () => import('@/views/storageInquire/index.vue'),
+    }, {
+        path: '/usermanagement',
+        name: 'usermanagement',
+        icon: "icon-icon-",
+        component: () => import('@/views/usermanagement/index.vue'),
+        redirect: '/usermanagement/user',
         meta: {
-            roles:false,
-            title: '库存统计',
+            roles: false,
+            title: '用户管理',
         },
-    },{
-        path: '/storagePut',
-        name: 'storagePut', 
+        children: [{
+            path: '/usermanagement/user',
+            name: 'user',
+            icon: "icon-icon-",
+            component: () => import('@/views/usermanagement/user/index.vue'),
+            meta: {
+                roles: false,
+                title: '用户管理',
+            },
+        }, {
+            path: '/usermanagement/company',
+            name: 'company',
+            icon: "icon-zhuye1",
+            component: () => import('@/views/usermanagement/company/index.vue'),
+            meta: {
+                roles: false,
+                title: '公司管理',
+            },
+        }]
+    }, {
+        path: '/stockcontrol',
+        name: 'stockcontrol',
         icon: "icon-_kucun",
-        component: () => import('@/views/storagePut/index.vue'),
+        component: () => import('@/views/stockcontrol/index.vue'),
+        redirect: '/stockcontrol/storagePut',
         meta: {
-            roles:false,
-            title: '入库管理',
+            roles: false,
+            title: '库管理',
         },
-    },{
-        path: '/storageFrom',
-        name: 'storageFrom', 
-        icon: "icon-ruku",
-        component: () => import('@/views/storageFrom/index.vue'),
-        meta: {
-            roles:false,
-            title: '出库管理',
-        },
-    },{
-        path: '/sellManage',
-        name: 'sellManage', 
+        children: [{
+            path: '/stockcontrol/storagePut',
+            name: 'storagePut',
+            icon: "icon-_kucun",
+            component: () => import('@/views/stockcontrol/storagePut/index.vue'),
+            meta: {
+                roles: false,
+                title: '入库管理',
+            },
+        },{
+            path: '/stockcontrol/storageFrom',
+            name: 'storageFrom',
+            icon: "icon-ruku",
+            component: () => import('@/views/stockcontrol/storageFrom/index.vue'),
+            meta: {
+                roles: false,
+                title: '出库管理',
+            },
+        }, {
+            path: '/stockcontrol/storageInquire',
+            name: 'storageInquire',
+            icon: "icon-fenxixiangmuku",
+            component: () => import('@/views/stockcontrol/storageInquire/index.vue'),
+            meta: {
+                roles: false,
+                title: '库存查询',
+            },
+        },  {
+                path: '/stockcontrol/transmitReceive',
+                name: 'transmitReceive',
+                icon: "icon-ruku",
+                component: () => import('@/views/stockcontrol/transmitReceive/index.vue'),
+                meta: {
+                    roles: false,
+                    title: '收发记录',
+                },
+            },
+        ]
+    }, {
+        path: '/salesmanagement',
+        name: 'salesmanagement',
         icon: "icon-chukuliucheng",
-        component: () => import('@/views/sellManage/index.vue'),
+        component: () => import('@/views/salesmanagement/index.vue'),
+        redirect: '/salesmanagement/sellManage',
         meta: {
-            roles:false,
+            roles: false,
             title: '销售管理',
         },
-    },{
-        path: '/storageOrderGoods',
-        name: 'storageOrderGoods', 
-        icon: "icon-dingdan",
-        component: () => import('@/views/storageOrderGoods/index.vue'),
-        meta: {
-            roles:false,
-            title: '销售订单',
-        },
-    },{
-        path: '/personalInfo',
-        name: 'personalInfo', 
-        icon: "icon-biaoqian1",
-        component: () => import('@/views/personalInfo/index.vue'),
-        meta: {
-            roles:false,
-            title: '基本信息',
-        },
+        children: [{
+            path: '/salesmanagement/sellManage',
+            name: 'sellManage',
+            icon: "icon-chukuliucheng",
+            component: () => import('@/views/salesmanagement/sellManage/index.vue'),
+            meta: {
+                roles: false,
+                title: '销售管理',
+            },
+        }, {
+            path: '/salesmanagement/storageOrderGoods',
+            name: 'storageOrderGoods',
+            icon: "icon-dingdan",
+            component: () => import('@/views/salesmanagement/storageOrderGoods/index.vue'),
+            meta: {
+                roles: false,
+                title: '销售订单',
+            },
+        }]
     }]
-}]
+}]
+
+export const errorRouter = [
+    {
+        path: '*',
+        name: '404',
+        component: () => import('@/components/404.vue'),
+        meta: {
+            title: '404页面'
+        }
+    }
+]
+
+/**
+* notFoundRouter(找不到路由)
+*/
+export const notFoundRouter = {
+    path: '/:pathMatch(.*)*',
+    name: 'notFound',
+    redirect: { name: '404' }
+}

+ 5 - 5
src/utils/index.ts

@@ -83,11 +83,11 @@ class RequestHttp {
 		function showStatus(params: any) {
 			switch (params.code) {
 				case 200:
-					ElMessage({
-						showClose: true,
-						message: params.msg,
-						type: 'success',
-					})
+					// ElMessage({
+					// 	showClose: true,
+					// 	message: params.msg,
+					// 	type: 'success',
+					// })
 					break;
 				case ResultEnum.OVERDUE:
 					ElNotification.error({

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

@@ -0,0 +1,65 @@
+<template>
+    <div class="essentialinfo">
+        <div class="essentialinfo-main">
+            <bgPure>
+                <template #bg>
+                    <statistics :imgUrl="require('@/assets/img/1700227167756.jpg')" titles="规格" subhea="2154">
+                    </statistics>
+                </template>
+            </bgPure>
+            <bgPure #bg>
+                <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="剂型" subhea="87546"></statistics>
+            </bgPure>
+            <bgPure #bg>
+                <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="单位" subhea="931"></statistics>
+            </bgPure>
+            <bgPure>
+                <template #bg>
+                    <statistics :imgUrl="require('@/assets/img/1700227167756.jpg')" titles="疫苗名称" subhea="2154">
+                    </statistics>
+                </template>
+            </bgPure>
+            <bgPure #bg>
+                <statistics :imgUrl="require('@/assets/img/1700227576514.jpg')" titles="生产企业" subhea="87546"></statistics>
+            </bgPure>
+            <bgPure #bg>
+                <statistics :imgUrl="require('@/assets/img/1700228167058.jpg')" titles="药品信息管理" subhea="931"></statistics>
+            </bgPure>
+        </div>
+        <bg istitle="基本信息">
+            <template #bg>
+                <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+                    <el-tab-pane label="规格" name="first">规格</el-tab-pane>
+                    <el-tab-pane label="剂型" name="second">剂型</el-tab-pane>
+                    <el-tab-pane label="单位" name="third">单位</el-tab-pane>
+                    <el-tab-pane label="疫苗名称" name="fourth">疫苗名称</el-tab-pane>
+                    <el-tab-pane label="生产企业" name="third1">生产企业</el-tab-pane>
+                    <el-tab-pane label="药品信息管理" name="fourth2">药品信息管理</el-tab-pane>
+                </el-tabs>
+            </template>
+        </bg>
+    </div>
+</template>
+<script lang="ts" setup>
+import bg from '@/components/bg.vue'
+import bgPure from '@/components/bgPure.vue'
+import statistics from '@/components/statistics.vue'
+import { ref } from 'vue'
+import type { TabsPaneContext } from 'element-plus'
+
+const activeName = ref('first')
+
+const handleClick = (tab: TabsPaneContext, event: Event) => {
+    console.log(tab, event)
+}
+</script>
+<style lang="scss">
+.essentialinfo {
+    overflow-y: auto;
+    &-main {
+        display: grid;
+        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
+        grid-gap:0 20px;
+    }
+}
+</style>

+ 1 - 1
src/views/layout/index.vue

@@ -24,7 +24,7 @@
 <script setup lang="ts">
 import menus from "./menu.vue";
 import backTop from "@/components/backTop.vue";
-import routerMenu from "@/components/routerMenu.vue";
+import routerMenu from "./routerMenu.vue";
 import tag from "@/components/tag.vue";
 import breadcrumb from "@/components/breadcrumb.vue";
 

+ 0 - 0
src/components/logo.vue → src/views/layout/logo.vue


+ 2 - 4
src/views/layout/menu.vue

@@ -10,10 +10,8 @@
 </template>
   
 <script lang="ts" setup>
-import popover from "@/components/popover.vue";
-
-
-import logo from "@/components/logo.vue";
+import popover from "./popover.vue";
+import logo from "./logo.vue";
 
 </script>
   

+ 0 - 0
src/components/popover.vue → src/views/layout/popover.vue


+ 96 - 0
src/views/layout/routerMenu.vue

@@ -0,0 +1,96 @@
+<template>
+  <div class="routerMenu">
+    <el-menu :default-active="data.isRouter" menu-trigger="click" v-for="item, index in routerData" :collapse="data.iscollapse" :unique-opened="false" :key="index" router>
+      <el-menu-item :index="item.path" v-if="!item.children">
+        <span class="iconfont" :class="item.icon" style="font-size: 16px;"></span>
+        <template #title>
+          <div style="padding-left: 10px;" class="span4">{{ item.meta.title }}</div>
+        </template>
+      </el-menu-item>
+      <el-sub-menu :index="item.path" v-else>
+        <template #title>
+          <div class="iconfont" :class="item.icon" style="font-size: 16px;"></div>
+          <span style="margin-left: 10px;" class="span4">{{ item.meta.title }}</span>
+        </template>
+        <el-menu-item-group v-for="obj, index in item.children">
+          <el-menu-item :index="obj.path">{{ obj.meta.title }}</el-menu-item>
+        </el-menu-item-group>
+      </el-sub-menu>
+    </el-menu>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { watch, reactive } from "vue";
+import { useRouter } from 'vue-router';
+import { useStore } from 'vuex'
+import Bus from '@/plugins/eventBus'
+import { ref } from 'vue'
+
+
+const store = useStore()
+let router = useRouter()
+
+//当前路由
+const data = reactive({
+  isRouter: router.options.history.location,
+  iscollapse:true
+})
+Bus.on('on-click',(flag:boolean)=>{
+  data.iscollapse = flag
+})
+
+
+watch(() => router, (toPath: any) => {
+  data.isRouter = toPath.options.history.location
+}, { immediate: true, deep: true })
+
+
+const screenWidth = ref()
+const routerData: any = ref([])
+routerData.value = router.options.routes[0].children
+screenWidth.value = document.body.clientWidth
+window.onresize = () => (() => {
+  screenWidth.value = document.body.clientWidth
+})();
+
+
+const setTag = (data: any) => {
+  store.commit('addTab', {
+    title: data.meta.title,
+    path: data.path,
+    name: data.name
+  })
+
+}
+
+</script>
+
+<style scoped lang="scss">
+.routerMenu {
+  height: 100%;
+  overflow-y: auto;
+  user-select: none;
+}
+
+/*去掉左侧菜单自带的右侧边框*/
+.el-menu--horizontal.el-menu {
+  border: none !important;
+  user-select: none;
+}
+
+.el-menu-item:hover {
+  background: rgba(#000, .05);
+}
+
+// .el-menu-item.is-active 只修改2级
+.is-active {
+  color: var(--el-menu-active-color);
+  background: #f6f8fa;
+}
+
+.el-menu {
+  border: none !important;
+  --el-menu-hover-bg-color: none !important; //解决去掉导航背景色后鼠标放上去颜色为黑色
+}
+</style>

+ 10 - 0
src/views/salesmanagement/index.vue

@@ -0,0 +1,10 @@
+<template>
+    <div class=""><router-view /></div>
+</template>
+
+<script setup lang="ts">
+</script>
+<style lang="scss">
+/* @import url(); 引入css类 */
+
+</style>n

+ 1 - 1
src/views/sellManage/index.vue → src/views/salesmanagement/sellManage/index.vue

@@ -1,7 +1,7 @@
 <!--  -->
 <template>
     <div class="sellManage">
-        <searchAdd isButtom="添加" :inline="true" @event="eventFun">
+        <searchAdd isButtom="查询" :inline="true" @event="eventFun">
             <template #searchConter>
                 <el-form-item label="日期">
                     <el-date-picker v-model="data.datePicker" type="daterange" format="YYYY-MM-DD" value-format="YYYY-MM-DD"

+ 56 - 0
src/views/salesmanagement/storageOrderGoods/down.vue

@@ -0,0 +1,56 @@
+<!--  -->
+<template>
+    <div class="">
+        <el-button round type="primary" :icon="Download" @click="dialogFormVisible = true">导出打印</el-button>
+        <el-dialog v-model="dialogFormVisible" title="导出打印" :append-to-body="true" draggable width="30%">
+            <el-form :model="form">
+                <el-form-item label="开票员" :label-width="formLabelWidth">
+                    <el-input v-model="form.name" autocomplete="off" />
+                </el-form-item>
+                <el-form-item label="发货人" :label-width="formLabelWidth">
+                    <el-input v-model="form.name" autocomplete="off" />
+                </el-form-item>
+                <el-form-item label="财务" :label-width="formLabelWidth">
+                    <el-input v-model="form.name" autocomplete="off" />
+                </el-form-item>
+                <el-form-item label="收货人" :label-width="formLabelWidth">
+                    <el-input v-model="form.name" autocomplete="off" />
+                </el-form-item>
+                <!-- <el-form-item label="发货人" :label-width="formLabelWidth">
+                    <el-select v-model="form.region" placeholder="Please select a zone">
+                        <el-option label="Zone No.1" value="shanghai" />
+                        <el-option label="Zone No.2" value="beijing" />
+                    </el-select>
+                </el-form-item> -->
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="dialogFormVisible = false">Cancel</el-button>
+                    <el-button type="primary" @click="dialogFormVisible = false">
+                        Confirm
+                    </el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { Download } from '@element-plus/icons-vue'
+import { reactive, ref } from 'vue'
+const dialogFormVisible = ref(false)
+const formLabelWidth = '60px'
+const form = reactive({
+    name: '',
+    region: '',
+    date1: '',
+    date2: '',
+    delivery: false,
+    type: [],
+    resource: '',
+    desc: '',
+})
+</script>
+<style lang="scss">
+/* @import url(); 引入css类 */
+</style>

+ 105 - 0
src/views/salesmanagement/storageOrderGoods/index.vue

@@ -0,0 +1,105 @@
+<!--  -->
+<template>
+    <div class="sellManage">
+        <searchAdd isButtom="查询" :inline="true" @event="eventFun">
+            <template #searchConter>
+                <el-form-item label="日期">
+                    <el-date-picker v-model="data.initParam.date" type="date" value-format="YYYY-MM-DD"  clearable style="width: 200px;"/>
+                </el-form-item>
+                <el-form-item label="购货单位">
+                    <el-select v-model="data.initParam.receivingUnit" filterable remote reserve-keyword placeholder="购货单位"
+                        :remote-method="remoteMethod" :loading="loading" clearable style="width: 200px;">
+                        <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+                    </el-select>
+                </el-form-item>
+            </template>
+        </searchAdd>
+        <bg istitle="基本信息">
+            <template #btn>
+                <down></down>
+            </template>
+            <template #bg>
+                <tables ref="TableRef" :requestApi="orderList" :columns="columns" :initParam="data.initParam"></tables>
+            </template>
+        </bg>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { reactive, ref, onMounted,nextTick} from 'vue'
+import { orderList,stockunit } from "@/api";
+
+import tables from "@/components/table.vue";
+import searchAdd from "@/components/searchAdd.vue";
+import down from "./down.vue";
+
+import bg from '@/components/bg.vue'
+const TableRef = ref()
+
+const loading = ref(false)
+interface ListItem {
+    value: string
+    label: string
+}
+const list = ref<ListItem[]>([])
+const options = ref<ListItem[]>([])
+
+onMounted(async() => {
+    const result:any = await stockunit({type:2,name:''})
+    list.value = result.data.list.map((item:any) => {
+        return { value: item, label: item}
+    })
+})
+const remoteMethod = async(query: string) => {
+    if (query) {
+        loading.value = true
+        setTimeout(() => {
+            loading.value = false
+            options.value =  list.value.filter((item:any) => {
+                return item.label.toLowerCase().includes(query.toLowerCase())
+            })
+        }, 200)
+    } else {
+        options.value = []
+    }
+}
+
+
+// 渲染表格
+const columns: any = [
+    { prop: 'date', label: '日期', width: 120 },
+    { prop: 'receiving_unit', label: '购货单位', width: 150 },
+    { prop: 'product_name', label: '品种', width: 150 },
+    { prop: 'dosage_form_name', label: '剂型', width: 100 },
+    { prop: 'spec_name', label: '规格(剂/支或粒)', width: 150 },
+    { prop: 'enterprise_name', label: '生产企业', width: 150 },
+    { prop: 'batch_number', label: '疫苗批号', width: 150 },
+    { prop: 'expiry_date', label: '效期', width: 120 },
+    
+    { prop: 'approval_number', label: '批准文号', width: 120 },
+    { prop: 'quantity', label: '数量', width: 120 },
+    { prop: 'unit_name', label: '单位', width: 80 },
+    { prop: 'sales_unit_price', label: '销售单价', width: 120 },
+    { prop: 'sales_money', label: '销售金额', 'min-width': 120 },
+]
+
+//请求参数
+const data:any = reactive({
+    datePicker: [],//时间选择
+    initParam: {
+        "date": "",
+        "receivingUnit": ""
+    }
+})
+
+//搜索
+const eventFun = async ()=>{
+    nextTick(() => {
+        TableRef.value?.getTableList()
+    })
+}
+</script>
+<style lang="scss">
+/* @import url(); 引入css类 */
+
+</style>

+ 10 - 0
src/views/stockcontrol/index.vue

@@ -0,0 +1,10 @@
+<template>
+    <div class=""><router-view /></div>
+</template>
+
+<script setup lang="ts">
+</script>
+<style lang="scss">
+/* @import url(); 引入css类 */
+
+</style>n

+ 0 - 0
src/views/storageFrom/index.vue → src/views/stockcontrol/storageFrom/index.vue


+ 0 - 0
src/views/storageInquire/index.vue → src/views/stockcontrol/storageInquire/index.vue


+ 0 - 0
src/views/storagePut/Labour.vue → src/views/stockcontrol/storagePut/Labour.vue


+ 0 - 0
src/views/storagePut/index.vue → src/views/stockcontrol/storagePut/index.vue


+ 0 - 0
src/views/storagePut/scanCode.vue → src/views/stockcontrol/storagePut/scanCode.vue


+ 135 - 0
src/views/stockcontrol/transmitReceive/index.vue

@@ -0,0 +1,135 @@
+<!--  -->
+<template>
+    <div class="storagePut">
+        <searchAdd isButtom="查询">
+            <template #searchConter>
+                <el-form-item label="疫苗名称">
+                    <el-input v-model="formInline.user" placeholder="疫苗名称" clearable style="width: 150px;" />
+                </el-form-item>
+                <el-form-item label="生产企业">
+                    <el-select v-model="formInline.region" placeholder="生产企业" clearable style="width: 150px;">
+                        <el-option label="Zone one" value="shanghai" />
+                        <el-option label="Zone two" value="beijing" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="疫苗批号">
+                    <el-select v-model="formInline.region" placeholder="疫苗批号" clearable style="width: 150px;">
+                        <el-option label="Zone one" value="shanghai" />
+                        <el-option label="Zone two" value="beijing" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="出/入库日期">
+                    <el-date-picker v-model="formInline.date" type="date" placeholder="出/入库日期" clearable
+                        style="width: 150px;" />
+                </el-form-item>
+                <el-form-item label="发货(收货单位)">
+                    <el-select v-model="formInline.region" placeholder="发货(收货单位)" clearable style="width: 150px;">
+                        <el-option label="Zone one" value="shanghai" />
+                        <el-option label="Zone two" value="beijing" />
+                    </el-select>
+                </el-form-item>
+            </template>
+        </searchAdd>
+        <bg istitle="基本信息">
+            <template #btn>
+                <el-button el-button type="primary" icon="Download">导出</el-button>
+                <el-button el-button type="primary" icon="Tickets">打印</el-button>
+            </template>
+            <template #bg>
+                <el-table ref="multipleTableRef" :data="tableData" style="width: 100%"
+                    @selection-change="handleSelectionChange">
+                    <template v-for="(item, i) in columns" :key="i">
+                        <el-table-column :type="item.type" width="55" v-if="item.type" align="center" fixed="left"/>
+                        <el-table-column :property="item.prop" v-if="item.prop" :label="item.label" align="center" :width="item.width" show-overflow-tooltip>
+                            <template #default="scope" v-if="item.prop == 'operation'" fixed="right">
+                                <el-button text size="small" type="primary">编辑</el-button>
+                                <el-button text size="small" type="danger">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </template>
+                </el-table>
+                <div style="margin-top: 20px;">
+                    <el-pagination v-model:current-page="data.initParam.pageNum" v-model:page-size="data.initParam.pageSize"
+                    layout="prev, pager, next" :total="50"
+                    @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+                </div>
+            </template>
+        </bg>
+    </div>
+</template>
+
+<script setup lang="ts">
+
+
+import { userList } from "@/api";
+import { reactive, ref } from "vue";
+import tables from "@/components/table.vue";
+import searchAdd from "@/components/searchAdd.vue";
+import bg from '@/components/bg.vue'
+import scanCode from './scanCode.vue'
+import Labour from './Labour.vue'
+
+const tableData: User[] = [
+    {
+        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',
+    },]
+
+const formInline = reactive({
+    user: '',
+    region: '',
+    date: '',
+})
+const datas = reactive({
+    input: ''
+})
+// 渲染表格
+const columns: any = [
+    { type: 'selection', width: '60px', fixed: 'left' },
+    { prop: 'date', label: '疫苗名称', width: '120px' },
+    { prop: 'date', label: '生产企业', width: '120px' },
+    { prop: 'date', label: '批准文号', width: '120px' },
+    { prop: 'name', label: '批签发合格编号', width: '150px' },
+    { prop: 'address', label: '规格(剂/支或粒)', width: '150px' },
+    { prop: 'address', label: '生产日期', width: '120px' },
+    // { prop: 'nickName', label: '疫苗批号', width: 100 },
+    // { prop: 'username', label: '疫苗效期', width: 100 },
+    // { prop: 'username', label: '数量', width: 100 },
+    // { prop: 'username', label: '单位', width: 80 },
+    // { prop: 'username', label: '剂型', width: 100 },
+    // { prop: 'username', label: '领苗人', width: 100 },
+    // { prop: 'username', label: '发货单位', width: 200 },
+    // { prop: 'username', label: '入库日期', width: 100 },
+    { prop: 'operation', label: '操作', fixed: 'right', 'min-width': 200 }
+]
+
+const data = reactive({
+    initParam: { username: '',pageNum:1,pageSize: 10 },//请求参数
+    str: ''
+})
+const multipleTableRef = ref<InstanceType<typeof ElTable>>()
+const multipleSelection = ref<User[]>([])
+const handleSelectionChange = (val: User[]) => {
+    multipleSelection.value = val
+    console.log('选中', multipleSelection.value);
+}
+
+//翻页
+const handleSizeChange = async ()=>{}
+const handleCurrentChange = async ()=>{}
+</script>
+<style lang="scss">
+.storagePut {
+    user-select: none;
+}
+
+.el-form-item {
+    // margin-bottom: 0;
+}
+</style>

+ 0 - 91
src/views/storageOrderGoods/index.vue

@@ -1,91 +0,0 @@
-<!--  -->
-<template>
-    <div class="storageOrderGoods">
-        <searchAdd isButtom="查询" :inline="true" :labelWidth="labelWidth">
-            <template #searchConter>
-                <el-form-item label="疫苗名称" :label-width="labelWidth">
-                    <el-input v-model="formInline.user" placeholder="疫苗名称" clearable style="width: 150px;" />
-                </el-form-item>
-                <el-form-item label="生产企业" :label-width="labelWidth">
-                    <el-select v-model="formInline.region" placeholder="Activity zone" style="width: 150px;">
-                        <el-option label="Zone one" value="shanghai" />
-                        <el-option label="Zone two" value="beijing" />
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="疫苗批号" :label-width="labelWidth">
-                    <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-form-item>
-            </template>
-        </searchAdd>
-        <bg istitle="库存统计列表">
-            <template #btn>
-                <el-button round :icon="Download">下载</el-button>
-            </template>
-            <template #bg>
-                <tables :requestApi="stockList" :columns="columns" :initParam="initParam">
-                    <template #T_State="{ row }">
-                        <div style="width: 10px;height: 10px;border-radius: 50%;background: red;"></div>
-                    </template>
-                    <template #right="{ row }">
-                        <el-button type="primary">编辑</el-button>
-                        <el-button type="danger">删除</el-button>
-                    </template>
-                </tables>
-            </template>
-        </bg>
-    </div>
-</template>
-
-<script setup lang="ts">
-import searchAdd from "@/components/searchAdd.vue";
-import { stockList } from "@/api/index";
-import tables from "@/components/table.vue";
-import bg from '@/components/bg.vue'
-import { reactive, ref } from "vue";
-import { Download } from '@element-plus/icons-vue'
-const labelWidth = ref('90px')
-const formInline = reactive({
-    user: '',
-    region: '',
-    date: '',
-})
-// 渲染表格
-const columns: any = [
-    { prop: 'T_D_name', label: '日期', width: 150 },
-    { prop: 'T_D_name', label: '品种', width: 150 },
-    { prop: 'T_D_name', label: '剂型', width: 150 },
-    { prop: 'T_D_name', label: '规格', width: 200, },
-    { prop: 'T_D_name', label: '生产企业', width: 150, },
-    { prop: 'T_D_name', label: '疫苗批号', width: 150 },
-    { prop: 'T_D_name', label: '效期', width: 150 },
-    { prop: 'T_D_name', label: '批准文号', width: 150 },
-    { prop: 'T_State', label: '数量', name: 'T_State', width: 80 },
-    { prop: 'T_D_name', label: '单位', width: 150 },
-    { prop: 'T_D_name', label: '销售单价', width: 150 },
-    { prop: 'T_D_name', label: '销售金额', width: 150 },
-    { prop: 'operation', label: '操作', fixed: 'right', 'min-width': 200 }
-]
-//请求参数
-const initParam = { 
-    "page": 1,
-    "pageSize": 10,
-    "batchNumber": "",
-    "enterpriseId": 0,
-    "endDate": "",
-    "startDate": "",
-    "productId": 1,
-    "sendReceiveUnit":""
-}
-</script>
-<style lang="scss">
-/* @import url(); 引入css类 */
-
-</style>

+ 0 - 0
src/views/company/index.vue → src/views/usermanagement/company/index.vue


+ 10 - 0
src/views/usermanagement/index.vue

@@ -0,0 +1,10 @@
+<template>
+    <div class=""><router-view /></div>
+</template>
+
+<script setup lang="ts">
+</script>
+<style lang="scss">
+/* @import url(); 引入css类 */
+
+</style>n

+ 0 - 0
src/views/user/adduser.vue → src/views/usermanagement/user/adduser.vue


+ 0 - 0
src/views/user/index.vue → src/views/usermanagement/user/index.vue


+ 0 - 0
src/views/user/progres.vue → src/views/usermanagement/user/progres.vue


+ 1 - 1
tsconfig.json

@@ -34,7 +34,7 @@
     "src/**/*.vue",
     "tests/**/*.ts",
     "tests/**/*.tsx"
-, "env.d.ts"  ],
+, "env.d.ts", "src/plugins/eventBus.js"  ],
   "exclude": [
     "node_modules"
   ]