缺少上传文件组件的完整代码,期待获取,完成签到页的全面优化

This commit is contained in:
2024-12-15 21:41:23 +08:00
parent 9fd16697d5
commit ba0d565424
27 changed files with 1102 additions and 57 deletions

View File

@@ -3,7 +3,20 @@
<el-row :gutter="20">
<el-col :span="16">
<el-header> 签到表</el-header>
<el-header>
<div style="">
<span>签到表</span>
<span style="float:right;">
<el-date-picker
v-model="queryParams.selectTime"
value-format="yyyy-MM-dd"
type="month"
@change="getList()"
placeholder="选择月">
</el-date-picker>
</span>
</div>
</el-header>
<table>
<thead>
<tr>
@@ -35,18 +48,20 @@
<el-button @click="removeAttendance" type="danger" plain>取消操作</el-button>
<el-button @click="toTravel" type="warning" plain>出差</el-button>
</el-card>
<el-card class="box-card">
<el-card class="box-card" >
<div slot="" class="">
<span><i class="el-icon-s-order"></i> 项目列表</span>
<!-- <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>-->
</div>
<div v-for="(item,index) in projectList" style="display: flex;justify-content: space-between">
<div style="height: 250px;overflow: auto">
<div v-for="(item,index) in sortedProjects" style="display: flex;justify-content: space-between;">
<el-button class="text" :style="{backgroundColor:item.color===''?'':item.color}" @click="signIn(item)">
{{ item.projectName }}
</el-button>
<el-color-picker class="color-picker" v-model="item.color"
@change="changeItemColor(item)"></el-color-picker>
</div>
</div>
</el-card>
<el-card class="box-card">
<div slot="" class="">
@@ -288,13 +303,14 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 50,
selectTime: new Date(),
},
selectArrayIndex: new Date().getDate(),
timeFlag: 0,
// 项目查询参数
projectQueryParams: {
pageNum: 1,
pageSize: 10,
pageSize: 99,
projectStatus: 0,
projectName: undefined,
projectNum: undefined,
@@ -310,6 +326,7 @@ export default {
calcResultUser: {},
calcResultAttendances: [],
calcResultProject: {},
}
},
mounted() {
@@ -319,6 +336,17 @@ export default {
this.getDate();
this.getList();
},
computed:{
sortedProjects() {
let projectList = [...this.projectList];
projectList.sort((a, b) => {
if (a.color && !b.color) return -1;
if (!a.color && b.color) return 1;
return 0;
});
return projectList;
}
},
methods: {
@@ -403,14 +431,14 @@ export default {
getList() {
this.loading = true;
listOaAttendance(this.queryParams).then(res => {
this.userList = res.data;
this.total = res.total;
this.userList = res.rows;
console.log(this.userList);
this.dateLength = res.total;
this.loading = false;
});
listProject(this.projectQueryParams).then(response => {
this.projectList = response.rows;
this.total = response.total;
})
},

View File

@@ -259,7 +259,7 @@
</el-table-column>
<el-table-column label="金额(单位:元)" prop="price">
<template slot-scope="scope">
<el-input v-model="scope.row.price" placeholder="请输入金额" οnkeyup="value=value.replace(/[^\d]/g,'')"/>
<el-input v-model="scope.row.price" placeholder="请输入金额" οnkeyup="value=value.replace(/[^\d]/g,'')" @input="updateBigPrice(scope.$index, scope.row)"/>
</template>
</el-table-column>
<el-table-column label="大写金额(零壹贰叁肆伍陆柒捌玖万仟佰拾亿元角分)" prop="bigPrice">
@@ -619,6 +619,7 @@ import {
listFinancePro,
updateFinance, listFinance
} from "@/api/oa/finance";
import {numberToCNY} from "../../../utils/currencyFormatter";
export default {
name: "list",
@@ -709,6 +710,15 @@ export default {
this.getList();
},
methods: {
updateBigPrice(index, row) {
console.log(index, row);
if (row.price !== '') {
row.bigPrice = numberToCNY(parseFloat(row.price) || 0);
} else {
row.bigPrice = ''; // 如果价格为空,则大写金额也清空
}
},
/** 查询项目管理列表 */
getList() {
this.loading = true;

View File

@@ -28,12 +28,12 @@
@node-click="handleNodeClick"
>
<span class="custom-tree-node" slot-scope="{ node, data }">
<span v-if="!data.isAdd">{{ node.label }}</span>
<span class="node-label" v-if="!data.isAdd">{{ node.label }}</span>
<el-input
v-model="newChildNode"
v-if="data.isAdd"
ref="addRef"
class="add-new-child-node">
v-model="newChildNode"
v-if="data.isAdd"
ref="addRef"
class="add-new-child-node">
</el-input>
<span>
<el-button
@@ -53,7 +53,7 @@
<el-button
type="text"
size="mini"
@click="() => remove(node, data)" v-if="data.parentId===-1">
@click="() => remove(node, data)" v-if="data.parentId===-1">
删除
</el-button>
</span>
@@ -579,7 +579,8 @@
</el-table-column>
<el-table-column label="金额" prop="price">
<template slot-scope="scope">
<el-input v-model="scope.row.price" placeholder="请输入金额"/>
<el-input v-model="scope.row.price" placeholder="请输入金额"
@input="updateBigPrice(scope.$index, scope.row)"/>
</template>
</el-table-column>
<el-table-column label="大写金额(零壹贰叁肆伍陆柒捌玖万仟佰拾亿元角分)" prop="bigPrice">
@@ -619,6 +620,7 @@ import {
listOaReceiveAccount,
updateOaReceiveAccount
} from "../../../api/oa/oaReceiveAccount";
import {numberToCNY} from "../../../utils/currencyFormatter";
export default {
name: "Finance",
@@ -656,7 +658,7 @@ export default {
lableBg: "background: #f0f9eb; width:150px; text-align: center;",
//弹出层出入账类型
type: '',
nowTab:"0",
nowTab: "0",
// 查询参数
queryParams: {
pageNum: 1,
@@ -676,8 +678,8 @@ export default {
//明细总价
priceSum: 0,
//全新节点
newChildNode:"",
receiveAccountName:"",
newChildNode: "",
receiveAccountName: "",
//选项卡标签
activeName: 'first',
@@ -729,6 +731,7 @@ export default {
}
};
},
created() {
/*this.getListOut();*/
// this.getListEnter();
@@ -741,14 +744,29 @@ export default {
},
methods: {
updateBigPrice(index, row) {
if (row.price !== '') {
row.bigPrice = numberToCNY(parseFloat(row.price) || 0);
} else {
row.bigPrice = ''; // 如果价格为空,则大写金额也清空
}
},
append(data) {
let newChild = { id: this.receiveAccountList[this.receiveAccountList.length-1].id++, label: '输入名称', children: [],receiveAccountName:"",isAdd:true };
let newChild = {
id: this.receiveAccountList[this.receiveAccountList.length - 1].id++,
label: '输入名称',
children: [],
receiveAccountName: "",
isAdd: true
};
if (!data.children) {
this.$set(data, 'children', []);
}
newChild.receiveAccountName = newChild.label;
newChild.parentId = -1;
addOaReceiveAccount(newChild).then(res=>{
addOaReceiveAccount(newChild).then(res => {
console.log(res)
newChild.receiveAccountId = res.data.receiveAccountId
})
@@ -773,10 +791,10 @@ export default {
handleNodeClick(data) {
this.queryParams.receiveAccountId = data.receiveAccountId;
if (this.nowTab==="2"){
if (this.nowTab === "2") {
return;
}
let type = this.nowTab=="1"?'0':'1'
let type = this.nowTab == "1" ? '0' : '1'
this.handleQuery(type);
},
@@ -1412,11 +1430,18 @@ export default {
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
}
.node-label{
width: 130px;
overflow: hidden;
text-overflow: ellipsis;
}
</style>

View File

@@ -0,0 +1,299 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="文件类型" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择文件类型" clearable>
<el-option
v-for="dict in dict.type.file_status"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:oaFile:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:oaFile:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:oaFile:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:oaFile:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="oaFileList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="文件名称" align="center" prop="fileUrl" />
<el-table-column label="文件来源" align="center" prop="status">
<template slot-scope="scope">
<dict-tag :options="dict.type.file_status" :value="scope.row.status"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:oaFile:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:oaFile:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改文件存储对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="上传文件" prop="fileUrl">
<file-upload v-model="form.fileUrl"/>
</el-form-item>
<el-form-item label="文件类型" prop="status">
<el-select v-model="form.status" placeholder="请选择文件类型" disabled>
<el-option
v-for="dict in dict.type.file_status"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listOaFile, getOaFile, delOaFile, addOaFile, updateOaFile } from "@/api/oa/oaFile";
export default {
name: "OaFile",
dicts: ['file_status'],
data() {
return {
// 按钮loading
buttonLoading: false,
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 文件存储表格数据
oaFileList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
fileUrl: undefined,
status: undefined,
},
// 表单参数
form: {},
// 表单校验
rules: {
}
};
},
created() {
this.getList();
},
methods: {
// 截断最后一个斜杠的数字
lastStr(str){
let index = str.lastIndexOf("\/");
str = parseInt(str.substring(index + 1, str .length));
this.queryParams.status= str
this.form.status = str
},
/** 查询文件存储列表 */
getList() {
this.lastStr(this.$route.path)
this.loading = true;
listOaFile(this.queryParams).then(response => {
this.oaFileList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
fileId: undefined,
fileUrl: undefined,
status: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined,
delFlag: undefined,
remark: undefined
};
this.lastStr(this.$route.path)
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.fileId)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加文件存储";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const fileId = row.fileId || this.ids
getOaFile(fileId).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改文件存储";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.fileId != null) {
updateOaFile(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addOaFile(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const fileIds = row.fileId || this.ids;
this.$modal.confirm('是否确认删除文件存储编号为"' + fileIds + '"的数据项?').then(() => {
this.loading = true;
return delOaFile(fileIds);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/oaFile/export', {
...this.queryParams
}, `oaFile_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@@ -101,6 +101,7 @@
</el-table-column>
<el-table-column label="型号" align="center" prop="model" />
<el-table-column label="单价" align="center" prop="price" />
<el-table-column label="库存数量" align="center" prop="inventory" />
<el-table-column label="单位" align="center" prop="unit" />
<el-table-column label="品牌" align="center" prop="brand" />
@@ -143,6 +144,10 @@
<el-form-item label="型号" prop="model">
<el-input v-model="form.model" placeholder="请输入型号" />
</el-form-item>
<el-form-item label="单价" prop="price">
<el-input v-model="form.price" placeholder="请输入单价" />
</el-form-item>
<el-form-item label="库存数量" prop="inventory">
<el-input v-model="form.inventory" placeholder="请输入库存数量" />
</el-form-item>