Commit 7256cf70 authored by wangxl's avatar wangxl

eeeee

parent 28d27623
......@@ -309,7 +309,7 @@ export default {
return fetch(`/v1/science-admin/com-expert-spec/getExpertListBySpecIdProjId`, params)
},
getExpertListByExpertSpecIds (params) {
return fetch(`/v1/science-admin/com-expert-spec/getExpertListByExpertSpecIds`, params)
return fetch(`/v1/science-admin/com-expert-spec/getExpertListByExpertSpecIds`, params, 'post', 'json')
},
getExpertListByExpertSpecIdOrParentId (params) {
return fetch(`/v1/science-admin/com-expert-spec/getExpertListByExpertSpecIdOrParentId`, params)
......@@ -344,6 +344,9 @@ export default {
getProjectDetailListbyPage (params) {
return fetch('/v1/science-admin/com-project-group-detail/getProjectDetailListbyPage', params)
},
getGroupProjectInfo (params) {
return fetch('/v1/science-admin/com-project-group/getGroupProjectInfo', params)
},
getProjectListByGroupIds (params) {
return fetch('/v1/science-admin/com-project-group-detail/getProjectListByGroupIds', params)
},
......
......@@ -7,13 +7,13 @@
<a v-for="(item) in expertSelectKeys" :key="item.key">{{item.title}}</a>
</div>
</div>
<div class="select-header-content">
<div class="select-seach-content">
<a-input placeholder="专家姓名" v-model="personName" @change="changePersonName" />
</div>
<div class="layout-select-content ">
<div class="content-inner">
<div class="tree-select">
<a-tree v-model="checkedKeys" :expandedKeys="defaultExpandedKeys" :blockNode="true" style="width: 100%" :tree-data="treeData" @select="onClick" @check="onCheck" @expand="onExpand" />
<a-tree v-model="checkedKeys" checkable :expandedKeys="defaultExpandedKeys" :blockNode="true" style="width: 100%" :tree-data="treeData" @select="onClick" @check="onCheck" @expand="onExpand" />
</div>
<div class="content-select ">
<select-item v-model="expertSelectKeys" :dataList="dataList" />
......@@ -64,76 +64,55 @@ export default {
},
created () {
this.loadTreeSelect()
this.loadSpecList()
this.seachExpert("00000000-0000-0000-0000-000000000000", null, null)
this.getGroupProjectInfo()
},
methods: {
loadTreeSelect () {
this.$api.parameter.getKnowledgeInfoList1().then(({ data = {} }) => {
getGroupProjectInfo () {
let pars = { groupIds: this.projGroupSelectedRowKeys }
this.$api.projectGroupAssign.getGroupProjectInfo(pars).then(({ data = {} }) => {
if (data) {
this.treeData = data
this.defaultExpandedKeys = [this.treeData[0].key]
this.checkedKeys = data.spec
this.defaultExpandedKeys = data.expanded
this.seachExpert(this.checkedKeys)
}
}).catch(() => { this.loading = true });
},
loadSpecList () {
this.$api.parameter.getSpecArray().then(({ data = {} }) => {
if (data) {
this.specArray = data
this.buildSpecKeyMap()
}
})
},
buildSpecKeyMap() {
this.specKeyMap = {}
this.specArray.forEach(item => {
this.specKeyMap[item.key] = 3
this.specKeyMap[item.pkey] = 2
this.specKeyMap[item.ppkey] = 1
this.loading = false
}).catch(() => {
this.$message.error('error!')
this.loading = false
})
},
FromSpecArrayFindKey(key) {
return this.specKeyMap[key] || 0
},
processExpertSearch(value) {
const level = this.FromSpecArrayFindKey(value)
if (level == 1)
this.seachExpert(null, null, value)
else if (level == 2)
this.seachExpert(null, value, null)
else
this.seachExpert(value, null, null)
},
onClick (value, info) {
this.processExpertSearch(value)
},
onCheck (value, info) {
this.processExpertSearch(value)
this.seachExpert(value)
},
onExpand (value) {
this.defaultExpandedKeys = value
},
onCancel () {
this.$emit("close", 'cancel')
},
loadTreeSelect () {
this.$api.parameter.getKnowledgeInfoList1().then(({ data = {} }) => {
if (data) {
this.treeData = data
this.defaultExpandedKeys = [this.treeData[0].key]
}
}).catch(() => { this.loading = true });
},
changePersonName () {
this.seachExpert(null, null, null)
this.seachExpert(null, null, null,)
},
seachExpert (specId, pkey, ppkey) {
seachExpert (specId) {
this.loading = true
if (this.personName !== null && this.personName !== '') {
specId = null
pkey = null
ppkey = null
}
this.$api.expertSpec.getExpertListByExpertSpecIdOrParentId({ specId: specId, pkey: pkey, ppkey: ppkey, personName: this.personName }).then(({ data = {} }) => {
this.$api.expertSpec.getExpertListByExpertSpecIds({ specIds: specId, groupIds: this.projGroupSelectedRowKeys, personName: this.personName }).then(({ data = {} }) => {
if (data) {
this.dataList = data
this.expertFilter(this.expertSelectKeys, this.dataList)
this.loading = false
}
}).catch(() => { });
this.loading = false
},
onCancel () {
this.$emit("close", 'cancel')
this.loading = false
},
submit () {
this.loading = true
......@@ -178,6 +157,7 @@ export default {
height: 100%;
border: 1px solid #d9d9d9;
border-radius: 4px 4px 4px 4px;
font-size: 8pt;
.layout-select-header {
position: relative;
......@@ -189,15 +169,29 @@ export default {
line-height: 35px;
position: absolute;
top: 0;
left: 75px;
width: calc(100% - 75px);
left: 60px;
width: calc(100% - 60px);
height: 100%;
padding: 2px;
}
.select-header-content a {
margin-left: 6px;
}
}
.select-seach-content {
padding: 3px;
}
.layout-select-content {
.ant-tree {
font-size: 8pt !important;
}
::v-deep .ant-tree .ant-tree-checkbox {
margin: 0 0 !important;
}
::v-deep .ant-tree li span.ant-tree-switcher,
.ant-tree li span.ant-tree-iconEle {
width: 16px !important;
}
width: 100%;
height: calc(100% - 70px);
padding: 3px;
......@@ -214,7 +208,7 @@ export default {
width: 100%;
height: 35px;
vertical-align: middle;
text-align: right;
text-align: left;
padding: 1px;
}
::v-deep.ant-spin-nested-loading .ant-spin-container {
......@@ -226,15 +220,15 @@ export default {
position: absolute;
top: 0;
left: 0;
width: 200px;
width: 320px;
height: 100%;
overflow-x: auto;
overflow-y: auto;
border-right: 1px solid #e8e8e8;
}
.content-select {
margin-left: 200px;
width: calc(100% - 200px);
margin-left: 320px;
width: calc(100% - 320px);
height: 100%;
overflow-x: auto;
overflow-y: auto;
......
<template>
<div class="layout-data-page">
<div class="data-header">
<div class="select-item">
<div class="select-checked">
<a-checkbox :indeterminate="indeterminate" :checked="checkAll" @change="onCheckAllChange" /> <span>{{nowSelectKeys.length}}</span>
</div>
<div class="data-list-body">
<div class="select-content">
<ul class="data-list-content">
<li v-for="(item,index) in dataList" :key="item.key" @click="onChange(item,index)" class="data-list-content-item">
<input type="checkbox" class="list-checkbox-input" :checked="item.selected">
<span>
<span style="font-size:14px;">{{item.title}}<span style="margin-left:4px;font-style: italic;font-size: 12px;color: #8e99a5;">({{item.description}})</span></span>
<input type="checkbox" class="list-checkbox-input" :checked="item.selected" :disabled="item.disabled">
<span style="font-size:8pt;" :title="item.description" :class="{'font-red':item.disabled}">
<span>{{item.title}}<span style="font-style: italic;color: #8e99a5;" :class="{'font-red':item.disabled}">({{item.description}})</span></span>
</span>
</li>
</ul>
......@@ -48,20 +48,27 @@ export default {
this.initData()
},
methods: {
getStyle (value) {
return {
color: value ? 'red' : 'black'
};
},
onChange (e) {
e.selected = !e.selected
if (e.selected) {
this.selectKeys.push(e)
} else {
for (let j = 0; j < this.selectKeys.length; j++) {
if (e.key == this.selectKeys[j].key) {
this.selectKeys.splice(j, 1)
break
if (!e.disabled) {
e.selected = !e.selected
if (e.selected) {
this.selectKeys.push(e)
} else {
for (let j = 0; j < this.selectKeys.length; j++) {
if (e.key == this.selectKeys[j].key) {
this.selectKeys.splice(j, 1)
break
}
}
}
this.initData()
this.$emit("input", this.selectKeys)
}
this.initData()
this.$emit("input", this.selectKeys)
},
onCheckAllChange (e) {
if (e.target.checked) {
......@@ -113,13 +120,16 @@ export default {
}
</script>
<style scoped lang="less">
.layout-data-page {
.font-red {
color: red !important;
}
.select-item {
position: relative;
width: 100%;
height: 100%;
vertical-align: middle;
border-radius: 4px;
.data-header {
.select-checked {
width: 100%;
height: 40px;
padding: 8px 5px 9px;
......@@ -129,41 +139,45 @@ export default {
border-bottom: 1px solid #e8e8e8;
border-radius: 4px 4px 0 0;
}
.data-list-body {
.select-content {
width: 100%;
height: calc(100% - 40px);
overflow-x: hidden;
overflow-y: auto;
.data-list-content {
ul {
height: 100%;
margin: 0;
padding: 0;
overflow: auto;
list-style: none;
}
.data-list-content-item {
position: relative;
ul li {
height: 24px;
padding: 3px 2px 2px 5px;
padding: 0px 4px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
transition: all 0.3s;
overflow: hidden;
cursor: pointer;
.list-checkbox-input {
width: 16px;
height: 16px;
cursor: pointer;
}
}
.data-list-content-item:hover {
ul li:hover {
background-color: rgb(230 247 255);
}
.data-list-content-item > span {
position: absolute;
top: 0;
margin-left: 4px;
ul li > span {
padding-left: 4px;
cursor: pointer;
margin: 0;
vertical-align: middle;
}
ul li input {
display: inline-block;
vertical-align: middle;
}
.list-checkbox-input {
width: 14px;
height: 14px;
cursor: pointer;
}
}
}
......
......@@ -11,7 +11,7 @@
</a-tab-pane>
<a-tab-pane key="" :tab="'所有项目(' + panes.count5 + ')'">
</a-tab-pane>
</a-tabs>
</a-tabs>
<a-form layout="horizontal" :form="form" :model="searchForm">
<a-row :gutter="30">
<a-col :span="8">
......@@ -52,24 +52,23 @@
<a-col :span="30">
<a-form-item>
<a-button type="primary" @click="exportData">导出Excel</a-button>
<span :style="{ color: '#DC143C' }">
审核时间:{{ description }}</span>
</a-form-item>
<span :style="{ color: '#DC143C' }">
审核时间:{{ description }}</span>
</a-form-item>
</a-col>
</a-row>
</a-form>
<a-table :dataSource="tableData" :columns="columns" rowKey="id" :pagination="false" :loading="loading">
<template slot="auditResultName" slot-scope="record">
<span v-if="record">
<span v-if="record">
{{ record }}
</span>
</template>
</template>
<template slot="option" slot-scope="record">
<a-button type="link" size="small" @click="recordClick(record, 'view')">查看</a-button>
<a-button type="link" size="small" v-if="record.auditResult == 1 && isButten"
@click="recordClick(record, 'audit')">审核</a-button>
<a-button type="link" size="small" v-if="record.auditResult == 1 && isButten" @click="recordClick(record, 'audit')">审核</a-button>
</template>
</a-table>
</a-table>
<a-pagination v-if="pagination.total > 0" :total="pagination.total" show-size-changer show-quick-jumper v-model="pagination.pageIndex" :page-size="pagination.pageSize" :page-size-options="pagination.pageSizeOptions" @showSizeChange="showSizeChange" @change="change" :showTotal="() => `共 ${pagination.total} 条`" />
<a-modal v-model="visibleAudit" :title="'审核'" :width="'86%'" :dialog-style="{ top: '20px' }" :maskClosable="false" :footer="null" destroyOnClose>
<audit v-model="id" :objId="objectId" @closeWindow="closeAuditWindow"></audit>
......@@ -101,10 +100,10 @@ export default {
paraSelect,
Audit,
},
data() {
data () {
return {
// 选项卡
panes: { count1: 0, count2: 0, count3: 0, count4: 0, count5: 0 },
panes: { count1: 0, count2: 0, count3: 0, count4: 0, count5: 0 },
form: this.$form.createForm(this, { name: "advanced_search" }),
searchForm: {
auditType: 3,
......@@ -156,19 +155,19 @@ export default {
objectId: null,
};
},
created() {
created () {
this.getYear();
},
methods: {
search() {
search () {
this.pagination.pageIndex = 1;
this.getListByPage();
},
reset() {
reset () {
this.pagination.pageIndex = 1;
this.getListByPage();
},
getYear() {
getYear () {
let pars = { type: 3 };
this.$api.year
.getYearByTreeCode(pars)
......@@ -184,7 +183,7 @@ export default {
this.loading = false;
});
},
getListByPage() {
getListByPage () {
this.getCount();
this.loading = true;
let pars = isEmptyParams(this.searchForm);
......@@ -207,7 +206,7 @@ export default {
this.loading = false;
});
},
getCount() {
getCount () {
let pars = isEmptyParams({
auditType: 3,
reportYear: this.searchForm.reportYear,
......@@ -221,15 +220,15 @@ export default {
})
.catch(() => { });
},
submitForm() { },
change() {
submitForm () { },
change () {
this.getListByPage();
},
showSizeChange (current, pageSize) {
this.pagination.pageSize = pageSize
this.getListByPage()
},
closeAuditWindow(value) {
closeAuditWindow (value) {
if (value === "audit") {
this.getListByPage();
this.visibleAudit = false;
......@@ -237,7 +236,7 @@ export default {
this.visibleAudit = false;
} else this.visibleView = false;
},
recordClick(record, type) {
recordClick (record, type) {
if (type === "view") {
this.objectId = record.auditObjectId;
this.visibleView = true;
......@@ -247,11 +246,11 @@ export default {
this.visibleAudit = true;
}
},
callback(key) {
callback (key) {
this.searchForm.auditResult = key;
this.getListByPage();
},
exportData() {
exportData () {
this.$ToDoExcel(
`中期考核审核列表`,
tableColumnsName(this.columns),
......
......@@ -25,7 +25,6 @@
</a-form-item>
<a-form-item>
<para-select v-model="searchForm.knowledgeId" :typeId="56" :width="150" />
<!-- <para-multi-select v-model="searchForm.knowledgeId" @parentChange="parChange" :title="'学科'" :objType="'project'" :typeId="57" :width="150" /> -->
</a-form-item>
<a-form-item>
<a-button type="primary" icon="search" @click="projSearch">搜索</a-button>
......@@ -68,12 +67,6 @@
</a-table>
<a-pagination v-if="pagination.total > 0" :total="pagination.total" show-size-changer show-quick-jumper v-model="pagination.pageIndex" :page-size="pagination.pageSize" :page-size-options="pagination.pageSizeOptions" @showSizeChange="showSizeChange" @change="change" :showTotal="() => `共 ${pagination.total} 条`" />
<!-- <s-modal :title="projectGroupTitle" v-model="projDetailVisible" v-if="projDetailVisible" ref="childWindow" :loading="false">
<div slot="content">
<group-detail v-model="groupId" :btnAddVisiable="false" @close="closeProjDetail" />
</div>
</s-modal> -->
<a-modal v-model="groupEditVisible" title="项目组编辑" width="60%" :dialog-style="{ top: '15%' }" :maskClosable="false" destroyOnClose>
<template slot="footer">
<a-button type="primary" @click="() => this.$refs.childEdit.submit()">提交</a-button>
......@@ -188,7 +181,7 @@ export default {
})
},
getYear () {
this.$api.batch.getCurrentYearBatch({ type: 1, projType: getType(), timeType: 1 }).then(({ data = {} }) => {
this.$api.batch.getCurrentYearBatch({ type: 1, projType: getType(), timeType: 1 }).then(({ data = {} }) => {
if (data) {
this.reportYear = data.year
this.searchForm.groupYear = data.year
......@@ -514,7 +507,7 @@ export default {
margin: 14px 0px 0px 0px !important;
}
::v-deep .ant-drawer .ant-drawer-content-wrapper {
width: 480px !important;
width: 600px !important;
.ant-drawer-content .ant-drawer-wrapper-body {
.ant-drawer-header {
padding: 10px 10px !important;
......
......@@ -84,7 +84,7 @@
</a-col>
<a-col :span="2">
<div class="special-middle">
<div>{{ parseFloat(item.fundAmount).toFixed(2) }}</div>
<div>{{ parseFloat(item.fundAmount).toFixed(2) }}</div>
</div>
</a-col>
<a-col :span="2">
......
......@@ -335,8 +335,8 @@
<td colspan="2">${emp.unitName!}</td>
<td colspan="2">${emp.unitAddress!}</td>
<td colspan="2">${emp.organizationCode!}</td>
<td colspan="2">${emp.division!}</td>
<td>${unit.projectWork!}</td>
<td colspan="2">${emp.projectWork!}</td>
<td></td>
</tr>
</#list>
</table>
......@@ -345,12 +345,12 @@
<p>三、项目人员情况</p>
<table>
<tr>
<td rowspan="5">项目负责人</td>
<td rowspan="5" colspan="2">项目负责人</td>
<td colspan="3">姓名</td>
<td colspan="3">${appPersonName!}</td>
<td colspan="2">性别</td>
<td colspan="2">${sex!}</td>
<td colspan="3">出生日期</td>
<td colspan="2">出生日期</td>
<td colspan="2">${(birthday?string('yyyy年MM月'))!}</td>
</tr>
<tr>
......@@ -358,7 +358,7 @@
<td colspan="3">身份证</td>
<td colspan="2">证件号码</td>
<td colspan="2">${certId!}</td>
<td colspan="3">民族</td>
<td colspan="2">民族</td>
<td colspan="2">${nationName!}</td>
</tr>
<tr>
......@@ -366,7 +366,7 @@
<td colspan="3">${titleName!}</td>
<td colspan="2">从事专业</td>
<td colspan="2">${specName!}</td>
<td colspan="3">项目分工</td>
<td colspan="2">项目分工</td>
<td colspan="2">${projWork!}</td>
</tr>
<tr>
......@@ -374,7 +374,7 @@
<td colspan="3">${degreeName!}</td>
<td colspan="2">职务</td>
<td colspan="2">${dutyName!}</td>
<td colspan="3">传真</td>
<td colspan="2">传真</td>
<td colspan="2">${fax!}</td>
</tr>
<tr>
......@@ -382,7 +382,7 @@
<td colspan="3">${mobile!}</td>
<td colspan="2">联系电话</td>
<td colspan="2">${telephone!}</td>
<td colspan="3">电子邮箱</td>
<td colspan="2">电子邮箱</td>
<td colspan="2">${email!}</td>
</tr>
<tr>
......
......@@ -694,7 +694,7 @@
<a-col :span="4">
<div class="special-middle">
<div>
{{ value.memCount }}
{{ value.memCount }} I
</div>
</div>
</a-col>
......
......@@ -148,30 +148,23 @@ export default {
}
},
onExport () {
let headers = {
Authorization: 'Bearer ' + getToken()
}
axios({
url: "/v1/science-admin/com-project-task/export/" + this.value,
method: 'GET',
responseType: "blob",
headers: {
Authorization: 'Bearer ' + getToken(),
'Content-Type': 'application/pdf;charset=utf-8'
}
responseType: "arraybuffer", // 告诉axios返回的数据类型为Blob
headers: headers
}).then(response => {
console.log(response)
const blob = new Blob([response.data], { type: 'application/pdf' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
const filename = response.headers['content-disposition'] ? decodeURIComponent(response.headers['content-disposition'].split('filename=')[1]) : '项目报告.pdf';
link.setAttribute("download", filename);
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
}).catch(error => {
console.error('下载文件出错:', error);
this.$message.error('下载文件失败');
});
const url = window.URL.createObjectURL(new Blob([response.data]))
const link = document.createElement('a')
link.href = url
link.setAttribute("download", this.formData.projName + ".pdf");// 下载文件的名称
document.body.appendChild(link)
link.click()
this.loading = false
})
},
callback (key) {
var index = parseInt(key)
......
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