Commit 34e6920b authored by 李苏's avatar 李苏 💬

项目智能稽核 80%完工

parent d2692446
import request from 'common/src/utils/request'
/* query */
export function doQuery(query) {
return request({
url: '/budgetms/wtqd/query',
method: 'post',
data: query||{}
})
}
export function doAdd(query) {
return request({
url: '/budgetms/wtqd/add',
method: 'post',
data: query||{}
})
}
export function doUpdate(query) {
return request({
url: '/budgetms/wtqd/update',
method: 'post',
data: query||{}
})
}
export function doDelete(query) {
return request({
url: '/budgetms/wtqd/delete',
method: 'post',
data: query||{}
})
}
export function createWtqd(query) {
return request({
url: '/budgetms/wtqd/createWtqd',
method: 'post',
data: query||{}
})
}
/* 状变*/
export function doGo(query) {
return request({
url: '/budgetms/wtqd/doGo',
method: 'post',
data: query||{}
})
}
export function doOver(query) {
return request({
url: '/budgetms/wtqd/doOver',
method: 'post',
data: query||{}
})
}
export function doClose(query) {
return request({
url: '/budgetms/wtqd/doClose',
method: 'post',
data: query||{}
})
}
export function queryWtdtl(query){
return request({
url: '/budgetms/wtqd/queryWtdtl',
method: 'post',
data: query||{}
})
}
...@@ -4,9 +4,10 @@ ...@@ -4,9 +4,10 @@
<!-- <keep-alive :include="cachedViews"> <!-- <keep-alive :include="cachedViews">
<router-view :key="key" /> <router-view :key="key" />
</keep-alive> --> </keep-alive> -->
<keep-alive > <!-- <keep-alive >
<router-view :key="key" />
</keep-alive> -->
<router-view :key="key" /> <router-view :key="key" />
</keep-alive>
</transition> </transition>
</section> </section>
</template> </template>
......
...@@ -239,6 +239,19 @@ export const powerRoutes=[ ...@@ -239,6 +239,19 @@ export const powerRoutes=[
}, },
name:'erpxmmxz', name:'erpxmmxz',
path:"erpxmmxz" path:"erpxmmxz"
},
{
component:'hzcxbb/xmznjh/index',
hidden:false,
meta:{
"title": "项目智能稽核",
"icon": "",
"noCache": false,
"link": null,
"mkid": 901020400,
},
name:'xmznjh',
path:"xmznjh"
} }
] ]
}, },
......
<template>
<DefaultDialog :app='app'>
<div slot="form" style="display: flex;height: 70vh;">
DialogTitle:'新增',
showDialog:false,
</div>
<div slot="reFooter" class="refooter" >
<span slot="footer" class="dialog-footer" >
<el-button @click="app.showDialog=false">取 消</el-button>
<el-button type="primary" @click="save()">保 存</el-button>
</span>
</div>
</DefaultDialog>
</template>
<script>
export default {
props: {
app: {
type: Object,
default: ()=>{
return {}
}
}
},
async mounted() {
},
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
</style>
<template>
<RelDialog :type='type' :editApp='editApp' :app='app' :buttonApp='buttonApp'>
<!-- 填写表单内容,slot=form必写-->
<el-form slot="form" ref="form" :model="form" label-width="80px" :rules="rules">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="名称" ref="name" prop="name">
<el-input :readonly="readonly" v-model="form.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="设备分类" ref="flid" prop="flid">
<!-- <el-input :readonly="readonly" v-model="form.name" ></el-input> -->
<RelSelect :readonly="readonly" filterable style="width: 100%;" src='/aqgl/sbgl/sbfl/query' :match="{value:'id',label:'name'}" v-model='form.flid' ></RelSelect>
</el-form-item>
</el-col>
</el-row>
</el-form>
</RelDialog>
</template>
<script>
import {editMixin} from 'common'
export default {
mixins: [editMixin],
/* 存放index页面传递的额外参数*/
mounted() {
},
/* 组件名称*/
/* 传递props模式一样必填,用于index,button,REdialog之间的组件通信*/
data() {
return {
/* 当前表单初始值,默认由RelDialog查询indexQuery赋值,copy时不赋值id,初始化时所有query的值都会赋值给form*/
form: {
flid:'',
id:'',
name:''
}
}
},
methods: {
}
}
</script>
<style scoped lang="scss">
</style>
...@@ -93,10 +93,10 @@ ...@@ -93,10 +93,10 @@
<!-- 按钮操作--> <!-- 按钮操作-->
<el-row class="tool-bar"> <el-row class="tool-bar">
<ToolButton :app='app'></ToolButton> <ToolButton :app='app'></ToolButton>
<ViewButton ref="view" :app='app'></ViewButton> <!-- <ViewButton ref="view" :app='app'></ViewButton>
<AddButton ref="add" :app='app'></AddButton> <AddButton ref="add" :app='app'></AddButton>
<CopyButton ref="copy" :app='app'></CopyButton> <CopyButton ref="copy" :app='app'></CopyButton>
<EditButton ref="edit" :app='app'></EditButton> <EditButton ref="edit" :app='app'></EditButton> -->
<el-button size="small" type="primary" @click="doDrawer">生成图表</el-button> <el-button size="small" type="primary" @click="doDrawer">生成图表</el-button>
<!-- <AttachFileButton :app='app' ></AttachFileButton> --> <!-- <AttachFileButton :app='app' ></AttachFileButton> -->
<!-- 额外按钮--> <!-- 额外按钮-->
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
doDelete doDelete
} from '@/api/hzcxbb/erpxmmxz.js'; } from '@/api/hzcxbb/erpxmmxz.js';
/* edit页面*/ /* edit页面*/
import Edit from './edit' // import Edit from './edit'
import { import {
tableMixin tableMixin
} from 'common' } from 'common'
...@@ -559,7 +559,7 @@ ...@@ -559,7 +559,7 @@
} }
}, },
components: { components: {
Edit, // sEdit,
} }
} }
</script> </script>
......
<template>
<div style="display: flex;">
<div class="min_full" style="width: 200px;border-right: 0px;">
<TreeBase :dgtype='5' :app='app' @selected='selectedTree'></TreeBase>
</div>
<div class="min_full" style="width: calc(100% - 200px)">
<!-- 查询条件-->
<div class="search" v-condition>
<SearchButton :app='app'></SearchButton>
<el-row :gutter="20" class="search-row-1">
<el-col :span="6" class="search-col">
<div class="search-item">
<span class="search-span">信息:</span>
<el-input v-model="queryParams.info"></el-input>
</div>
</el-col>
<el-col :span="4" class="search-col">
<div class="search-item">
<span class="search-span">选择:</span>
<RelSelect style="width: 100%;" src='jcsj/common/bm/queryGs' filterable clearable
:match="{value:'id',label:'bmmc'}" v-model='queryParams.gsid'></RelSelect>
</div>
</el-col>
</el-row>
</div>
<!-- 按钮操作-->
<el-row class="tool-bar">
<ToolButton :app='app'></ToolButton>
<ViewButton ref="view" :app='app'></ViewButton>
<AddButton ref="add" :app='app'></AddButton>
<CopyButton ref="copy" :app='app'></CopyButton>
<EditButton ref="edit" :app='app'></EditButton>
<!-- <AttachFileButton :app='app' ></AttachFileButton> -->
<!-- 额外按钮-->
<!-- 表头设置 -->
<!-- 权限-->
</el-row>
<!-- 表格-->
<div class="tablePagers">
<TablePager @getData='getData' :ref="'TablePager'" :app='app' :query='query' @selectItem='selectItem'
@getRow='getRow'>
</TablePager>
</div>
</div>
</div>
</template>
<script>
import {
apiTreeQuery
// doQuery,
// doAdd,
// doUpdate,
// doDelete
} from 'common/src/api/documentManagement/folder.js';
/* edit页面*/
import Edit from './edit'
import {
tableMixin
} from 'common'
export default {
mixins: [tableMixin],
name: '功能名称',
/* 初始额外赋值*/
async mounted() {
this.$refs['TablePager'].pageQuery()
},
data() {
return {
/* 树的标题 */
treeTitle: '文件管理',
treeDefaultProps: {
/* 构建递归的children */
children: 'children',
/* 展示的参数 */
label: 'name',
/* 父id */
fatherId: 'pid',
/* 子id */
sonId: 'id',
/* 无父节点构建root 的属性 type=5生效 */
rootName: "根节点",
rootId:'root'
},
treeQueryParams: {
},
/*需要的额外参数 */
showDialog: false,
DialogName: '',
type: '',
DialogTitle: '',
/* 基础url*/
baseUrl: '请填写',
/* 查询参数*/
queryParams: {
info: '',
gsid: ''
},
/* 表格标题对应参数*/
tableTitle: [{
label: "备注",
prop: "bz",
fieldType: "ftString",
width: 300
}]
}
},
methods: {
selectedTree(e) {
console.log(e)
// this.queryParams.bmid=e.id||'root'
this.$refs['TablePager'].pageQuery()
},
// /* 基础查询*/
query: apiTreeQuery,
// /* 基础增*/
// apiAdd: doAdd,
// /* 基础更新*/
// apiUpdate: doUpdate,
// /* 删除操作*/
// apiDelete: doDelete,
apiTreeQuery: apiTreeQuery,
/* 初始化赋值操作*/
init() {
}
},
components: {
Edit,
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<DefaultDialog :app='app' >
<div slot="form" style="display: flex;height:80vh;overflow: auto;">
<div class="gcinfo" >
<!-- -->
<div class="gcinfo_body" id="gcinfoBody" >
<!-- title -->
<span class="gcinfo_title" >稽核规则说明</span>
<div class="gcinfo_item cells">
<span class="subheader">
成本性项目领用资本性物料
</span>
<div class="text">
以单笔记录为单元,如果对应项目为[成本类型],对应物料性质为[资本性],则标记“成本性项目领用资本性物料”。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
低压业扩(打包)领用杆塔分支箱
</span>
<div class="text">
以单笔记录为单元,如果对应项目为类型为低压业扩相关项目,且项目被标记为打包项目,且该记录物料领用了杆塔、分支箱。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
低压业扩(单体)领用杆塔分支箱
</span>
<div class="text">
以单笔记录为单元,如果对应项目为类型为低压业扩相关项目,且项目被标记为单体项目,且该记录物料领用了杆塔、分支箱。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
超1年、6个月、3个月未发生财务支出
</span>
<div class="text">
以[项目定义编码]为单元,查找最近一笔[过账日期],与当日日期做差计算时间间隔,分360日、180日、90日分别标记超1年、6个月、3个月未发生财务支出。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
疑似服务成本先于物资成本确认
</span>
<div class="text">
以[项目定义编码]为单元,查找最早一笔物资及服务,比对服务确认日期与物资确认日期先后关系,如服务早于物资,则标记“疑似服务成本先于物资成本确认”。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
物资会计科目错误
</span>
<div class="text">
以单笔记录为单元,如[物资/服务]字段中“物资”对应的会计科目为“生产成本-外包检修费”,则标记“物资会计科目错误”。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
服务会计科目错误
</span>
<div class="text">
以单笔记录为单元,如[物资/服务]字段中“服务”对应的会计科目为“生产成本-自营材料费”或“生产成本-外包材料费”,则标记“服务会计科目错误”。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
物资退库率异常
</span>
<div class="text">
以[项目定义编码]为单元,计算“物资+负”组合金额合计与“物资+正”合计金额比例,按比例是否大于30%、50%、80%分别标记累计退库率超30%、50%、80%三种状态。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
物资退库日期异常
</span>
<div class="text">
以单笔记录为单元,如果“物资+负”发生在1月、4月、7月、10月“上旬”,标记“物资退库日期异常”。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
疑似项目未及时关闭
</span>
<div class="text">
以[项目定义编码]为单元,如果[关闭状态]为“已立项”,且累计支出占项目总预算占比大于90%,则标记“疑似项目未及时关闭”。
</div>
</div>
<div class="gcinfo_item cells">
<span class="subheader">
成本性结转项目超期未关闭
</span>
<div class="text">
以[项目定义编码]为单元,如果[项目包名称]前4个字符小于当前年,且[资本/成本]字段为“成本性”,且[关闭状态]为“已立项”,且稽核规则执行当月已经大于6月,则标记“成本性结转项目超期未关闭”。
</div>
</div>
</div>
<!-- item -->
</div>
</div>
<div slot="reFooter" class="refooter" >
<span slot="footer" class="dialog-footer" >
<el-button @click="app.showDialog=false">取 消</el-button>
<!-- <el-button type="primary" @click="save()">保 存</el-button> -->
</span>
</div>
</DefaultDialog>
</template>
<script>
export default {
props: {
app: {
type: Object,
default: ()=>{
return {}
}
}
},
async mounted() {
},
data() {
return {
}
},
methods: {
}
}
</script>
<style scoped>
.gcinfo{
width: 100%;
padding: 50px 20px;
}
.gcinfo_body{
border-radius: 4px;
width: 80%;
padding: 25px 20px;
margin: 0 auto;
border: 1px solid #0a1022;
}
.gcinfo_title{
display: block;
transform: translateX(20px);
color: #000;
font-size: 30px;
font-weight: 700;
line-height: 36px;
margin: 0;
padding: 0;
margin-bottom: 20px;
}
/* copy */
.gcinfo div.cells {
outline:0px!important;
border-width: 0;
color: #000;
font-family: 微软雅黑,Arial,sans-serif;
font-size: 100%;
font-weight: 400;
line-height: 16px;
margin: 0;
outline: 1px solid red;
padding: 20px;
vertical-align: baseline;
}
.gcinfo span.subheader {
background-color: #3c83fa;
border-radius: 10px;
border-width: 0;
color: #fff;
display: inline-block;
font-family: 微软雅黑,Arial,sans-serif;
font-size: 100%;
font-weight: 400;
line-height: 16px;
margin: 0 0 20px;
padding: 10px;
vertical-align: baseline;
}
.gcinfo div.text {
border-width: 0;
color: #0a1022;
font-family: 微软雅黑,Arial,sans-serif;
font-size: 14px;
font-weight: 400;
line-height: 20px;
margin: 0 0 10px;
padding: 0;
vertical-align: baseline;
}
</style>
This diff is collapsed.
<template>
<DefaultDialog :app='app'>
<div slot="form" style="display: flex;">
<el-form slot="form" ref="form" :model="form" label-width="80px" >
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="稽核类型" ref="wtlxids" prop="wtlxids">
<RelSelect filterable style="width: 100%;"
collapse-tags multiple
src='budgetms/wtqd/init/wtlx' :match="{value:'id',label:'name'}" v-model='form.wtlxids' ></RelSelect>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目年度" ref="year" prop="year" >
<el-date-picker style="width: 100%;"
v-model="form.year"
type="year"
placeholder="选择年">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="过账日期" ref="name" prop="name">
<RelDaterange
:start='form.beginDate'
:end="form.endDate"
v-if='asyncData'
@get="get" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="利润中心" ref="chooseLrzxids" prop="chooseLrzxids">
<RelSelect
collapse-tags multiple
filterable style="width: 100%;" src='budgetms/lrzx/query' :match="{value:'id',label:'name'}" v-model='form.chooseLrzxids' ></RelSelect>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div slot="reFooter" class="refooter" >
<span slot="footer" class="dialog-footer" >
<el-button @click="app.showDialog=false">取 消</el-button>
<el-button type="primary" @click="save()">保 存</el-button>
</span>
</div>
</DefaultDialog>
</template>
<script>
import {datetime} from 'common/src/api/common'
import {
createWtqd
} from '@/api/hzcxbb/xmznjh.js';
export default {
props: {
app: {
type: Object,
default: ()=>{
return {}
}
}
},
async mounted() {
/* 初始化日期*/
const { data }=await datetime()
let nowTime=data.data||new Date().getTime()
/* 初始化数据*/
this.form.year=new Date(nowTime)
this.form.endDate=new Date(nowTime).getTime()
let startDate=new Date(nowTime)
startDate.setDate(1)
this.form.beginDate= Math.floor(startDate.getTime())
this.asyncData=true
},
data() {
return {
asyncData:false,
form:{
year:'',
beginDate:'',
endDate:'',
wtlxids:[],
chooseLrzxids:[],
}
}
},
methods: {
get(val){
this.form.beginDate=val.start
this.form.endDate=val.end
},
save(){
let params={...this.form}
params.year=new Date(params.year).getFullYear()
params.chooseLrzxids=params.chooseLrzxids.join()
params.wtlxids=params.wtlxids.join()
createWtqd(params).then(res=>{
if(res.success){
this.$success('操作成功')
this.app.showDialog=false
}
})
}
}
}
</script>
<style scoped>
</style>
<template>
<DefaultDialog :app='app'>
<div slot="form" style="display: flex;">
<div class="tablePagers" style="height: 80vh;overflow: auto;">
<TablePager @getData='getData' :ref="'TablePager'" :app='this' :query='query' @selectItem='selectItem' :operateButtons='false'
@getRow='getRow'>
</TablePager>
</div>
</div>
<div slot="reFooter" class="refooter" >
<span slot="footer" class="dialog-footer" >
<el-button @click="app.showDialog=false">取 消</el-button>
<!-- <el-button type="primary" @click="save()">保 存</el-button> -->
</span>
</div>
</DefaultDialog>
</template>
<script>
import {
queryWtdtl,
} from '@/api/hzcxbb/xmznjh.js';
import {
tableMixin_noapp
} from 'common'
export default {
mixins: [tableMixin_noapp],
props: {
app: {
type: Object,
default: ()=>{
return {}
}
}
},
async mounted() {
/* 活出查询id*/
this.$nextTick(()=>{
this.$refs['TablePager'].pageQuery()
})
},
data() {
return {
queryParams: {
relattype:this.app.singleItem.relattype,
relatid:this.app.singleItem.relatid
},
tableTitle:[
{title: "凭证编码", field: "pzcode", fieldType: "ftString",width:120},
{title: "利润中心", field: "jc", fieldType: "ftString",width:192},
{title: "过账日期", field: "gzrq", fieldType: "ftDate"},
{title: "归档凭证类型", field: "gdpzlx", fieldType: "ftString",width:60},
{title: "归档凭证编码", field: "gdpzcode", fieldType: "ftString",width:120},
{title: "凭证抬头文本", field: "pzwb", fieldType: "ftString",width:300},
{title: "挂接WBS编码", field: "gjwbs", fieldType: "ftString",width:192},
{title: "WBS编码", field: "wbs", fieldType: "ftString",width:192},
{title: "项目编码", field: "xmcode", fieldType: "ftString",width:192},
{title: "项目描述", field: "xmdesc", fieldType: "ftString",width:300},
{title: "费用明细", field: "fymxname", fieldType: "ftString",width:192},
{title: "往来款项性质ID", field: "wlxzid", fieldType: "ftString",width:192,hidden:true},
{title: "往来款项性质名称", field: "wlxzname", fieldType: "ftString",width:300,hidden:true},
{title: "借贷标志", field: "jdbz", fieldType: "ftString",align:"center",width:70, formatter: function (a, b, value) {
var map = {"Y": "借", "N": "贷"};
var text = map[value];
if(text){
if(value=="Y"){
return text ;
}else if(value=='N'){
return text ;
}else{
return text || "";
}
}else{
return text || "";
}
}
},
{title: "物资标志", field: "wzbz", fieldType: "ftString",align:"center",width:70, formatter: function (a, b, value) {
var map = {"Y": "物资", "N": "服务"};
var text = map[value];
return text || "";
}
},
{title: "领/退", field: "ltbz", fieldType: "ftString",align:"center",width:70, formatter: function (a, b, value) {
var map = {"Y": "领", "N": "退"};
var text = map[value];
return text || "";
}
},
{title: "项目金额", field: "xmje", fieldType: "float"},
{title: "数量", field: "sl", fieldType: "float"},
{title: "批次", field: "ph", fieldType: "ftString",width:240},
{title: "物料编码", field: "wlid", fieldType: "ftString",width:192},
{title: "物料描述", field: "wldes", fieldType: "ftString",width:300},
{title: "资本性物料标识", field: "wlxz", fieldType: "ftString",align:"center",width:70, formatter: function (a, b, value) {
var map = {"C": "成本", "Z": "资本","X": "待定"};
return map[value] || value;
}
},
{title: "计量单位", field: "jldw", fieldType: "ftString",width:60},
{title: "进项税额", field: "jxse", fieldType: "float"},
{title: "转出进项税额", field: "zcjxse", fieldType: "float"},
{title: "转出凭证编码", field: "zcpzcode", fieldType: "ftString",width:120},
{title: "转出凭证过账日期", field: "zcgzrq", fieldType: "ftDate"},
{title: "供应商编码", field: "gyscode", fieldType: "ftString",width:60},
{title: "供应商", field: "gysname", fieldType: "ftString",width:192},
{title: "项目包", field: "xmbmc", fieldType: "ftString",width:192},
{title: "科目编码", field: "mkmid", fieldType: "ftString",width:192},
{title: "科目", field: "kmname", fieldType: "ftString",width:120},
{title: "年度", field: "year", fieldType: "int"},
{title: "月份", field: "month", fieldType: "int"},
{title: "日期", field: "day", fieldType: "int"},
{title: "上下旬", field: "sxx", fieldType: "ftString",width:60},
]
}
},
methods: {
query:queryWtdtl
}
}
</script>
<style scoped>
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment