开发计划修改

This commit is contained in:
BianLzhaoMin 2025-02-13 15:22:14 +08:00
parent 0150b7d6fb
commit 1da049357c
3 changed files with 540 additions and 304 deletions

View File

@ -1,6 +1,13 @@
<template> <template>
<div class="app-container" id="eightMembers"> <div class="app-container" id="eightMembers">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="90px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="90px"
>
<el-form-item label="分公司名称" prop="parentOrgName"> <el-form-item label="分公司名称" prop="parentOrgName">
<el-input <el-input
v-model="queryParams.parentOrgName" v-model="queryParams.parentOrgName"
@ -13,26 +20,67 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-button
size="mini"
type="warning"
@click="onHandleExport"
icon="el-icon-download"
>
导出
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" :data="typeList"> <el-table v-loading="loading" :data="typeList">
<el-table-column label="序号" align="center" width="80" type="index"> <el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> <span>{{
(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="分公司名称" align="center" prop="parentOrgName" :show-overflow-tooltip="true" /> <el-table-column
<el-table-column label="缺员情况" align="center" :show-overflow-tooltip="true"> label="分公司名称"
align="center"
prop="parentOrgName"
:show-overflow-tooltip="true"
/>
<el-table-column
label="缺员情况"
align="center"
:show-overflow-tooltip="true"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div style="color: #1890FF; cursor: pointer" @click="goShortageSituation(scope.row)">{{scope.row.lackOrgName}}</div> <div
style="color: #1890ff; cursor: pointer"
@click="goShortageSituation(scope.row)"
>
{{ scope.row.lackOrgName }}
</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="兼职情况" align="center" :show-overflow-tooltip="true"> <el-table-column
label="兼职情况"
align="center"
:show-overflow-tooltip="true"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div style="color: #1890FF; cursor: pointer" @click="goPartTimeSituation(scope.row)">{{scope.row.moreOrgName}}</div> <div
style="color: #1890ff; cursor: pointer"
@click="goPartTimeSituation(scope.row)"
>
{{ scope.row.moreOrgName }}
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -79,8 +127,10 @@
<script> <script>
import { getOrgEightRoleTable } from "@/api/process/eightMembers"; import { getOrgEightRoleTable } from "@/api/process/eightMembers";
import { treeselect as staffTreeselect, roleStaffTreeselect } from "@/api/process/tree"; import {
treeselect as staffTreeselect,
roleStaffTreeselect,
} from "@/api/process/tree";
export default { export default {
name: "EightMembers", name: "EightMembers",
@ -108,7 +158,7 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
parentOrgName:undefined parentOrgName: undefined,
}, },
// //
staffOptions: [], staffOptions: [],
@ -119,7 +169,7 @@ export default {
defaultProps: { defaultProps: {
children: "children", children: "children",
label: "name", label: "name",
disabled: "disabled" // disabled disabled: "disabled", // disabled
}, },
}; };
}, },
@ -130,12 +180,11 @@ export default {
/** 查询列表 */ /** 查询列表 */
getList() { getList() {
this.loading = true; this.loading = true;
getOrgEightRoleTable(this.queryParams).then(response => { getOrgEightRoleTable(this.queryParams).then((response) => {
this.typeList = response.rows; this.typeList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
} });
);
}, },
// //
cancel() { cancel() {
@ -146,7 +195,7 @@ export default {
reset() { reset() {
this.form = { this.form = {
parentOrgName: undefined, parentOrgName: undefined,
staffOptions:[] staffOptions: [],
}; };
this.defaultCheckedKeys = []; // this.defaultCheckedKeys = []; //
this.resetForm("form"); this.resetForm("form");
@ -170,14 +219,20 @@ export default {
}, },
goShortageSituation(item) { goShortageSituation(item) {
this.$router.push({path:"/process/shortageSituation",query:{parentOrgName:item.parentOrgName,lackOrgId:item.lackOrgId}}) this.$router.push({
path: "/process/shortageSituation",
query: { parentOrgName: item.parentOrgName, lackOrgId: item.lackOrgId },
});
}, },
goPartTimeSituation(item) { goPartTimeSituation(item) {
this.$router.push({path:"/process/partTimeSituation",query:{parentOrgName:item.parentOrgName,moreOrgId:item.moreOrgId}}) this.$router.push({
path: "/process/partTimeSituation",
query: { parentOrgName: item.parentOrgName, moreOrgId: item.moreOrgId },
});
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function () { submitForm: function () {
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
const checkedKeys = this.getStaffAllCheckedKeys(); const checkedKeys = this.getStaffAllCheckedKeys();
if (checkedKeys.length === 0) { if (checkedKeys.length === 0) {
@ -185,8 +240,8 @@ export default {
return; return;
} }
this.form.userId = checkedKeys.join(","); this.form.userId = checkedKeys.join(",");
console.log("form",this.form) console.log("form", this.form);
proDeptRole(this.form).then(response => { proDeptRole(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
@ -205,6 +260,10 @@ export default {
checkedKeys.unshift.apply(checkedKeys); checkedKeys.unshift.apply(checkedKeys);
return checkedKeys; return checkedKeys;
}, },
//
onHandleExport() {
console.log("导出--");
},
}, },
}; };
</script> </script>

View File

@ -1,6 +1,13 @@
<template> <template>
<div class="app-container" id="evection"> <div class="app-container" id="evection">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="出差时间" prop="leaveDate"> <el-form-item label="出差时间" prop="leaveDate">
<el-date-picker <el-date-picker
v-model="dateRange" v-model="dateRange"
@ -11,11 +18,18 @@
start-placeholder="开始日期" start-placeholder="开始日期"
end-placeholder="结束日期" end-placeholder="结束日期"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</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-item>
</el-form> </el-form>
@ -43,63 +57,112 @@
</el-button> </el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="tableList"> <el-table v-loading="loading" :data="tableList">
<el-table-column label="序号" align="center" width="80" type="index"> <el-table-column label="序号" align="center" width="80" type="index">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span> <span>{{
(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1
}}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="姓名" align="center" prop="userName" width="100"/> <el-table-column
<el-table-column label="职务" align="center" prop="postName" :show-overflow-tooltip="true" width="240"/> label="姓名"
<el-table-column label="所属部门" align="center" prop="orgName" :show-overflow-tooltip="true" width="240"> align="center"
prop="userName"
width="100"
/>
<el-table-column
label="职务"
align="center"
prop="postName"
:show-overflow-tooltip="true"
width="240"
/>
<el-table-column
label="所属部门"
align="center"
prop="orgName"
:show-overflow-tooltip="true"
width="240"
>
</el-table-column> </el-table-column>
<el-table-column label="出行人" align="center" prop="travelersName" :show-overflow-tooltip="true" width="100"/> <el-table-column
label="出行人"
align="center"
prop="travelersName"
:show-overflow-tooltip="true"
width="100"
/>
<el-table-column label="出差开始时间" align="center" prop="leaveStartDate" :show-overflow-tooltip="true" width="180"> <el-table-column
label="出差开始时间"
align="center"
prop="leaveStartDate"
:show-overflow-tooltip="true"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.leaveStartDate }} <div>
{{ scope.row.leaveStartDate }}
<!-- <span v-show="scope.row.leaveStartInterval=='1'">上午</span>--> <!-- <span v-show="scope.row.leaveStartInterval=='1'">上午</span>-->
<!-- <span v-show="scope.row.leaveStartInterval=='2'">下午</span>--> <!-- <span v-show="scope.row.leaveStartInterval=='2'">下午</span>-->
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="出差结束时间" align="center" prop="leaveEndDate" :show-overflow-tooltip="true" width="180"> <el-table-column
label="出差结束时间"
align="center"
prop="leaveEndDate"
:show-overflow-tooltip="true"
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.leaveEndDate }} <div>
{{ scope.row.leaveEndDate }}
<!-- <span v-show="scope.row.leaveEndInterval=='1'">上午</span>--> <!-- <span v-show="scope.row.leaveEndInterval=='1'">上午</span>-->
<!-- <span v-show="scope.row.leaveEndInterval=='2'">下午</span>--> <!-- <span v-show="scope.row.leaveEndInterval=='2'">下午</span>-->
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="出差时长(天)" align="center" prop="leaveDuration" :show-overflow-tooltip="true" <el-table-column
width="180"/> label="出差时长(天)"
align="center"
prop="leaveDuration"
:show-overflow-tooltip="true"
width="180"
/>
<el-table-column label="操作" align="center" class-name="small-padding"> <el-table-column label="操作" align="center" class-name="small-padding">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" type="primary" size="mini"
type="primary"
v-hasPermi="['flow:evection:edit']" v-hasPermi="['flow:evection:edit']"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
>编辑 >编辑
</el-button> </el-button>
<el-button <el-button
size="mini" type="danger" size="mini"
type="danger"
v-hasPermi="['flow:evection:remove']" v-hasPermi="['flow:evection:remove']"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
>删除 >删除
</el-button> </el-button>
<el-button <el-button
size="mini" type="primary" size="mini"
type="primary"
v-hasPermi="['flow:evection:list']" v-hasPermi="['flow:evection:list']"
@click="handleDetails(scope.row)" @click="handleDetails(scope.row)"
>详情 >详情
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -132,7 +195,11 @@
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="所属部门:" prop="orgId"> <el-form-item label="所属部门:" prop="orgId">
<el-select v-model="form.orgId" @change="changDept" style="width: 100%;"> <el-select
v-model="form.orgId"
@change="changDept"
style="width: 100%"
>
<el-option <el-option
v-for="item in orgList" v-for="item in orgList"
:key="item.id" :key="item.id"
@ -145,7 +212,14 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="出行人:" prop="orgHeadUserIdList"> <el-form-item label="出行人:" prop="orgHeadUserIdList">
<el-select v-model="form.orgHeadUserIdList" multiple placeholder="请选择出行人" filterable clearable style="width: 100%;"> <el-select
v-model="form.orgHeadUserIdList"
multiple
placeholder="请选择出行人"
filterable
clearable
style="width: 100%"
>
<el-option <el-option
v-for="item in personOptions" v-for="item in personOptions"
:key="item.userIds" :key="item.userIds"
@ -161,9 +235,15 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="出差开始时间:" prop="leaveStartDate"> <el-form-item label="出差开始时间:" prop="leaveStartDate">
<el-date-picker <el-date-picker
v-model="form.leaveStartDate" :clearable="false" v-model="form.leaveStartDate"
type="date" value-format="yyyy-MM-dd" style="width: 100%;" @change="handleDateChange" :clearable="false"
placeholder="出差开始时间" :pickerOptions="startPickerOptions"> type="date"
value-format="yyyy-MM-dd"
style="width: 100%"
@change="handleDateChange"
placeholder="出差开始时间"
:pickerOptions="startPickerOptions"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -183,9 +263,15 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="出差结束时间:" prop="leaveEndDate"> <el-form-item label="出差结束时间:" prop="leaveEndDate">
<el-date-picker <el-date-picker
v-model="form.leaveEndDate" :clearable="false" v-model="form.leaveEndDate"
type="date" value-format="yyyy-MM-dd" style="width: 100%;" @change="handleDateChange" :clearable="false"
placeholder="出差结束时间" :pickerOptions="endPickerOptions"> type="date"
value-format="yyyy-MM-dd"
style="width: 100%"
@change="handleDateChange"
placeholder="出差结束时间"
:pickerOptions="endPickerOptions"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -225,16 +311,22 @@
v-for="item in isAgreeList" v-for="item in isAgreeList"
:key="item.id" :key="item.id"
:label="item.id" :label="item.id"
>{{item.name}}</el-radio> >{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="代理主持工作人员:" prop="hostUserId"> <el-form-item label="代理主持工作人员:" prop="hostUserId">
<el-select v-model="form.hostUserId" multiple placeholder="请选择人员姓名" filterable clearable style="width: 100%;"> <el-select
v-model="form.hostUserId"
multiple
placeholder="请选择人员姓名"
filterable
clearable
style="width: 100%"
>
<el-option <el-option
v-for="item in userList" v-for="item in userList"
:key="item.userId" :key="item.userId"
@ -242,7 +334,6 @@
:value="item.userId" :value="item.userId"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -255,7 +346,8 @@
v-for="item in isOutsideList" v-for="item in isOutsideList"
:key="item.id" :key="item.id"
:label="item.id" :label="item.id"
>{{item.name}}</el-radio> >{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -267,7 +359,23 @@
v-for="item in isXizangList" v-for="item in isXizangList"
:key="item.id" :key="item.id"
:label="item.id" :label="item.id"
>{{item.name}}</el-radio> >{{ item.name }}</el-radio
>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否高原:" prop="isOutside">
<el-radio-group>
<el-radio
v-for="item in isOutsideList"
:key="item.id"
:label="item.id"
>{{ item.name }}
</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -276,7 +384,11 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="出差事由:" prop="leaveReason"> <el-form-item label="出差事由:" prop="leaveReason">
<el-input type="textarea" v-model="form.leaveReason" maxlength="200"></el-input> <el-input
type="textarea"
v-model="form.leaveReason"
maxlength="200"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -284,7 +396,11 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注:" prop="remark"> <el-form-item label="备注:" prop="remark">
<el-input type="textarea" v-model="form.remark" maxlength="200"></el-input> <el-input
type="textarea"
v-model="form.remark"
maxlength="200"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -296,7 +412,12 @@
</el-dialog> </el-dialog>
<!-- 详情参数配置对话框 --> <!-- 详情参数配置对话框 -->
<el-dialog :title="title" :visible.sync="openDetails" width="900px" append-to-body> <el-dialog
:title="title"
:visible.sync="openDetails"
width="900px"
append-to-body
>
<el-form ref="form" :model="form" :rules="rules" label-width="130px"> <el-form ref="form" :model="form" :rules="rules" label-width="130px">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
@ -330,18 +451,32 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="出差开始时间:" prop="leaveStartDate"> <el-form-item label="出差开始时间:" prop="leaveStartDate">
<el-date-picker <el-date-picker
v-model="form.leaveStartDate" :disabled="true" :clearable="false" v-model="form.leaveStartDate"
type="date" value-format="yyyy-MM-dd" style="width: 100%;" @change="handleDateChange" :disabled="true"
placeholder="出差开始时间" :pickerOptions="startPickerOptions"> :clearable="false"
type="date"
value-format="yyyy-MM-dd"
style="width: 100%"
@change="handleDateChange"
placeholder="出差开始时间"
:pickerOptions="startPickerOptions"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="出差结束时间:" prop="leaveEndDate"> <el-form-item label="出差结束时间:" prop="leaveEndDate">
<el-date-picker <el-date-picker
v-model="form.leaveEndDate" :disabled="true" :clearable="false" v-model="form.leaveEndDate"
type="date" value-format="yyyy-MM-dd" style="width: 100%;" @change="handleDateChange" :disabled="true"
placeholder="出差结束时间" :pickerOptions="endPickerOptions"> :clearable="false"
type="date"
value-format="yyyy-MM-dd"
style="width: 100%"
@change="handleDateChange"
placeholder="出差结束时间"
:pickerOptions="endPickerOptions"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -368,10 +503,9 @@
v-for="item in isAgreeList" v-for="item in isAgreeList"
:key="item.id" :key="item.id"
:label="item.id" :label="item.id"
>{{item.name}}</el-radio> >{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -390,7 +524,8 @@
v-for="item in isOutsideList" v-for="item in isOutsideList"
:key="item.id" :key="item.id"
:label="item.id" :label="item.id"
>{{item.name}}</el-radio> >{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -402,7 +537,8 @@
v-for="item in isXizangList" v-for="item in isXizangList"
:key="item.id" :key="item.id"
:label="item.id" :label="item.id"
>{{item.name}}</el-radio> >{{ item.name }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -411,7 +547,12 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="出差事由:" prop="leaveReason"> <el-form-item label="出差事由:" prop="leaveReason">
<el-input type="textarea" :disabled="true" v-model="form.leaveReason" maxlength="200"></el-input> <el-input
type="textarea"
:disabled="true"
v-model="form.leaveReason"
maxlength="200"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -419,7 +560,12 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="备注:" prop="remark"> <el-form-item label="备注:" prop="remark">
<el-input type="textarea" :disabled="true" v-model="form.remark" maxlength="200"></el-input> <el-input
type="textarea"
:disabled="true"
v-model="form.remark"
maxlength="200"
></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -428,7 +574,6 @@
<el-button @click="cancel"> </el-button> <el-button @click="cancel"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@ -442,7 +587,7 @@ import {
getPostName, getPostName,
getUserList, getUserList,
exportEvection, exportEvection,
getPersonSelect getPersonSelect,
} from "@/api/process/evection"; } from "@/api/process/evection";
import Treeselect from "@riophae/vue-treeselect"; import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css"; import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@ -450,7 +595,7 @@ import {getDaysDate} from "@/api/process/leaveReporting";
export default { export default {
name: "Evection", name: "Evection",
dicts: ['apply_status'], dicts: ["apply_status"],
components: { Treeselect }, components: { Treeselect },
data() { data() {
return { return {
@ -471,9 +616,18 @@ export default {
// //
tableList: [], tableList: [],
userList: [], userList: [],
isAgreeList:[{id:'0',name:'否'},{id:'1',name:'是'}], isAgreeList: [
isOutsideList:[{id:'0',name:'否'},{id:'1',name:'是'}], { id: "0", name: "否" },
isXizangList:[{id:'0',name:'否'},{id:'1',name:'是'}], { id: "1", name: "是" },
],
isOutsideList: [
{ id: "0", name: "否" },
{ id: "1", name: "是" },
],
isXizangList: [
{ id: "0", name: "否" },
{ id: "1", name: "是" },
],
// //
title: "", title: "",
// //
@ -481,13 +635,16 @@ export default {
openDetails: false, openDetails: false,
isEdit: false, isEdit: false,
timeStatusList: [{id: '1', name: "上午"}, {id: '2', name: "下午"}], timeStatusList: [
{ id: "1", name: "上午" },
{ id: "2", name: "下午" },
],
// //
dateRange: [], dateRange: [],
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10 pageSize: 10,
}, },
personOptions: [], personOptions: [],
// //
@ -495,68 +652,78 @@ export default {
// //
rules: { rules: {
orgId: [ orgId: [
{required: true, message: "所属部门不能为空", trigger: "blur"} { required: true, message: "所属部门不能为空", trigger: "blur" },
], ],
orgHeadUserIdList: [ orgHeadUserIdList: [
{required: true, message: "出行人不能为空", trigger: "blur"} { required: true, message: "出行人不能为空", trigger: "blur" },
], ],
leaveStartDate: [ leaveStartDate: [
{required: true, message: "出差开始时间不能为空", trigger: "blur"} { required: true, message: "出差开始时间不能为空", trigger: "blur" },
], ],
/*leaveStartInterval: [ /*leaveStartInterval: [
{required: true, message: "不能为空", trigger: "change"} {required: true, message: "不能为空", trigger: "change"}
],*/ ],*/
leaveEndDate: [ leaveEndDate: [
{required: true, message: "出差结束时间不能为空", trigger: "blur"} { required: true, message: "出差结束时间不能为空", trigger: "blur" },
], ],
/*leaveEndInterval: [ /*leaveEndInterval: [
{required: true, message: "不能为空", trigger: "change"} {required: true, message: "不能为空", trigger: "change"}
],*/ ],*/
leaveDuration: [ leaveDuration: [
{required: true, message: "出差时长不能为空", trigger: "blur"} { required: true, message: "出差时长不能为空", trigger: "blur" },
], ],
location: [ location: [
{required: true, message: "地点不能为空", trigger: "blur"} { required: true, message: "地点不能为空", trigger: "blur" },
], ],
isAgree: [ isAgree: [
{required: true, message: "是否请示领导同意不能为空", trigger: "blur"} {
required: true,
message: "是否请示领导同意不能为空",
trigger: "blur",
},
], ],
isOutside: [ isOutside: [
{required: true, message: "是否省外同意不能为空", trigger: "blur"} { required: true, message: "是否省外同意不能为空", trigger: "blur" },
], ],
isXizang: [ isXizang: [
{required: true, message: "是否西藏同意不能为空", trigger: "blur"} { required: true, message: "是否西藏同意不能为空", trigger: "blur" },
], ],
hostUserId: [ hostUserId: [
{required: true, message: "代理主持工作人员不能为空", trigger: "blur"} {
required: true,
message: "代理主持工作人员不能为空",
trigger: "blur",
},
], ],
leaveReason: [ leaveReason: [
{required: true, message: "出差事由不能为空", trigger: "blur"} { required: true, message: "出差事由不能为空", trigger: "blur" },
], ],
}, },
// //
startPickerOptions: { startPickerOptions: {
disabledDate: (v) => { disabledDate: (v) => {
const today = new Date() const today = new Date();
today.setHours(0, 0, 0, 0) today.setHours(0, 0, 0, 0);
if (this.form.leaveEndDate) { if (this.form.leaveEndDate) {
const end = new Date(this.form.leaveEndDate); const end = new Date(this.form.leaveEndDate);
end.setHours(0, 0, 0, 0); end.setHours(0, 0, 0, 0);
return v.getTime() > end.getTime() || v.getTime() < today.getTime(); return v.getTime() > end.getTime() || v.getTime() < today.getTime();
} }
return v.getTime() < today.getTime() return v.getTime() < today.getTime();
}, },
}, },
// //
endPickerOptions: { endPickerOptions: {
disabledDate: (v) => { disabledDate: (v) => {
const today = new Date() const today = new Date();
today.setHours(0, 0, 0, 0) today.setHours(0, 0, 0, 0);
if (this.form.leaveStartDate) { if (this.form.leaveStartDate) {
return v.getTime() < new Date(this.form.leaveStartDate).getTime() - 86400000; // - 86400000 return (
v.getTime() <
new Date(this.form.leaveStartDate).getTime() - 86400000
); // - 86400000
} }
return v.getTime() < today.getTime() return v.getTime() < today.getTime();
}, },
}, },
daysNumber: "", daysNumber: "",
@ -572,25 +739,29 @@ export default {
this.form.leaveStartInterval = 1; this.form.leaveStartInterval = 1;
this.form.leaveEndInterval = 2; this.form.leaveEndInterval = 2;
if (this.form.leaveStartDate && this.form.leaveEndDate) { if (this.form.leaveStartDate && this.form.leaveEndDate) {
await this.daysBetween(this.form.leaveStartDate, this.form.leaveEndDate) await this.daysBetween(
console.log(this.daysNumber) this.form.leaveStartDate,
this.form.leaveDuration = this.daysNumber this.form.leaveEndDate
);
console.log(this.daysNumber);
this.form.leaveDuration = this.daysNumber;
} }
}, },
async daysBetween(date1, date2) { async daysBetween(date1, date2) {
var data = { var data = {
"leaveStartDate":date1, leaveStartDate: date1,
"leaveEndDate":date2, leaveEndDate: date2,
} };
await getDaysDate(data).then(response => { await getDaysDate(data).then((response) => {
this.daysNumber = response.data.date; this.daysNumber = response.data.date;
}); });
}, },
/** 查询列表 */ /** 查询列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listEvection(this.addDateRange(this.queryParams, this.dateRange)).then(response => { listEvection(this.addDateRange(this.queryParams, this.dateRange)).then(
(response) => {
this.tableList = response.rows; this.tableList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
@ -600,16 +771,16 @@ export default {
getUserLists() { getUserLists() {
const Id = this.$store.state.user.id; const Id = this.$store.state.user.id;
getUserList(Id).then(response => { getUserList(Id).then((response) => {
this.userList = response.data.data; this.userList = response.data.data;
console.log("userList",this.userList) console.log("userList", this.userList);
}); });
}, },
/** 人员选择下拉 */ /** 人员选择下拉 */
getPersonSelect() { getPersonSelect() {
getPersonSelect().then(response => { getPersonSelect().then((response) => {
this.personOptions=response.data this.personOptions = response.data;
console.log("this.personOptions", this.personOptions); console.log("this.personOptions", this.personOptions);
}); });
}, },
@ -636,7 +807,7 @@ export default {
isXizang: "0", isXizang: "0",
hostUserId: [], hostUserId: [],
orgHeadUserIdList: [], orgHeadUserIdList: [],
travelers:[] travelers: [],
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -657,9 +828,9 @@ export default {
const Id = this.$store.state.user.id; const Id = this.$store.state.user.id;
let idNums = [Id + ""]; let idNums = [Id + ""];
this.$set(this.form,"orgHeadUserIdList",idNums) this.$set(this.form, "orgHeadUserIdList", idNums);
getPostName(Id).then(response => { getPostName(Id).then((response) => {
this.form.postName = response.data.postName; this.form.postName = response.data.postName;
this.open = true; this.open = true;
this.title = "新增"; this.title = "新增";
@ -669,47 +840,46 @@ export default {
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const Id = row.uuid; const Id = row.uuid;
getEvection(Id).then(response => { getEvection(Id).then((response) => {
this.form = response.data; this.form = response.data;
let num = []; let num = [];
let numArr = this.form.hostUserId.split(",") let numArr = this.form.hostUserId.split(",");
numArr.forEach(function (item) { numArr.forEach(function (item) {
num.push(parseInt(item)); num.push(parseInt(item));
}) });
this.$set(this.form,"hostUserId",num) this.$set(this.form, "hostUserId", num);
if (this.form.travelers != null) { if (this.form.travelers != null) {
let arr = this.form.travelers.split(',') let arr = this.form.travelers.split(",");
let nums = []; let nums = [];
arr.forEach(function (item) { arr.forEach(function (item) {
nums.push(item.trim() + ""); nums.push(item.trim() + "");
}) });
this.$set(this.form,"orgHeadUserIdList",nums) this.$set(this.form, "orgHeadUserIdList", nums);
} }
this.open = true; this.open = true;
this.title = "编辑"; this.title = "编辑";
}); });
}, },
/** 详情按钮操作 */ /** 详情按钮操作 */
handleDetails(row) { handleDetails(row) {
this.reset(); this.reset();
const Id = row.uuid; const Id = row.uuid;
getEvection(Id).then(response => { getEvection(Id).then((response) => {
this.form = response.data; this.form = response.data;
let num = []; let num = [];
let numArr = this.form.hostUserId.split(",") let numArr = this.form.hostUserId.split(",");
numArr.forEach(function (item) { numArr.forEach(function (item) {
num.push(parseInt(item)); num.push(parseInt(item));
}) });
this.$set(this.form,"hostUserId",num) this.$set(this.form, "hostUserId", num);
if (this.form.travelers != null) { if (this.form.travelers != null) {
let arr = this.form.travelers.split(',') let arr = this.form.travelers.split(",");
let nums = []; let nums = [];
arr.forEach(function (item) { arr.forEach(function (item) {
nums.push(item.trim() + ""); nums.push(item.trim() + "");
}) });
this.$set(this.form,"orgHeadUserIdList",nums) this.$set(this.form, "orgHeadUserIdList", nums);
} }
this.openDetails = true; this.openDetails = true;
this.title = "详情"; this.title = "详情";
@ -718,57 +888,63 @@ export default {
// //
changDept(e) { changDept(e) {
console.log(e) console.log(e);
this.orgList.forEach(item => { this.orgList.forEach((item) => {
if (item.id == e) { if (item.id == e) {
this.form.orgName = item.name this.form.orgName = item.name;
} }
}) });
}, },
// //
changType(e) { changType(e) {
console.log(e) console.log(e);
this.orgList.forEach(item => { this.orgList.forEach((item) => {
if (item.id == e) { if (item.id == e) {
this.form.type = item.name this.form.type = item.name;
} }
}) });
}, },
getSelectedUserNames(filteredIds) { getSelectedUserNames(filteredIds) {
const selectedUserIds = filteredIds; const selectedUserIds = filteredIds;
const selectedUsers = this.personOptions.filter(option => selectedUserIds.includes(option.userIds)); const selectedUsers = this.personOptions.filter((option) =>
const selectedUserNames = selectedUsers.map(user => user.userName); selectedUserIds.includes(option.userIds)
return selectedUserNames.join(', '); );
const selectedUserNames = selectedUsers.map((user) => user.userName);
return selectedUserNames.join(", ");
}, },
getSelectedUserNameEvecTion() { getSelectedUserNameEvecTion() {
const selectedUserIdsStr = this.form.hostUserId; const selectedUserIdsStr = this.form.hostUserId;
// //
const selectedUserIds = selectedUserIdsStr.split(',').map(id => parseInt(id.trim(), 10)); const selectedUserIds = selectedUserIdsStr
.split(",")
.map((id) => parseInt(id.trim(), 10));
const selectedUsers = this.userList.filter(option => selectedUserIds.includes(option.userId)); const selectedUsers = this.userList.filter((option) =>
selectedUserIds.includes(option.userId)
);
const selectedUserNames = selectedUsers.map(user => user.userName); const selectedUserNames = selectedUsers.map((user) => user.userName);
return selectedUserNames.join(', '); return selectedUserNames.join(", ");
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function () { submitForm: function () {
console.log(this.form) console.log(this.form);
this.$refs["form"].validate(valid => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
var lists = this.form.orgHeadUserIdList.join(","); var lists = this.form.orgHeadUserIdList.join(",");
var idsArray = lists.split(",") var idsArray = lists.split(",");
console.log("idsArray",idsArray) console.log("idsArray", idsArray);
const Ids = this.$store.state.user.id + ""; const Ids = this.$store.state.user.id + "";
const containsIds = idsArray.includes(Ids); const containsIds = idsArray.includes(Ids);
console.log("containsIds",containsIds) console.log("containsIds", containsIds);
var filteredIds; var filteredIds;
if (containsIds) { if (containsIds) {
// //
filteredIds = idsArray.filter(id => id !== Ids); filteredIds = idsArray.filter((id) => id !== Ids);
} else { } else {
this.$modal.msgError("出行人需要添加申请人"); this.$modal.msgError("出行人需要添加申请人");
return; return;
@ -778,19 +954,18 @@ export default {
// this.$modal.msgError(""); // this.$modal.msgError("");
// return ; // return ;
// } // }
console.log(filteredIds) console.log(filteredIds);
this.form.travelers = filteredIds.join(","); this.form.travelers = filteredIds.join(",");
console.log(this.form.travelers) console.log(this.form.travelers);
var nameList = this.getSelectedUserNames(filteredIds); var nameList = this.getSelectedUserNames(filteredIds);
this.form.travelersName = nameList; this.form.travelersName = nameList;
var list = this.form.hostUserId.join(","); var list = this.form.hostUserId.join(",");
// //
const userIdArray = list.split(','); const userIdArray = list.split(",");
// 00 // 00
const containsZero = userIdArray.includes('0'); const containsZero = userIdArray.includes("0");
const containsOtherValues = userIdArray.some(id => id !== '0'); const containsOtherValues = userIdArray.some((id) => id !== "0");
if (containsZero && containsOtherValues) { if (containsZero && containsOtherValues) {
this.$modal.msgError("选择’/‘后不能在选择其他人员"); this.$modal.msgError("选择’/‘后不能在选择其他人员");
return; return;
@ -799,16 +974,15 @@ export default {
var hostNameList = this.getSelectedUserNameEvecTion(); var hostNameList = this.getSelectedUserNameEvecTion();
this.form.hostUserName = hostNameList; this.form.hostUserName = hostNameList;
if (this.form.id != undefined) { if (this.form.id != undefined) {
this.form.examineStatus = 0 this.form.examineStatus = 0;
updateEvection(this.form).then(response => { updateEvection(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
}); });
} else { } else {
addEvection(this.form).then(response => { addEvection(this.form).then((response) => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
@ -820,25 +994,29 @@ export default {
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {
const Ids = row.uuid; const Ids = row.uuid;
this.$modal.confirm('是否确认删除该申请?').then(function () { this.$modal
.confirm("是否确认删除该申请?")
.then(function () {
return delEvection(Ids); return delEvection(Ids);
}).then(() => { })
.then(() => {
this.getList(); this.getList();
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => { })
}); .catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
exportEvection(this.addDateRange(this.queryParams, this.dateRange)).then(res => { exportEvection(this.addDateRange(this.queryParams, this.dateRange)).then(
(res) => {
this.downloadFile({ this.downloadFile({
fileName: `出差报备_${new Date().getTime()}.xlsx`, fileName: `出差报备_${new Date().getTime()}.xlsx`,
fileData: res, fileData: res,
fileType: 'application/vnd.ms-excel;charset=utf-8' fileType: "application/vnd.ms-excel;charset=utf-8",
}) });
})
},
} }
);
},
},
}; };
</script> </script>

View File

@ -1,15 +1,15 @@
'use strict' "use strict";
const path = require('path') const path = require("path");
function resolve(dir) { function resolve(dir) {
return path.join(__dirname, dir) return path.join(__dirname, dir);
} }
const CompressionPlugin = require('compression-webpack-plugin') const CompressionPlugin = require("compression-webpack-plugin");
const name = process.env.VUE_APP_TITLE || '考勤后台管理系统' // 网页标题 const name = process.env.VUE_APP_TITLE || "考勤后台管理系统"; // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口 const port = process.env.port || process.env.npm_config_port || 80; // 端口
// vue.config.js 配置说明 // vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
@ -20,113 +20,112 @@ module.exports = {
// 例如 https://www.bonus.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.bonus.vip/admin/,则设置 baseUrl 为 /admin/。 // 例如 https://www.bonus.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.bonus.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/gz-att/" : "/gz-att/", publicPath: process.env.NODE_ENV === "production" ? "/gz-att/" : "/gz-att/",
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist // 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
outputDir: 'gz-att', outputDir: "gz-att",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
assetsDir: 'static', assetsDir: "static",
// 是否开启eslint保存检测有效值ture | false | 'error' // 是否开启eslint保存检测有效值ture | false | 'error'
lintOnSave: process.env.NODE_ENV === 'development', lintOnSave: process.env.NODE_ENV === "development",
// 如果你不需要生产环境的 source map可以将其设置为 false 以加速生产环境构建。 // 如果你不需要生产环境的 source map可以将其设置为 false 以加速生产环境构建。
productionSourceMap: false, productionSourceMap: false,
// webpack-dev-server 相关配置 // webpack-dev-server 相关配置
devServer: { devServer: {
host: '0.0.0.0', host: "0.0.0.0",
port: port, port: port,
open: true, open: true,
proxy: { proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy // detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: { [process.env.VUE_APP_BASE_API]: {
target: `http://127.0.0.1:8100`, target: `http://192.168.0.50:8100`, // 孙亮
// target: `http://192.168.0.14:8001`, // target: `http://192.168.0.14:8001`,
// target: `http://192.168.2.146:8100`, // target: `http://192.168.2.146:8100`,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: '' ["^" + process.env.VUE_APP_BASE_API]: "",
}
}
}, },
disableHostCheck: true },
},
disableHostCheck: true,
}, },
css: { css: {
loaderOptions: { loaderOptions: {
sass: { sass: {
sassOptions: { outputStyle: "expanded" } sassOptions: { outputStyle: "expanded" },
} },
} },
}, },
configureWebpack: { configureWebpack: {
name: name, name: name,
resolve: { resolve: {
alias: { alias: {
'@': resolve('src') "@": resolve("src"),
} },
}, },
plugins: [ plugins: [
// http://doc.bonus.vip/bonus-vue/other/faq.html#使用gzip解压缩静态文件 // http://doc.bonus.vip/bonus-vue/other/faq.html#使用gzip解压缩静态文件
new CompressionPlugin({ new CompressionPlugin({
cache: false, // 不启用文件缓存 cache: false, // 不启用文件缓存
test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式 test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 压缩文件格式
filename: '[path][base].gz[query]', // 压缩后的文件名 filename: "[path][base].gz[query]", // 压缩后的文件名
algorithm: 'gzip', // 使用gzip压缩 algorithm: "gzip", // 使用gzip压缩
minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩 minRatio: 0.8, // 压缩比例,小于 80% 的文件不会被压缩
deleteOriginalAssets: false // 压缩后删除原文件 deleteOriginalAssets: false, // 压缩后删除原文件
}) }),
], ],
}, },
chainWebpack(config) { chainWebpack(config) {
config.plugins.delete('preload') // TODO: need test config.plugins.delete("preload"); // TODO: need test
config.plugins.delete('prefetch') // TODO: need test config.plugins.delete("prefetch"); // TODO: need test
// set svg-sprite-loader // set svg-sprite-loader
config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end();
config.module config.module
.rule('svg') .rule("icons")
.exclude.add(resolve('src/assets/icons'))
.end()
config.module
.rule('icons')
.test(/\.svg$/) .test(/\.svg$/)
.include.add(resolve('src/assets/icons')) .include.add(resolve("src/assets/icons"))
.end() .end()
.use('svg-sprite-loader') .use("svg-sprite-loader")
.loader('svg-sprite-loader') .loader("svg-sprite-loader")
.options({ .options({
symbolId: 'icon-[name]' symbolId: "icon-[name]",
}) })
.end() .end();
config.when(process.env.NODE_ENV !== 'development', config => { config.when(process.env.NODE_ENV !== "development", (config) => {
config config
.plugin('ScriptExtHtmlWebpackPlugin') .plugin("ScriptExtHtmlWebpackPlugin")
.after('html') .after("html")
.use('script-ext-html-webpack-plugin', [{ .use("script-ext-html-webpack-plugin", [
{
// `runtime` must same as runtimeChunk name. default is `runtime` // `runtime` must same as runtimeChunk name. default is `runtime`
inline: /runtime\..*\.js$/ inline: /runtime\..*\.js$/,
}]) },
.end() ])
.end();
config.optimization.splitChunks({ config.optimization.splitChunks({
chunks: 'all', chunks: "all",
cacheGroups: { cacheGroups: {
libs: { libs: {
name: 'chunk-libs', name: "chunk-libs",
test: /[\\/]node_modules[\\/]/, test: /[\\/]node_modules[\\/]/,
priority: 10, priority: 10,
chunks: 'initial' // only package third parties that are initially dependent chunks: "initial", // only package third parties that are initially dependent
}, },
elementUI: { elementUI: {
name: 'chunk-elementUI', // split elementUI into a single package name: "chunk-elementUI", // split elementUI into a single package
test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
priority: 20 // the weight needs to be larger than libs and app or it will be packaged into libs or app priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
}, },
commons: { commons: {
name: 'chunk-commons', name: "chunk-commons",
test: resolve('src/components'), // can customize your rules test: resolve("src/components"), // can customize your rules
minChunks: 3, // minimum common number minChunks: 3, // minimum common number
priority: 5, priority: 5,
reuseExistingChunk: true reuseExistingChunk: true,
} },
} },
}) });
config.optimization.runtimeChunk('single') config.optimization.runtimeChunk("single");
}) });
} },
} };