DESKTOP-B78GIPM\admin лет назад: 2
Родитель
Сommit
e94f81f4e2

+ 8 - 15
src/views/finance/financeModules/depository.vue

@@ -47,7 +47,7 @@
         <a style="margin-left: 24px" @click="onClearSelected">清空</a>
       </div> -->
 
-        <a-table ref="table" size="middle" :scroll="{ x: true }" bordered rowKey="id" :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{
+        <a-table ref="table" size="middle" :scroll="{ x: true }" bordered rowKey="id" :columns="columnsCopy" :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{
           selectedRowKeys: selectedRowKeys,
           onChange: onSelectChange,
         }" class="j-table-force-nowrap" @change="handleTableChange">
@@ -101,17 +101,12 @@ export default {
                 return
             }
             let obj = Object.keys(newVal[0])
-            this.columns = [{
+            this.columnsCopy = [{
                     title: "商家",
                     align: "center",
                     dataIndex: "hotel_name",
                 },
                 {
-                    title: "操作人员",
-                    align: "center",
-                    dataIndex: "createTime",
-                },
-                {
                     title: "部门",
                     align: "center",
                     dataIndex: "department",
@@ -121,7 +116,7 @@ export default {
             obj = obj.filter(item => item != 'department' && item != 'hotel_name')
             obj.forEach(item => {
                 console.log(item);
-                this.columns.push({
+                this.columnsCopy.push({
                     title: item,
                     align: 'center',
                     dataIndex: item
@@ -133,7 +128,7 @@ export default {
                 //     item : this.dataSource.reduce((a, b) => a + b[item], 0)
                 // })
             })
-            this.columns.push({
+            this.columnsCopy.push({
                 title: '合计',
                 align: 'center',
                 dataIndex: 'action',
@@ -178,18 +173,16 @@ export default {
                     dataIndex: "hotel_name",
                 },
                 {
-                    title: "操作人员",
-                    align: "center",
-                    dataIndex: "createTime",
-                },
-                {
                     title: "部门",
                     align: "center",
                     dataIndex: "department",
                 }
             ],
+            columnsCopy:[
+
+            ],
             url: {
-                list: "/finance/summary/financeSummaryPage?departmentId=0",
+                list: "/finance/summary/financeSummaryPage",
                 delete: "/kc/kcStock/delete",
                 deleteBatch: "/kc/kcStock/deleteBatch",
                 exportXlsUrl: "/kc/kcStock/exportXls",

+ 68 - 34
src/views/finance/financeModules/detailedReport.vue

@@ -56,6 +56,13 @@
             {{record | sum}}
         </template>
 
+        <template slot="footer" slot-scope="currentPageData">
+            <div class="tableData">
+
+            </div>
+            <a-table bordered :showHeader="false" :pagination="false" :columns="columnsCopy" :dataSource="dataList"></a-table>
+        </template>
+
         </a-table>
     </div>
 
@@ -75,6 +82,7 @@ import {
     postAction
 } from "@/api/manage";
 // import DepositoryModal from "./outBoundModal/outBoundModal.vue";
+
 export default {
     name: "memberList",
     mixins: [JeecgListMixin],
@@ -100,7 +108,14 @@ export default {
             if (newVal[newVal.length-1].flag) {
                 return
             }
-            let obj = Object.keys(newVal[0])
+            this.dataList=[]
+            this.dataList.push({
+                fee_type: '合计',
+                pay_money: (this.dataSource.reduce((a, b) => a + b.pay_money, 0)*1).toFixed(2),
+                flag: true
+            })
+            console.log(this.dataSource);
+            // let obj = Object.keys(newVal[0])
             // this.columns = [{
             //         title: "商家",
             //         align: "center",
@@ -143,7 +158,7 @@ export default {
             // })
             // let obj1 = {}
             // obj1=Object.assign({}, ...this.arr, {hotel_name: '合计'},{flag:true});
-            // this.dataSource.push(obj1)
+            
 
         }
     },
@@ -171,72 +186,85 @@ export default {
                 showSizeChanger: true,
                 total: 0,
             },
+            columnsCopy:[
+                {
+                    title: "合计",
+                    align: "center",
+                    dataIndex: "fee_type",
+                    align: 'left',
+                },
+                {
+                    title: "金额",
+                    align: "center",
+                    dataIndex: "pay_money",
+                },
+            ],
             // 表头
             columns: [{
                     title: "收退款",
                     align: "center",
-                    dataIndex: "hotel_name",
+                    dataIndex: "fee_type",
                 },
                 {
                     title: "部门",
                     align: "center",
-                    dataIndex: "createTime",
-                },
-                {
-                    title: "账单类型",
-                    align: "center",
                     dataIndex: "department",
                 },
+                // {
+                //     title: "账单类型",
+                //     align: "center",
+                //     dataIndex: "department",
+                // },
                 {
                     title: "付款方式",
                     align: "center",
-                    dataIndex: "department",
+                    dataIndex: "payment_method_name",
                 },
                 {
                     title: "单据号",
                     align: "center",
-                    dataIndex: "department",
-                },
-                {
-                    title: "系统单号",
-                    align: "center",
-                    dataIndex: "department",
+                    dataIndex: "order_id",
                 },
+                // {
+                //     title: "系统单号",
+                //     align: "center",
+                //     dataIndex: "department",
+                // },
                 {
                     title: "姓名",
                     align: "center",
-                    dataIndex: "department",
+                    dataIndex: "contact_name",
                 },
                 {
                     title: "房间号",
                     align: "center",
-                    dataIndex: "department",
+                    dataIndex: "room_name",
                 },
                 {
                     title: "金额",
                     align: "center",
-                    dataIndex: "department",
+                    dataIndex: "pay_money",
                 },
                 {
                     title: "发生时间",
                     align: "center",
-                    dataIndex: "department",
+                    dataIndex: "create_time",
                 },
-                {
-                    title: "操作人员",
-                    align: "center",
-                    dataIndex: "department",
-                },
-                {
-                    title: "营业日",
-                    align: "center",
-                    dataIndex: "department",
-                },
-                {
-                    title: "备注",
-                    align: "center",
-                    dataIndex: "department",
-                }
+                // {
+                //     title: "操作人员",
+                //     align: "center",
+                //     dataIndex: "department",
+                // },
+                // {
+                //     title: "营业日",
+                //     align: "center",
+                //     dataIndex: "department",
+                // },
+                // {
+                //     title: "备注",
+                //     align: "center",
+                //     dataIndex: "department",
+                // }
             ],
             url: {
                 list: "/finance/summary/financePage?departmentId=0",
@@ -299,4 +327,10 @@ export default {
 
 <style scoped>
 @import "~@assets/less/common.less";
+.ant-table.ant-table-small {
+  border: none;
+}
+.ant-table.ant-table-small .ant-table-tbody > tr > td {
+  border: none;
+}
 </style>

+ 4 - 1
src/views/stock/index.vue

@@ -23,6 +23,7 @@
       </a-tab-pane>
       <a-tab-pane key="6">
         <span slot="tab"> 库存盘点 </span>
+        <stockChecks />
       </a-tab-pane>
     </a-tabs>
   </a-card>
@@ -34,13 +35,15 @@ import goods from "./goods.vue";
 import supplier from "./supplier.vue";
 import stock from "./stock.vue";
 import depositoryingoods from './depositoryingoods'
+import stockChecks from './stockChecks/stockChecks.vue'
 export default {
   components: {
     depository,
     goods,
     supplier,
     stock,
-    depositoryingoods
+    depositoryingoods,
+    stockChecks
   },
   data() {
     return { activeKey: "1" };

+ 1 - 0
src/views/stock/modules/DepositoryForm copy.vue

@@ -268,6 +268,7 @@ export default {
             return
           }
             this.model = Object.assign({}, record);
+            this.model.stockType = this.model.stockType.toString()
             console.log(this.model);
             getAction(`/kc/kcStockDetail/list?stockId=${this.model.code}`).then(res=>{
               console.log(res);

+ 1 - 0
src/views/stock/outBoundModal/outBoundForm.vue

@@ -271,6 +271,7 @@ export default {
             return
           }
             this.model = Object.assign({}, record);
+            this.model.stockType = this.model.stockType.toString()
             console.log(this.model);
             getAction(`/kc/kcStockDetail/list?stockId=${this.model.code}`).then(res=>{
               console.log(res);

+ 9 - 9
src/views/stock/outbound.vue

@@ -88,15 +88,15 @@
                 </a-button>
             </template>
 
-            <span slot="action" slot-scope="text, record" v-if="record.status==0">
-                <a @click="handleEdit(record)">编辑</a>
+            <span slot="action" slot-scope="text, record">
+                <a @click="handleEdit(record)"  v-if="record.status==0">编辑</a>
 
-                <a-divider type="vertical" />
-                <a @click="examine(record)">审核</a>
-                <a-divider type="vertical" />
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a @click="examine(record)"  v-if="record.status==0" >审核</a>
+                <a-divider type="vertical"  v-if="record.status==0" />
                 <a @click="detailed(record)">明细</a>
-                <a-divider type="vertical" />
-                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"  v-if="record.status==0" >
                     <a>删除</a>
                 </a-popconfirm>
             </span>
@@ -167,7 +167,7 @@
             </a-col>
         </a-row>
         <a-row>
-            <a-table :columns="detailedColumns" :data-source="detailedData.list" :pagination="false" :rowKey="record => record.id" :scroll="{ x: 1500 }">
+            <a-table :columns="detailedColumns" :data-source="detailedData.list" :pagination="false" :rowKey="record => record.id">
                 <template slot="action" slot-scope="text, record">
                     <a @click="detailedDelete(record.id)">删除</a>
                 </template>
@@ -245,7 +245,7 @@ export default {
                 {
                     title: "出库数量",
                     align: "center",
-                    // dataIndex: "spec",
+                    dataIndex: "num",
                     scopedSlots: {
                         customRender: "num"
                     },

+ 225 - 0
src/views/stock/stockChecks/selectGoodsModal/SelectGoods.vue

@@ -0,0 +1,225 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col :span="6">
+            <a-form-item label="">
+              <a-input
+                placeholder="商品名称"
+                v-model="queryParam.goodsName"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="3">
+            <span>
+              <a-button type="primary" @click="searchQuery" icon="search"
+                >查询</a-button
+              >
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- table区域-begin -->
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{ x: true }"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        class="j-table-force-nowrap"
+        @change="handleTableChange"
+        :rowSelection="{
+          selectedRowKeys: selectedRowKeys,
+          onChange: onSelectChange,
+        }"
+      >
+        <template slot="avatar" slot-scope="text">
+          <a-avatar v-if="text" :src="text" />
+          <a-avatar v-else icon="user" />
+        </template>
+        <template slot="imgSlot" slot-scope="text, record">
+          <span v-if="!text" style="font-size: 12px; font-style: italic"
+            >无图片</span
+          >
+          <img
+            v-else
+            :src="getImgView(text)"
+            :preview="record.id"
+            height="25px"
+            alt=""
+            style="max-width: 80px; font-size: 12px; font-style: italic"
+          />
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px; font-style: italic"
+            >无文件</span
+          >
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)"
+          >
+            下载
+          </a-button>
+        </template>
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleSelect(record)">选择</a>
+        </span>
+      </a-table>
+    </div>
+  </a-card>
+</template>
+
+<script>
+import "@/assets/less/TableExpand.less";
+import { mixinDevice } from "@/utils/mixin";
+import { JeecgListMixin } from "@/mixins/JeecgListMixin";
+import { httpAction } from "@/api/manage";
+import { getAction } from "@/api/manage";
+export default {
+  name: "BusMemberCardList",
+  mixins: [JeecgListMixin, mixinDevice],
+  props: {
+    supplierId: {
+      type: String,
+      default: "",
+    },
+    depositoryId: {
+      default: "",
+    },
+  },
+  data() {
+    const hotelInfo = JSON.parse(localStorage.getItem("storeInfo"));
+    return {
+      datetime: [],
+      hotelId: "",
+      num: 1,
+      description: "PickingGoodsOrder",
+      // 表头
+      columns: [
+        {
+          title: "商品名称",
+          align: "center",
+          dataIndex: "goodsName",
+        },
+        // {
+        //   title: "商品类别",
+        //   align: "center",
+        //   dataIndex: "goodTypeName",
+        // },
+        {
+          title: "商品规格",
+          align: "center",
+          dataIndex: "goodsSpec",
+        },
+        {
+          title: "库存数量",
+          align: "center",
+          dataIndex: "num",
+        },
+        {
+          title: "单位",
+          align: "center",
+          dataIndex: "goodsUnitName",
+        },
+      ],
+      url: {
+        list: '/kc/kcDepositoryInGoods/list?depositoryId=' + this.depositoryId,
+        delete: "/kc/kcSupplierInGoods/delete",
+        deleteBatch: "/kc/kcSupplierInGoods/deleteBatch",
+        exportXlsUrl: "/kc/kcSupplierInGoods/exportXls",
+        importExcelUrl: "/kc/kcSupplierInGoods/importExcel",
+      },
+      dictOptions: {},
+      superFieldList: [],
+      orderGoodsDetailList: [],
+      selectOrderInfo: {},
+    };
+  },
+  created() {},
+  computed: {
+    importExcelUrl: function () {
+      return `${window._CONFIG["domianURL"]}/${this.url.importExcelUrl}`;
+    },
+  },
+  methods: {
+    handleSelect(row) {
+      this.$emit("ok", row);
+    },
+    submitForm() {
+      const that = this;
+      console.log(this.selectedRowKeys);
+      if (this.selectedRowKeys.length === 0) {
+        this.$message.warning("请先选择商品");
+        return;
+      }
+      let arr = this.dataSource.filter((item) => {
+        return this.selectedRowKeys.includes(item.id);
+      });
+      arr.forEach(element => {
+        element.stockNum = element.num;
+        // element.price = element.costPrice
+      });
+      arr = arr.map(ele=>({
+        ...ele,
+        name:ele.goodsName,
+        spec:ele.goodsSpec,
+        goodUnit:ele.goodsUnitName,
+      }))
+      this.$emit("ok", arr);
+      // that.confirmLoading = true;
+      // let httpurl = "/kc/kcStock/add";
+      // let method = "post";
+      // var model = {
+      //   supplierId: this.supplierId,
+      //   goodsIds: this.selectedRowKeys,
+      // };
+      // var _info = JSON.parse(localStorage.getItem("storeInfo"));
+      // if (_info) {
+      //   model.hotelId = _info.id;
+      // }
+      // httpAction(httpurl, model, method)
+      //   .then((res) => {
+      //     if (res.success) {
+      //       that.$message.success(res.message);
+      //       that.$emit("ok");
+      //     } else {
+      //       that.$message.warning(res.message);
+      //     }
+      //   })
+      //   .finally(() => {
+      //     that.confirmLoading = false;
+      //   });
+    },
+  },
+};
+</script>
+<style scoped>
+@import "~@assets/less/common.less";
+/deep/ .ant-input-search-button {
+  background-color: #ff4d4f;
+  border-color: #ff4d4f;
+}
+/deep/ .ant-input-search-button[disabled]:hover {
+  opacity: 0.7;
+  background-color: #ff4d4f;
+  border-color: #ff4d4f;
+}
+/deep/ .ant-input-search-button[disabled] {
+  opacity: 0.7;
+  color: #ffffff;
+}
+</style>

+ 66 - 0
src/views/stock/stockChecks/selectGoodsModal/SelectGoodsModal.vue

@@ -0,0 +1,66 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class: { 'jee-hidden': disableSubmit } }"
+    @cancel="handleCancel"
+    cancelText="关闭"
+  >
+    <picking-goods-order
+      ref="realForm"
+      @ok="submitCallback"
+      :disabled="disableSubmit"
+      :depositoryId="depositoryId"
+    ></picking-goods-order>
+  </j-modal>
+</template>
+
+<script>
+import PickingGoodsOrder from "./SelectGoods.vue";
+export default {
+  name: "SelectGoodsModal",
+  components: {
+    PickingGoodsOrder,
+  },
+  data() {
+    return {
+      title: "",
+      width: 800,
+      visible: false,
+      disableSubmit: false,
+      depositoryId: "",
+    };
+  },
+  methods: {
+    add() {
+      this.visible = true;
+      // this.$nextTick(()=>{
+      //   this.$refs.realForm.add();
+      // })
+    },
+    edit(record) {
+      this.visible = true;
+      this.$nextTick(() => {
+        this.$refs.realForm.edit(record);
+      });
+    },
+    close() {
+      this.$emit("close");
+      this.visible = false;
+    },
+    handleOk() {
+      this.$refs.realForm.submitForm();
+    },
+    submitCallback(e) {
+      this.$emit("ok", e);
+      this.visible = false;
+    },
+    handleCancel() {
+      this.close();
+    },
+  },
+};
+</script>

+ 405 - 0
src/views/stock/stockChecks/stockChecks.vue

@@ -0,0 +1,405 @@
+<template>
+<a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="searchQuery">
+            <a-row :gutter="24">
+                <a-col :span="3">
+                    <a-form-item label="">
+                        <a-select v-model="queryParam.depositoryId" style="width: 100%" placeholder="入仓仓库" :allowClear="true">
+                            <a-select-option v-for="(item, index) in depositoryList" :key="index" :value="item.id">{{ item.name }}</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="3">
+                    <a-form-item label="">
+                        <a-select v-model="queryParam.supplierId" style="width: 100%" placeholder="供应商" :allowClear="true">
+                            <a-select-option v-for="(item, index) in supplierList" :key="index" :value="item.id">{{ item.name }}</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="3">
+                    <a-form-item label="">
+                        <a-select v-model="queryParam.stockType" style="width: 100%" placeholder="入库类型" :allowClear="true">
+                            <a-select-option v-for="(item, index) in storageTypeList" :key="index" :value="item.value">{{ item.title }}</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="3">
+                    <a-form-item label="">
+                        <a-select v-model="queryParam.status" style="width: 100%" placeholder="审核状态" :allowClear="true">
+                            <a-select-option :value="0">待审核</a-select-option>
+                            <a-select-option :value="1">审核通过</a-select-option>
+                            <a-select-option :value="2">审核未通过</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col>
+                <a-col :span="3">
+                    <a-form-item label="">
+                        <j-input placeholder="入库内容" v-model="queryParam.stockInfo"></j-input>
+                    </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="8">
+                    <span style="float: left; overflow: hidden" class="table-page-search-submitButtons">
+                        <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
+                        <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
+                    </span>
+                </a-col>
+            </a-row>
+        </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+        <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+        <!-- <div class="ant-alert ant-alert-info" style="margin-bottom: 16px">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择
+        <a style="font-weight: 600">{{ selectedRowKeys.length }}</a
+        >项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div> -->
+
+        <a-table ref="table" size="middle" :scroll="{ x: true }" bordered rowKey="id" :columns="columns" :dataSource="dataSource" :pagination="ipagination" :loading="loading" :rowSelection="{
+          selectedRowKeys: selectedRowKeys,
+          onChange: onSelectChange,
+        }" class="j-table-force-nowrap" @change="handleTableChange">
+            <template slot="payFlagslot" slot-scope="text, record, index">
+                {{ record.payFlag == 1 ? "是" : "否" }}
+            </template>
+            <template slot="iconslot" slot-scope="text, record, index">
+                <a-icon :type="record.icon" theme="filled" />
+            </template>
+            <template slot="htmlSlot" slot-scope="text">
+                <div v-html="text"></div>
+            </template>
+            <template slot="imgSlot" slot-scope="text, record">
+                <span v-if="!text" style="font-size: 12px; font-style: italic">无图片</span>
+                <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width: 80px; font-size: 12px; font-style: italic" />
+            </template>
+            <template slot="fileSlot" slot-scope="text">
+                <span v-if="!text" style="font-size: 12px; font-style: italic">无文件</span>
+                <a-button v-else :ghost="true" type="primary" icon="download" size="small" @click="downloadFile(text)">
+                    下载
+                </a-button>
+            </template>
+
+            <span slot="action" slot-scope="text, record">
+                <a @click="handleEdit(record)"  v-if="record.status==0">编辑</a>
+
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a @click="examine(record)"  v-if="record.status==0" >审核</a>
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a @click="detailed(record)">明细</a>
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"  v-if="record.status==0" >
+                    <a>删除</a>
+                </a-popconfirm>
+            </span>
+        </a-table>
+    </div>
+
+    <!-- 审核弹窗 -->
+    <a-modal title="入库审核" :visible="examineVisible" @ok="handleOk" @cancel="handleCancel">
+        <a-form>
+            <a-form-item label="审核状态">
+                <a-radio-group name="radioGroup" v-model="examineData.status" @change="onChange">
+                    <a-radio :value="1">
+                        通过
+                    </a-radio>
+                    <a-radio :value="0">
+                        未通过
+                    </a-radio>
+                </a-radio-group>
+            </a-form-item>
+            <a-form-item label="审核意见">
+                <a-textarea v-model="examineData.verifyRemarks" rows="4" />
+            </a-form-item>
+        </a-form>
+    </a-modal>
+
+    <!-- 明细弹窗 -->
+    <a-modal title="出库单明细" :visible="detailedVisible" @ok="detailedOk" @cancel="detailedCancel" :width="1200">
+        <a-row :gutter="[2, 20]">
+            <a-col :span="5">
+                入库单号:{{ detailedData.code }}
+            </a-col>
+            <a-col :span="4">
+                入库仓库:{{ detailedData.depositoryName }}
+            </a-col>
+            <a-col :span="4">
+                入库类型:{{ detailedData.stockType }}
+            </a-col>
+            <a-col :span="4">
+                申请日期:{{ detailedData.createTime }}
+            </a-col>
+            <!-- <a-col :span="4">
+                制单人:{{}}
+            </a-col> -->
+        </a-row>
+        <a-row :gutter="[2, 20]">
+            <a-col :span="4">
+                审核状态:{{ detailedData.status==1 ? "通过" : "未通过" }}
+            </a-col>
+            <a-col :span="4">
+                审核时间:{{ detailedData.verifyTime }}
+            </a-col>
+            <a-col :span="4">
+                审核人:{{ detailedData.verifyAt }}
+            </a-col>
+            <a-col :span="4">
+                经办人:{{ detailedData.createAt }}
+            </a-col>
+            <a-col :span="4">
+                供应商:{{ detailedData.supplierName }}
+            </a-col>
+        </a-row>
+        <a-row :gutter="[2, 20]">
+            <a-col :span="3">
+                入库备注:{{ detailedData.remarks }}
+            </a-col>
+            <a-col :span="3">
+                审核意见:{{ detailedData.verifyRemarks }}
+            </a-col>
+        </a-row>
+        <a-row>
+            <a-table :columns="detailedColumns" :data-source="detailedData.list" :pagination="false" :rowKey="record => record.id">
+                <template slot="action" slot-scope="text, record">
+                    <a @click="detailedDelete(record.id)">删除</a>
+                </template>
+            </a-table>
+        </a-row>
+    </a-modal>
+
+    <depository-modal ref="modalForm" @ok="modalFormOk"></depository-modal>
+</a-card>
+</template>
+
+<script>
+import {
+    JeecgListMixin
+} from "@/mixins/JeecgListMixin";
+import {
+    filterObj
+} from "@/utils/util";
+import {
+    getAction,
+    postAction
+} from "@/api/manage";
+import DepositoryModal from "./stockChecksModal.vue";
+export default {
+    name: "memberList",
+    mixins: [JeecgListMixin],
+    components: {
+        DepositoryModal,
+    },
+    data() {
+        return {
+            activeKey: "1",
+            queryParam: {},
+            //明细弹窗
+            detailedVisible: false,
+            // 明细数据
+            detailedData:{},
+            examineVisible: false,
+            // 分页参数
+            ipagination: {
+                current: 1,
+                pageSize: 10,
+                pageSizeOptions: ["10", "20", "30"],
+                showTotal: (total, range) => {
+                    return range[0] + "-" + range[1] + " 共" + total + "条";
+                },
+                showQuickJumper: true,
+                showSizeChanger: true,
+                total: 0,
+            },
+            // 明细表头
+            detailedColumns: [
+                {
+                    title: "商品名称",
+                    align: "center",
+                    dataIndex: "name",
+                },
+                {
+                    title: "商品规格",
+                    align: "center",
+                    dataIndex: "spec",
+                },
+                {
+                    title: "单位",
+                    align: "center",
+                    dataIndex: "goodUnit",
+                },
+                {
+                    title: "成本价",
+                    align: "center",
+                    dataIndex: "price",
+                },
+                {
+                    title: "出库数量",
+                    align: "center",
+                    dataIndex: "num",
+                    scopedSlots: {
+                        customRender: "num"
+                    },
+                },
+            ],
+            // 表头
+            columns: [{
+                    title: "单号",
+                    align: "center",
+                    dataIndex: "code",
+                },
+                {
+                    title: "申请日期",
+                    align: "center",
+                    dataIndex: "createTime",
+                },
+                {
+                    title: "入库仓库",
+                    align: "center",
+                    dataIndex: "depositoryName",
+                },
+                {
+                    title: "入库类型",
+                    align: "center",
+                    dataIndex: "stockTypeName",
+                },
+                {
+                    title: "供应商",
+                    align: "center",
+                    dataIndex: "supplierName",
+                },
+                {
+                    title: "入库内容",
+                    align: "center",
+                    dataIndex: "stockInfo",
+                },
+                {
+                    title: "制单人",
+                    align: "center",
+                    dataIndex: "createAt",
+                },
+                {
+                    title: "状态",
+                    align: "center",
+                    dataIndex: "status",
+                    customRender(text) {
+                        var msg = "待审核";
+                        if (text == 1) {
+                            msg = "审核通过";
+                        } else if (text == 2) {
+                            msg = "审核未通过";
+                        }
+                        return msg;
+                    },
+                },
+                {
+                    title: "操作",
+                    dataIndex: "action",
+                    align: "center",
+                    fixed: "right",
+                    width: 147,
+                    scopedSlots: {
+                        customRender: "action"
+                    },
+                },
+            ],
+            url: {
+                list: "/kc/kcStock/list?type=2",
+                delete: "/kc/kcStock/delete",
+                deleteBatch: "/kc/kcStock/deleteBatch",
+                exportXlsUrl: "/kc/kcStock/exportXls",
+                importExcelUrl: "/kc/kcStock/importExcel",
+            },
+            dictOptions: {},
+            superFieldList: [],
+            selectedRowKeys: [],
+            isorter: {
+                column: "createTime",
+                order: "desc",
+            },
+            depositoryList: [],
+            supplierList: [],
+            storageTypeList: [],
+            examineData: {}
+        };
+    },
+    created() {
+        getAction("/kc/kcDepository/list", {
+            state: 1,
+        }).then((res) => {
+            if (res.success) {
+                this.depositoryList = res.result.records;
+            }
+        });
+        getAction("/kc/kcSupplier/list", {
+            state: 1,
+        }).then((res) => {
+            if (res.success) {
+                this.supplierList = res.result.records;
+            }
+        });
+        getAction("/kc/kcStock/storageTypeList", {}).then((res) => {
+            if (res.success) {
+                this.storageTypeList = res.result;
+            }
+        });
+    },
+    methods: {
+        tabStockTypeChange(e) {
+            this.queryParam.type = e;
+            this.loadData();
+        },
+        examine(record) {
+            console.log(record);
+            this.examineData = JSON.parse(JSON.stringify(record));
+            this.examineVisible = true;
+        },
+        handleOk() {
+            postAction("/kc/kcStock/audit", this.examineData).then((res) => {
+                if (res.success) {
+                    this.loadData();
+                    this.$message.success("审核成功");
+                    this.examineVisible = false;
+                }
+            });
+        },
+        handleCancel() {
+            this.examineVisible = false;
+        },
+        onChange(e) {
+            console.log(e.target.value);
+            this.examineData.status = e.target.value;
+        },
+        detailedOk() {
+            this.detailedVisible = false;
+        },
+        detailedCancel() {
+            this.detailedVisible = false;
+        },
+        detailed(record) {
+            console.log(record);
+            getAction(`/kc/kcStockDetail/list?stockId=${record.code}`).then(res=>{
+              console.log(res);
+              if ( res.code==200 ) {
+                this.detailedData = record;
+                this.detailedData.list = res.result.records
+              }
+            })
+            
+            this.detailedVisible = true;
+            // this.$refs.modalForm.show(record);
+        },
+    },
+};
+</script>
+
+<style scoped>
+@import "~@assets/less/common.less";
+</style>

+ 323 - 0
src/views/stock/stockChecks/stockChecksForm.vue

@@ -0,0 +1,323 @@
+<template>
+<a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+        <a-form-model ref="form" :model="model" layout="horizontal" :rules="validatorRules" slot="detail">
+            <a-row :gutter="2" align="top" type="flex">
+                <a-col :span="5" flex>
+                    <a-form-item label="" prop="depositoryList">
+                        <a-select v-model="model.depositoryId" style="width: 100%" placeholder="盘点仓库" :allowClear="true">
+                            <a-select-option v-for="(item, index) in depositoryList" :key="index" :value="item.id">{{ item.name }}</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col>
+                <!-- <a-col :span="5">
+                    <a-form-item label="" prop="supplierList">
+                        <a-select v-model="model.supplierId" style="width: 100%" placeholder="供应商" :allowClear="true">
+                            <a-select-option v-for="(item, index) in supplierList" :key="index" :value="item.id">{{ item.name }}</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col> -->
+                <!-- <a-col :span="5">
+                    <a-form-item label="" prop="storageTypeList">
+                        <a-select v-model="model.stockType" style="width: 100%" placeholder="入库类型" :allowClear="true">
+                            <a-select-option v-for="(item, index) in storageTypeList" :key="index" :value="item.value">{{ item.title }}</a-select-option>
+                        </a-select>
+                    </a-form-item>
+                </a-col> -->
+                <a-col :span="6" style="margin-top:5px;">
+                    <a-button :disabled="!model.depositoryId" @click="handleGoods" type="primary" icon="plus">批量添加</a-button>
+                </a-col>
+            </a-row>
+        </a-form-model>
+    </j-form-container>
+
+    <!-- 查询区域-END -->
+    <div>
+        <a-table :scroll="{ y: 540 }" ref="table" size="middle" bordered rowKey="id" :columns="columns" :dataSource="dataSource" :pagination="false" :loading="loading" class="j-table-force-nowrap" @change="handleTableChange">
+            <span slot="state" slot-scope="record">
+                {{ record ? "启用" : "停用" }}
+                <!-- {{record}} -->
+            </span>
+            <template slot="price" slot-scope="record">
+                <a-input-number :min="0" :placeholder="record.costPrice" v-model="record.costPrice"></a-input-number>
+            </template>
+            <template slot="num" slot-scope="record">
+                <a-input-number :min="0" v-model="record.num"></a-input-number>
+            </template>
+            <span slot="action" slot-scope="text, record">
+                <!-- <a @click="handleEdit(record)">修改</a>
+                <a-divider type="vertical" />
+                <a @click="moreSet(record)">更多设置</a>
+                <a-divider type="vertical" /> -->
+                <a-popconfirm title="确定删除吗?" @confirm="() => deleteGoods(record.id)">
+                    <a>删除</a>
+                </a-popconfirm>
+            </span>
+        </a-table>
+    </div>
+
+    <a-row>
+        <a-col :span="12">
+            <a-form-item label="备注" :label-col="labelCol">
+                <a-textarea v-model="model.remarks" :rows="4" />
+            </a-form-item>
+        </a-col>
+    </a-row>
+
+    <supplier-in-goods-modal ref="modalSelectGoodsForm" @ok="selectOk"></supplier-in-goods-modal>
+</a-spin>
+</template>
+
+<script>
+import {
+    httpAction,
+    getAction
+} from "@/api/manage";
+import {
+    validateDuplicateValue
+} from "@/utils/util";
+import {
+    JeecgListMixin
+} from "@/mixins/JeecgListMixin";
+import SupplierInGoodsModal from "./selectGoodsModal/SelectGoodsModal.vue";
+export default {
+    name: "PosTypeForm",
+    mixins: [JeecgListMixin],
+    components: {
+        SupplierInGoodsModal,
+    },
+    props: {
+        //表单禁用
+        disabled: {
+            type: Boolean,
+            default: false,
+            required: false,
+        },
+    },
+    watch:{
+        "model.supplierId":function(newVal, oldVal){
+            if (newVal!=oldVal) {
+                this.dataSource = [];             
+            }
+        }
+    },
+    data() {
+        return {
+            model: {
+                code: "",
+                createAt: "",
+                createTime: "",
+                // depositoryId: "",
+                hotelId: "",
+                id: "",
+                remarks: "",
+                status: 0,
+                num: 0,
+                // stockInfo: "",
+                // stockType: 0,
+                // supplierId: "",
+                tenantId: "",
+                type: 3,
+                verifyAt: "",
+                verifyRemarks: "",
+                verifyTime: ""
+
+            },
+            labelCol: {
+                xs: {
+                    span: 24,
+                },
+                sm: {
+                    span: 5,
+                },
+            },
+            wrapperCol: {
+                xs: {
+                    span: 24,
+                },
+                sm: {
+                    span: 16,
+                },
+            },
+            confirmLoading: false,
+            validatorRules: {
+                depositoryList: [{
+                    required: true,
+                    message: "请选择入库仓库!",
+                }, ],
+                supplierList: [{
+                    required: true,
+                    message: "请选择供应商!",
+                }, ],
+                storageTypeList: [{
+                    required: true,
+                    message: "请选择入库类型!",
+                }, ],
+            },
+            // 表头
+            columns: [{
+                    title: "商品名称",
+                    align: "center",
+                    dataIndex: "name",
+                },
+                {
+                    title: "单位",
+                    align: "center",
+                    dataIndex: "goodUnit",
+                },
+                {
+                    title: "商品规格",
+                    align: "center",
+                    dataIndex: "spec",
+                },
+                {
+                    title: "成本价",
+                    align: "center",
+                    // dataIndex: "costPrice",
+                    scopedSlots: {
+                        customRender: "price"
+                    },
+                },
+                {
+                    title: "出入库数量",
+                    align: "center",
+                    // dataIndex: "spec",
+                    scopedSlots: {
+                        customRender: "num"
+                    },
+                },
+                {
+                    title: '操作',
+                    dataIndex: 'action',
+                    key: 'action',
+                    scopedSlots: {
+                        customRender: "action"
+                    },
+                    align: 'center',
+                    fixed: "right",
+                    width: 200,
+                }
+            ],
+            url: {
+                list: 2,
+                add: "/kc/kcStock/add",
+                edit: "/kc/kcStock/edit",
+                queryById: "/kc/kcDepository/queryById",
+            },
+            depositoryList: [],
+            supplierList: [],
+            storageTypeList: [],
+            dataSource: []
+        };
+    },
+    computed: {
+        formDisabled() {
+            return this.disabled;
+        },
+    },
+    created() {
+        var _info = JSON.parse(localStorage.getItem("storeInfo"));
+        if (_info) {
+            this.model.hotelId = _info.id;
+        }
+        //备份model原始值
+        this.modelDefault = JSON.parse(JSON.stringify(this.model));
+        getAction("/kc/kcDepository/list", {
+            state: 1,
+        }).then((res) => {
+            if (res.success) {
+                this.depositoryList = res.result.records;
+            }
+        });
+        getAction("/kc/kcSupplier/list", {
+            state: 1,
+        }).then((res) => {
+            if (res.success) {
+                this.supplierList = res.result.records;
+            }
+        });
+        getAction("/kc/kcStock/storageTypeList", {}).then((res) => {
+            if (res.success) {
+                this.storageTypeList = res.result;
+            }
+        });
+    },
+    methods: {
+        handleGoods(row) {
+            this.$refs.modalSelectGoodsForm.add();
+            this.$refs.modalSelectGoodsForm.title = "供货商品";
+            this.$refs.modalSelectGoodsForm.disableSubmit = false;
+            this.$refs.modalSelectGoodsForm.supplierId = this.model.supplierId;
+        },
+        /**
+         * 删除商品
+         */
+        deleteGoods(id) {
+            this.dataSource = this.dataSource.filter(item => item.id !== id)
+        },
+        selectOk(e) {
+            console.log(e);
+            this.dataSource = JSON.parse(JSON.stringify(e))
+            console.log(this.dataSource);
+        },
+        add() {
+            this.edit(this.modelDefault,1);
+        },
+        edit(record, type) {
+          if (type) {
+            return
+          }
+            this.model = Object.assign({}, record);
+            this.model.stockType = this.model.stockType.toString()
+            console.log(this.model);
+            getAction(`/kc/kcStockDetail/list?stockId=${this.model.code}`).then(res=>{
+              console.log(res);
+              if ( res.code==200 ) {
+                this.dataSource = res.result.records
+                this.dataSource.forEach(ele=>{
+                  ele.costPrice = ele.price
+                })
+              }
+            })
+            this.visible = true;
+        },
+        submitForm() {
+            const that = this;
+            // 触发表单验证
+
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    that.confirmLoading = true;
+                    let httpurl = "";
+                    let method = "";
+                    if (!this.model.id) {
+                        httpurl += this.url.add;
+                        method = "post";
+                    } else {
+                        httpurl += this.url.edit;
+                        method = "put";
+                    }
+                    this.model.stockDetailList = this.dataSource
+                    this.model.stockDetailList.forEach(element => {
+                        element.supplierInGoodsId = element.supplierInGoodsId;
+                        element.price = element.costPrice;
+                        element.num = Number(element.num);
+                    });
+                    httpAction(httpurl, this.model, method)
+                        .then((res) => {
+                            if (res.success) {
+                                that.$message.success(res.message);
+                                that.$emit("ok");
+                            } else {
+                                that.$message.warning(res.message);
+                            }
+                        })
+                        .finally(() => {
+                            that.confirmLoading = false;
+                        });
+                }
+            });
+        },
+    },
+};
+</script>

+ 60 - 0
src/views/stock/stockChecks/stockChecksModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <pos-type-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></pos-type-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import PosTypeForm from './stockChecksForm.vue'
+  export default {
+    name: 'PosTypeModal',
+    components: {
+      PosTypeForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>

+ 115 - 6
src/views/stock/storage.vue

@@ -88,13 +88,15 @@
                 </a-button>
             </template>
 
-            <span slot="action" slot-scope="text, record" v-if="record.status==0">
-                <a @click="handleEdit(record)">编辑</a>
+            <span slot="action" slot-scope="text, record">
+                <a @click="handleEdit(record)"  v-if="record.status==0">编辑</a>
 
-                <a-divider type="vertical" />
-                <a @click="examine(record)">审核</a>
-                <a-divider type="vertical" />
-                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a @click="examine(record)"  v-if="record.status==0" >审核</a>
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a @click="detailed(record)">明细</a>
+                <a-divider type="vertical"  v-if="record.status==0" />
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)"  v-if="record.status==0" >
                     <a>删除</a>
                 </a-popconfirm>
             </span>
@@ -120,6 +122,59 @@
         </a-form>
     </a-modal>
 
+    <!-- 明细弹窗 -->
+    <a-modal title="出库单明细" :visible="detailedVisible" @ok="detailedOk" @cancel="detailedCancel" :width="1200">
+        <a-row :gutter="[2, 20]">
+            <a-col :span="5">
+                入库单号:{{ detailedData.code }}
+            </a-col>
+            <a-col :span="4">
+                入库仓库:{{ detailedData.depositoryName }}
+            </a-col>
+            <a-col :span="4">
+                入库类型:{{ detailedData.stockType }}
+            </a-col>
+            <a-col :span="4">
+                申请日期:{{ detailedData.createTime }}
+            </a-col>
+            <!-- <a-col :span="4">
+                制单人:{{}}
+            </a-col> -->
+        </a-row>
+        <a-row :gutter="[2, 20]">
+            <a-col :span="4">
+                审核状态:{{ detailedData.status==1 ? "通过" : "未通过" }}
+            </a-col>
+            <a-col :span="4">
+                审核时间:{{ detailedData.verifyTime }}
+            </a-col>
+            <a-col :span="4">
+                审核人:{{ detailedData.verifyAt }}
+            </a-col>
+            <a-col :span="4">
+                经办人:{{ detailedData.createAt }}
+            </a-col>
+            <a-col :span="4">
+                供应商:{{ detailedData.supplierName }}
+            </a-col>
+        </a-row>
+        <a-row :gutter="[2, 20]">
+            <a-col :span="3">
+                入库备注:{{ detailedData.remarks }}
+            </a-col>
+            <a-col :span="3">
+                审核意见:{{ detailedData.verifyRemarks }}
+            </a-col>
+        </a-row>
+        <a-row>
+            <a-table :columns="detailedColumns" :data-source="detailedData.list" :pagination="false" :rowKey="record => record.id">
+                <template slot="action" slot-scope="text, record">
+                    <a @click="detailedDelete(record.id)">删除</a>
+                </template>
+            </a-table>
+        </a-row>
+    </a-modal>
+
     <depository-modal ref="modalForm" @ok="modalFormOk"></depository-modal>
 </a-card>
 </template>
@@ -146,6 +201,10 @@ export default {
         return {
             activeKey: "1",
             queryParam: {},
+            //明细弹窗
+            detailedVisible: false,
+            // 明细数据
+            detailedData:{},
             examineVisible: false,
             // 分页参数
             ipagination: {
@@ -159,6 +218,37 @@ export default {
                 showSizeChanger: true,
                 total: 0,
             },
+            // 明细表头
+            detailedColumns: [
+                {
+                    title: "商品名称",
+                    align: "center",
+                    dataIndex: "name",
+                },
+                {
+                    title: "商品规格",
+                    align: "center",
+                    dataIndex: "spec",
+                },
+                {
+                    title: "单位",
+                    align: "center",
+                    dataIndex: "goodUnit",
+                },
+                {
+                    title: "成本价",
+                    align: "center",
+                    dataIndex: "price",
+                },
+                {
+                    title: "出库数量",
+                    align: "center",
+                    dataIndex: "num",
+                    scopedSlots: {
+                        customRender: "num"
+                    },
+                },
+            ],
             // 表头
             columns: [{
                     title: "单号",
@@ -287,6 +377,25 @@ export default {
             console.log(e.target.value);
             this.examineData.status = e.target.value;
         },
+        detailedOk() {
+            this.detailedVisible = false;
+        },
+        detailedCancel() {
+            this.detailedVisible = false;
+        },
+        detailed(record) {
+            console.log(record);
+            getAction(`/kc/kcStockDetail/list?stockId=${record.code}`).then(res=>{
+              console.log(res);
+              if ( res.code==200 ) {
+                this.detailedData = record;
+                this.detailedData.list = res.result.records
+              }
+            })
+            
+            this.detailedVisible = true;
+            // this.$refs.modalForm.show(record);
+        },
     },
 };
 </script>