feat:修改评估任务及项目任务

This commit is contained in:
lixg
2023-02-24 11:31:27 +08:00
parent 8c1bcea020
commit 25bc245dd8
2 changed files with 146 additions and 132 deletions

View File

@@ -3,20 +3,20 @@
<slot></slot> <slot></slot>
</div> </div>
<a-drawer <a-drawer
:visible="visible" :visible="visible"
class="drawerStyle addonlineDrawer" class="drawerStyle addonlineDrawer"
width="1000" width="1000"
title="添加在线" title="添加在线"
placement="right" placement="right"
> >
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
<div v-if="taskIndex>=0" class="headerTitle">编辑项目</div> <div v-if="taskIndex >= 0" class="headerTitle">编辑项目</div>
<div v-else class="headerTitle">添加项目</div> <div v-else class="headerTitle">添加项目</div>
<img <img
style="width: 29px; height: 29px; cursor: pointer" style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png" src="../../assets/images/basicinfo/close.png"
@click="closeDrawer" @click="closeDrawer"
/> />
</div> </div>
<div class="contentMain"> <div class="contentMain">
@@ -26,10 +26,10 @@
<div class="ipt_name"></div> <div class="ipt_name"></div>
<div class="fi_input"> <div class="fi_input">
<a-input <a-input
v-model:value="params.name" v-model:value="params.name"
style="width: 210px; height: 40px; border-radius: 8px" style="width: 210px; height: 40px; border-radius: 8px"
placeholder="请输入项目名称" placeholder="请输入项目名称"
maxlength="20" maxlength="20"
/> />
</div> </div>
</div> </div>
@@ -37,10 +37,10 @@
<div class="ipt_name"></div> <div class="ipt_name"></div>
<div class="fi_input"> <div class="fi_input">
<a-input <a-input
v-model:value="params.manager" v-model:value="params.manager"
style="width: 210px; height: 40px; border-radius: 8px" style="width: 210px; height: 40px; border-radius: 8px"
placeholder="请输入项目经理" placeholder="请输入项目经理"
maxlength="20" maxlength="20"
/> />
</div> </div>
</div> </div>
@@ -48,10 +48,10 @@
<div class="ipt_name"></div> <div class="ipt_name"></div>
<div class="fi_input"> <div class="fi_input">
<a-input <a-input
v-model:value="params.createName" v-model:value="params.createName"
style="width: 210px; height: 40px; border-radius: 8px" style="width: 210px; height: 40px; border-radius: 8px"
placeholder="请输入创建人" placeholder="请输入创建人"
maxlength="20" maxlength="20"
/> />
</div> </div>
</div> </div>
@@ -65,21 +65,23 @@
<div class="search"></div> <div class="search"></div>
<div class="btnText">重置</div> <div class="btnText">重置</div>
</div> </div>
<div class="btn btn2" @click="reset">
<div class="search"></div>
<div class="btnText">刷新</div>
</div>
</div> </div>
</div> </div>
<div class="main_item" style="margin-top: 16px;margin-bottom: 32px;"> <div class="main_item" style="margin-top: 16px; margin-bottom: 32px">
<button class="xkbtn" @click="goProjectmanage"> <button class="xkbtn" @click="goProjectmanage">新建项目</button>
新建项目
</button>
</div> </div>
<div class="main_notice" v-if="edit" style="display:none;"> <div class="main_notice" v-if="edit" style="display: none">
<div class="mntc_left"> <div class="mntc_left">
<div class="notice_icon"></div> <div class="notice_icon"></div>
<div v-if="selectedRows.length == 0"> <div v-if="selectedRows.length == 0">
<span class="title" <span class="title"
>已选择 >已选择
<span class="data" style="color: #4ea6ff">{{ 0 }}</span> <span class="data" style="color: #4ea6ff">{{ 0 }}</span>
</span </span
> >
@@ -87,41 +89,41 @@
<div v-else> <div v-else>
<div> <div>
<span class="title" <span class="title"
>已选择 >已选择
<span class="data" style="color: #4ea6ff">{{ <span class="data" style="color: #4ea6ff">{{
selectedRows.length selectedRows.length
}}</span> }}</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
> >
<span class="title" <span class="title"
>名称 >名称
<span <span
class="data" class="data"
style="color: #4ea6ff; margin-right: 15px" style="color: #4ea6ff; margin-right: 15px"
>{{ selectedRows[0].name }}</span >{{ selectedRows[0].name }}</span
> >
</span> </span>
<span class="title" <span class="title"
>项目经理 >项目经理
<span <span
class="data" class="data"
style="color: #4ea6ff; margin-right: 15px" style="color: #4ea6ff; margin-right: 15px"
>{{ selectedRows[0].manager }}</span >{{ selectedRows[0].manager }}</span
> >
</span> </span>
<span class="title" <span class="title"
>创建人 >创建人
<span <span
class="data" class="data"
style="color: #4ea6ff; margin-right: 15px" style="color: #4ea6ff; margin-right: 15px"
>{{ selectedRows[0].creater }}</span >{{ selectedRows[0].creater }}</span
> >
</span> </span>
<span class="title" <span class="title"
>创建时间 >创建时间
<span class="data" style="color: #4ea6ff">{{ <span class="data" style="color: #4ea6ff">{{
selectedRows[0].time selectedRows[0].time
}}</span> }}</span>
</span> </span>
</div> </div>
</div> </div>
@@ -130,15 +132,17 @@
<div class="main_table"> <div class="main_table">
<div class="drawerbox"> <div class="drawerbox">
<a-table <a-table
:customRow="customRow" :customRow="customRow"
class="ant-table-striped" class="ant-table-striped"
:row-class-name="(_, index) => (index % 2 === 1 ? 'table-striped' : null)" :row-class-name="
row-key="id" (_, index) => (index % 2 === 1 ? 'table-striped' : null)
:columns="columns" "
:data-source="data" row-key="id"
:loading="loading" :columns="columns"
:pagination="pagination" :data-source="data"
:row-selection="rowSelection" :loading="loading"
:pagination="pagination"
:row-selection="rowSelection"
/> />
</div> </div>
</div> </div>
@@ -150,10 +154,10 @@
</div> </div>
<!-- 有重复添加的项目时的弹窗 --> <!-- 有重复添加的项目时的弹窗 -->
<a-modal <a-modal
v-model:visible="sameModal" v-model:visible="sameModal"
:footer="null" :footer="null"
wrapClassName="sameModal" wrapClassName="sameModal"
centered="true" centered="true"
> >
<div class="delete"> <div class="delete">
<div class="del_header"></div> <div class="del_header"></div>
@@ -180,19 +184,19 @@
</a-drawer> </a-drawer>
</template> </template>
<script setup> <script setup>
import {computed, defineEmits, defineProps, ref, watch} from "vue"; import { computed, defineEmits, defineProps, ref, watch } from "vue";
import {message} from "ant-design-vue"; import { message } from "ant-design-vue";
import {useRouter} from "vue-router"; // import { useRouter } from "vue-router";
import {useRowsPage} from "@/api/request"; import { useRowsPage } from "@/api/request";
import {PROJECT_AUDIT_PAGE} from "@/api/apis"; import { PROJECT_AUDIT_PAGE } from "@/api/apis";
const props = defineProps({ const props = defineProps({
type: Number, type: Number,
taskList: [] taskList: [],
}) });
const visible = ref(false) const visible = ref(false);
const sameModal = ref(false) const sameModal = ref(false);
const emit = defineEmits({}) const emit = defineEmits({});
const columns = ref([ const columns = ref([
{ {
@@ -223,38 +227,42 @@ const columns = ref([
width: "20%", width: "20%",
align: "center", align: "center",
}, },
]) ]);
const initParams = { const initParams = {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
orderAsc: true orderAsc: true,
} };
const params = ref(initParams) const params = ref(initParams);
const router = useRouter(); // const router = useRouter();
const rowSelectKeys = ref([]); const rowSelectKeys = ref([]);
const selectsData = ref([]); const selectsData = ref([]);
const taskIndex = ref(-1); const taskIndex = ref(-1);
const {data, loading, total, fetch} = useRowsPage(PROJECT_AUDIT_PAGE, params.value, { const { data, loading, total, fetch } = useRowsPage(
init: false, PROJECT_AUDIT_PAGE,
result: res => res.result.list, params.value,
totalPage: res => res.result.totalPages, {
total: res => res.result.count init: false,
}) result: (res) => res.result.list,
totalPage: (res) => res.result.totalPages,
total: (res) => res.result.count,
}
);
watch(taskIndex, () => { watch(taskIndex, () => {
// if (taskIndex.value >= 0) { // if (taskIndex.value >= 0) {
// rowSelectKeys.value = [props.taskList[taskIndex.value].courseId] // rowSelectKeys.value = [props.taskList[taskIndex.value].courseId]
// selectsData.value = data.value.find(t => t.id === props.taskList[taskIndex.value].courseId) || {} // selectsData.value = data.value.find(t => t.id === props.taskList[taskIndex.value].courseId) || {}
// } // }
}) });
const customRow = (record) => ({ const customRow = (record) => ({
onClick: () => { onClick: () => {
rowSelectKeys.value = [record.id] rowSelectKeys.value = [record.id];
selectsData.value = [record] selectsData.value = [record];
} },
}) });
const pagination = computed(() => ({ const pagination = computed(() => ({
total: total.value, total: total.value,
@@ -266,10 +274,10 @@ const pagination = computed(() => ({
const changePagination = (e) => { const changePagination = (e) => {
params.value.pageNo = e; params.value.pageNo = e;
fetch() fetch();
}; };
const rowSelection = computed(() => ({ const rowSelection = computed(() => ({
type: 'radio', type: "radio",
columnWidth: 20, columnWidth: 20,
selectedRowKeys: rowSelectKeys.value, selectedRowKeys: rowSelectKeys.value,
onChange: onSelectChange, onChange: onSelectChange,
@@ -282,70 +290,69 @@ function onSelectChange(e, l) {
} }
function search() { function search() {
params.value.pageNo = 1 params.value.pageNo = 1;
fetch() fetch();
} }
function reset() { function reset() {
rowSelectKeys.value = []; rowSelectKeys.value = [];
selectsData.value = []; selectsData.value = [];
params.value.pageNo = 1 params.value.pageNo = 1;
params.value.keyWord = '' params.value.keyWord = "";
params.value.createName = '' params.value.createName = "";
params.value.manager = '' params.value.manager = "";
params.value.name = '' params.value.name = "";
fetch() fetch();
} }
const closeDrawer = () => { const closeDrawer = () => {
visible.value = false visible.value = false;
taskIndex.value = -1 taskIndex.value = -1;
reset() reset();
}; };
function confirm() { function confirm() {
if (!selectsData.value.length || !rowSelectKeys.value.length) { if (!selectsData.value.length || !rowSelectKeys.value.length) {
message.warning("请选择项目"); message.warning("请选择项目");
return return;
} }
if (taskIndex.value === -1) { if (taskIndex.value === -1) {
const list = props.taskList const list = props.taskList;
list.push({ list.push({
name: selectsData.value[0].name, name: selectsData.value[0].name,
type: props.type, type: props.type,
courseId: selectsData.value[0].id, courseId: selectsData.value[0].id,
info: {...selectsData.value[0]} info: { ...selectsData.value[0] },
}) });
} else { } else {
const data = props.taskList[taskIndex.value] const data = props.taskList[taskIndex.value];
data.name = selectsData.value[0].name data.name = selectsData.value[0].name;
data.courseId = selectsData.value[0].id data.courseId = selectsData.value[0].id;
data.info = selectsData.value[0] data.info = selectsData.value[0];
} }
emit('update:taskList', [...props.taskList]) emit("update:taskList", [...props.taskList]);
closeDrawer() closeDrawer();
} }
const goProjectmanage = () => { const goProjectmanage = () => {
router.push({path: "/projectmanage"}); // router.push({path: "/projectmanage"});
} window.open(process.env.VUE_APP_BASE + "/projectmanage");
};
function closeSameModal() { function closeSameModal() {
sameModal.value = false sameModal.value = false;
} }
function sureSameModal() { function sureSameModal() {}
}
function openDrawer(i, row) { function openDrawer(i, row) {
row && (rowSelectKeys.value = [row.courseId]); row && (rowSelectKeys.value = [row.courseId]);
row && (selectsData.value = [{name: row.name, id: row.courseId}]); row && (selectsData.value = [{ name: row.name, id: row.courseId }]);
(i >= 0) && (taskIndex.value = i) i >= 0 && (taskIndex.value = i);
visible.value = true visible.value = true;
} }
defineExpose({openDrawer}) defineExpose({ openDrawer });
</script> </script>
<style lang="scss"> <style lang="scss">
.ant-table-striped :deep(.table-striped) td { .ant-table-striped :deep(.table-striped) td {
@@ -383,8 +390,8 @@ defineExpose({openDrawer})
width: calc(100%); width: calc(100%);
height: 68px; height: 68px;
background: linear-gradient( background: linear-gradient(
rgba(78, 166, 255, 0.2) 0%, rgba(78, 166, 255, 0.2) 0%,
rgba(78, 166, 255, 0) 100% rgba(78, 166, 255, 0) 100%
); );
} }
@@ -626,8 +633,8 @@ defineExpose({openDrawer})
} }
.ant-table-tbody .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td { > td {
background: #f6f9fd; background: #f6f9fd;
} }
} }
@@ -680,8 +687,8 @@ defineExpose({openDrawer})
} }
.ant-table-tbody .ant-table-tbody
> tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected) > tr:hover:not(.ant-table-expanded-row):not(.ant-table-row-selected)
> td { > td {
background: #f6f9fd; background: #f6f9fd;
} }

View File

@@ -17,10 +17,16 @@
<div class="search"></div> <div class="search"></div>
<div class="btnText">重置</div> <div class="btnText">重置</div>
</div> </div>
<div class="btnsn" @click="reset">
<div class="search"></div>
<div class="btnText">刷新</div>
</div>
</div> </div>
<div class="main_item"> <div class="main_item">
<button class="xkbtn" style="margin:0" @click="goResearchmanage">新建评估</button> <button class="xkbtn" style="margin: 0" @click="goResearchmanage">
新建评估
</button>
</div> </div>
<div class="main_notice" style="display: none"> <div class="main_notice" style="display: none">
@@ -44,7 +50,7 @@
</template> </template>
<script setup> <script setup>
import { computed, defineEmits, defineProps, ref, watch } from "vue"; import { computed, defineEmits, defineProps, ref, watch } from "vue";
import { useRouter } from "vue-router"; // import { useRouter } from "vue-router";
import { useRowsPage } from "@/api/request"; import { useRowsPage } from "@/api/request";
import { ASSESSMENT_PAGE } from "@/api/apis"; import { ASSESSMENT_PAGE } from "@/api/apis";
@@ -105,7 +111,7 @@ const initParams = {
pageSize: 10, pageSize: 10,
releaseStatus: 2, releaseStatus: 2,
}; };
const router = useRouter(); // const router = useRouter();
const params = ref(initParams); const params = ref(initParams);
const rowSelectKeys = ref([]); const rowSelectKeys = ref([]);
@@ -147,7 +153,7 @@ const pagination = computed(() => ({
})); }));
const changePagination = (e) => { const changePagination = (e) => {
params.value.pageIndex = e; params.value.pageNo = e;
fetch(); fetch();
}; };
const rowSelection = computed(() => ({ const rowSelection = computed(() => ({
@@ -156,12 +162,12 @@ const rowSelection = computed(() => ({
selectedRowKeys: rowSelectKeys.value, selectedRowKeys: rowSelectKeys.value,
onChange: onSelectChange, onChange: onSelectChange,
preserveSelectedRowKeys: true, preserveSelectedRowKeys: true,
getCheckboxProps: getCheckboxProps getCheckboxProps: getCheckboxProps,
})); }));
const getCheckboxProps = () => ({ const getCheckboxProps = () => ({
// 某几项默认禁止选中(R: 当state等于1时) // 某几项默认禁止选中(R: 当state等于1时)
disabled: false disabled: false,
}) });
function onSelectChange(e, l) { function onSelectChange(e, l) {
rowSelectKeys.value = e; rowSelectKeys.value = e;
@@ -180,12 +186,13 @@ function reset() {
selectsData.value = []; selectsData.value = [];
params.value.pageIndex = 1; params.value.pageIndex = 1;
params.value.keyWord = ""; params.value.keyWord = "";
params.value.assessmentName =""; params.value.assessmentName = "";
fetch(); fetch();
} }
const goResearchmanage = () => { const goResearchmanage = () => {
router.push({ path: "/researchmanage" }); // router.push({ path: "/researchmanage" });
window.open(process.env.VUE_APP_BASE + "/researchmanage");
}; };
</script> </script>
<style lang="scss"> <style lang="scss">