@@ -26,3 +26,21 @@ export function finishTask(data) { | |||
data: data, | |||
}) | |||
} | |||
// 异常任务 | |||
export function accountingAbnormalTaskList(params) { | |||
return request({ | |||
url: '/accounting/task/abnormalTaskList', | |||
method: 'get', | |||
params: params, | |||
}) | |||
} | |||
// 异常任务统计 | |||
export function accountingAbnormalTaskSummary(params) { | |||
return request({ | |||
url: '/accounting/task/abnormalTaskSummary', | |||
method: 'get', | |||
params: params, | |||
}) | |||
} |
@@ -98,3 +98,30 @@ export function auditAllTask(data) { | |||
data: data, | |||
}) | |||
} | |||
// 异常任务 | |||
export function managerAbnormalTaskList(params) { | |||
return request({ | |||
url: '/manager/task/abnormalTaskList', | |||
method: 'get', | |||
params: params, | |||
}) | |||
} | |||
// 异常任务统计 | |||
export function managerAbnormalTaskSummary(params) { | |||
return request({ | |||
url: '/manager/task/abnormalTaskSummary', | |||
method: 'get', | |||
params: params, | |||
}) | |||
} | |||
// 异常任务统计 | |||
export function removeAbnormalTask(type, id, params) { | |||
return request({ | |||
url: `/manager/task/removeAbnormalTask/${type}/${id}`, | |||
method: 'post', | |||
data: params, | |||
}) | |||
} |
@@ -30,6 +30,7 @@ | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<slot></slot> | |||
</div> | |||
</template> | |||
@@ -100,7 +101,9 @@ export default { | |||
this.$emit('townChanged', this.itownCode, this.icountyCode); | |||
} | |||
if((w & 1) || ((w & 2) && !this.hideTown)) | |||
{ | |||
this.$emit('dataChanged', this.icountyCode, this.itownCode, w); | |||
} | |||
}, | |||
}, | |||
watch: { | |||
@@ -3,51 +3,27 @@ | |||
<div class="header_main"> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>大足区</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in 5"> | |||
<div class="selected"> | |||
<p>张家镇</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>张家镇</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in 5"> | |||
<div class="selected"> | |||
<p>张家镇</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>记账</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in 5"> | |||
<div class="selected"> | |||
<p>张家镇</p> | |||
<TopDeptChooser :county-code.sync="parms.countyCode" :town-code.sync="parms.townCode" :root-id="rootId" @dataChanged="chooseDept"> | |||
<template> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>{{typeName}}</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<p class="todo_num">合同异常:<span>19</span>个</p> | |||
<p class="todo_num2">记录异常:<span>1</span>个</p> | |||
<p class="todo_num3">其他异常:<span>1</span>个</p> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in typeOptions"> | |||
<div class="selected" @click="chooseType(item.dictValue)"> | |||
<p>{{item.dictLabel}}</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
</template> | |||
</TopDeptChooser> | |||
<p class="todo_num">记账异常:<span>{{abnormalSummary.numAbnormalVoucher}}</span>个</p> | |||
<p class="todo_num2">合同异常:<span>{{abnormalSummary.numAbnormalContraction}}</span>个</p> | |||
<p class="todo_num3">其他异常:<span>{{abnormalSummary.numAbnormalOther}}</span>个</p> | |||
</div> | |||
@@ -55,21 +31,21 @@ | |||
<div class="left_main"> | |||
<div class="left_main_block" v-for="(item,index) in 5" :key="index"> | |||
<div class="left_main_block" v-for="(item,index) in list" :key="index"> | |||
<p class="left_tt">{{index+1}}.购入芒果52公斤<el-button type="primary" size="mini" icon="el-icon-edit"></el-button></p> | |||
<p class="left_tt">{{index+1}}.{{item.name}}<el-button type="primary" size="mini" icon="el-icon-edit"></el-button></p> | |||
<el-row> | |||
<el-col span="4"><span>经济组织:</span>田娜合作社</el-col> | |||
<el-col span="6"><span>所属地:</span>山东省/威海市/环翠区/羊头镇/张家村</el-col> | |||
<el-col span="6"><span>详细地址:</span>万江路阿巴阿巴阿巴104号楼</el-col> | |||
<el-col span="4"><span>申请人:</span>林萧天</el-col> | |||
<el-col span="4"><span>联系电话:</span>158 0366 7149</el-col> | |||
<el-col :span="4"><span>经济组织:</span>{{item.bookName}}</el-col> | |||
<el-col :span="6"><span>所属地:</span>{{item.region}}</el-col> | |||
<el-col :span="6"><span>详细地址:</span>{{item.address}}</el-col> | |||
<el-col :span="4"><span>申请人:</span>{{item.applyUser}}</el-col> | |||
<el-col :span="4"><span>联系电话:</span>{{item.tel}}</el-col> | |||
</el-row> | |||
<el-row> | |||
<el-col span="4" style="color: #ef0027;"><span>挂起时间:</span>2023.3.10</el-col> | |||
<el-col span="6" style="color: #ef0027;"><span>异常原因:</span>缺少收据</el-col> | |||
<el-col :span="4" style="color: #ef0027;"><span>挂起时间:</span>{{item.orderAt}}</el-col> | |||
<el-col :span="6" style="color: #ef0027;"><span>异常原因:</span>{{item.remark}}</el-col> | |||
</el-row> | |||
@@ -77,31 +53,7 @@ | |||
</div> | |||
<div class="right_main"> | |||
<div class="title"> | |||
<i></i> | |||
<p>任务日期</p> | |||
</div> | |||
<div class="time_main"> | |||
<span class="sanjiao-top" @click="addDate"></span> | |||
<p @click = "selectionRange">{{year}}</p> | |||
<el-date-picker | |||
v-model="year" | |||
type="year" | |||
class="pickerTime" | |||
ref = "datePicker" | |||
value-format="yyyy" | |||
placeholder="选择年"> | |||
</el-date-picker> | |||
<span class="sanjiao-bottom" @click="reduceDate"></span> | |||
</div> | |||
<div class="month_main"> | |||
<p v-for="(item,index) in 12" :class="{'active':index==3}">{{index+1}}月<i v-if="index==3"></i></p> | |||
</div> | |||
</div> | |||
<RightYearMonthSelector class="right_main" :year.sync="parms.orderYear" :month.sync="parms.orderMonth" @dateChanged="chooseMonth"/> | |||
</div> | |||
@@ -110,29 +62,80 @@ | |||
</template> | |||
<script> | |||
import TopDeptChooser from "@/components/framework/TopDeptChooser.vue"; | |||
import {date_format} from "@/utils/date"; | |||
import {ENV} from "@/utils/env"; | |||
import RightYearMonthSelector from "@/components/framework/RightYearMonthSelector.vue"; | |||
import {accountingAbnormalTaskList, accountingAbnormalTaskSummary} from "@/api/agentcenter/accounting_task"; | |||
export default { | |||
name: "todo", | |||
components: {RightYearMonthSelector, TopDeptChooser}, | |||
data() { | |||
return { | |||
year:'2023', | |||
list: [], | |||
total: 0, | |||
parms: { | |||
countyCode: null, | |||
townCode: null, | |||
type: 'contraction', | |||
orderYear: date_format('%Y'), | |||
orderMonth: date_format('%m'), | |||
}, | |||
abnormalSummary: { | |||
num: 0, | |||
numAbnormalContraction: 0, | |||
numAbnormalVoucher: 0, | |||
numAbnormalOther: 0, | |||
}, | |||
rootId: ENV.UserDeptId(), | |||
typeOptions: [ | |||
{dictLabel: '合同', dictValue: 'contraction',}, | |||
{dictLabel: '记账', dictValue: 'voucher',}, | |||
{dictLabel: '其他', dictValue: 'other',}, | |||
], | |||
} | |||
}, | |||
created() { | |||
}, | |||
methods:{ | |||
addDate(){ | |||
this.year = Number(this.year) + 1 ; | |||
getTaskList() { | |||
if(!this.parms.townCode || !this.parms.orderYear || !this.parms.orderMonth || !this.parms.type) | |||
return; | |||
accountingAbnormalTaskList(this.parms).then((resp) => { | |||
this.list = resp.rows; | |||
this.total = resp.total; | |||
}) | |||
}, | |||
reduceDate(){ | |||
this.year = Number(this.year) - 1 ; | |||
getSummary() { | |||
if(!this.parms.townCode || !this.parms.orderYear || !this.parms.orderMonth) | |||
return; | |||
accountingAbnormalTaskSummary(this.parms).then((resp) => { | |||
this.abnormalSummary = resp.data; | |||
}) | |||
}, | |||
selectionRange(){ | |||
this.$refs.datePicker.focus(); | |||
chooseDept(townCode, countyCode) { | |||
this.getTaskList(); | |||
this.getSummary(); | |||
}, | |||
chooseMonth(year, month) { | |||
this.getSummary(); | |||
this.getTaskList(); | |||
}, | |||
chooseType(type) { | |||
this.parms.type = type; | |||
this.getTaskList(); | |||
}, | |||
}, | |||
mounted(){ | |||
}, | |||
computed: { | |||
typeName() { | |||
let val = this.typeOptions.find((x) => x.dictValue === this.parms.type); | |||
return val ? val.dictLabel : ''; | |||
} | |||
} | |||
} | |||
</script> | |||
@@ -3,51 +3,25 @@ | |||
<div class="header_main"> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>大足区</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in 5"> | |||
<div class="selected"> | |||
<p>张家镇</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>张家镇</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in 5"> | |||
<div class="selected"> | |||
<p>张家镇</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>记账</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in 5"> | |||
<div class="selected"> | |||
<p>张家镇</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
<p class="todo_num">合同异常:<span>19</span>个</p> | |||
<p class="todo_num2">记录异常:<span>1</span>个</p> | |||
<p class="todo_num3">其他异常:<span>1</span>个</p> | |||
<TopDeptChooser :county-code.sync="parms.countyCode" :town-code.sync="parms.townCode" :root-id="rootId" @dataChanged="chooseDept"> | |||
<el-dropdown trigger="click" placement="bottom-start"> | |||
<div class="select_address el-dropdown-link"> | |||
<span class="sanjiao-right"></span> | |||
<p>{{typeName}}</p> | |||
</div> | |||
<el-dropdown-menu slot="dropdown" style="width: 8vw;text-align: center;"> | |||
<el-dropdown-item v-for="(item,index) in typeOptions"> | |||
<div class="selected" @click="chooseType(item.dictValue)"> | |||
<p>{{item.dictLabel}}</p> | |||
</div> | |||
</el-dropdown-item> | |||
</el-dropdown-menu> | |||
</el-dropdown> | |||
</TopDeptChooser> | |||
<p class="todo_num">记账异常:<span>{{abnormalSummary.numAbnormalVoucher}}</span>个</p> | |||
<p class="todo_num2">合同异常:<span>{{abnormalSummary.numAbnormalContraction}}</span>个</p> | |||
<p class="todo_num3">其他异常:<span>{{abnormalSummary.numAbnormalOther}}</span>个</p> | |||
</div> | |||
@@ -55,54 +29,30 @@ | |||
<div class="left_main"> | |||
<div class="left_main_block" v-for="(item,index) in 1" :key="index"> | |||
<div class="left_main_block" v-for="(item,index) in list" :key="index" v-if="list.length > 0"> | |||
<p class="left_tt">{{index+1}}.购入芒果52公斤 <span>负责人:张三</span><el-button type="danger" size="mini" icon="el-icon-edit"></el-button></p> | |||
<p class="left_tt">{{index+1}}.{{item.name}} <span>负责人:{{item.handleUser}}</span><el-button type="danger" size="mini" icon="el-icon-edit" @click="remove(item)"></el-button></p> | |||
<el-row> | |||
<el-col span="4"><span>经济组织:</span>田娜合作社</el-col> | |||
<el-col span="6"><span>所属地:</span>山东省/威海市/环翠区/羊头镇/张家村</el-col> | |||
<el-col span="6"><span>详细地址:</span>万江路阿巴阿巴阿巴104号楼</el-col> | |||
<el-col span="4"><span>申请人:</span>林萧天</el-col> | |||
<el-col span="4"><span>联系电话:</span>158 0366 7149</el-col> | |||
<el-col :span="4"><span>经济组织:</span>{{item.bookName}}</el-col> | |||
<el-col :span="6"><span>所属地:</span>{{item.region}}</el-col> | |||
<el-col :span="6"><span>详细地址:</span>{{item.address}}</el-col> | |||
<el-col :span="4"><span>申请人:</span>{{item.applyUser}}</el-col> | |||
<el-col :span="4"><span>联系电话:</span>{{item.tel}}</el-col> | |||
</el-row> | |||
<el-row> | |||
<el-col span="4" style="color: #ef0027;"><span>挂起时间:</span>2023.3.10</el-col> | |||
<el-col span="6" style="color: #ef0027;"><span>异常原因:</span>缺少收据</el-col> | |||
<el-col :span="4" style="color: #ef0027;"><span>挂起时间:</span>{{item.orderAt}}</el-col> | |||
<el-col :span="6" style="color: #ef0027;"><span>异常原因:</span>{{item.remark}}</el-col> | |||
</el-row> | |||
</div> | |||
<img src="../../assets/images/managerAbnormal_icon_none.png" class="table_none" alt=""> | |||
<img src="../../assets/images/managerAbnormal_icon_none.png" class="table_none" alt="" v-else> | |||
</div> | |||
<div class="right_main"> | |||
<div class="title"> | |||
<i></i> | |||
<p>任务日期</p> | |||
</div> | |||
<div class="time_main"> | |||
<span class="sanjiao-top" @click="addDate"></span> | |||
<p @click = "selectionRange">{{year}}</p> | |||
<el-date-picker | |||
v-model="year" | |||
type="year" | |||
class="pickerTime" | |||
ref = "datePicker" | |||
value-format="yyyy" | |||
placeholder="选择年"> | |||
</el-date-picker> | |||
<span class="sanjiao-bottom" @click="reduceDate"></span> | |||
</div> | |||
<div class="month_main"> | |||
<p v-for="(item,index) in 12" :class="{'active':index==3}">{{index+1}}月<i v-if="index==3"></i></p> | |||
</div> | |||
</div> | |||
<RightYearMonthSelector class="right_main" :year.sync="parms.orderYear" :month.sync="parms.orderMonth" @dateChanged="chooseMonth"/> | |||
</div> | |||
@@ -111,29 +61,87 @@ | |||
</template> | |||
<script> | |||
import TopDeptChooser from "@/components/framework/TopDeptChooser.vue"; | |||
import RightYearMonthSelector from "@/components/framework/RightYearMonthSelector.vue"; | |||
import {date_format} from "@/utils/date"; | |||
import {ENV} from "@/utils/env"; | |||
import {managerAbnormalTaskList, managerAbnormalTaskSummary, removeAbnormalTask} from "@/api/agentcenter/task"; | |||
export default { | |||
name: "todo", | |||
components: {RightYearMonthSelector, TopDeptChooser}, | |||
data() { | |||
return { | |||
year:'2023', | |||
list: [], | |||
total: 0, | |||
parms: { | |||
countyCode: null, | |||
townCode: null, | |||
type: 'contraction', | |||
orderYear: date_format('%Y'), | |||
orderMonth: date_format('%m'), | |||
}, | |||
abnormalSummary: { | |||
num: 0, | |||
numAbnormalContraction: 0, | |||
numAbnormalVoucher: 0, | |||
numAbnormalOther: 0, | |||
}, | |||
rootId: ENV.UserDeptId(), | |||
typeOptions: [ | |||
{dictLabel: '合同', dictValue: 'contraction',}, | |||
{dictLabel: '记账', dictValue: 'voucher',}, | |||
{dictLabel: '其他', dictValue: 'other',}, | |||
], | |||
} | |||
}, | |||
created() { | |||
}, | |||
methods:{ | |||
addDate(){ | |||
this.year = Number(this.year) + 1 ; | |||
getTaskList() { | |||
if(!this.parms.countyCode || !this.parms.orderYear || !this.parms.orderMonth || !this.parms.type) | |||
return; | |||
managerAbnormalTaskList(this.parms).then((resp) => { | |||
this.list = resp.rows; | |||
this.total = resp.total; | |||
}) | |||
}, | |||
getSummary() { | |||
if(!this.parms.countyCode || !this.parms.orderYear || !this.parms.orderMonth) | |||
return; | |||
managerAbnormalTaskSummary(this.parms).then((resp) => { | |||
this.abnormalSummary = resp.data; | |||
}) | |||
}, | |||
reduceDate(){ | |||
this.year = Number(this.year) - 1 ; | |||
remove(row) { | |||
removeAbnormalTask(row.type, row.id).then((resp) => { | |||
this.$message.success('删除成功'); | |||
this.getSummary(); | |||
this.getTaskList(); | |||
}) | |||
}, | |||
selectionRange(){ | |||
this.$refs.datePicker.focus(); | |||
chooseDept(countyCode, townCode) { | |||
this.getTaskList(); | |||
this.getSummary(); | |||
}, | |||
chooseMonth(year, month) { | |||
this.getSummary(); | |||
this.getTaskList(); | |||
}, | |||
chooseType(type) { | |||
this.parms.type = type; | |||
this.getTaskList(); | |||
}, | |||
}, | |||
mounted(){ | |||
}, | |||
computed: { | |||
typeName() { | |||
let val = this.typeOptions.find((x) => x.dictValue === this.parms.type); | |||
return val ? val.dictLabel : ''; | |||
} | |||
} | |||
} | |||
</script> | |||