hejianhao
2025-04-11 19a39ee30d76420f2944b4860358b66712e4a199
超级管理员-工作交付评定
4个文件已修改
4个文件已添加
521 ■■■■■ 已修改文件
src/components/Table/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deliveryAssessment/clinicalTrial/components/detail.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deliveryAssessment/clinicalTrial/index.vue 127 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deliveryAssessment/restsTask/components/detail.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deliveryAssessment/restsTask/index.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deliveryAssessment/taskList/components/AssessmentDialog.vue 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/deliveryAssessment/taskList/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/index.vue
@@ -25,7 +25,7 @@
        },
        total: {
            type: Number,
            default: 20
            default: 0
        },
        queryForm: {
            type: Object,
src/router/index.js
@@ -223,7 +223,7 @@
                            keepAlive: true,
                        },
                        component: () => import("../views/dataManagement/sampleRecordList/changeRecord"),
                    },{
                    }, {
                        path: "submissionList",
                        meta: {
                            title: "送样单列表",
@@ -242,9 +242,9 @@
                        component: () => import("../views/dataManagement/sampleSubmissionList/submission"),
                    },
                ]
            },
        ],
    },
    {
@@ -334,6 +334,20 @@
                },
                component: () => import("../views/deliveryAssessment/taskList"),
            },
            {
                path: "restsTask",
                meta: {
                    title: "实验员其他任务",
                },
                component: () => import("../views/deliveryAssessment/restsTask"),
            },
            {
                path: "clinicalTrial",
                meta: {
                    title: "临床试验积分列表",
                },
                component: () => import("../views/deliveryAssessment/clinicalTrial"),
            },
        ]
    }
];
src/views/deliveryAssessment/clinicalTrial/components/detail.vue
New file
@@ -0,0 +1,115 @@
<template>
    <el-dialog :visible.sync="dialogVisible" title="新增临床试验" width="50%" @close="handleClose">
        <div class="content-box">
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>所属项目组</div>
            </div>
            <Table :data="criteriaList" :height="null">
                <el-table-column prop="name" label="项目组名称" />
                <el-table-column prop="name" label="项目负责人" />
                <el-table-column prop="name" label="项目组成员" />
                <el-table-column prop="name" label="创建时间" />
            </Table>
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>临床试验内容</div>
            </div>
            <el-input type="textarea" :rows="4" placeholder="请输入" v-model="form.textarea" />
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>临床试验时间</div>
            </div>
            <el-date-picker v-model="form.value1" type="datetime" placeholder="请选择" />
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>评定积分</div>
            </div>
            <el-input-number placeholder="请输入" v-model="form.score" :min="0" :max="form.fullScore" :precision="1"
                :step="1" />
        </div>
        <template #footer>
            <span class="dialog-footer select-member-footer">
                <el-button type="primary">确认</el-button>
            </span>
        </template>
    </el-dialog>
</template>
<script>
export default {
    name: 'Detail',
    props: {
        modelValue: {
            type: Boolean,
            default: false
        },
        reportData: {
            type: Object,
            default: () => { }
        }
    },
    data() {
        return {
            dialogVisible: false,
            form: {
                textarea: '',
                value1: '',
                score: null,
                fullScore: 3
            },
            rules: {
                reportName: [
                    { required: true, message: '请输入报告名称', trigger: 'blur' }
                ],
            },
            criteriaList: []
        }
    },
    watch: {
        modelValue: {
            handler(val) {
                this.dialogVisible = val;
            },
            immediate: true
        },
        reportData: {
            handler(val) {
                if (val) {
                    this.form = val || {};
                }
            },
            immediate: true
        }
    },
    methods: {
        handleClose() {
        },
    }
}
</script>
<style lang="less" scoped>
.header-title-left {
    display: flex;
    align-items: center;
    gap: 13px;
    margin: 10px 0;
    img {
        width: 12px;
        height: 19px;
    }
    div {
        flex-shrink: 0;
        font-weight: bold;
        font-size: 18px;
        color: #222222;
        line-height: 27px;
        font-family: 'Source Han Sans CN Bold Bold';
    }
}
</style>
src/views/deliveryAssessment/clinicalTrial/index.vue
New file
@@ -0,0 +1,127 @@
<template>
    <div class="list">
        <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @currentChange="handleCurrentChange"
            @sizeChange="handleSizeChange">
            <template #search>
                <el-form :model="form" label-width="140px" inline>
                    <el-form-item label="项目组名称:">
                        <el-input v-model="form.name" placeholder="请输入" />
                    </el-form-item>
                    <el-form-item label="任务内容:">
                        <el-input v-model="form.name" placeholder="请输入" />
                    </el-form-item>
                    <el-form-item class="search-btn-box">
                        <el-button>重置</el-button>
                        <el-button type="primary">查询</el-button>
                    </el-form-item>
                </el-form>
            </template>
            <template #setting>
                <el-button @click="assessmentVisible = true, currentReport = {}" class="el-icon-plus" type="primary">
                    新增临床试验</el-button>
            </template>
            <template #table>
                <el-table-column prop="name" label="所属项目组" />
                <el-table-column prop="age" label="临床试验内容" />
                <el-table-column prop="age" label="    临床试验时间" />
                <el-table-column prop="age" label="添加人" />
                <el-table-column prop="age" label="评定积分" />
                <el-table-column prop="age" label="累计分数" />
                <el-table-column prop="age" label="评定时间" />
                <el-table-column prop="age" label="操作">
                    <template #default="{ row }">
                        <el-button type="text">详情</el-button>
                    </template>
                </el-table-column>
            </template>
        </TableCustom>
        <Detail :modelValue="assessmentVisible" :reportData="currentReport" />
    </div>
</template>
<script>
import Detail from './components/detail.vue'
export default {
    name: 'ClinicalTrial',
    components: {
        Detail
    },
    data() {
        return {
            form: {
            },
            tableData: [],
            queryForm: {
                pageSize: 10,
                pageNum: 1
            },
            total: 0,
            assessmentVisible: false,
            currentReport: {}
        }
    },
    methods: {
        handleCurrentChange(page) {
            this.queryForm.pageNum = page
            this.getList()
        },
        handleSizeChange(size) {
            this.queryForm.pageSize = size
            this.getList()
        },
        getList() {
        },
        handleDetail(row) {
            // 处理详情
        },
        handleAssessment(row) {
            this.currentReport = row;
            this.assessmentVisible = true;
        },
    }
}
</script>
<style scoped lang="less">
.list {
    height: 100%;
}
.top-box-integral {
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 28px;
    &-card {
        flex: 1;
        background: #E8FAF6;
        box-shadow: 0px 10px 10px 0px rgba(0, 0, 0, 0.06);
        border-radius: 10px;
        padding: 21px 20px;
        &-title {
            font-family: 'SourceHanSansCN-Medium';
            font-size: 14px;
            color: rgba(0, 0, 0, 0.8);
        }
        &-num {
            font-family: 'SF Compact Display Black';
            text-align: center;
            font-weight: 900;
            font-size: 50px;
            color: #049C9A;
            line-height: 60px;
        }
    }
}
.tip-warring {
    margin-top: 20px;
    color: rgba(255, 73, 85, 1);
}
</style>
src/views/deliveryAssessment/restsTask/components/detail.vue
New file
@@ -0,0 +1,104 @@
<template>
    <el-dialog :visible.sync="dialogVisible" title="其他任务详情" width="70%" @close="handleClose">
        <div class="content-box">
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>所属项目组</div>
            </div>
            <Table :data="criteriaList" :height="null">
                <el-table-column prop="name" label="项目组名称" />
                <el-table-column prop="name" label="项目负责人" />
                <el-table-column prop="name" label="项目组成员" />
                <el-table-column prop="name" label="创建时间" />
            </Table>
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>任务内容</div>
            </div>
            <div>清理</div>
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>任务时间</div>
            </div>
            <div>2020-12-31 12:00:00</div>
            <div class="header-title-left">
                <img src="@/assets/public/headercard.png" />
                <div>评定积分</div>
            </div>
            <div>2</div>
        </div>
    </el-dialog>
</template>
<script>
export default {
    name: 'Detail',
    props: {
        modelValue: {
            type: Boolean,
            default: false
        },
        reportData: {
            type: Object,
            default: () => { }
        }
    },
    data() {
        return {
            dialogVisible: false,
            form: {},
            rules: {
                reportName: [
                    { required: true, message: '请输入报告名称', trigger: 'blur' }
                ],
            },
            criteriaList: []
        }
    },
    watch: {
        modelValue: {
            handler(val) {
                this.dialogVisible = val;
            },
            immediate: true
        },
        reportData: {
            handler(val) {
                if (val) {
                    this.form = val || {};
                }
            },
            immediate: true
        }
    },
    methods: {
        handleClose() {
        },
    }
}
</script>
<style lang="less" scoped>
.header-title-left {
    display: flex;
    align-items: center;
    gap: 13px;
    margin: 10px 0;
    img {
        width: 12px;
        height: 19px;
    }
    div {
        flex-shrink: 0;
        font-weight: bold;
        font-size: 18px;
        color: #222222;
        line-height: 27px;
        font-family: 'Source Han Sans CN Bold Bold';
    }
}
</style>
src/views/deliveryAssessment/restsTask/index.vue
New file
@@ -0,0 +1,123 @@
<template>
    <div class="list">
        <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @currentChange="handleCurrentChange"
            @sizeChange="handleSizeChange">
            <template #search>
                <el-form :model="form" label-width="140px" inline>
                    <el-form-item label="项目组名称:">
                        <el-input v-model="form.name" placeholder="请输入" />
                    </el-form-item>
                    <el-form-item label="任务内容:">
                        <el-input v-model="form.name" placeholder="请输入" />
                    </el-form-item>
                    <el-form-item class="search-btn-box">
                        <el-button>重置</el-button>
                        <el-button type="primary">查询</el-button>
                    </el-form-item>
                </el-form>
            </template>
            <template #table>
                <el-table-column prop="name" label="所属项目组" />
                <el-table-column prop="age" label="任务内容" />
                <el-table-column prop="age" label="任务时间" />
                <el-table-column prop="age" label="添加人" />
                <el-table-column prop="age" label="评定积分" />
                <el-table-column prop="age" label="累计分数" />
                <el-table-column prop="age" label="评定时间" />
                <el-table-column prop="age" label="操作">
                    <template #default="{ row }">
                        <el-button type="text">详情</el-button>
                    </template>
                </el-table-column>
            </template>
        </TableCustom>
        <Detail :modelValue="assessmentVisible" :reportData="currentReport" />
    </div>
</template>
<script>
import Detail from './components/detail.vue'
export default {
    name: ' RestsTask',
    components: {
        Detail
    },
    data() {
        return {
            form: {
            },
            tableData: [],
            queryForm: {
                pageSize: 10,
                pageNum: 1
            },
            total: 0,
            assessmentVisible: false,
            currentReport: {}
        }
    },
    methods: {
        handleCurrentChange(page) {
            this.queryForm.pageNum = page
            this.getList()
        },
        handleSizeChange(size) {
            this.queryForm.pageSize = size
            this.getList()
        },
        getList() {
        },
        handleDetail(row) {
            // 处理详情
        },
        handleAssessment(row) {
            this.currentReport = row;
            this.assessmentVisible = true;
        },
    }
}
</script>
<style scoped lang="less">
.list {
    height: 100%;
}
.top-box-integral {
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 28px;
    &-card {
        flex: 1;
        background: #E8FAF6;
        box-shadow: 0px 10px 10px 0px rgba(0, 0, 0, 0.06);
        border-radius: 10px;
        padding: 21px 20px;
        &-title {
            font-family: 'SourceHanSansCN-Medium';
            font-size: 14px;
            color: rgba(0, 0, 0, 0.8);
        }
        &-num {
            font-family: 'SF Compact Display Black';
            text-align: center;
            font-weight: 900;
            font-size: 50px;
            color: #049C9A;
            line-height: 60px;
        }
    }
}
.tip-warring {
    margin-top: 20px;
    color: rgba(255, 73, 85, 1);
}
</style>
src/views/deliveryAssessment/taskList/components/AssessmentDialog.vue
@@ -16,15 +16,15 @@
        </el-form>
        <div class="content-box">
            <el-row :gutter="16">
                <el-col :xs="24" :sm="24" :md="6" :lg="6" :xl="6">
                <el-col :xs="24" :sm="24" :md="4" :lg="4" :xl="4">
                    <div class="content-box-left">
                        <div class="content-box-left-th">设立课题规则</div>
                        <div class="content-box-left-body">
                        <div class="content-box-left-body" :style="{ height: `calc(${$baseTableHeight()}px - 40px)`}">
                            1、根据可研报告、产品构思设计的工艺研究路线,一条工艺路线设立一个课题。如果一个课题中有多个化合物需要开发研究,则每个化合物作为一个分题;分题归集到该课题中,最终形成课题报告。不同课题报告中的分题不能重复使用。
                            2、在可行研究阶段,工艺开发升级,重新规划工艺研究路线,则以新规划的工艺路线方案来设定课题</div>
                    </div>
                </el-col>
                <el-col style="margin-top: 5px;" :xs="24" :sm="24" :md="18" :lg="18" :xl="18">
                <el-col style="margin-top: 5px;" :xs="24" :sm="24" :md="19" :lg="19" :xl="19">
                    <Table :total="0" :data="criteriaList" show-summary :summary-method="getSummaries"
                        :span-method="arraySpanMethod">
                        <el-table-column type="index" label="序号" width="80" />
@@ -60,6 +60,10 @@
                </el-col>
            </el-row>
        </div>
        <div class="assessed">
            <div>评定时间:2025-2-20 11:08:00</div>
            <div>评定人:张三</div>
        </div>
        <template #footer>
            <span class="dialog-footer select-member-footer">
                <el-button type="primary" @click="handleSubmit">提交评定结果</el-button>
@@ -78,7 +82,7 @@
        },
        reportData: {
            type: Object,
            default: () => ({})
            default: () => { }
        }
    },
    data() {
@@ -225,10 +229,17 @@
        }
        &-body {
            flex: 1;
            padding: 0 10px;
            line-height: 23px;
        }
    }
}
.assessed {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 25px;
    margin-top: 20px;
}
</style>
src/views/deliveryAssessment/taskList/index.vue
@@ -75,7 +75,8 @@
            </template>
        </TableCustom>
        <AssessmentDialog :modelValue="assessmentVisible" :reportData="currentReport" @submit="handleAssessmentSubmit" />
        <AssessmentDialog :modelValue="assessmentVisible" :reportData="currentReport"
            @submit="handleAssessmentSubmit" />
    </div>
</template>
@@ -83,7 +84,7 @@
import AssessmentDialog from './components/AssessmentDialog.vue'
export default {
    name: 'ProjectList',
    name: 'TaskList',
    components: {
        AssessmentDialog
    },
@@ -97,8 +98,8 @@
                pageNum: 1
            },
            total: 0,
            assessmentVisible: true,
            currentReport: null
            assessmentVisible: false,
            currentReport: {}
        }
    },
    methods: {