haoyahui
2023-11-20 fe618973c04544c0bd169c2c4436ff5807b756f1
库存预警设置,盘点删除
6个文件已修改
453 ■■■■■ 已修改文件
admin-web/src/api/stock/inventory.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-web/src/views/mixins/listPage.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue 247 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-web/src/views/stock/inventorycount/inventorytask/index.vue 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-web/src/views/stock/ledger/inventoryAlert/edit.vue 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-web/src/views/systemSetting/role/index.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin-web/src/api/stock/inventory.js
@@ -24,11 +24,11 @@
}
// 删除
export function inventoryDel(data) {
export function inventoryDel(params) {
  return request({
    url: '/pc/l/wh/form/inventory/del',
    method: 'post',
    data,
    method: 'delete',
    params,
  });
}
admin-web/src/views/mixins/listPage.js
@@ -30,7 +30,6 @@
      },
    },
    created() {
      this.fetchData();
    },
    filters: {
      formatTime(time) {
admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue
@@ -10,31 +10,28 @@
          <el-row style="margin-top: 15px">
            <el-col>
              <!--列表-->
              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/>
              <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" />
            </el-col>
          </el-row>
        </el-card>
      </el-container>
    </el-container>
    <my-import
      :import-setting="importSetting"
      :dialog-show="importSetting.dialogShow"
      :dialog-title="importSetting.dialogTitle"
    />
  </div>
</template>
<script>
import MyTableV2 from "@/components/myTable/myTableV2";
import MyButton from "@/components/myButton/myButton";
import MyTableV2 from '@/components/myTable/myTableV2';
import MyButton from '@/components/myButton/myButton';
import SettingIplatform from '@/utils/settingIplatform';
import * as finsystenant from '@/api/baseSetting/finsystenant'
import myImport from '@/views/components/myImport'
import {getBaseUrl} from '@/utils/base';
import * as finsystenant from '@/api/baseSetting/finsystenant';
import { getBaseUrl } from '@/utils/base';
import { mapGetters } from 'vuex';
import { selectTenantWarehouse,goodsModel } from '@/api/baseSetting/finsystenant';
import { getDicts } from '@/api/system/dict/data';
export default {
  name: "index",
  components: {MyButton, MyTableV2, myImport},
  name: 'index',
  components: { MyButton, MyTableV2 },
  data() {
    return {
      // 搜索框
@@ -61,7 +58,7 @@
          dataIndex: 'name',
          label: '物品名称',
          placeholder: '请输入',
          defaultValue: ''
          defaultValue: '',
        },
        {
          type: 'select',
@@ -77,7 +74,16 @@
          label: '类型',
          placeholder: '请选择',
          defaultValue: '',
          options: [],
          options: [{
            label:'全部',
            value:''
          },{
            label:'盘盈',
            value:'1'
          },{
            label:'盘亏',
            value:'2'
          }],
        },
        {
          type: 'select',
@@ -85,21 +91,30 @@
          label: '出入库类型',
          placeholder: '请选择',
          defaultValue: '',
          options: [],
          options: [{
            label:'全部',
            value:''
          },{
            label:'盘盈入库',
            value:'1'
          },{
            label:'盘亏出库',
            value:'2'
          }],
        },
        {
          type: 'text',
          dataIndex: 'name',
          label: '单号',
          placeholder: '请输入',
          defaultValue: ''
          defaultValue: '',
        },
        {
          type: 'text',
          dataIndex: 'name',
          label: '操作人',
          placeholder: '请输入',
          defaultValue: ''
          defaultValue: '',
        },
        {
          type: 'date-picker',
@@ -121,31 +136,7 @@
        tenantId: null,
        userName: null,
        userPhone: null,
        status: 1
      },
      // 导入
      importSetting: {
          dialogTitle: '导入',
          dialogShow: false,
          fileSettings: {
              data: {},
              uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 上传地址
              accept: '.xls', // 格式
              type: 'text', // 回显形式
              loading: false // 导入效果
          },
          /* 模板下载 */
          templateSettings: {
              templateName: '导入模板.xls', // 名称
              templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 下载地址
          },
          onSuccess: null
      },
      editSetting: {
        title: '',
        id: '',
        orgId: '',
        show: false,
        status: 1,
      },
      // 表格数据
      table: {
@@ -154,31 +145,32 @@
        url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 请求地址
        // 工具条
        tools: {
          columnsCtrl: {// 列控制按钮
            show: false
          columnsCtrl: {
            // 列控制按钮
            show: false,
          },
          generalExport: {// 通用导出按钮
            show: false
          generalExport: {
            // 通用导出按钮
            show: false,
          },
          // 自定义工具条按钮
          custom: [
          ]
          custom: [],
        },
        // 列信息
        columns: [
          {title: '仓库', field: 'name', align: 'left',},
          {title: '物品名称', field: 'WAREHOUSE_NAME', align: 'center'},
          {title: '规格型号', field: 'lv', align: 'center', },
          {title: '类型', field: 'lv', align: 'center', },
          {title: '库存数量', field: 'summary', align: 'left',},
          {title: '盘点数量', field: 'summary', align: 'left',},
          {title: '异常数量', field: 'summary', align: 'left',},
          {title: '出入库类型', field: 'summary', align: 'left',},
          {title: '出入库单号', field: 'summary', align: 'left',},
          {title: '机构', field: 'summary', align: 'left',},
          {title: '操作人', field: 'summary', align: 'left',},
          {title: '操作时间', field: 'summary', align: 'left',},
        ],
          { title: '仓库', field: 'name', align: 'left' },
          { title: '物品名称', field: 'WAREHOUSE_NAME', align: 'center' },
          { title: '规格型号', field: 'lv', align: 'center' },
          { title: '类型', field: 'lv', align: 'center' },
          { title: '库存数量', field: 'summary', align: 'left' },
          { title: '盘点数量', field: 'summary', align: 'left' },
          { title: '异常数量', field: 'summary', align: 'left' },
          { title: '出入库类型', field: 'summary', align: 'left' },
          { title: '出入库单号', field: 'summary', align: 'left' },
          { title: '机构', field: 'summary', align: 'left' },
          { title: '操作人', field: 'summary', align: 'left' },
          { title: '操作时间', field: 'summary', align: 'left' },
        ],
        // 操作信息
        operation: {
          show: false, // 显示操作列
@@ -192,79 +184,44 @@
            small: false,
            pageNum: 1,
            pageSize: 10,
            total: 0
          }
        }
            total: 0,
          },
        },
      },
    }
    };
  },
  computed: {
    ...mapGetters(['userInfo']),
  },
  created() {
    // 获取机构树
    this.initTreeData()
    this.initQuery();
  },
  methods: {
    //导入
    importOrg() {
        this.importSetting.dialogShow = true
        this.importSetting.onSuccess = (response, callBack) => {
            if (response.code===1){
              this.$message.success(response.msg)
              this.search(1)
            }else{
              this.$message.warning(response.msg)
            }
            callBack()
        }
    },
    // 左侧树初始化
    initTreeData() {
      finsystenant.getTree().then(res => {
        const content = res || []
        this.treeDataList.splice(0, this.treeDataList.length)
        this.treeDataList = content
        if (content.length > 0) {
          this.importSetting.fileSettings.data = {pid: content[0].id}
        }
      })
    },
    updState(row) {
      let vm = this
      let text = row.status == 0 ? "启用" : "禁用";
      vm.$modal.confirm('确认要' + text + '"' + row.name + '"吗?').then(function () {
        let params = Object.assign({}, row)
        params.status = row.status == 1 ? 0 : 1
        finsystenant.edit(params).then(res => {
          if (res) {
            row.status = row.status === 1 ? 0 : 1
            vm.$modal.msgSuccess(text + "成功");
            vm.search()
    initQuery() {
      selectTenantWarehouse({ agencyId: this.userInfo.tenantId }).then((res) => {
        this.items.forEach((v) => {
          if (v.label == '盘点仓库') {
            v.options = res.map((item) => {
              item.label = item.warehouseName;
              item.value = item.id;
              return item;
            });
          }
        })
      })
    },
    del(row) {
      this.$modal
        .confirm('是否确认删除名称为"' + row.name + '"的机构吗?')
        .then(function () {
          finsystenant.del({id: row.id}).then((res) => {
          });
        })
        .then((res) => {
          this.$message.success('删除成功!');
          this.search()
        })
        .catch(() => {
        });
    },
    showAdd() {
      // if (!this.editSetting.orgId) {
      //   this.$message.warning('请先选择左侧机构')
      // } else {
        this.editSetting.id = null;
        this.editSetting.info = null;
        this.editSetting.title = '新增';
        this.editSetting.show = true;
      // }
      });
      goodsModel().then((res) => {
        this.items.forEach((v) => {
          if (v.label == '规格型号') {
            v.options = res.map((item) => {
              item.label = item.modelName;
              item.value = item.id;
              return item;
            });
          }
        });
      });
    },
    showAudit(row) {
      this.editSetting.id = row.id;
@@ -272,38 +229,20 @@
      this.editSetting.title = '编辑';
      this.editSetting.show = true;
    },
    nodeClick(param) {
      param = param || {}
      this.p = Object.assign({}, {
        id: param.id,
        name: param.name
      })
      if (this.p.id != undefined && this.p.id != null) {
        this.filterFrom.tenantId = this.p.id
        this.editSetting.orgId = this.p.id
      } else {
        this.filterFrom.tenantId = null
        this.editSetting.orgId = null
      }
      this.importSetting.fileSettings.data = {pid: param.id}
      this.search(1)
    },
    // 查询table列表
    search(pageNum) {
      if (pageNum != undefined) {
        this.$refs.myTable.search(pageNum)
        this.$refs.myTable.search(pageNum);
      } else {
        this.$refs.myTable.search()
        this.$refs.myTable.search();
      }
    },
    fifterForm(params) {
      this.filterFrom = Object.assign(this.filterFrom, params)
      this.search(1)
    }
  }
}
      this.filterFrom = Object.assign(this.filterFrom, params);
      this.search(1);
    },
  },
};
</script>
<style scoped>
</style>
<style scoped></style>
admin-web/src/views/stock/inventorycount/inventorytask/index.vue
@@ -42,8 +42,9 @@
import myImport from '@/views/components/myImport';
import { getBaseUrl } from '@/utils/base';
import { selectTenantWarehouse } from '@/api/baseSetting/finsystenant';
import { inventoryListApi } from '@/api/stock/inventory';
import { inventoryListApi,inventoryDel } from '@/api/stock/inventory';
import * as DateFormatter from '@/utils/DateFormatter';
import {mapGetters} from 'vuex'
export default {
  name: 'index',
@@ -154,9 +155,9 @@
        // 列信息
        columns: [
          { title: '盘点单号', field: 'businessFormCode', align: 'left' },
          { title: '任务名称', field: 'businessFormName', align: 'center' },
          { title: '盘点仓库', field: 'warehouseName', align: 'center' },
          { title: '盘点人', field: 'operatorName', align: 'center' },
          { title: '任务名称', field: 'businessFormName', align: 'left' },
          { title: '盘点仓库', field: 'warehouseName', align: 'left' },
          { title: '盘点人', field: 'operatorName', align: 'left' },
          { title: '监盘人', field: 'operatorName2', align: 'left' },
          {
            title: '盘点时间',
@@ -192,17 +193,38 @@
        // 操作信息
        operation: {
          show: true, // 显示操作列
          width: '150', // 列宽
          width: '220', // 列宽
          attr: [
            {
              title: '编辑',
              hidden:(row)=>{
                if(row.states!=0){
                  return true
                }
              },
              events: (row) => {
                this.showAudit(row);
              },
            },
            {
              title: '删除',
              hidden:(row)=>{
                if(row.states!=0){
                  return true
                }
              },
              events: (row) => {
                this.del(row);
              },
            },
            {
              title: '盘点',
              type: 'success',
              hidden:(row)=>{
                if(row.states!=0){
                  return true
                }
              },
              events: (row) => {
                this.showInventory(row);
              },
@@ -222,13 +244,16 @@
      },
    };
  },
  computed:{
    ...mapGetters(['userInfo'])
  },
  created() {
    selectTenantWarehouse().then((res) => {
    selectTenantWarehouse({agencyId: this.userInfo.tenantId}).then((res) => {
      this.items.forEach((v) => {
        if (v.label == '盘点仓库') {
          v.options = res.map((item) => {
            item.label = item.warehouseName;
            item.vlaue = item.id;
            item.value = item.id;
            return item;
          });
        }
@@ -251,9 +276,9 @@
    },
    del(row) {
      this.$modal
        .confirm('是否确认删除名称为"' + row.name + '"的机构吗?')
        .confirm('是否确认删除单号为:' + row.businessFormCode + ' 的数据吗?')
        .then(() => {
          finsystenant.del({ id: row.id }).then((res) => {
          inventoryDel({ id: row.id }).then((res) => {
            this.$message.success('删除成功!');
            this.search();
          });
admin-web/src/views/stock/ledger/inventoryAlert/edit.vue
@@ -1,35 +1,56 @@
<template>
  <win-md :title="setting.title" @close="close" :width="'800px'">
  <win-md :title="`${setting.title}预警设置`" @close="close" :width="'800px'">
    <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px">
      <el-row :gutter="24">
        <el-col :span="12">
          <el-form-item label="物品分类" prop="code">
            <el-input disabled v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%" />
          <el-form-item label="物品分类">
            <el-cascader
              v-model="formData.baseCategoryIds"
              :options="categoryOptions"
              :props="{ value: 'id' }"
              style="width: 100%"
            ></el-cascader>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="物品名称" prop="name">
            <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%" />
          <el-form-item label="物品名称">
            <el-select
              :value="formData.baseGoodsTemplateId"
              placeholder="请先择物品分类"
              filterable
              style="width: 100%"
            >
              <el-option v-for="item in goodsTemplatelAll" :key="item.id" :label="item.goodsName" :value="item.id" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="24">
        <el-col :span="12">
          <el-form-item label="规格型号">
            <el-input v-model="formData.adss" clearable maxlength="20" show-word-limit style="width: 100%" />
            <el-select
              v-model="formData.modelsIds"
              multiple
              placeholder="请先择物品名称"
              @change="modelChange($event)"
              @remove-tag="modelRemoveTag($event)"
              style="width: 100%"
            >
              <el-option v-for="item in goodsModelAll" :key="item.id" :label="item.modelName" :value="item.id" />
            </el-select>
          </el-form-item>
        </el-col>
      </el-row>
      <el-table :data="formData.models" :stripe="true">
        <el-table-column prop="baseGoodsModelsId" label="规格型号" align="center"> </el-table-column>
        <el-table-column prop="baseGoodsModelsId" label="保底库存" align="center">
        <el-table-column prop="bdcount" label="保底库存" align="center">
          <template slot-scope="scope">
            <el-input v-model="scope.row.baseGoodsModelsId"></el-input>
            <el-input v-model="scope.row.bdcount"></el-input>
          </template>
        </el-table-column>
        <el-table-column prop="baseGoodsModelsId" label="封顶库存" align="center">
        <el-table-column prop="count" label="封顶库存" align="center">
          <template slot-scope="scope">
            <el-input v-model="scope.row.baseGoodsModelsId"></el-input>
            <el-input v-model="scope.row.count"></el-input>
          </template>
        </el-table-column>
      </el-table>
@@ -45,6 +66,12 @@
import winMd from '@/components/win/win-md';
import myButton from '@/components/myButton/myButton';
import * as finsystenant from '@/api/baseSetting/finsystenant';
import {
  getCategorySelectTree,
  goodsModel,
  warehouseSelectNumber,
  goodsTemplate,
} from '@/api/baseSetting/finsystenant';
export default {
  components: { winMd, myButton },
@@ -56,14 +83,15 @@
  },
  data() {
    return {
      checkAll: false,
      checkedList: [],
      agencyOptions: [], // 调拨机构
      categoryOptions: [], // 物品分类列表
      modelList: [], //型号列表
      formData: {
        baseCategoryIds: '', // 分类编号数组
        baseCategoryId: '', // 分类编号
        baseGoodsTemplateId: '', // 物品模版编号
        modelsIds: [], //规格型号
        models:[]
        models: [],
      },
      modelsItem: {
        baseGoodsModelsId: '', // 规格型号编号
@@ -81,8 +109,98 @@
    if (this.setting.info) {
      this.formData = Object.assign({}, JSON.parse(this.setting.info));
    }
    this.init();
  },
  methods: {
    async init() {
      this.getCategoryTree();
      this.getgoodsTemplate();
      this.getgoodsModel();
    },
    async getCategoryTree() {
      // 获取物品分类列表
      const treeRes = await getCategorySelectTree();
      this.categoryOptions = this.removeEmptyChildren(treeRes);
      console.log('categoryOptions', this.categoryOptions);
    },
    // 获取物品名称列表
    getgoodsTemplate(id) {
      goodsTemplate({ categoryId: id || '', agencyId: this.formData.outAgencyId }).then((res) => {
        this.goodsTemplatelAll = res;
      });
    },
    // 规格型号
    getgoodsModel(id) {
      goodsModel({ goodsTemplatesId: id || '' }).then((res) => {
        this.goodsModelAll = res;
      });
    },
    // 物品分类选择
    categoryChange(e) {
      this.formData.goodsOptions = [];
      this.formData.baseGoodsTemplateId = '';
      this.formData.goodsTemplateName = '';
      this.formData.modelsOptions = [];
      this.formData.modelsIds = [];
      this.formData.models = [];
      this.formData.transferGoods.baseCategoryId = e[e.length - 1];
      // 根据选中分类请求物品名称列表
      this.getgoodsTemplate(e[e.length - 1]);
    },
    // 物品名称列表选择
    goodsTemplateChange(e, index) {
      let temp = this.formData.transferGoods.find((v) => v.baseGoodsTemplateId == e);
      if (temp) {
        this.$message.warning('已选过此物品');
        return;
      } else {
        this.formData.transferGoods[index].baseGoodsTemplateId = e;
      }
      this.formData.transferGoods[index].modelsOptions = [];
      this.formData.transferGoods[index].modelsIds = [];
      this.formData.transferGoods[index].models = [];
      this.formData.transferGoods[index].goodsTemplateName = this.getGoodsTemplateName(e);
      // 根据选中物品名称id获取规格型号列表
      this.getgoodsModel(e, index);
    },
    removeEmptyChildren(arr) {
      arr.forEach((item) => {
        if (!item.children || !item.children.length) {
          delete item.children;
        } else {
          this.removeEmptyChildren(item.children);
        }
      });
      return arr;
    },
    // 规格型号选择
    modelChange(e) {
      let arr = [...this.formData.models];
      let str = JSON.stringify(arr);
      e.forEach((item) => {
        if (str.indexOf(item) == -1) {
          arr.push({ baseGoodsModelsId: item, bdcount: null,count:null });
        }
      });
      this.formData.models = arr;
    },
    // 规格型号移除
    modelRemoveTag(e) {
      let arr = this.formData.models;
      let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e);
      this.formData.models.splice(delIndex, 1);
    },
    getEditInfo(id) {},
    close() {
      this.$emit('close');
admin-web/src/views/systemSetting/role/index.vue
@@ -286,12 +286,12 @@
        },
        // 列信息
        columns: [
          {title: '角色编号', field: 'role_id', align: 'center', width: '200px'},
          {title: '角色名称', field: 'role_name', align: 'center', width: '260px'},
          {title: '权限字符', field: 'role_key', align: 'center', width: '260px'},
          {title: '顺序号', field: 'role_sort', align: 'center', width: '100px'},
          {title: '角色编号', field: 'role_id', align: 'center',},
          {title: '角色名称', field: 'role_name', align: 'center',},
          {title: '权限字符', field: 'role_key', align: 'center',},
          {title: '顺序号', field: 'role_sort', align: 'center',},
          {
            title: '状态', field: 'status', align: 'center', width: '100px',
            title: '状态', field: 'status', align: 'center',
            switch: row => {
              const result = {}
              if (row.status == 0) {
@@ -318,7 +318,7 @@
        ],
        // 操作信息
        operation: {
          // width: 150,
          width: 150,
          align: 'center',
          show: true, // 显示操作列
          attr: [