继续使用setup()函数。

This commit is contained in:
Kane Wang 2023-02-03 17:16:46 +08:00
parent 841741523a
commit 6cda734793
6 changed files with 505 additions and 199 deletions

View File

@ -2,7 +2,7 @@
* @Author: Kane
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-02 22:39:25
* @LastEditTime: 2023-02-03 15:47:58
* @FilePath: \IT工具综合平台\src\router\index.js
* @Description: 定义应用路由配置
*
@ -71,7 +71,7 @@ const routes = [
title: "需求管理",
icon: "Document",
},
component: () => import("../views/requirement/RequirementManager32.vue"),
component: () => import("../views/requirement/RequirementManager.vue"),
},
{
path: "/requirement-editing",

View File

@ -3,8 +3,8 @@
* @Author: Kane
* @Date: 2022-12-14 15:23:54
* @LastEditors: Kane
* @LastEditTime: 2023-01-28 21:35:47
* @FilePath: \admin_system\src\views\account\Login.vue
* @LastEditTime: 2023-02-03 15:46:55
* @FilePath: \IT工具综合平台\src\views\account\Login32.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
@ -13,8 +13,8 @@
<div id="login">
<div class="form-warp">
<ul class="menu-tab">
<li :class="{ 'current': current_menu === item.type }" @click="onToggleMenu(item.type)" v-for="item in tab_menu"
:key="item.type">{{ item.label }}
<li :class="{ 'current': ui.current_menu === item.type }" @click="onToggleMenu(item.type)"
v-for="item in tab_menu" :key="item.type">{{ item.label }}
</li>
</ul>
<!-- <el-form ref="form" :model="form"> -->
@ -27,7 +27,7 @@
<label class="form-label">密码</label>
<el-input type="password" v-model.lazy.trim="loginForm.password"></el-input>
</el-form-item>
<el-form-item v-show="current_menu === tab_menu[1].type">
<el-form-item v-show="ui.current_menu === tab_menu[1].type">
<label class="form-label">确认密码</label>
<el-input type="password" disabled v-model.lazy.trim="loginForm.confirm_password"></el-input>
</el-form-item>
@ -45,7 +45,7 @@
<el-form-item>
<el-button type="primary" class="el-button-block" @click="login" :disabled="submit_btn_disable"
:loading="submit_btn_loading">
{{ current_menu === "login" ? "登录" : "注册" }}
{{ ui.current_menu === "login" ? "登录" : "注册" }}
</el-button>
</el-form-item>
</el-form>
@ -54,51 +54,61 @@
</template>
<script>
import { reactive, onBeforeMount, onMounted } from "vue";
import { useStore } from "vuex";
import { useRouter } from "vue-router";
import { Login } from "@/utils/api/info/account";
import { ElMessage } from "element-plus";
import router from "../../router/index";
//import router from "../../router/index";
export default {
name: "loginPage",
data()
setup()
{
return {
loginForm: {
username: "",
password: "",
confirm_password: "",
validateCode: "",
},
tab_menu: [
const store = useStore();
const router = useRouter();
const loginForm = reactive({
username: "",
password: "",
confirm_password: "",
validateCode: "",
});
const tab_menu = reactive(
[
{ type: "login", label: "登录" },
{ type: "regiester", label: "注册" },
],
current_menu: "",
staffInfo: null,
submit_btn_disable: false,
submit_btn_loading: false,
};
},
methods: {
onToggleMenu(type)
]);
const ui = reactive(
{
current_menu: "",
staffInfo: null,
submit_btn_disable: false,
submit_btn_loading: false,
});
const onToggleMenu = (type) =>
{
this.current_menu = type;
ui.current_menu = type;
console.log(process.env.VUE_APP_API_URL_LOGIN);
},
getValidateCode()
};
const getValidateCode = () =>
{
ElMessage({
message: "测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字",
center: true,
type: "error",
});
},
};
/**
* 登录
*/
login()
const login = () =>
{
if (this.loginForm.username.length === 0 || this.loginForm.password === 0)
if (loginForm.username.length === 0 || loginForm.password === 0)
{
ElMessage({
message: "请填写您的P13账号和密码",
@ -108,12 +118,12 @@ export default {
return;
}
this.submit_btn_disable = true;
this.submit_btn_loading = true;
ui.submit_btn_disable = true;
ui.submit_btn_loading = true;
const userInfo = {
p13account: this.loginForm.username,
password: this.loginForm.password,
p13account: loginForm.username,
password: loginForm.password,
};
Login(userInfo)
@ -133,10 +143,10 @@ export default {
center: true,
});
this.staffInfo = data.staffInfo;
ui.staffInfo = data.staffInfo;
//token
this.saveUserInfo(data);
saveUserInfo(data);
//
router.push("/Desktop");
@ -150,8 +160,8 @@ export default {
center: true,
});
this.submit_btn_disable = false;
this.submit_btn_loading = false;
ui.submit_btn_disable = false;
ui.submit_btn_loading = false;
}
})
.catch((error) =>
@ -165,14 +175,16 @@ export default {
center: true,
});
this.submit_btn_disable = false;
this.submit_btn_loading = false;
ui.submit_btn_disable = false;
ui.submit_btn_loading = false;
});
},
saveUserInfo(userInfo) //tokenvuexlocalStorage
};
//tokenvuexlocalStorage
const saveUserInfo = (userInfo) =>
{
//vuex
this.$store.commit("app/SET_USERINFO", userInfo);
store.commit("app/SET_USERINFO", userInfo);
//localStorage
const token = userInfo.token;
@ -180,17 +192,31 @@ export default {
window.localStorage.setItem("token", token);
window.localStorage.setItem("user_info", userInfoJson);
}
},
created()
{
//
this.current_menu = this.tab_menu[0].type;
},
mounted()
{
//
this.$store.state.app.userInfo = null;
};
onBeforeMount(() =>
{
//
ui.current_menu = tab_menu[0].type;
});
onMounted(() =>
{
//
store.state.app.userInfo = null;
});
return {
//
ui,
loginForm,
tab_menu,
//
onToggleMenu,
saveUserInfo,
login,
getValidateCode,
};
},
};
</script>

View File

@ -0,0 +1,259 @@
<!-- eslint-disable no-unused-vars -->
<!--
* @Author: Kane
* @Date: 2022-12-14 15:23:54
* @LastEditors: Kane
* @LastEditTime: 2023-01-28 21:35:47
* @FilePath: \admin_system\src\views\account\Login.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div id="login">
<div class="form-warp">
<ul class="menu-tab">
<li :class="{ 'current': current_menu === item.type }" @click="onToggleMenu(item.type)" v-for="item in tab_menu"
:key="item.type">{{ item.label }}
</li>
</ul>
<!-- <el-form ref="form" :model="form"> -->
<el-form ref="form">
<el-form-item>
<label class="form-label">用户名</label>
<el-input type="text" v-model.lazy.trim="loginForm.username"></el-input>
</el-form-item>
<el-form-item>
<label class="form-label">密码</label>
<el-input type="password" v-model.lazy.trim="loginForm.password"></el-input>
</el-form-item>
<el-form-item v-show="current_menu === tab_menu[1].type">
<label class="form-label">确认密码</label>
<el-input type="password" disabled v-model.lazy.trim="loginForm.confirm_password"></el-input>
</el-form-item>
<el-form-item>
<label class="form-label">验证码</label>
<el-row :gutter="10">
<el-col :span="14">
<el-input type="text" disabled></el-input>
</el-col>
<el-col :span="10">
<el-button type="danger" disabled class="el-button-block" @click="getValidateCode()">获取验证码</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button type="primary" class="el-button-block" @click="login" :disabled="submit_btn_disable"
:loading="submit_btn_loading">
{{ current_menu === "login" ? "登录" : "注册" }}
</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import { Login } from "@/utils/api/info/account";
import { ElMessage } from "element-plus";
import router from "../../router/index";
export default {
name: "loginPage",
data()
{
return {
loginForm: {
username: "",
password: "",
confirm_password: "",
validateCode: "",
},
tab_menu: [
{ type: "login", label: "登录" },
{ type: "regiester", label: "注册" },
],
current_menu: "",
staffInfo: null,
submit_btn_disable: false,
submit_btn_loading: false,
};
},
methods: {
onToggleMenu(type)
{
this.current_menu = type;
console.log(process.env.VUE_APP_API_URL_LOGIN);
},
getValidateCode()
{
ElMessage({
message: "测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字",
center: true,
type: "error",
});
},
/**
* 登录
*/
login()
{
if (this.loginForm.username.length === 0 || this.loginForm.password === 0)
{
ElMessage({
message: "请填写您的P13账号和密码",
type: "error",
});
return;
}
this.submit_btn_disable = true;
this.submit_btn_loading = true;
const userInfo = {
p13account: this.loginForm.username,
password: this.loginForm.password,
};
Login(userInfo)
.then((response) =>
{
//
//tokenvuexlocalStoreage
//router.push
const data = response.data;
//
if (data.success === true)
{
ElMessage({
message: data.message,
type: "success",
center: true,
});
this.staffInfo = data.staffInfo;
//token
this.saveUserInfo(data);
//
router.push("/Desktop");
}
else
{
//
ElMessage({
message: data.message,
type: "error",
center: true,
});
this.submit_btn_disable = false;
this.submit_btn_loading = false;
}
})
.catch((error) =>
{
//
console.log(error);
ElMessage({
message: error.message,
type: "error",
center: true,
});
this.submit_btn_disable = false;
this.submit_btn_loading = false;
});
},
saveUserInfo(userInfo) //tokenvuexlocalStorage
{
//vuex
this.$store.commit("app/SET_USERINFO", userInfo);
//localStorage
const token = userInfo.token;
const userInfoJson = JSON.stringify(userInfo);
window.localStorage.setItem("token", token);
window.localStorage.setItem("user_info", userInfoJson);
}
},
created()
{
//
this.current_menu = this.tab_menu[0].type;
},
mounted()
{
//
this.$store.state.app.userInfo = null;
},
};
</script>
<style scoped>
#login {
height: 100vh;
background-color: #344a5f;
padding-top: 50px;
}
.form-warp {
width: 320px;
padding: 30px;
margin: auto;
background-color: #ffffff10;
border-radius: 5px;
}
/*.menu-tab {
text-align: center;
margin-bottom: 15px;
li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
color: #fff;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
&.current {
background-color: rgba(0, 0, 0, 0.1);
}
}
}*/
.menu-tab {
text-align: center;
margin-bottom: 15px;
}
.menu-tab li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
color: #fff;
font-size: 14px;
border-radius: 5px;
cursor: pointer;
}
.menu-tab .current {
background-color: rgba(0, 0, 0, 0.1);
}
.form-label {
display: block;
color: #fff;
font-size: 14px;
}
.el-button-block {
width: 100%;
}
</style>

View File

@ -2,8 +2,8 @@
* @Author: Kane
* @Date: 2023-01-25 23:16:29
* @LastEditors: Kane
* @LastEditTime: 2023-01-25 23:19:00
* @FilePath: \admin_system\src\views\requirement\RequirementEditing.vue
* @LastEditTime: 2023-02-03 11:07:02
* @FilePath: \IT工具综合平台\src\views\requirement\RequirementEditing.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
@ -23,16 +23,28 @@
</template>
<script>
import { onBeforeMount, onBeforeUpdate } from 'vue';
import { useRoute } from 'vue-router';
export default {
name: "requirement-editing",
data()
setup()
{
const route = useRoute();
//
onBeforeMount(() =>
{
console.log("接收的参数:", route.query);
});
onBeforeUpdate(() =>
{
console.log("接收的参数:", route.query);
});
return {};
},
mounted()
{
console.log("接收的参数:", this.$route.query);
}
};
</script>

View File

@ -1,8 +1,8 @@
<!--
* @Author: Kane
* @Date: 2023-01-25 23:13:47
* @Date: 2023-02-02 22:19:12
* @LastEditors: Kane
* @LastEditTime: 2023-02-02 22:16:13
* @LastEditTime: 2023-02-03 16:09:22
* @FilePath: \IT工具综合平台\src\views\requirement\RequirementManager.vue
* @Description:
*
@ -18,7 +18,7 @@
<span>标题</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy="this.query_param.title"></el-input>
<el-input v-model.trim.lazy="query_param.title"></el-input>
</el-col>
</el-row>
<el-row :gutter="10">
@ -93,7 +93,7 @@
<el-table-column type="selection" align="center"></el-table-column>
<el-table-column label="需求编号" align="center" width="160">
<template #default="requirement">
<span @click="ui.dialogRequirementDetailVisible = true;" class="requirement-serial">{{
<span @click="showRequirementDetail(requirement.row.serial_no)" class="requirement-serial">{{
requirement.row.serial_no
}}</span>
</template>
@ -115,22 +115,22 @@
</el-table>
<div class="pagination_wrapper">
<el-pagination class="pull_left" @current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange" size="small" background v-model="this.ui.table_current_page"
:page-size="this.ui.table_page_size" :page-sizes="[10, 20, 50, 100]"
@size-change="onTablePageSizeChange" size="small" background v-model="ui.table_current_page"
:page-size="ui.table_page_size" :page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="requirement_data.length">
</el-pagination>
</div>
<!-- 需求详细信息对话框 -->
<el-dialog title="详情" class="requirement-detail-dialog" v-model="ui.dialogRequirementDetailVisible"
width="900px" :close-on-click-modal="true" :close-on-press-escape="false" :show-close="true"
:center="false">
<el-tabs :v-loading="ui.dialogRequirementDetailLoadingVisible" v-model="ui.activeTabName">
width="900px" :close-on-click-modal="true" :close-on-press-escape="false" :show-close="true" :center="false"
@close="closeRequirementDetail">
<el-tabs v-loading="ui.dialogRequirementDetailLoadingVisible" v-model="ui.activeTabName">
<el-tab-pane name="requirement-detail" label="基本信息">
<el-scrollbar height="400px">
<div class="requirement-detail-wrapper">
<el-row :gutter="10">
<el-col :span="2">
<span>标题</span>
<span>标题1</span>
</el-col>
<el-col :span="22">
<el-input readonly></el-input>
@ -228,71 +228,75 @@
</template>
<script>
import { reactive, computed, onBeforeMount } from "vue";
//import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
import { requirementTestData } from '@/test/data/TestData';
import router from "@/router/index";
import { useRouter } from "vue-router";
//import router from "@/router/index";
export default {
name: "requirement-manager",
data()
setup()
{
return {
requirement_data: requirementTestData, //
ui: {
const router = useRouter();
const requirement_data = requirementTestData;
const ui = reactive(
{
table_current_page: 1,//
table_page_size: 10,
dialogRequirementDetailVisible: false, //
dialogRequirementDetailLoadingVisible: false,
dialogRequirementDetailLoadingVisible: true,
activeTabName: "requirement-detail",
requirement_status: [
"未提交", "部门审核", "需求分析", "技术开发", "待发布", "已发布", "被退回",
],
},
query_param: {
});
const query_param = reactive(
{
title: "",
serial_no: "",
request_people: "",
commit_start_date: "",
commit_end_date: "",
commit_start_date: new Date(),
commit_end_date: new Date(),
status: "",
},
};
},
computed: {
//
tableHeight()
});
const tableHeight = computed(() =>
{
return 10 * 50 + 40;
},
tableData()
{
const startIndex = this.ui.table_page_size * (this.ui.table_current_page - 1);
const endIndex = (this.ui.table_page_size * this.ui.table_current_page);// < this.requirement_data.length ? (this.table_page_size * this.table_current_page) : this.requirement_data.length;
});
return this.requirement_data.slice(startIndex, endIndex);
},
},
methods: {
onTablePageSizeChange(pageSize)
const tableData = computed(() =>
{
const startIndex = ui.table_page_size * (ui.table_current_page - 1);
const endIndex = (ui.table_page_size * ui.table_current_page);
return requirement_data.slice(startIndex, endIndex);
});
const onTablePageSizeChange = (pageSize) =>
{
console.log("选择的pageSize", pageSize);
this.ui.table_page_size = pageSize;
},
ui.table_page_size = pageSize;
};
//
onCurrentPageIndexChange(pageIndex)
const onCurrentPageIndexChange = (pageIndex) =>
{
this.ui.table_current_page = pageIndex;
},
addNewRequirement()
ui.table_current_page = pageIndex;
};
const addNewRequirement = () =>
{
//console.log("router", this.$route);
router.push({
name: "RequirementEditing",
query: {
serial: "new",
}
});
},
editRequirement(requirement_serial)
};
const editRequirement = (requirement_serial) =>
{
window.localStorage.setItem("requirement_serial", requirement_serial);
@ -302,17 +306,53 @@ export default {
serial: requirement_serial,
}
});
};
},
const showRequirementDetail = (serial_no) =>
{
setTimeout(() =>
{
ui.dialogRequirementDetailLoadingVisible = false;
}, 1000);
ui.dialogRequirementDetailVisible = true;
console.log("查看需求号:", serial_no);
};
//
const closeRequirementDetail = () =>
{
ui.dialogRequirementDetailLoadingVisible = true;
};
onBeforeMount(() =>
{
query_param.commit_end_date = new Date(Date.now());
query_param.commit_start_date = new Date();
query_param.commit_start_date.setMonth(query_param.commit_end_date.getMonth() - 1);
});
return {
//data
requirement_data,
ui,
query_param,
//
tableHeight,
tableData,
//
editRequirement,
addNewRequirement,
onCurrentPageIndexChange,
onTablePageSizeChange,
showRequirementDetail,
closeRequirementDetail,
//
onBeforeMount,
};
},
//
created()
{
this.query_param.commit_end_date = new Date(Date.now());
this.query_param.commit_start_date = new Date();
this.query_param.commit_start_date.setMonth(this.query_param.commit_end_date.getMonth() - 1);
}
};
</script>

View File

@ -1,9 +1,9 @@
<!--
* @Author: Kane
* @Date: 2023-02-02 22:19:12
* @Date: 2023-01-25 23:13:47
* @LastEditors: Kane
* @LastEditTime: 2023-02-02 23:32:08
* @FilePath: \IT工具综合平台\src\views\requirement\RequirementManager32.vue
* @LastEditTime: 2023-02-02 22:16:13
* @FilePath: \IT工具综合平台\src\views\requirement\RequirementManager.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
@ -18,7 +18,7 @@
<span>标题</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy="query_param.title"></el-input>
<el-input v-model.trim.lazy="this.query_param.title"></el-input>
</el-col>
</el-row>
<el-row :gutter="10">
@ -93,7 +93,7 @@
<el-table-column type="selection" align="center"></el-table-column>
<el-table-column label="需求编号" align="center" width="160">
<template #default="requirement">
<span @click="showRequirementDetail(requirement.row.serial_no)" class="requirement-serial">{{
<span @click="ui.dialogRequirementDetailVisible = true;" class="requirement-serial">{{
requirement.row.serial_no
}}</span>
</template>
@ -115,8 +115,8 @@
</el-table>
<div class="pagination_wrapper">
<el-pagination class="pull_left" @current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange" size="small" background v-model="ui.table_current_page"
:page-size="ui.table_page_size" :page-sizes="[10, 20, 50, 100]"
@size-change="onTablePageSizeChange" size="small" background v-model="this.ui.table_current_page"
:page-size="this.ui.table_page_size" :page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="requirement_data.length">
</el-pagination>
</div>
@ -124,13 +124,13 @@
<el-dialog title="详情" class="requirement-detail-dialog" v-model="ui.dialogRequirementDetailVisible"
width="900px" :close-on-click-modal="true" :close-on-press-escape="false" :show-close="true"
:center="false">
<el-tabs v-loading="ui.dialogRequirementDetailLoadingVisible" v-model="ui.activeTabName">
<el-tabs :v-loading="ui.dialogRequirementDetailLoadingVisible" v-model="ui.activeTabName">
<el-tab-pane name="requirement-detail" label="基本信息">
<el-scrollbar height="400px">
<div class="requirement-detail-wrapper">
<el-row :gutter="10">
<el-col :span="2">
<span>标题1</span>
<span>标题</span>
</el-col>
<el-col :span="22">
<el-input readonly></el-input>
@ -228,62 +228,61 @@
</template>
<script>
import { reactive, computed, onBeforeMount } from "vue";
//import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
import { requirementTestData } from '@/test/data/TestData';
import router from "@/router/index";
export default {
name: "requirement-manager",
setup()
data()
{
const requirement_data = requirementTestData;
const ui = reactive(
{
return {
requirement_data: requirementTestData, //
ui: {
table_current_page: 1,//
table_page_size: 10,
dialogRequirementDetailVisible: false, //
dialogRequirementDetailLoadingVisible: true,
dialogRequirementDetailLoadingVisible: false,
activeTabName: "requirement-detail",
requirement_status: [
"未提交", "部门审核", "需求分析", "技术开发", "待发布", "已发布", "被退回",
],
});
const query_param = reactive(
{
},
query_param: {
title: "",
serial_no: "",
request_people: "",
commit_start_date: new Date(),
commit_end_date: new Date(),
commit_start_date: "",
commit_end_date: "",
status: "",
});
const tableHeight = computed(() =>
},
};
},
computed: {
//
tableHeight()
{
return 10 * 50 + 40;
});
const tableData = computed(() =>
},
tableData()
{
const startIndex = ui.table_page_size * (ui.table_current_page - 1);
const endIndex = (ui.table_page_size * ui.table_current_page);
const startIndex = this.ui.table_page_size * (this.ui.table_current_page - 1);
const endIndex = (this.ui.table_page_size * this.ui.table_current_page);// < this.requirement_data.length ? (this.table_page_size * this.table_current_page) : this.requirement_data.length;
return requirement_data.slice(startIndex, endIndex);
});
function onTablePageSizeChange(pageSize)
return this.requirement_data.slice(startIndex, endIndex);
},
},
methods: {
onTablePageSizeChange(pageSize)
{
console.log("选择的pageSize", pageSize);
ui.table_page_size = pageSize;
}
this.ui.table_page_size = pageSize;
},
//
function onCurrentPageIndexChange(pageIndex)
onCurrentPageIndexChange(pageIndex)
{
ui.table_current_page = pageIndex;
}
function addNewRequirement()
this.ui.table_current_page = pageIndex;
},
addNewRequirement()
{
//console.log("router", this.$route);
router.push({
@ -292,9 +291,8 @@ export default {
serial: "new",
}
});
}
function editRequirement(requirement_serial)
},
editRequirement(requirement_serial)
{
window.localStorage.setItem("requirement_serial", requirement_serial);
@ -304,46 +302,17 @@ export default {
serial: requirement_serial,
}
});
}
function showRequirementDetail(serial_no)
{
setTimeout(() =>
{
ui.dialogRequirementDetailLoadingVisible = false;
}, 5000);
ui.dialogRequirementDetailVisible = true;
console.log("查看需求号:", serial_no);
}
onBeforeMount(() =>
{
query_param.commit_end_date = new Date(Date.now());
query_param.commit_start_date = new Date();
query_param.commit_start_date.setMonth(query_param.commit_end_date.getMonth() - 1);
});
return {
//data
requirement_data,
ui,
query_param,
//
tableHeight,
tableData,
//
editRequirement,
addNewRequirement,
onCurrentPageIndexChange,
onTablePageSizeChange,
showRequirementDetail,
//
onBeforeMount,
};
},
},
//
created()
{
this.query_param.commit_end_date = new Date(Date.now());
this.query_param.commit_start_date = new Date();
this.query_param.commit_start_date.setMonth(this.query_param.commit_end_date.getMonth() - 1);
}
};
</script>