Browse Source

Merge branch 'master' of http://47.101.159.18:3000/Muchinfo/MTP2.0_WEB

Zhou.xiaoning 4 năm trước cách đây
mục cha
commit
ea40442d45

+ 113 - 0
src/common/components/filter/index.vue

@@ -0,0 +1,113 @@
+<template>
+  <!-- 过滤客户资料表格 -->
+  <div class="filter-custom-table">
+    <a-select label-in-value
+              class="conditionSelect"
+              v-for="(item, i) in selectList"
+              :key="i + '11'"
+              style="width: 120px"
+              v-model:value="item.value"
+              :placeholder="item.placeholder"
+              @change="item.change">
+      <a-select-option v-for="(option, j) in item.list"
+                       :key="j + '22'"
+                       :value="option.value">{{option.lable}}</a-select-option>
+    </a-select>
+    <a-input v-model:value="item.value"
+             v-for="(item,i) in inputList"
+             :key="i + '33'"
+             class="tableConditionInput"
+             :placeholder="item.placeholder" />
+    <a-button class="selectBtn"
+              v-for="(item, i) in fixedBtnList"
+              :key="i + 'fixed'"
+              @click="item.event">{{item.lable}}</a-button>
+    <slot></slot>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType } from 'vue';
+import * as type from '@/common/setup/filter/interface';
+
+export default defineComponent({
+    name: 'filter',
+    components: {},
+    props: {
+        selectList: {
+            type: Array as PropType<type.SelectList[]>,
+            default: [],
+        },
+        inputList: {
+            type: Array as PropType<type.InputList[]>,
+            default: [],
+        },
+        fixedBtnList: {
+            type: Array as PropType<type.FixedBtnList[]>,
+            default: [],
+        },
+    },
+});
+</script>
+
+<style lang="less">
+.filter-custom-table {
+    width: 100%;
+    display: inline-flex;
+    padding-top: 9px;
+    padding-bottom: 6px;
+    .ant-select-single:not(.ant-select-customize-input) {
+        margin-right: 10px;
+        // background: #252D34;
+        // .rounded-corners(3px);
+        .ant-select-selector {
+            height: 30px;
+            padding: 0 8px;
+            background: @m-grey9;
+            border: none;
+            .rounded-corners(3px);
+            color: @m-grey10;
+            .ant-select-arrow {
+                right: 8px;
+                color: @m-grey1;
+            }
+        }
+        .ant-select-arrow {
+            color: @m-grey1;
+        }
+        .ant-select-selection-item {
+            color: @m-white1;
+        }
+    }
+    .conditionSelect + .conditionSelect {
+        margin-left: 10px;
+    }
+}
+.selectBtn.ant-btn {
+    margin-left: 10px;
+    width: 80px;
+    height: 30px;
+    line-height: 31px;
+    text-align: center;
+    background: linear-gradient(0deg, @m-grey15 0%, @m-grey16 98%);
+    border: 0;
+    color: @m-white0;
+    font-size: 14px;
+    .rounded-corners(3px);
+    &:hover,
+    &:focus {
+        background: linear-gradient(0deg, @m-grey15-hover 0%, @m-grey16-hover 98%);
+        color: rgba(@m-white0, 0.8);
+        border: 0;
+    }
+}
+.operBtn.ant-btn:extend(.selectBtn.ant-btn) {
+    background: linear-gradient(0deg, @m-blue6 0%, @m-blue7 99%);
+    &:hover,
+    &:focus {
+        background: linear-gradient(0deg, @m-blue6-hover 0%, @m-blue7-hover 99%);
+        color: rgba(@m-white0, 0.8);
+        border: 0;
+    }
+}
+</style>;

+ 41 - 0
src/common/setup/filter/index.ts

@@ -0,0 +1,41 @@
+import { ref, SetupContext } from 'vue';
+import * as type from './interface';
+import { InputList, SelectList } from './interface';
+
+
+export function handleFilter(select: SelectList[], input: InputList[], context: SetupContext) {
+    const selected = select.map(e => {
+        e.change = search
+        return e
+    })
+    const selectList = ref<type.SelectList[]>(selected);
+    const inputList = ref<type.InputList[]>(input);
+
+    const fixedBtnList = ref<type.FixedBtnList[]>([
+        { lable: '查询', event: search },
+        { lable: '重置', event: reset },
+    ]);
+    function search() {
+        const result: type.Obj = {};
+        selectList.value.forEach((e) => {
+            const { value, key } = e;
+            const cache = value ? (value as any).value : '';
+            result[key] = [cache];
+        });
+        inputList.value.forEach((e) => {
+            const { value, key } = e;
+            const cache = value ? value : '';
+            result[key] = [cache];
+        });
+        context.emit('search', result);
+    }
+    function reset() {
+        selectList.value.forEach((e) => (e.value = undefined));
+        inputList.value.forEach((e) => (e.value = ''));
+        search();
+    }
+
+    return { selectList, inputList, fixedBtnList };
+}
+
+export type { InputList, SelectList };

+ 27 - 0
src/common/setup/filter/interface.ts

@@ -0,0 +1,27 @@
+export interface Value {
+    key: string;
+    value: string;
+}
+export interface SelectOption {
+    value: number | string;
+    lable: string;
+}
+export interface InputList {
+    value: string | undefined;
+    key: string;
+    placeholder: string;
+    className?: string;
+}
+export interface SelectList extends InputList {
+    change?: Function;
+    list: SelectOption[];
+}
+export interface FixedBtnList {
+    lable: string;
+    event: Function;
+    className?: string;
+}
+
+export interface Obj {
+    [props: string]: string[]
+}

+ 1 - 1
src/common/setup/table/button.ts

@@ -35,7 +35,7 @@ export function getBtnList(menuType: keyof ButtonListKey, hasDetail: boolean) {
     const permissionData = inject('thirdMenuList') as Ref<OperationTabMenu[]>;
     const name = 'permissionData'
     // 存入sessionStorageUtil 是为了处理页面刷新的情况(这个时候重新从服务获取数据,但页面已经先加载了,vue 中的 依赖注入在异步中不能建立通信)
-    const data: OperationTabMenu[] = permissionData.value.length ? permissionData.value : sessionStorageUtil.getItem(name)
+    const data: OperationTabMenu[] = permissionData.value.length ? permissionData.value : sessionStorageUtil.getItem(name) ? sessionStorageUtil.getItem(name) : []
     sessionStorageUtil.setItem(name, data)
 
     const commonBtn = ref<BtnList[]>([]); // 通用按钮列表,不用选中数据才显示

+ 19 - 0
src/router/index.ts

@@ -401,6 +401,25 @@ const routes: Array<RouteRecordRaw> = [
                 meta: {
                     requireAuth: true,
                 },
+                redirect: { name: 'inventory_review_checkin' },
+                children: [
+                    {
+                        path: '/inventory_review/checkin',
+                        name: 'inventory_review_checkin',
+                        component: () => import('@/views/manage/inventory-review/list/checkin/index.vue'),
+                        meta: {
+                            requireAuth: true,
+                        },
+                    },
+                    {
+                        path: '/inventory_review/checkout',
+                        name: 'inventory_review_checkout',
+                        component: () => import('@/views/manage/inventory-review/list/checkout/index.vue'),
+                        meta: {
+                            requireAuth: true,
+                        },
+                    },
+                ]
             },
             {
                 path: '/exposure_report',

+ 5 - 2
src/services/go/ermcp/inventory-review/index.ts

@@ -1,14 +1,17 @@
+import { getUserId } from '@/services/bus/account';
 import { commonSearch_go } from '@/services/go';
 import { Ermcp3AreaStockApply, QueryAreaStockApplyReq } from '@/services/go/ermcp/inventory-review/interface';
 
 /** ================================= 管理 - 库存审核 ================================**/
 /**
  * 查询库存申请(出入库记录|库存审核)  /Ermcp3/QueryAreaStockApply  (这个审核和库存管理 - 申请记录) 调用的是同一个接口
- * @param req.userid 用户ID(必填)
+ * @param QueryAreaStockApplyReq
  * @constructor
  */
 export function QueryAreaStockApply(req: QueryAreaStockApplyReq): Promise<Ermcp3AreaStockApply[]> {
-    return commonSearch_go('/Ermcp3/QueryAreaStockApply', req).catch((err) => {
+    const param = { userid: getUserId() }
+    Object.assign(param, req)
+    return commonSearch_go('/Ermcp3/QueryAreaStockApply', param).catch((err) => {
         throw new Error(`查询库存申请: ${err.message}`);
     });
 }

+ 45 - 46
src/services/go/ermcp/inventory-review/interface.ts

@@ -1,6 +1,5 @@
 // 查询库存请求
-export interface QueryAreaStockApplyReq{
-    userid: number  //    用户ID
+export interface QueryAreaStockApplyReq {
     deliverygoodsid?: number // 现货商品ID
     inouttype?: string  // 出入库类型(可多项,逗号隔开) 1:采购入库 2:销售出库 3:生产入库 4:生产出库
     spotcontractid?: number // 合同ID
@@ -10,48 +9,48 @@ export interface QueryAreaStockApplyReq{
     applystatus?: string // 申请状态(可多项,逗号隔开)1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
 }
 // 查询库存返回
-export interface Ermcp3AreaStockApply{
-    applyid	:number;//申请人
-    applyname	:string;//申请人名称
-    applyremark	:string;//申请备注
-    applysrc	:number;//申请来源 - 1:管理端 2:终端
-    applystatus	:number;//申请状态 - 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
-    applytime	:string;//申请时间
-    auditid	:number;//审核人
-    auditname	:string;//审核人名称
-    auditremark	:string;//审核备注
-    auditsrc	:number;//审核来源 - 1:管理端 2:终端
-    audittime	:string;//审核时间
-    audittradedate	:string;//审核交易日(yyyyMMdd)
-    brandname	:string;//品牌名称
-    buynickname	:string;//采购方昵称
-    buyuserid	:number;//采购方userid
-    buyusername	:string;//采购方名称
-    contractno	:string;//合同编号
-    contractqty	:number;//合同量
-    contracttype	:number;//现货合同类型 - 1:采购 -1:销售
-    deliverygoodscode	:string;//现货品种代码
-    deliverygoodsid	:number;//现货品种id
-    deliverygoodsname	:string;//现货品种名称
-    enumdicname	:string;//现货商品单位名称
-    inoutapplyid	:string;//申请ID(6number;
-//7+Unix秒时间戳(1number;
-//位)+xxxxxx)
-    inouttype	:number;//出入库类型 - 1:采购入库 2:销售出库 3:生产入库 4:生产出库
-    pricetype	:number;//定价类型 - 1:一口价 2:点价 3:暂定价
-    qty	:number;//数量
-    sellnickname	:string;//销售方昵称
-    selluserid	:number;//销售方userid
-    sellusername	:string;//销售方名称
-    spotcontractid	:string;//关联现货合同ID
-    spotgoodsbrandid	:number;//现货品牌ID
-    unitid	:number;//单位id
-    userid	:number;//机构ID
-    warehousecode	:string;//仓库代码
-    warehouseinfoid	:string;//现货仓库ID
-    warehousename	:string;//仓库名称
-    warehousetype	:number;//仓库类型 - 1 厂库 2 自有库 3 合作库
-    wrstandardcode	:string;//品类代码
-    wrstandardid	:number;//品类ID
-    wrstandardname	:string;//品类名称
+export interface Ermcp3AreaStockApply {
+    applyid: number;//申请人
+    applyname: string;//申请人名称
+    applyremark: string;//申请备注
+    applysrc: number;//申请来源 - 1:管理端 2:终端
+    applystatus: number;//申请状态 - 1:待审核 2:审核通过 3:审核拒绝 4:处理失败 5:已撤回
+    applytime: string;//申请时间
+    auditid: number;//审核人
+    auditname: string;//审核人名称
+    auditremark: string;//审核备注
+    auditsrc: number;//审核来源 - 1:管理端 2:终端
+    audittime: string;//审核时间
+    audittradedate: string;//审核交易日(yyyyMMdd)
+    brandname: string;//品牌名称
+    buynickname: string;//采购方昵称
+    buyuserid: number;//采购方userid
+    buyusername: string;//采购方名称
+    contractno: string;//合同编号
+    contractqty: number;//合同量
+    contracttype: number;//现货合同类型 - 1:采购 -1:销售
+    deliverygoodscode: string;//现货品种代码
+    deliverygoodsid: number;//现货品种id
+    deliverygoodsname: string;//现货品种名称
+    enumdicname: string;//现货商品单位名称
+    inoutapplyid: string;//申请ID(6number;
+    //7+Unix秒时间戳(1number;
+    //位)+xxxxxx)
+    inouttype: number;//出入库类型 - 1:采购入库 2:销售出库 3:生产入库 4:生产出库
+    pricetype: number;//定价类型 - 1:一口价 2:点价 3:暂定价
+    qty: number;//数量
+    sellnickname: string;//销售方昵称
+    selluserid: number;//销售方userid
+    sellusername: string;//销售方名称
+    spotcontractid: string;//关联现货合同ID
+    spotgoodsbrandid: number;//现货品牌ID
+    unitid: number;//单位id
+    userid: number;//机构ID
+    warehousecode: string;//仓库代码
+    warehouseinfoid: string;//现货仓库ID
+    warehousename: string;//仓库名称
+    warehousetype: number;//仓库类型 - 1 厂库 2 自有库 3 合作库
+    wrstandardcode: string;//品类代码
+    wrstandardid: number;//品类ID
+    wrstandardname: string;//品类名称
 }

+ 2 - 0
src/views/manage/finance-review/list/invoice/index.vue

@@ -68,6 +68,8 @@ export default defineComponent({
         });
         // 查询
         function search(value: any) {
+            console.log('value', value);
+
             filteredInfo.value = value;
             // 更新表信息
             updateColumn();

+ 67 - 0
src/views/manage/inventory-review/components/checkinAudit/index.vue

@@ -0,0 +1,67 @@
+<template>
+  <!-- 款项审核-->
+  <a-modal class="inventory_review_checkin_audit custom-detail"
+           title="款项审核"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="submit">关闭</a-button>
+    </template>
+
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, reactive, ref, watchEffect } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { mergeObj } from '@/utils/objHandle';
+import { getStatusName } from '@/views/information/custom/setup';
+import { formatValue, formatTime } from '@/common/methods';
+
+export default defineComponent({
+    name: 'inventory_review_checkin_audit',
+    components: {},
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const { visible, cancel } = closeModal('inventory_review_checkin_audit');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            setTimeout(() => {
+                loading.value = false;
+                cancel();
+            }, 2000);
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            formatValue,
+            getStatusName,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.inventory_review_checkin_audit {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+}
+</style>;

+ 67 - 0
src/views/manage/inventory-review/components/checkinCancel/index.vue

@@ -0,0 +1,67 @@
+<template>
+  <!-- 撤销款项登记-->
+  <a-modal class="inventory_review_checkin_cancel custom-detail"
+           title="撤销款项登记"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="submit">关闭</a-button>
+    </template>
+
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, reactive, ref, watchEffect } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { mergeObj } from '@/utils/objHandle';
+import { getStatusName } from '@/views/information/custom/setup';
+import { formatValue, formatTime } from '@/common/methods';
+
+export default defineComponent({
+    name: 'inventory_review_checkin_cancel',
+    components: {},
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const { visible, cancel } = closeModal('inventory_review_checkin_cancel');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            setTimeout(() => {
+                loading.value = false;
+                cancel();
+            }, 2000);
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            formatValue,
+            getStatusName,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.inventory_review_checkin_cancel {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+}
+</style>;

+ 66 - 0
src/views/manage/inventory-review/components/checkinDetail/index.vue

@@ -0,0 +1,66 @@
+<template>
+  <!-- 款项详情-->
+  <a-modal class="finance_review_funds_detail custom-detail"
+           title="款项详情"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="submit">关闭</a-button>
+    </template>
+
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, reactive, ref, watchEffect } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { getStatusName } from '@/views/information/custom/setup';
+import { formatValue, formatTime } from '@/common/methods';
+
+export default defineComponent({
+    name: 'finance_review_funds_detail',
+    components: {},
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const { visible, cancel } = closeModal('detail');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            setTimeout(() => {
+                loading.value = false;
+                cancel();
+            }, 2000);
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            formatValue,
+            getStatusName,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.finance_review_funds_detail {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+}
+</style>;

+ 67 - 0
src/views/manage/inventory-review/components/checkoutAudit/index.vue

@@ -0,0 +1,67 @@
+<template>
+  <!-- 发票审核-->
+  <a-modal class="inventory_review_checkout_audit custom-detail"
+           title="发票审核"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="submit">关闭</a-button>
+    </template>
+
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, reactive, ref, watchEffect } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { mergeObj } from '@/utils/objHandle';
+import { getStatusName } from '@/views/information/custom/setup';
+import { formatValue, formatTime } from '@/common/methods';
+
+export default defineComponent({
+    name: 'inventory_review_checkout_audit',
+    components: {},
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const { visible, cancel } = closeModal('inventory_review_checkout_audit');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            setTimeout(() => {
+                loading.value = false;
+                cancel();
+            }, 2000);
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            formatValue,
+            getStatusName,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.inventory_review_checkout_audit {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+}
+</style>;

+ 67 - 0
src/views/manage/inventory-review/components/checkoutCancel/index.vue

@@ -0,0 +1,67 @@
+<template>
+  <!-- 撤销发票登记-->
+  <a-modal class="inventory_review_checkout_cancel custom-detail"
+           title="撤销发票登记"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="submit">关闭</a-button>
+    </template>
+
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, reactive, ref, watchEffect } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { mergeObj } from '@/utils/objHandle';
+import { getStatusName } from '@/views/information/custom/setup';
+import { formatValue, formatTime } from '@/common/methods';
+
+export default defineComponent({
+    name: 'inventory_review_checkout_cancel',
+    components: {},
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const { visible, cancel } = closeModal('inventory_review_checkout_cancel');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            setTimeout(() => {
+                loading.value = false;
+                cancel();
+            }, 2000);
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            formatValue,
+            getStatusName,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.inventory_review_checkout_cancel {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+}
+</style>;

+ 67 - 0
src/views/manage/inventory-review/components/checkoutDetail/index.vue

@@ -0,0 +1,67 @@
+<template>
+  <!-- 发票登记详情-->
+  <a-modal class="finance_review_invoice_detail custom-detail"
+           title="发票登记详情"
+           v-model:visible="visible"
+           centered
+           :maskClosable="maskClosableFlag"
+           @cancel="cancel"
+           width="890px">
+    <template #footer>
+      <a-button key="submit"
+                type="primary"
+                :loading="loading.loading"
+                @click="submit">关闭</a-button>
+    </template>
+
+  </a-modal>
+</template>
+
+<script lang="ts">
+import { defineComponent, PropType, reactive, ref, watchEffect } from 'vue';
+import { closeModal } from '@/common/setup/modal/index';
+import { QueryCustomInfoType } from '@/services/go/ermcp/customInfo/interface';
+import { mergeObj } from '@/utils/objHandle';
+import { getStatusName } from '@/views/information/custom/setup';
+import { formatValue, formatTime } from '@/common/methods';
+
+export default defineComponent({
+    name: 'finance_review_invoice_detail',
+    components: {},
+    props: {
+        selectedRow: {
+            type: Object as PropType<QueryCustomInfoType>,
+            default: {},
+        },
+    },
+    setup(props) {
+        const { visible, cancel } = closeModal('detail');
+        const loading = ref<boolean>(false);
+        const maskClosableFlag = ref<boolean>(false);
+        function submit() {
+            loading.value = true;
+            setTimeout(() => {
+                loading.value = false;
+                cancel();
+            }, 2000);
+        }
+        return {
+            visible,
+            cancel,
+            submit,
+            loading,
+            formatValue,
+            getStatusName,
+            maskClosableFlag,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.finance_review_invoice_detail {
+    .ant-form.inlineForm {
+        margin-top: 20px;
+    }
+}
+</style>;

+ 68 - 0
src/views/manage/inventory-review/components/filterTable/index.vue

@@ -0,0 +1,68 @@
+<template>
+  <!-- 过滤客户资料表格 -->
+  <div>
+    <Filter :selectList="selectList"
+            :inputList="inputList"
+            :fixedBtnList="fixedBtnList" />
+    <slot></slot>
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent } from 'vue';
+import { handleFilter, InputList, SelectList } from '@/common/setup/filter';
+import Filter from '@/common/components/filter/index.vue';
+
+export default defineComponent({
+    name: 'check-out-in-filter-table',
+    components: {
+        Filter,
+    },
+    props: {
+        inOrOut: {
+            type: String,
+            default: 'in',
+        },
+    },
+    setup(props, context) {
+        // 入库过滤类型
+        const inList = [
+            { value: 1, lable: '采购入库' },
+            { value: 3, lable: '生产入库' },
+        ];
+        // 出库过滤类型
+        const outList = [
+            { value: 2, lable: '销售出库' },
+            { value: 4, lable: '生产出库' },
+        ];
+        const select: SelectList[] = [
+            {
+                value: undefined,
+                key: 'contracttype',
+                placeholder: '全部合同类型',
+                list: [
+                    { value: 1, lable: '采购' },
+                    { value: -1, lable: '销售' },
+                ],
+            },
+            {
+                value: undefined,
+                key: 'inouttype',
+                placeholder: props.inOrOut === 'in' ? '全部入库类型' : '全部出库类型',
+                list: props.inOrOut === 'in' ? inList : outList,
+            },
+        ];
+        const input: InputList[] = [
+            { value: '', placeholder: '模糊搜索对手方', key: 'buyusernameOrsellusername' },
+            { value: '', placeholder: '模糊搜索合同编号', key: 'contractno' },
+            { value: '', placeholder: '模糊搜索现货品种', key: 'deliverygoodsname' },
+        ];
+        return {
+            ...handleFilter(select, input, context),
+        };
+    },
+});
+</script>
+
+<style lang="less">
+</style>;

+ 10 - 0
src/views/manage/inventory-review/components/index.ts

@@ -0,0 +1,10 @@
+import CheckinAudit from './checkinAudit/index.vue';
+import CheckinCancel from './checkinCancel/index.vue';
+import CheckinDetail from './checkinDetail/index.vue';
+import CheckoutAudit from './checkoutAudit/index.vue';
+import CheckoutCancel from './checkoutCancel/index.vue';
+import CheckoutDetail from './checkoutDetail/index.vue';
+import Filter from './filterTable/index.vue';
+
+export { Filter, CheckinAudit, CheckinCancel, CheckinDetail, CheckoutAudit, CheckoutCancel, CheckoutDetail };
+

+ 99 - 0
src/views/manage/inventory-review/list/checkin/index.vue

@@ -0,0 +1,99 @@
+<template>
+  <!-- 库存审核 入库-->
+  <div class="inventory_review_checkin"
+       :loading="loading">
+    <Filter @search="search"
+            :inOrOut="'in'">
+      <BtnList :btnList="commonBtn" />
+    </Filter>
+    <contextMenu :contextMenuList="forDataBtn">
+      <a-table :columns="columns"
+               class="topTable"
+               :pagination="false"
+               :expandedRowKeys="expandedRowKeys"
+               :customRow="Rowclick"
+               rowKey="key"
+               :data-source="tableList">
+        <!-- 额外的展开行 -->
+        <template #expandedRowRender="{  }">
+          <BtnList :btnList="forDataBtn" />
+        </template>
+        <template #warehousetype="{ text }">
+          <span>{{ getWareHouseType(text) }}</span>
+        </template>
+        <template #warehousestatus="{ text }">
+          <span>{{ getWareHouseStatus(text) }}</span>
+        </template>
+      </a-table>
+    </contextMenu>
+    <!-- 审核-->
+    <CheckinAudit />
+    <!-- 撤销 -->
+    <CheckinCancel />
+    <!-- 详情 -->
+    <CheckinDetail />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, initData, getTableColumns, getTableEvent, getBtnList, contextMenu, BtnList } from '@/common/export/table';
+
+import { Filter, CheckinAudit, CheckinCancel, CheckinDetail } from '../../components';
+
+import { queryTableList, getFilterTableCB, Ermcp3AreaStockApply } from '../setup';
+
+export default defineComponent({
+    name: 'inventory_review_checkin',
+    components: {
+        contextMenu,
+        Filter,
+        BtnList,
+        CheckinAudit,
+        CheckinCancel,
+        CheckinDetail,
+    },
+    setup() {
+        // 表头数据
+        const { columns, registerColumn, updateColumn, filteredInfo } = getTableColumns();
+        // 表格事件
+        const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<Ermcp3AreaStockApply>({});
+        // 表格操作按钮列表
+        const { commonBtn, forDataBtn } = getBtnList('inventory_review_checkin', true);
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList({ inouttype: '1,3' });
+        initData(() => {
+            // 获取列表数据
+            queryTable();
+            // 注册表头信息 过滤
+            registerColumn('table_pcweb_stock_aduit', getFilterTableCB);
+        });
+        // 查询
+        function search(value: any) {
+            console.log('value', value);
+
+            filteredInfo.value = value;
+            // 更新表信息
+            updateColumn();
+        }
+        return {
+            columns,
+            filteredInfo,
+            expandedRowKeys,
+            selectedRow,
+            Rowclick,
+            commonBtn,
+            forDataBtn,
+            loading,
+            tableList,
+            search,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.inventory_review_checkin {
+}
+</style
+>;
+

+ 97 - 0
src/views/manage/inventory-review/list/checkout/index.vue

@@ -0,0 +1,97 @@
+<template>
+  <!-- 库存审核 出库-->
+  <div class="inventory_review_checkout"
+       :loading="loading">
+    <Filter @search="search"
+            :inOrOut="'out'">
+      <BtnList :btnList="commonBtn" />
+    </Filter>
+    <contextMenu :contextMenuList="forDataBtn">
+      <a-table :columns="columns"
+               class="topTable"
+               :pagination="false"
+               :expandedRowKeys="expandedRowKeys"
+               :customRow="Rowclick"
+               rowKey="key"
+               :data-source="tableList">
+        <!-- 额外的展开行 -->
+        <template #expandedRowRender="{  }">
+          <BtnList :btnList="forDataBtn" />
+        </template>
+        <template #warehousetype="{ text }">
+          <span>{{ getWareHouseType(text) }}</span>
+        </template>
+        <template #warehousestatus="{ text }">
+          <span>{{ getWareHouseStatus(text) }}</span>
+        </template>
+      </a-table>
+    </contextMenu>
+    <!-- 详情 -->
+    <CheckoutDetail />
+    <!-- 审核 -->
+    <CheckoutAudit />
+    <!-- 撤销 -->
+    <CheckoutCancel />
+  </div>
+</template>
+
+<script lang="ts">
+import { defineComponent, initData, getTableColumns, getTableEvent, getBtnList, contextMenu, BtnList } from '@/common/export/table';
+
+import { CheckoutAudit, CheckoutCancel, CheckoutDetail, Filter } from '../../components';
+
+import { queryTableList, getFilterTableCB, Ermcp3AreaStockApply } from '../setup';
+
+export default defineComponent({
+    name: 'inventory_review_checkout',
+    components: {
+        contextMenu,
+        Filter,
+        BtnList,
+        CheckoutDetail,
+        CheckoutAudit,
+        CheckoutCancel,
+    },
+    setup() {
+        // 表头数据
+        const { columns, registerColumn, updateColumn, filteredInfo } = getTableColumns();
+        // 表格事件
+        const { expandedRowKeys, selectedRow, Rowclick } = getTableEvent<Ermcp3AreaStockApply>({});
+        // 表格操作按钮列表
+        const { commonBtn, forDataBtn } = getBtnList('inventory_review_checkout', true);
+        // 表格列表数据
+        const { loading, tableList, queryTable } = queryTableList({ inouttype: '2,4' });
+        initData(() => {
+            // 获取列表数据
+            queryTable();
+            // 注册表头信息 过滤
+            registerColumn('table_pcweb_stock_aduit', getFilterTableCB);
+        });
+        // 查询
+        function search(value: any) {
+            filteredInfo.value = value;
+            // 更新表信息
+            updateColumn();
+        }
+        return {
+            columns,
+            filteredInfo,
+            expandedRowKeys,
+            selectedRow,
+            Rowclick,
+            commonBtn,
+            forDataBtn,
+            loading,
+            tableList,
+            search,
+        };
+    },
+});
+</script>
+
+<style lang="less">
+.inventory_review_checkout {
+}
+</style
+>;
+

+ 66 - 0
src/views/manage/inventory-review/list/setup.ts

@@ -0,0 +1,66 @@
+import { Column, ColumnType } from '@/common/setup/table/index';
+import { QueryAreaStockApply } from '@/services/go/ermcp/inventory-review';
+import { Ermcp3AreaStockApply, QueryAreaStockApplyReq } from '@/services/go/ermcp/inventory-review/interface';
+import { message } from 'ant-design-vue';
+import { ref } from 'vue';
+/**
+ * 获取表格列表数据
+ * @param type 
+ * @returns 
+ */
+export function queryTableList(type: QueryAreaStockApplyReq) {
+    // 加载状态
+    const loading = ref<boolean>(false);
+    // 表格数据
+    const tableList = ref<Ermcp3AreaStockApply[]>([]);
+    function queryTable() {
+        QueryAreaStockApply(type)
+            .then((res) => {
+                tableList.value = res.map((e, i) => {
+                    return { ...e, key: String(i) };
+                });
+                loading.value = false;
+                console.log('查询列表', tableList);
+            })
+            .catch((err) => {
+                message.error(err);
+                loading.value = false;
+            });
+    }
+    return { loading, tableList, queryTable }
+}
+
+/**
+ * 过滤表格的回调函数
+ * @param e 
+ * @param item 
+ * @param filtered 
+ */
+export function getFilterTableCB(e: Column, item: ColumnType, filtered: any) {
+    // 以下添加过滤数据对应的方法
+    if (e.columnfield === 'contracttype') {
+        item.onFilter = (value: string, record: Ermcp3AreaStockApply) => String(record.contracttype).includes(String(value));
+        item.filteredValue = filtered.contracttype || null;
+    }
+    if (e.columnfield === 'buyusernameOrsellusername') {
+        item.onFilter = (value: string, record: Ermcp3AreaStockApply) => {
+            const { contracttype, buyusername, sellusername } = record
+            if (contracttype === 1) {   // 采购
+                return sellusername.includes(value)
+            } else {
+                return buyusername.includes(value)
+            }
+        };
+        item.filteredValue = filtered.buyusernameOrsellusername || null;
+    }
+    if (e.columnfield === 'contractno') {
+        item.onFilter = (value: string, record: Ermcp3AreaStockApply) => record.contractno.includes(value);
+        item.filteredValue = filtered.contractno || null;
+    }
+    if (e.columnfield === 'deliverygoodsname') {
+        item.onFilter = (value: string, record: Ermcp3AreaStockApply) => record.deliverygoodsname.includes(value);
+        item.filteredValue = filtered.deliverygoodsname || null;
+    }
+}
+
+export type { Ermcp3AreaStockApply };

+ 0 - 0
src/views/manage/inventory-review/setup.ts