曹睿
2 天以前 76a985e3d790e506eef36c4df7442a95db0b29a3
feat: 完成设备台账
已修改10个文件
已添加4个文件
519 ■■■■ 文件已修改
src/api/equipmentManagement/ledger.js 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/monitor/job.js 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/useModal.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/Form.vue 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/Modal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/equipmentManagement/ledger/index.vue 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/issueManagement/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/receiptManagement/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/stockManagement/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/index.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentEntry/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceLedger/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/invoiceRegistration/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPayment/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/equipmentManagement/ledger.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
import request from "@/utils/request";
export const getLedgerPage = (params) => {
  return request({
    url: "/device/ledger/page",
    method: "get",
    params,
  });
};
export const getLedgerById = (id) => {
  return request({
    url: `/device/ledger/${id}`,
    method: "get",
  });
};
export const addLedger = (data) => {
  return request({
    url: "/device/ledger",
    method: "post",
    data,
  });
};
export const editLedger = (data) => {
  return request({
    url: "/device/ledger",
    method: "put",
    data,
  });
};
export const delLedger = (id) => {
  return request({
    url: `/device/ledger/${id}`,
    method: "delete",
  });
};
src/api/monitor/job.js
@@ -1,71 +1,70 @@
import request from '@/utils/request'
import request from "@/utils/request";
// æŸ¥è¯¢å®šæ—¶ä»»åŠ¡è°ƒåº¦åˆ—è¡¨
export function listJob(query) {
  return request({
    url: '/monitor/job/list',
    method: 'get',
    params: query
  })
    url: "/monitor/job/list",
    method: "get",
    params: query,
  });
}
// æŸ¥è¯¢å®šæ—¶ä»»åŠ¡è°ƒåº¦è¯¦ç»†
export function getJob(jobId) {
  return request({
    url: '/monitor/job/' + jobId,
    method: 'get'
  })
    url: "/monitor/job/" + jobId,
    method: "get",
  });
}
// æ–°å¢žå®šæ—¶ä»»åŠ¡è°ƒåº¦
export function addJob(data) {
  return request({
    url: '/monitor/job',
    method: 'post',
    data: data
  })
    url: "/monitor/job",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹å®šæ—¶ä»»åŠ¡è°ƒåº¦
export function updateJob(data) {
  return request({
    url: '/monitor/job',
    method: 'put',
    data: data
  })
    url: "/monitor/job",
    method: "put",
    data: data,
  });
}
// åˆ é™¤å®šæ—¶ä»»åŠ¡è°ƒåº¦
export function delJob(jobId) {
  return request({
    url: '/monitor/job/' + jobId,
    method: 'delete'
  })
    url: "/monitor/job/" + jobId,
    method: "delete",
  });
}
// ä»»åŠ¡çŠ¶æ€ä¿®æ”¹
export function changeJobStatus(jobId, status) {
  const data = {
    jobId,
    status
  }
    status,
  };
  return request({
    url: '/monitor/job/changeStatus',
    method: 'put',
    data: data
  })
    url: "/monitor/job/changeStatus",
    method: "put",
    data: data,
  });
}
// å®šæ—¶ä»»åŠ¡ç«‹å³æ‰§è¡Œä¸€æ¬¡
export function runJob(jobId, jobGroup) {
  const data = {
    jobId,
    jobGroup
  }
    jobGroup,
  };
  return request({
    url: '/monitor/job/run',
    method: 'put',
    data: data
  })
    url: "/monitor/job/run",
    method: "put",
    data: data,
  });
}
src/hooks/useModal.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
import { ref } from "vue";
export function useModal(options) {
  const id = ref();
  const visible = ref(false);
  const loading = ref(false);
  const modalOptions = ref({});
  const openModal = (e) => {
    id.value = e;
    modalOptions.value = {
      title: e ? "编辑设备台账" : "新增设备台账",
      content: "确定执行此操作吗?",
      confirmText: "确定",
      cancelText: "取消",
      ...options,
    };
    visible.value = true;
  };
  // å…³é—­æ¨¡æ€æ¡†
  const closeModal = () => {
    visible.value = false;
    loading.value = false;
  };
  // ç¡®è®¤æ“ä½œ
  const handleConfirm = async (callback) => {
    loading.value = true;
    callback();
    closeModal();
  };
  return {
    id,
    visible,
    loading,
    modalOptions,
    openModal,
    closeModal,
    handleConfirm,
  };
}
src/views/equipmentManagement/ledger/Form.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,137 @@
<template>
  <el-form :model="form" label-width="100px">
    <el-row :gutter="20">
      <el-col :span="12">
        <el-form-item label="设备名称" prop="deviceName">
          <el-input v-model="form.deviceName" placeholder="请输入设备名称" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="规格型号" prop="deviceModel">
          <el-input v-model="form.deviceModel" placeholder="请输入规格型号" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="供应商" prop="supplierName">
          <el-input v-model="form.supplierName" placeholder="请输入供应商" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="单位" prop="unit">
          <el-input v-model="form.unit" placeholder="请输入单位" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="数量" prop="number">
          <el-input
            v-model="form.number"
            placeholder="请输入数量"
            type="number"
          />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="含税单价" prop="taxIncludingPriceUnit">
          <el-input
            v-model="form.taxIncludingPriceUnit"
            placeholder="请输入含税单价"
            type="number"
          />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="含税总价" prop="taxIncludingPriceTotal">
          <el-input
            v-model="form.taxIncludingPriceTotal"
            placeholder="请输入含税总价"
            type="number"
          />
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="税率" prop="taxRate">
          <el-input
            v-model="form.taxRate"
            placeholder="请输入税率"
            type="number"
          >
            <template #append> % </template>
          </el-input>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="不含税总价" prop="unTaxIncludingPriceTotal">
          <el-input
            v-model="form.unTaxIncludingPriceTotal"
            placeholder="请输入不含税总价"
            type="number"
          />
        </el-form-item>
      </el-col>
      <!-- <el-col :span="12">
        <el-form-item label="录入人" prop="createUser">
          <el-input v-model="form.createUser" placeholder="请输入录入人" />
        </el-form-item>
      </el-col> -->
      <el-col :span="12">
        <el-form-item label="录入日期" prop="createTime">
          <el-date-picker
            style="width: 100%"
            v-model="form.createTime"
            format="YYYY-MM-DD"
            value-format="YYYY-MM-DD HH:mm:ss"
            type="date"
            placeholder="请选择录入日期"
            clearable
          />
        </el-form-item>
      </el-col>
    </el-row>
  </el-form>
</template>
<script setup>
import useFormData from "@/hooks/useFormData";
// import useUserStore from "@/store/modules/user";
import { getLedgerById } from "@/api/equipmentManagement/ledger";
import dayjs from "dayjs";
defineOptions({
  name: "设备台账表单",
});
const { form, resetForm } = useFormData({
  deviceName: undefined, // è®¾å¤‡åç§°
  deviceModel: undefined, // è§„格型号
  supplierName: undefined, // ä¾›åº”商
  unit: undefined, // å•位
  number: undefined, // æ•°é‡
  taxIncludingPriceUnit: undefined, // å«ç¨Žå•ä»·
  taxIncludingPriceTotal: undefined, // å«ç¨Žæ€»ä»·
  taxRate: undefined, // ç¨Žçއ
  unTaxIncludingPriceTotal: undefined, // ä¸å«ç¨Žæ€»ä»·
  // createUser: useUserStore().nickName, // å½•入人
  createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // å½•入日期
});
const loadForm = async (id) => {
  const { code, data } = await getLedgerById(id);
  if (code == 200) {
    form.deviceName = data.deviceName;
    form.deviceModel = data.deviceModel;
    form.supplierName = data.supplierName;
    form.unit = data.unit;
    form.number = data.number;
    form.taxIncludingPriceUnit = data.taxIncludingPriceUnit;
    form.taxIncludingPriceTotal = data.taxIncludingPriceTotal;
    form.taxRate = data.taxRate;
    form.unTaxIncludingPriceTotal = data.unTaxIncludingPriceTotal;
    form.createTime = data.createTime;
  }
};
defineExpose({
  form,
  loadForm,
});
</script>
src/views/equipmentManagement/ledger/Modal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <el-dialog :title="modalOptions.title" v-model="visible">
    <Form ref="formRef"></Form>
    <template #footer>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
      <el-button type="primary" @click="sendForm" :loading="loading">
        {{ modalOptions.confirmText }}
      </el-button>
    </template>
  </el-dialog>
</template>
<script setup>
import { useModal } from "@/hooks/useModal";
import { addLedger, editLedger } from "@/api/equipmentManagement/ledger";
import Form from "./Form.vue";
import { ElMessage } from "element-plus";
defineOptions({
  name: "设备台账新增编辑",
});
const emits = defineEmits(["success"]);
const formRef = ref();
const {
  id,
  visible,
  loading,
  openModal,
  modalOptions,
  handleConfirm,
  closeModal,
} = useModal();
const sendForm = async () => {
  loading.value = true;
  const { code } = id
    ? await editLedger({ id: id.value, ...formRef.value.form })
    : await addLedger(formRef.value.form);
  if (code == 200) {
    emits("success");
    ElMessage({ message: "操作成功", type: "success" });
    closeModal();
  } else {
    loading.value = false;
  }
};
const loadForm = async (id) => {
  openModal(id);
  await nextTick();
  formRef.value.loadForm(id);
};
defineExpose({
  openModal,
  loadForm,
});
</script>
src/views/equipmentManagement/ledger/index.vue
@@ -1,6 +1,6 @@
<template>
  <div class="app-container">
    <el-form :model="filters" :inline="true">
    <!-- <el-form :model="filters" :inline="true">
      <el-form-item label="搜索">
        <el-input
          v-model="filters.searchText"
@@ -15,7 +15,15 @@
        <el-button type="primary" @click="getTableData">搜索</el-button>
        <el-button @click="resetFilters">重置</el-button>
      </el-form-item>
    </el-form>
    </el-form> -->
    <div class="table_list">
      <div class="actions">
        <div></div>
        <div>
          <el-button type="primary" @click="add" icon="Plus"> æ–°å¢ž </el-button>
          <el-button @click="handleOut" icon="download">导出</el-button>
        </div>
      </div>
    <PIMTable
      :column="columns"
      :tableData="dataList"
@@ -25,25 +33,41 @@
        total: pagination.total,
      }"
    >
      <template #operation>
        <el-button type="primary" text>编辑</el-button>
        <el-button type="danger" text>删除</el-button>
        <template #operation="{ row }">
          <el-button type="primary" text @click="edit(row.id)" icon="editPen">
            ç¼–辑
          </el-button>
          <el-button
            type="danger"
            text
            icon="delete"
            @click="deleteRow(row.id)"
          >
            åˆ é™¤
          </el-button>
      </template>
    </PIMTable>
    </div>
    <Modal ref="modalRef" @success="getTableData"></Modal>
  </div>
</template>
<script setup>
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { Search } from "@element-plus/icons-vue";
import { getLedgerPage, delLedger } from "@/api/equipmentManagement/ledger";
import { onMounted } from "vue";
import Modal from "./Modal.vue";
import { ElMessageBox } from "element-plus";
defineOptions({
  name: "设备台账",
});
const modalRef = ref();
const { filters, columns, dataList, pagination, getTableData, resetFilters } =
  usePaginationApi(
    () => {},
    getLedgerPage,
    {
      searchText: undefined,
    },
@@ -51,54 +75,123 @@
      {
        label: "设备名称",
        align: "center",
        prop: "deviceName",
      },
      {
        label: "规格型号",
        align: "center",
        prop: "deviceModel",
      },
      {
        label: "供应商",
        align: "center",
        prop: "supplierName",
      },
      {
        label: "单位",
        align: "center",
        prop: "unit",
      },
      {
        label: "数量",
        align: "center",
        prop: "number",
      },
      {
        label: "含税单价",
        align: "center",
        prop: "taxIncludingPriceUnit",
      },
      {
        label: "含税总价",
        align: "center",
        prop: "taxIncludingPriceTotal",
      },
      {
        label: "税率",
        align: "center",
        prop: "taxRate",
      },
      {
        label: "不含税总价",
        align: "center",
        prop: "unTaxIncludingPriceTotal",
      },
      {
        label: "录入人",
        align: "center",
        prop: "createUser",
      },
      {
        label: "录入日期",
        align: "center",
        prop: "createTime",
      },
      {
        fixed: "right",
        label: "操作",
        dataType: "slot",
        slot: "operation",
        align: "center",
        width: "150px",
        width: "200px",
      },
    ]
  );
const add = () => {
  modalRef.value.openModal();
};
const edit = (id) => {
  modalRef.value.loadForm(id);
};
const deleteRow = (id) => {
  ElMessageBox.confirm("此操作将永久删除该文件, æ˜¯å¦ç»§ç»­?", "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    const { code } = await delLedger(id);
    if (code == 200) {
      ElMessage({
        type: "success",
        message: "删除成功",
      });
      getTableData();
    }
  });
};
const handleOut = () => {
  ElMessageBox.confirm("选中的内容将被导出,是否确认导出?", "导出", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      proxy.download(
        `/device/ledger/export?ids=${ids}`,
        {},
        "设备台账档案.xlsx"
      );
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
onMounted(() => {
  getTableData();
});
</script>
<style lang="scss" scoped>
.table_list {
  margin-top: unset;
}
.actions {
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
}
</style>
src/views/inventoryManagement/issueManagement/index.vue
@@ -28,7 +28,7 @@
        <el-table-column label="入库数量" prop="entryPersonName" width="90" show-overflow-tooltip />
        <el-table-column label="含税单价" prop="entryDate" width="100" show-overflow-tooltip />
        <el-table-column label="含税总价" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="税率" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column label="税率(%)" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column label="不含税总价" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="入库人" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column fixed="right" label="操作" min-width="60" align="center">
src/views/inventoryManagement/receiptManagement/index.vue
@@ -28,7 +28,7 @@
        <el-table-column label="入库数量" prop="entryPersonName" width="90" show-overflow-tooltip />
        <el-table-column label="含税单价" prop="entryDate" width="100" show-overflow-tooltip />
        <el-table-column label="含税总价" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="税率" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column label="税率(%)" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column label="不含税总价" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="入库人" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column fixed="right" label="操作" min-width="60" align="center">
src/views/inventoryManagement/stockManagement/index.vue
@@ -28,7 +28,7 @@
        <el-table-column label="出库数量" prop="entryPersonName" width="100" show-overflow-tooltip />
        <el-table-column label="含税单价" prop="entryDate" width="100" show-overflow-tooltip />
        <el-table-column label="含税总价" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="税率" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="税率(%)" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="不含税总价" prop="executionDate" width="100" show-overflow-tooltip />
        <el-table-column label="入库人" prop="executionDate" width="80" show-overflow-tooltip />
        <el-table-column fixed="right" label="操作" min-width="60" align="center">
src/views/procurementManagement/invoiceEntry/index.vue
@@ -11,9 +11,13 @@
          clearable
          prefix-icon="Search"
        />
        <el-button type="primary" @click="handleQuery" style="margin-left: 10px"
          >搜索</el-button
        <el-button
          type="primary"
          @click="handleQuery"
          style="margin-left: 10px"
        >
          æœç´¢
        </el-button>
      </div>
      <div>
        <el-button type="primary" @click="handleAdd">新增登记</el-button>
@@ -108,6 +112,18 @@
        <el-table-column
          label="合同金额(元)"
          prop="contractAmount"
          show-overflow-tooltip
          :formatter="formattedNumber"
        />
        <el-table-column
          label="已开票金额(元)"
          prop="receiptPaymentAmount"
          show-overflow-tooltip
          :formatter="formattedNumber"
        />
        <el-table-column
          label="待开票金额(元)"
          prop="unReceiptPaymentAmount"
          show-overflow-tooltip
          :formatter="formattedNumber"
        />
@@ -472,10 +488,14 @@
};
// ä¸»è¡¨åˆè®¡æ–¹æ³•
const summarizeMainTable = (param) => {
  return proxy.summarizeTable(param, ["contractAmount"], {
  return proxy.summarizeTable(
    param,
    ["contractAmount", "receiptPaymentAmount", "unReceiptPaymentAmount"],
    {
    ticketsNum: { noDecimal: true }, // ä¸ä¿ç•™å°æ•°
    futureTickets: { noDecimal: true }, // ä¸ä¿ç•™å°æ•°
  });
    }
  );
};
// å­è¡¨åˆè®¡æ–¹æ³•
const summarizeChildrenTable = (param) => {
src/views/procurementManagement/paymentEntry/index.vue
@@ -184,7 +184,6 @@
          <el-col :span="12">
            <el-form-item label="付款日期:" prop="paymentDate">
              <el-date-picker
                disabled
                style="width: 100%"
                v-model="form.paymentDate"
                value-format="YYYY-MM-DD"
src/views/salesManagement/invoiceLedger/index.vue
@@ -77,7 +77,7 @@
          show-overflow-tooltip
          :formatter="formattedNumber"
        />
        <el-table-column label="税率%" prop="taxRate" show-overflow-tooltip />
        <el-table-column label="税率(%)" prop="taxRate" show-overflow-tooltip />
        <el-table-column
          label="录入人"
          prop="invoicePerson"
src/views/salesManagement/invoiceRegistration/index.vue
@@ -77,7 +77,7 @@
              <el-table-column label="规格型号" prop="specificationModel" />
              <el-table-column label="单位" prop="unit" width="70" />
              <el-table-column label="数量" prop="quantity" width="70" />
              <el-table-column label="税率" prop="taxRate" width="70" />
              <el-table-column label="税率(%)" prop="taxRate" width="70" />
              <el-table-column
                label="含税单价(元)"
                prop="taxInclusiveUnitPrice"
@@ -275,7 +275,7 @@
          <el-table-column label="规格型号" prop="specificationModel" />
          <el-table-column label="单位" prop="unit" />
          <el-table-column label="数量" prop="quantity" width="70" />
          <el-table-column label="税率" prop="taxRate" width="70" />
          <el-table-column label="税率(%)" prop="taxRate" width="70" />
          <el-table-column
            label="含税单价(元)"
            prop="taxInclusiveUnitPrice"
src/views/salesManagement/receiptPayment/index.vue
@@ -4,22 +4,6 @@
      <el-form :inline="true" :model="searchForm" style="width: 100%">
        <el-row justify="space-between">
          <el-col :span="24">
            <el-form-item label="回款登记">
              <el-input
                v-model="searchForm.searchText"
                placeholder="输入客户名称/合同号搜索"
                clearable
                prefix-icon="Search"
                @change="handleQuery"
              />
            </el-form-item>
            <el-form-item>
              <el-checkbox
                v-model="searchForm.status"
                label="不显示待回款为0"
                @change="handleQuery"
              />
            </el-form-item>
            <el-form-item label="客户名称">
              <el-input
                v-model="searchForm.customerName"
@@ -45,6 +29,13 @@
                @change="handleQuery"
                clearable
                prefix-icon="Search"
              />
            </el-form-item>
            <el-form-item>
              <el-checkbox
                v-model="searchForm.status"
                label="不显示待回款为0"
                @change="handleQuery"
              />
            </el-form-item>
            <el-form-item>
@@ -186,7 +177,7 @@
          show-overflow-tooltip
          :formatter="formattedNumber"
        />
        <el-table-column label="税率" prop="taxRate" show-overflow-tooltip />
        <el-table-column label="税率(%)" prop="taxRate" show-overflow-tooltip />
        <el-table-column
          label="回款金额(元)"
          prop="receiptPaymentAmountTotal"
@@ -582,7 +573,12 @@
    type: "warning",
  })
    .then(() => {
      proxy.download("/receiptPayment/export", {}, "回款登记档案.xlsx");
      const ids = selectedRows.value.map((item) => item.id);
      proxy.download(
        `/receiptPayment/export`,
        { ids: `${ids}` },
        "回款登记档案.xlsx"
      );
    })
    .catch(() => {
      proxy.$modal.msg("已取消");