| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734 |
- <!--
- * @Author: 倚楼听风雨 18408246387@163.com
- * @Date: 2022-11-16 17:16:17
- * @LastEditors: 倚楼听风雨 18408246387@163.com
- * @LastEditTime: 2023-02-20 15:47:22
- * @FilePath: \log-server-web\src\view\logComputer\list_computer_distinct.vue
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
- -->
- <template>
- <div>
- <div class="gva-search-box">
- <div class="gva-btn-list">
- <el-form ref="searchForm" :inline="true" :model="searchInfo">
- <el-form-item label="电脑编号">
- <el-input
- v-model="searchInfo.pc_num"
- placeholder="编号"
- size="small"
- />
- </el-form-item>
- <el-form-item label="供应商">
- <el-select v-model="searchInfo.shop_id" size="small">
- <el-option
- v-for="item in shopOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item label="套餐">
- <el-select v-model="searchInfo.set_meal_id" size="small"
- ><el-option
- v-for="item in setMealOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- /></el-select>
- </el-form-item>
- <el-form-item label="日期" prop="new_date">
- <el-date-picker
- v-model="searchInfo.new_date"
- popper-class="picker-popovers"
- class="timefilter"
- type="date"
- :disabled-date="disabledDate"
- :shortcuts="shortcuts"
- placeholder="选择日期时间"
- value-format="YYYY-MM-DD"
- >
- </el-date-picker>
- </el-form-item>
- <!-- <el-form-item label="是否到期">
- <el-select v-model="searchInfo.is_expire" size="small">
- <el-option label="否" value="0" />
- <el-option label="是" value="1" />
- <el-option label="明日到期" value="2" />
- </el-select>
- </el-form-item> -->
- <el-form-item>
- <el-button
- size="small"
- type="primary"
- icon="search"
- @click="onSubmit"
- >查询</el-button
- >
- <el-button size="small" icon="refresh" @click="onReset"
- >重置</el-button
- >
- <el-button
- class="excel-btn"
- size="small"
- type="primary"
- icon="download"
- @click="handleExcelRentExport"
- >导出表格</el-button
- >
- </el-form-item>
- </el-form>
- </div>
- <!-- <div class="gva-btn-list">
- <el-button
- icon="delete"
- size="small"
- type="danger"
- :disabled="!apis.length"
- style="margin-left: 10px"
- @click="deletesMenu()"
- >删除</el-button
- >
- </div> -->
- </div>
- <div class="row center">
- <el-tag size="large">电脑数量 : {{ computerNum }} </el-tag>
- </div>
- <div class="gva-table-box">
- <el-table
- height="500px"
- :data="tableData"
- @sort-change="sortChange"
- @selection-change="handleSelectionChange"
- border
- >
- <el-table-column type="selection" width="55" />
- <el-table-column
- align="left"
- label="日期"
- min-width="80"
- prop="new_date"
- />
- <el-table-column
- align="left"
- label="供应商"
- min-width="70"
- prop="shop_name"
- />
- <el-table-column
- align="left"
- label="编号"
- min-width="80"
- prop="pc_num"
- />
- <el-table-column
- align="left"
- label="机房名称"
- min-width="80"
- prop="pc_name"
- />
- <el-table-column
- align="left"
- label="起租时间"
- min-width="150"
- prop="rent_start_then"
- />
- <el-table-column
- align="left"
- label="到期时间"
- min-width="150"
- prop="rent_end_then"
- />
- <el-table-column
- align="left"
- label="租期"
- min-width="50"
- prop="rent_duration_then"
- />
- <el-table-column
- align="left"
- label="套餐"
- min-width="70"
- prop="set_meal_name"
- />
- <el-table-column
- align="left"
- label="价格"
- min-width="70"
- prop="rent_price_then"
- />
- <!-- <el-table-column
- align="center"
- label="套餐"
- min-width="150"
- prop="set_meal_name"
- >
- <template #default="scope">
- <span v-if="scope.row.price_type == 0">{{
- scope.row.set_meal_name +
- "-天卡(" +
- scope.row.rent_price_then +
- "元)"
- }}</span>
- <span v-else-if="scope.row.price_type == 1">{{
- scope.row.set_meal_name +
- "-周卡(" +
- scope.row.rent_price_then +
- "元)"
- }}</span>
- <span v-else>{{
- scope.row.set_meal_name +
- "-月卡(" +
- scope.row.rent_price_then +
- "元)"
- }}</span>
- </template>
- </el-table-column> -->
- <el-table-column
- align="left"
- label="折算天租金"
- min-width="100"
- prop="rent_price_day_then"
- />
- <el-table-column
- align="left"
- label="已产生租金"
- min-width="100"
- prop="rent_price_used_then"
- />
- <!-- <el-table-column
- align="center"
- label="是否到期"
- min-width="100"
- prop="is_expire"
- >
- <template #default="scope">
- <el-button
- v-if="scope.row.is_expire == 2"
- size="small"
- type="warning"
- plain
- >即将到期</el-button
- >
- <el-button
- v-if="scope.row.is_expire == 1"
- size="small"
- type="info"
- plain
- >到期未续</el-button
- >
- <el-button
- v-if="scope.row.is_expire == 0"
- size="small"
- type="success"
- plain
- >在租期中</el-button
- >
- </template>
- </el-table-column> -->
- <el-table-column
- align="left"
- label="备注"
- min-width="150"
- prop="remark"
- show-overflow-tooltip
- />
- <el-table-column
- align="left"
- label="更新时间"
- min-width="150"
- prop="update_time"
- />
- <el-table-column align="left" fixed="right" label="操作" width="130">
- <template #default="scope">
- <el-button
- size="small"
- type="primary"
- link
- icon="edit"
- @click="editMenu(scope.row.id)"
- >编辑</el-button
- >
- <el-button
- size="small"
- type="primary"
- link
- icon="delete"
- @click="deleteMenu(scope.row.id)"
- >删除</el-button
- >
- </template>
- </el-table-column>
- </el-table>
- <!-- </el-scrollbar> -->
- <div class="gva-pagination">
- <el-pagination
- :current-page="page"
- :page-size="pageSize"
- :page-sizes="[10, 20, 30, 50, 100]"
- :total="total"
- layout="total, sizes, prev, pager, next, jumper"
- @current-change="handleCurrentChange"
- @size-change="handleSizeChange"
- />
- </div>
- </div>
- </div>
- </template>
- <script>
- export default {
- name: "computer",
- };
- </script>
- <script setup>
- import {
- getRentComputerLedgerList,
- getRentComputerLedgerNum,
- listRentComputerShopList,
- listRentSetMealList,
- getRentComputerById,
- exportRentLedgerListExcel,
- editRentComputer,
- deleteRentComputerById,
- deleteRentComputerByIds,
- } from "@/api/rentComputer";
- // import { useUserStore } from "@/pinia/modules/user";
- import { toSQLLine } from "@/utils/stringFun";
- import { ref } from "vue";
- import { ElMessage, ElMessageBox } from "element-plus";
- import { formatDate } from "@/utils/format";
- // import { downloadTemplate } from "@/api/excel";
- // import dayjs from "dayjs";
- const apis = ref([]);
- const form = ref({
- id: 0,
- pc_num: "",
- pc_name: "",
- shop_id: null,
- set_meal_id: null,
- todesk_id: "",
- todesk_password: "",
- sunflower_id: "",
- sunflower_password: "",
- rent_start: new Date(),
- rent_duration: 0,
- rent_end: new Date(),
- remark: "",
- // is_expire: -1,
- is_off_shelf: -1,
- });
- const rules = ref({
- pc_num: [{ required: true, message: "请输入电脑编号", trigger: "blur" }],
- pc_name: [{ required: true, message: "请输入电脑名称", trigger: "blur" }],
- shop_id: [{ required: true, message: "请选择供应商", trigger: "blur" }],
- set_meal_id: [{ required: true, message: "请选择套餐", trigger: "blur" }],
- rent_start: [{ required: true, message: "请选择起租日期", trigger: "blur" }],
- rent_duration: [
- { required: true, message: "请输入租赁天数", trigger: "blur" },
- ],
- // is_expire: [{ required: true, message: "请选择是否到期", trigger: "blur" }],
- // is_off_shelf: [
- // { required: true, message: "请选择是否下架", trigger: "blur" },
- // ],
- });
- const page = ref(1);
- const total = ref(0);
- const pageSize = ref(20);
- const tableData = ref([]);
- let spanArr = [];
- const searchInfo = ref({});
- const computerNum = ref("");
- const shopOptions = ref();
- const setMealOptions = ref();
- // const defaultTime = ref(new Date(2000, 1, 1, 12, 0, 0));
- // const path = ref(import.meta.env.VITE_BASE_API);
- // const userStore = useUserStore();
- const shortcuts = [
- {
- text: "今日",
- value: new Date(),
- },
- {
- text: "昨日",
- value: () => {
- const date = new Date();
- date.setTime(date.getTime() - 3600 * 1000 * 24);
- return date;
- },
- },
- ];
- const disabledDate = (time) => {
- return time.getTime() > Date.now();
- };
- // 计算租机到期时间
- const calculateRentDuration = async (scope) => {
- scope.rent_end = new Date(
- Date.parse(scope.rent_start) +
- 1 * 24 * 60 * 60 * 1000 * parseInt(scope.rent_duration)
- );
- };
- const getSpanArr = (data) => {
- spanArr = [];
- var pos = 0;
- for (var i = 0; i < data.length; i++) {
- if (i === 0) {
- spanArr.push(1);
- pos = 0;
- } else {
- if (data[i].pc_code === data[i - 1].pc_code) {
- spanArr[pos] += 1;
- spanArr.push(0);
- } else {
- spanArr.push(1);
- pos = i;
- }
- }
- }
- // console.log(spanArr);
- };
- // 分页
- const handleSizeChange = (val) => {
- pageSize.value = val;
- getTableData();
- };
- const onReset = () => {
- searchInfo.value = {};
- };
- const handleCurrentChange = (val) => {
- page.value = val;
- getTableData();
- };
- const handleExcelRentExport = async () => {
- var fileName = "";
- if (searchInfo.value.new_date == null) {
- let dt = new Date(Date.parse(new Date()) - 1 * 24 * 60 * 60 * 1000);
- var y = dt.getFullYear();
- var mt = (dt.getMonth() + 1).toString().padStart(2, "0");
- var day = dt.getDate().toString().padStart(2, "0");
- var timeStr = y + "-" + mt + "-" + day;
- fileName = timeStr + "-租机台账.xlsx";
- } else {
- fileName = searchInfo.value.new_date + "-租机台账.xlsx";
- }
- exportRentLedgerListExcel(
- { page: page.value, pageSize: pageSize.value, ...searchInfo.value },
- fileName
- );
- };
- // 排序
- const sortChange = ({ prop, order }) => {
- if (prop) {
- if (prop === "id") {
- prop = "id";
- }
- searchInfo.value.orderKey = toSQLLine(prop);
- searchInfo.value.desc = order === "descending";
- }
- getTableData();
- };
- // 搜索
- const onSubmit = () => {
- page.value = 1;
- pageSize.value = 20;
- if (typeof searchInfo.value.set_meal_id != "undefined") {
- searchInfo.value.set_meal_id = Number(searchInfo.value.set_meal_id);
- }
- // if (typeof searchInfo.value.is_expire != "undefined") {
- // searchInfo.value.is_expire = Number(searchInfo.value.is_expire);
- // }
- // if (typeof searchInfo.value.is_off_shelf != "undefined") {
- // searchInfo.value.is_off_shelf = Number(searchInfo.value.is_off_shelf);
- // }
- // console.log(searchInfo);
- getTableData();
- };
- // 查询
- const getTableData = async () => {
- const table = await getRentComputerLedgerList({
- page: page.value,
- pageSize: pageSize.value,
- ...searchInfo.value,
- });
- if (table.code === 0) {
- tableData.value = table.data.list;
- total.value = table.data.total;
- page.value = table.data.page;
- pageSize.value = table.data.pageSize;
- getSpanArr(table.data.list);
- getComputerNum();
- getSelectList();
- }
- };
- //获取下拉框list
- const getSelectList = async () => {
- //listRentComputerShopList
- const rentComputerShop = await listRentComputerShopList({
- page: 1,
- pageSize: 999,
- });
- let rentComputerShopList = [];
- const data = rentComputerShop.data.list;
- data.forEach((e) => {
- rentComputerShopList.push({ value: e.id, label: e.name });
- });
- shopOptions.value = rentComputerShopList;
- //listRentSetMealList
- const setMealShop = await listRentSetMealList({
- page: 1,
- pageSize: 999,
- });
- let setMealList = [];
- const data2 = setMealShop.data.list;
- data2.forEach((e) => {
- var priceStr = "";
- if (e.price_type == 0) {
- priceStr = "天卡(" + e.rent_price + "元)";
- } else if (e.price_type == 1) {
- priceStr = "周卡(" + e.rent_price + "元)";
- } else {
- priceStr = "月卡(" + e.rent_price + "元)";
- }
- setMealList.push({
- value: e.id,
- label: e.shop_name + "-" + e.name + "-" + priceStr,
- });
- });
- setMealOptions.value = setMealList;
- };
- // 查询
- const getComputerNum = async () => {
- const table = await getRentComputerLedgerNum({ ...searchInfo.value });
- if (table.code === 0) {
- // console.log(table.data);
- computerNum.value = table.data;
- }
- };
- getTableData();
- // 批量操作
- const handleSelectionChange = (val) => {
- apis.value = val;
- };
- const dialogFormVisible = ref(false);
- // 弹窗相关
- const menuForm = ref(null);
- const checkFlag = ref(false);
- const initForm = () => {
- checkFlag.value = false;
- menuForm.value.resetFields();
- form.value = {
- id: 0,
- coding: "",
- describe: "",
- parent_id: "",
- };
- };
- const menuOption = ref([
- {
- id: "0",
- title: "根编号",
- },
- ]);
- const setOptions = () => {
- menuOption.value = [
- {
- id: "0",
- title: "根目录",
- },
- ];
- setMenuOptions(tableData.value, menuOption.value, false);
- };
- const setMenuOptions = (menuData, optionsData, disabled) => {
- menuData &&
- menuData.forEach((item) => {
- if (item.children && item.children.length) {
- const option = {
- ID: String(item.id),
- disabled: disabled || item.id === form.value.id,
- children: [],
- };
- setMenuOptions(
- item.children,
- option.children,
- disabled || item.id === form.value.id
- );
- optionsData.push(option);
- } else {
- const option = {
- ID: String(item.id),
- disabled: disabled || item.id === form.value.id,
- };
- optionsData.push(option);
- }
- });
- };
- const loadExcel = (res) => {
- if (res.code === 0) {
- ElMessage({
- type: "success",
- message: res.msg,
- });
- } else {
- ElMessage({
- type: "error",
- message: res.msg,
- showClose: true,
- });
- }
- getTableData();
- };
- // 添加菜单方法,id为 0则为添加根菜单
- const isEdit = ref(false);
- const dialogTitle = ref("新增租机");
- const addMenu = async (id) => {
- dialogTitle.value = "新增租机";
- form.value.parent_id = String(id);
- isEdit.value = false;
- setOptions();
- dialogFormVisible.value = true;
- getSelectList();
- };
- // 修改菜单方法
- const editMenu = async (id) => {
- dialogTitle.value = "编辑租机";
- const res = await getRentComputerById({ id });
- form.value = res.data;
- if (form.value.is_off_shelf == 1) {
- form.value.is_off_shelf = true;
- } else {
- form.value.is_off_shelf = false;
- }
- isEdit.value = true;
- setOptions();
- dialogFormVisible.value = true;
- getSelectList();
- };
- const closeDialog = () => {
- initForm();
- dialogFormVisible.value = false;
- };
- // 批量删除菜单
- const deletesMenu = async () => {
- ElMessageBox.confirm("确定批量删除所选吗?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(async () => {
- const ids = apis.value.map((item) => item.id);
- // console.log(ids);
- const res = await deleteRentComputerByIds({ ids });
- if (res.code === 0) {
- ElMessage({
- type: "success",
- message: "删除成功!",
- });
- getTableData();
- }
- })
- .catch(() => {
- ElMessage({
- type: "info",
- message: "已取消删除",
- });
- });
- };
- // 删除菜单
- const deleteMenu = async (id) => {
- ElMessageBox.confirm("确定删除?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- })
- .then(async () => {
- console.log(id);
- const res = await deleteRentComputerById({ id });
- if (res.code === 0) {
- ElMessage({
- type: "success",
- message: "删除成功!",
- });
- getTableData();
- }
- })
- .catch(() => {
- ElMessage({
- type: "info",
- message: "已取消删除",
- });
- });
- };
- // const enterDialog = async () => {
- // // console.log(form.value);
- // menuForm.value.validate(async (valid) => {
- // if (valid) {
- // let res;
- // form.value.id = Number(form.value.id);
- // form.value.shop_id = Number(form.value.shop_id);
- // form.value.set_meal_id = Number(form.value.set_meal_id);
- // form.value.rent_duration = Number(form.value.rent_duration);
- // form.value.rent_start = formatDate(form.value.rent_start);
- // form.value.rent_end = formatDate(form.value.rent_end);
- // form.value.is_expire = Number(form.value.is_expire);
- // if (form.value.is_off_shelf == true) {
- // form.value.is_off_shelf = 1;
- // } else {
- // form.value.is_off_shelf = 0;
- // }
- // if (isEdit.value) {
- // res = await editRentComputer(form.value);
- // } else {
- // // res = await addRentComputer(form.value);
- // }
- // if (res.code === 0) {
- // ElMessage({
- // type: "success",
- // message: isEdit.value ? "编辑成功" : "添加成功!",
- // });
- // getTableData();
- // } else {
- // ElMessage({
- // type: "error",
- // message: res.message,
- // });
- // }
- // initForm();
- // dialogFormVisible.value = false;
- // }
- // });
- // };
- </script>
- <style scoped lang="scss">
- .button-box {
- padding: 10px 20px;
- .el-button {
- float: right;
- }
- }
- .warning {
- color: #dc143c;
- }
- </style>
|