缺少上传文件组件的完整代码,期待获取,完成签到页的全面优化
This commit is contained in:
@@ -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;
|
||||
|
||||
})
|
||||
},
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
299
ruoyi-ui/src/views/oa/oaFile/index.vue
Normal file
299
ruoyi-ui/src/views/oa/oaFile/index.vue
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user