maven
10 天以前 ceb802af0b9630b30c7f973f05da8d2ed9e9c16f
yys  新增劳保统计
已修改4个文件
已添加1个文件
354 ■■■■■ 文件已修改
src/api/lavorissce/ledger.js 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lavorissue/ledger/Form.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lavorissue/ledger/index.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lavorissue/statistics/index.vue 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/lavorissce/ledger.js
@@ -1,11 +1,20 @@
import request from '@/utils/request'
// åˆ†é¡µæŸ¥è¯¢
export function listPage(data) {
export function listPage(params) {
    return request({
        url: '/lavorIssue/listPage',
        method: 'get',
        data
        params
    })
}
// åˆ†é¡µæŸ¥è¯¢
export function statistics(params) {
    return request({
        url: '/lavorIssue/statistics',
        method: 'get',
        params
    })
}
src/views/index.vue
@@ -68,11 +68,11 @@
                    <li v-for="item in todoList" :key="item.id">
                        <div style="display: flex;flex-direction: column;justify-content: space-between;width: 100%;gap: 20px">
                            <div style="display: flex;justify-content: space-between;align-items: center;">
                                <div class="todo-title">流程编号:{{item.approveId}}</div>
                                <div class="todo-division">申请部门:{{item.approveDeptName}}</div>
                                <div class="todo-title">待办编号:{{item.approveId}}</div>
                                <div class="todo-division">部门:{{item.approveDeptName}}</div>
                                <div class="todo-time">{{item.approveTime}}</div>
                            </div>
                            <div class="todo-division">审批事由:{{item.approveReason}}</div>
                            <div class="todo-division">待办事由:{{item.approveReason}}</div>
                        </div>
                    </li>
                </ul>
src/views/lavorissue/ledger/Form.vue
@@ -19,6 +19,15 @@
            <el-option :label="item.staffName" :value="item.id" v-for="(item,index) in personList" :key="id" />
          </el-select>
        </el-form-item>
        <el-form-item label="劳保类型" prop="dictType">
          <el-select
              v-model="form.dictType"
              placeholder="请选择"
              clearable
          >
            <el-option :label="item.label" :value="item.value" v-for="(item,index) in sys_lavor_issue_type" :key="value" />
          </el-select>
        </el-form-item>
        <el-form-item label="劳保防具" prop="dictId">
          <el-select
              v-model="form.dictId"
@@ -28,16 +37,16 @@
            <el-option :label="item.label" :value="item.value" v-for="(item,index) in sys_lavor_issue" :key="value" />
          </el-select>
        </el-form-item>
        <el-form-item label="领用数量" prop="num">
        <el-form-item label="发放数量" prop="num">
          <el-input-number :step="1" :min="0" style="width: 100%"
            v-model="form.num"
            placeholder="请输入"
          />
        </el-form-item>
        <el-form-item label="领用日期" prop="adoptedDate">
        <el-form-item label="进厂日期" prop="factoryDate">
          <el-date-picker
              style="width: 100%"
              v-model="form.adoptedDate"
              v-model="form.factoryDate"
              format="YYYY-MM-DD"
              value-format="YYYY-MM-DD"
              type="date"
@@ -45,6 +54,17 @@
              clearable
          />
        </el-form-item>
    <el-form-item label="发放日期" prop="issueDate">
      <el-date-picker
          style="width: 100%"
          v-model="form.issueDate"
          format="YYYY-MM-DD"
          value-format="YYYY-MM-DD"
          type="date"
          placeholder="请选择日期"
          clearable
      />
    </el-form-item>
        
  </el-form>
</template>
@@ -66,23 +86,30 @@
  name: "新增收入",
});
const { sys_lavor_issue } = proxy.useDict("sys_lavor_issue")
const { sys_lavor_issue_type } = proxy.useDict("sys_lavor_issue_type")
const formRef = ref(null);
const productOptions = ref([]);
const personList = ref([]);
const formRules = {
  deptId: [{ required: true, trigger: "blur", message: "请输入" }],
  dictType: [{ required: true, trigger: "change", message: "请选择" }],
  staffId: [{ required: true, trigger: "blur", message: "请输入" }],
  dictId: [{ required: true, trigger: "change", message: "请选择" }],
  num: [{ required: true, trigger: "change", message: "请选择" }],
  adoptedDate: [{ required: true, trigger: "change", message: "请选择" }],
  factoryDate: [{ required: true, trigger: "change", message: "请选择" }],
  issueDate: [{ required: true, trigger: "change", message: "请选择" }],
}
const { form, resetForm } = useFormData({
  deptId: undefined, //
  dictType: undefined,
  staffId: undefined, //
  dictId: undefined, //
  num: undefined, //
  adoptedDate: undefined,
  factoryDate: undefined,
  issueDate: undefined,
});
const getPersonList = () => {
  getStaffOnJob().then(res => {
@@ -112,7 +139,6 @@
  getPersonList();
};
onMounted(() => {
  console.log(sys_lavor_issue)
  form.deptId = userStore.currentDeptId
  getProductOptions();
  getPersonList();
src/views/lavorissue/ledger/index.vue
@@ -3,7 +3,7 @@
    <el-form :model="filters" :inline="true">
      <el-form-item label="员工名称:">
        <el-input
            v-model="filters.supplierName"
            v-model="filters.staffName"
            style="width: 240px"
            placeholder="请输入"
            @change="handleQuery"
@@ -49,6 +49,9 @@
          <el-button type="primary" text @click="edit(row)" icon="editPen">
            ç¼–辑
          </el-button>
          <el-button type="primary" :disabled="row.adoptedDate ? true : false" text @click="adopted(row)">
            é¢†ç”¨
          </el-button>
        </template>
      </PIMTable>
    </div>
@@ -59,7 +62,7 @@
<script setup>
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { listPage,deleteLedger } from "@/api/lavorissce/ledger";
import { listPage,deleteLedger,update } from "@/api/lavorissce/ledger";
import { onMounted, getCurrentInstance } from "vue";
import Modal from "./Modal.vue";
import { ElMessageBox, ElMessage } from "element-plus";
@@ -85,9 +88,14 @@
} = usePaginationApi(
    listPage,
    {
      incomeMethod: undefined,
      staffName: '',
    },
    [
      {
        label: "劳保单号",
        align: "center",
        prop: "orderNo",
      },
      {
        label: "员工名称",
        align: "center",
@@ -98,6 +106,13 @@
        align: "center",
        prop: "staffNo"
      },
      {
        label: "劳保类型",
        align: "center",
        prop: "dictTypeName",
      },
      {
        label: "劳保防具",
        align: "center",
@@ -105,9 +120,21 @@
      },
      {
        label: "领用数量",
        label: "发放数量",
        align: "center",
        prop: "num",
      },
      {
        label: "进厂日期",
        align: "center",
        prop: "factoryDate",
      },
      {
        label: "发放日期",
        align: "center",
        prop: "issueDate",
      },
      {
@@ -132,11 +159,37 @@
  multipleList.value = selectionList;
};
const adopted = (row) => {
  ElMessageBox.confirm("是否确认领用?", "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  }).then(async () => {
    const params = {
      id: row.id,
      adoptedDate: dayjs().format("YYYY-MM-DD")
    }
    const { code } = await update(params);
    if (code == 200) {
      ElMessage({
        type: "success",
        message: "领用成功",
      });
      getTableData();
    }
  })
}
const add = () => {
  modalRef.value.openModal();
};
const edit = (row) => {
  modalRef.value.loadForm(row);
};
/** æœç´¢æŒ‰é’®æ“ä½œ */
const handleQuery = () => {
  getTableData();
};
const changePage = ({ page, limit }) => {
  pagination.currentPage = page;
@@ -192,7 +245,6 @@
};
onMounted(() => {
  console.log(12331)
  filters.entryDate = [
    dayjs().format("YYYY-MM-DD"),
    dayjs().add(1, "day").format("YYYY-MM-DD"),
src/views/lavorissue/statistics/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
<template>
  <div class="app-container">
    <el-form :model="filters" :inline="true">
      <el-form-item label="发放季度:" prop="season">
        <el-select
            :disabled="filters.issueDate ? true : false"
            style="width: 200px;"
            @change="getList"
            v-model="filters.season"
            placeholder="请选择"
            clearable
        >
          <el-option :label="item.label" :value="item.value" v-for="(item,index) in jidu" :key="value" />
        </el-select>
      </el-form-item>
      <el-form-item label="发放月份:" prop="issueDate">
        <el-date-picker
            :disabled="filters.season ? true : false"
            v-model="filters.issueDate"
            @change="getList"
            type="month"
            value-format="YYYY-MM-DD"
            format="YYYY-MM"
            placeholder="请选择月份"
            clearable
            style="width: 100%"
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="getList">搜索</el-button>
        <el-button @click="resetParams">重置</el-button>
      </el-form-item>
    </el-form>
    <div class="table_list">
      <div class="actions">
        <div class="head" @click="getList(1)">已领取劳保数量:{{statisticsObj.ylqNum}}</div>
        <div class="head" @click="getList(2)">未领取劳保数量: {{ statisticsObj.wlqNum }}</div>
        <div class="head" @click="getList(3)">超时已领取劳保数量: {{statisticsObj.csylqNum}}</div>
        <div class="head" @click="getList(4)">超时未领取劳保数量: {{statisticsObj.cswlqNum}}</div>
      </div>
      <PIMTable
          rowKey="id"
          isSelection
          :column="columns"
          :tableData="dataList"
          :page="{
          current: pagination.currentPage,
          size: pagination.pageSize,
          total: pagination.total,
        }"
          @selection-change="handleSelectionChange"
          @pagination="changePage"
      >
      </PIMTable>
    </div>
  </div>
</template>
<script setup>
import { usePaginationApi } from "@/hooks/usePaginationApi";
import { listPage,statistics } from "@/api/lavorissce/ledger";
import { onMounted, getCurrentInstance } from "vue";
import { ElMessageBox, ElMessage } from "element-plus";
import dayjs from "dayjs";
// è¡¨æ ¼å¤šé€‰æ¡†é€‰ä¸­é¡¹
const multipleList = ref([]);
const { proxy } = getCurrentInstance();
const modalRef = ref();
const filesDia = ref()
const jidu = ref([
  {
    value: '1',
    label: '第一季度'
  },
  {
    value: '2',
    label: '第二季度'
  },
  {
    value: '3',
    label: '第三季度'
  },
  {
    value: '4',
    label: '第四季度'
  }
])
const {
  filters,
  columns,
  dataList,
  pagination,
  getTableData,
  resetFilters,
  onCurrentChange,
} = usePaginationApi(
    listPage,
    {
      season: '',
      issueDate: '',
      status: 0
    },
    [
      {
        label: "劳保单号",
        align: "center",
        prop: "orderNo",
      },
      {
        label: "员工名称",
        align: "center",
        prop: "staffName",
      },
      {
        label: "员工编号",
        align: "center",
        prop: "staffNo"
      },
      {
        label: "劳保类型",
        align: "center",
        prop: "dictTypeName",
      },
      {
        label: "劳保防具",
        align: "center",
        prop: "dictName",
      },
      {
        label: "发放数量",
        align: "center",
        prop: "num",
      },
      {
        label: "进厂日期",
        align: "center",
        prop: "factoryDate",
      },
      {
        label: "发放日期",
        align: "center",
        prop: "issueDate",
      },
      {
        label: "领用日期",
        align: "center",
        prop: "adoptedDate",
      }
    ]
);
const statisticsObj = ref({
  ylqNum: 0,  // å·²é¢†å–数量
  wlqNum: 0,  // æœªé¢†å–数量
  csylqNum: 0,  // è¶…时已领取数量
  cswlqNum: 0  // è¶…时未领取数量
})
const resetParams = () => {
  resetFilters();
  getStatistics();
};
// å¤šé€‰åŽåšä»€ä¹ˆ
const handleSelectionChange = (selectionList) => {
  multipleList.value = selectionList;
};
const getList = (status) => {
  switch (status){
    case 1:
      filters.status = 1
      break;
    case 2:
      filters.status = 2
      break;
    case 3:
      filters.status = 3
      break;
    case 4:
      filters.status = 4
      break;
    default:
      filters.status = 0
  }
  console.log(filters)
  getTableData();
  getStatistics();
};
/** æœç´¢æŒ‰é’®æ“ä½œ */
const handleQuery = () => {
  page.current = 1;
  getTableData();
};
const changePage = ({ page, limit }) => {
  pagination.currentPage = page;
  pagination.pageSize = limit;
  onCurrentChange(page);
};
const getStatistics = () => {
  statistics(filters).then(res => {
    statisticsObj.value.cswlqNum = res.data.cswlqNum
    statisticsObj.value.csylqNum = res.data.csylqNum
    statisticsObj.value.ylqNum = res.data.ylqNum
    statisticsObj.value.wlqNum = res.data.wlqNum
  })
}
onMounted(() => {
  getList()
});
</script>
<style lang="scss" scoped>
.table_list {
  margin-top: unset;
}
.actions {
  display: flex;
  justify-content: space-around;
  align-items: center;
  //margin-top: 20px;
  margin-bottom: 30px;
}
.head{
  cursor: pointer;
  font-size: 18px;
  font-weight: 600;
}
</style>