From 8e5874a30ae9b194968393b2399bbba193eaa313 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: Wed, 20 Nov 2024 17:14:00 +0800
Subject: [PATCH] 项目管理
---
src/views/safetyReview/projectManage/components/basicInfo.vue | 113 +++++-
src/views/safetyReview/projectManage/components/chooseExpert.vue | 185 ++++++++++-
src/store/modules/user.js | 1
src/api/projectManage.js | 71 ++++
src/views/safetyReview/projectManage/components/exportWord.js | 55 +++
src/views/safetyReview/projectManage/components/projectArchive.vue | 23 +
src/views/safetyReview/projectManage/process.vue | 107 ++++--
src/views/safetyReview/projectManage/components/expertsList.vue | 56 ++-
src/views/safetyReview/projectManage/index.vue | 135 +++-----
src/views/safetyReview/projectManage/components/projectApproval.vue | 175 +++++-----
10 files changed, 638 insertions(+), 283 deletions(-)
diff --git a/src/api/projectManage.js b/src/api/projectManage.js
new file mode 100644
index 0000000..8162ce8
--- /dev/null
+++ b/src/api/projectManage.js
@@ -0,0 +1,71 @@
+import request from "@/utils/request";
+
+// 项目管理列表(分页)
+export function getProjectList(params) {
+ return request({
+ url: '/system/management/list',
+ method: 'get',
+ params: params
+ })
+}
+
+// 新增
+export function addProject(data) {
+ return request({
+ url: '/system/management/saveProject',
+ method: 'post',
+ data: data
+ })
+}
+
+// 项目详细信息
+export function getProjectInfo(id) {
+ return request({
+ url: '/system/management/' + id,
+ method: 'get',
+ })
+}
+
+//数量
+export function getProjectNum() {
+ return request({
+ url: '/system/management/getProjectNum',
+ method: 'get',
+ })
+}
+
+// 删除项目
+export function delProject(id) {
+ return request({
+ url: '/system/management/'+id,
+ method: 'delete'
+ })
+}
+
+// 专家选用
+export function choose(data) {
+ return request({
+ url: '/system/management/projectExpert',
+ method: 'post',
+ data: data
+ })
+}
+
+
+// 随机获取专家
+export function expertRound(data) {
+ return request({
+ url: '/system/expert_info/getExpertRound',
+ method: 'post',
+ data: data
+ })
+}
+
+
+export function getCheckInfo(params) {
+ return request({
+ url: '/system/management/projectExpertCheckInfo',
+ method: 'get',
+ params: params
+ })
+}
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index 065f3a6..9900234 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -47,6 +47,7 @@
this.id = user.userId
this.name = user.userName
this.avatar = avatar
+ Cookies.set('userInfo',JSON.stringify(user))
resolve(res)
}).catch(error => {
reject(error)
diff --git a/src/views/safetyReview/projectManage/components/basicInfo.vue b/src/views/safetyReview/projectManage/components/basicInfo.vue
index 5f36145..03649ea 100644
--- a/src/views/safetyReview/projectManage/components/basicInfo.vue
+++ b/src/views/safetyReview/projectManage/components/basicInfo.vue
@@ -22,7 +22,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item prop="projectName" label="项目预计时间区间">
+ <el-form-item prop="projectDateStart" label="项目预计时间区间">
<el-date-picker
v-model="searchTime"
type="daterange"
@@ -36,9 +36,9 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item prop="unit" label="被检查/对接单位">
+ <el-form-item prop="companyName" label="被检查/对接单位">
<el-input
- v-model.trim="state.formData.unit"
+ v-model.trim="state.formData.companyName"
size="large"
placeholder="请输入被检查/对接单位"
>
@@ -46,9 +46,9 @@
</el-form-item>
</el-col>
<el-col :span="6">
- <el-form-item prop="place" label="项目地点">
+ <el-form-item prop="projectAddress" label="项目地点">
<el-input
- v-model.trim="state.formData.place"
+ v-model.trim="state.formData.projectAddress"
size="large"
placeholder="请输入项目地点"
>
@@ -58,9 +58,9 @@
</el-row>
<el-row :gutter="24">
<el-col :span="6">
- <el-form-item prop="people" label="处室带队人员">
+ <el-form-item prop="deptUserName" label="处室带队人员">
<el-input
- v-model.trim="state.formData.projectName"
+ v-model.trim="state.formData.deptUserName"
size="large"
placeholder="请输入处室带队人员"
>
@@ -70,11 +70,11 @@
</el-row>
<el-row :gutter="24">
<el-col :span="24">
- <el-form-item prop="description" label="概况描述">
+ <el-form-item prop="remark" label="概况描述">
<el-input
type="textarea"
:rows="6"
- v-model.trim="state.formData.description"
+ v-model.trim="state.formData.remark"
size="large"
placeholder="请输入概况描述"
>
@@ -87,49 +87,108 @@
</template>
<script setup>
-import {reactive, ref} from "vue";
+import {onMounted, reactive, ref} from "vue";
+import Cookies from "js-cookie";
+import {addProject, getProjectInfo, getProjectList} from "@/api/projectManage";
+import {ElMessage} from "element-plus";
+const searchTime = ref([]);
const emit = defineEmits(["getNextStatus"]);
const state = reactive({
formData: {
+ id:null,
+ deptId: null,
deptName:'危险化学品监督管理处',
projectName: '',
- startTime: '',
- endTime: '',
- unit: '',
- place: '',
- people: '',
- description: ''
+ projectDateStart: '',
+ projectDateEnd: '',
+ companyName: '',
+ projectAddress: '',
+ deptUserName: '',
+ remark: ''
},
rules: {
-
+ projectName: [{ required: true, message: "项目名称不能为空", trigger: "blur" }],
+ projectDateStart: [{ required: true, message: "项目预计时间不能为空", trigger: "change" }],
+ projectAddress: [{ required: true, message: "项目地点不能为空", trigger: "blur" }],
+ deptUserName: [{ required: true, message: "处室带队人员不能为空", trigger: "blur" }],
+ remark: [{ required: true, message: "概况描述不能为空", trigger: "blur" }],
}
})
-const searchTime = ref([]);
+
+const userInfo = ref()
+onMounted(() => {
+ userInfo.value = JSON.parse(Cookies.get('userInfo'))
+ state.formData.deptName = userInfo.value.dept.deptName
+ state.formData.deptId = userInfo.value.deptId
+})
+
+
const riskOpen = async (type,val) => {
console.log("type",type,val)
if(type === 'add'){
- state.formData.startTime = searchTime.value[0]
- state.formData.endTime = searchTime.value[1]
//保存按钮
- //成功后自动到下一步 项目id
- emit('getNextStatus', 1);
- reset()
-
+ const {id,...data} = state.formData
+ const res = await addProject(data);
+ if(res.code == 200){
+ ElMessage.success('新增成功')
+ emit('getNextStatus', res.data);
+ reset()
+ }else{
+ ElMessage.warning(res.message)
+ }
}else if(type === 'clickEdit'){
//变更按钮
+ const {...data} = state.formData
+ const res = await addProject(data);
+ if(res.code == 200){
+ ElMessage.success('修改成功')
+ }else{
+ ElMessage.warning(res.message)
+ }
}else if(type === 'detail'){
- console.log("view111111111111111",type,val)
+ const res = await getProjectInfo(val)
+ if(res.code == 200){
+ if(res.data) {
+ const val = res.data
+ for(let i in state.formData) {
+ if (validKey(i, val)) {
+ state.formData[i] = val[i]
+ }
+ }
+ searchTime.value = [res.data.projectDateStart,res.data.projectDateEnd]
+ }
+
+ }else{
+ ElMessage.warning(res.message)
+ }
}
}
+const validKey=(key,obj)=>{
+ return key in obj
+}
const reset = () => {
+ state.formData = {
+ deptId: null,
+ deptName:'危险化学品监督管理处',
+ projectName: '',
+ projectDateStart: '',
+ projectDateEnd: '',
+ companyName: '',
+ projectAddress: '',
+ deptUserName: '',
+ remark: ''
+ }
searchTime.value = [];
}
const changeTime=(value)=>{
if(!value){
- state.formData.startTime = ""
- state.formData.endTime = ""
+ state.formData.projectDateStart = ""
+ state.formData.projectDateEnd = ""
+ }else {
+ state.formData.projectDateStart = searchTime.value[0]
+ state.formData.projectDateEnd = searchTime.value[1]
}
}
defineExpose({
diff --git a/src/views/safetyReview/projectManage/components/chooseExpert.vue b/src/views/safetyReview/projectManage/components/chooseExpert.vue
index 59ffcd2..579d5c1 100644
--- a/src/views/safetyReview/projectManage/components/chooseExpert.vue
+++ b/src/views/safetyReview/projectManage/components/chooseExpert.vue
@@ -13,7 +13,11 @@
</template>
</el-table-column>
<el-table-column label="身份证号" prop="idCard" align="center" />
- <el-table-column label="等级" prop="level" align="center" />
+ <el-table-column label="等级" prop="ratingLevel" align="center" >
+ <template #default="scope">
+ <span>{{scope.row.ratingLevel == 1 ?'一级':scope.row.ratingLevel == 1?'二级':'三级'}}</span>
+ </template>
+ </el-table-column>
<el-table-column label="专业领域" prop="domain" align="center" />
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="180">
<template #default="scope">
@@ -43,10 +47,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="允许级别:">
- <el-checkbox-group v-model="checkList">
- <el-checkbox label="一级" value="一级" />
- <el-checkbox label="二级" value="二级" />
- <el-checkbox label="三级" value="三级" />
+ <el-checkbox-group v-model="queryParams.ratingLevel">
+ <el-checkbox v-for="item in state.levelList" :label="item.id" :key="item.id">{{ item.name }}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
@@ -60,6 +62,7 @@
<el-col :span="24">
<el-form-item label="拟选用人数:">
<el-input
+ clearable
v-model.trim="queryParams.num"
placeholder="请输入拟选用人数"
@input="queryParams.num = queryParams.num.replace(/[^0-9]/g,' ')"
@@ -77,11 +80,15 @@
</template>
</el-table-column>
<el-table-column label="身份证号" prop="idCard" align="center" />
- <el-table-column label="等级" prop="level" align="center" />
+ <el-table-column label="等级" prop="ratingLevel" align="center" >
+ <template #default="scope">
+ <span>{{scope.row.ratingLevel == 1 ?'一级':scope.row.ratingLevel == 1?'二级':'三级'}}</span>
+ </template>
+ </el-table-column>
<el-table-column label="专业领域" prop="domain" align="center" />
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="180">
<template #default="scope">
- <el-button link type="primary" @click="delF(scope.row)" >删除</el-button>
+ <el-button link type="primary" @click="delR(scope.row)" >删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -91,10 +98,11 @@
</template>
<script setup>
-import {onMounted, ref} from "vue";
+import {onMounted, reactive, ref} from "vue";
import expertsList from './expertsList.vue'
import {getExpertTypes} from "@/api/form";
import {ElMessage} from "element-plus";
+import {addProject, choose, expertRound, getCheckInfo} from "@/api/projectManage";
const emit = defineEmits(["getNextStatus"]);
const fTableRef = ref(null);
@@ -110,6 +118,29 @@
const expertType = ref([])
const checkList = ref([])
const domainList = ref([])
+const state = reactive({
+ formData: {
+ id:null,
+ saveData: [],
+ delData: []
+ },
+ levelList: [
+ {
+ id: 1,
+ name: '一级'
+ },
+ {
+ id: 2,
+ name: '二级'
+ },
+ {
+ id: 3,
+ name: '三级'
+ },
+ ]
+})
+
+
onMounted(() =>{
getDomain()
@@ -122,44 +153,154 @@
return;
}
}
-
//保存按钮
if(type === 'add'){
+ let fData = []
+ let rData = []
//成功后自动到下一步 项目id
- emit('getNextStatus', 2);
+ const {...data} = state.formData
+ data.id = val
+ if(fixedDataList.value && fixedDataList.value.length > 0){
+ fData = fixedDataList.value.map(item => {
+ return {
+ expertId: item.id,
+ expertName:item.name,
+ selectionMode: 1,
+ teamLeader: null
+ }
+ })
+ }
+ if(randomDataList.value && randomDataList.value.length > 0){
+ rData = randomDataList.value.map(item => {
+ return {
+ expertId: item.id,
+ expertName:item.name,
+ selectionMode: 2,
+ teamLeader: null
+ }
+ })
+ }
+ data.saveData = fData.concat(rData)
+ const res = await choose(data);
+ if(res.code == 200){
+ ElMessage.success('新增成功')
+ emit('getNextStatus', val);
+ reset()
+ }else{
+ ElMessage.warning(res.message)
+ }
}else if(type === 'clickEdit'){
- //变更按钮
+ let fData = []
+ let rData = []
+ const {...data} = state.formData
+ data.id = val
+ if(fixedDataList.value && fixedDataList.value.length > 0){
+ fData = fixedDataList.value.map(item => {
+ return {
+ id: item.expertId ? item.id : '',
+ expertId: item.expertId ? item.expertId : item.id,
+ expertName:item.name,
+ selectionMode: 1,
+ teamLeader: null
+ }
+ })
+ }
+ if(randomDataList.value && randomDataList.value.length > 0){
+ rData = randomDataList.value.map(item => {
+ return {
+ id: item.expertId ? item.id : '',
+ expertId: item.expertId ? item.expertId : item.id,
+ expertName:item.name,
+ selectionMode: 2,
+ teamLeader: null
+ }
+ })
+ }
+ data.saveData = fData.concat(rData)
+ const res = await choose(data);
+ if(res.code == 200){
+ ElMessage.success('修改成功')
+ }else{
+ ElMessage.warning(res.message)
+ }
}else if(type === 'detail'){
- console.log("view222222",type,val)
+ const param = {
+ id: val
+ }
+ const res = await getCheckInfo(param);
+ if(res.code == 200){
+ fixedDataList.value = res.data.projectExpertCheckResp.filter(item => item.selectionMode === 1)
+ randomDataList.value = res.data.projectExpertCheckResp.filter(item => item.selectionMode === 2)
+ console.log('res',fixedDataList.value)
+ }else{
+ ElMessage.warning(res.message)
+ }
}
}
const chooseExpert = (type) => {
- expertsListRef.value.openDialog(type,fixedDataList.value)
+ expertsListRef.value.openDialog(type,fixedDataList.value,domainList.value)
}
const getSelected = (type,data)=>{
- fixedDataList.value = JSON.parse(JSON.stringify(data))
+ const selectData = JSON.parse(JSON.stringify(data))
+ if(fixedDataList.value && fixedDataList.value.length > 0){
+ fixedDataList.value.forEach(item => {
+ if(item.expertId){
+ selectData.forEach((i,index) => {
+ if(i.id == item.expertId){
+ selectData[index] = item
+ }
+ })
+ }
+ })
+ }
+ fixedDataList.value = selectData
}
const delF = (val) => {
+ if(val.expertId){
+ state.formData.delData.push(val.id)
+ }
fixedDataList.value = fixedDataList.value.filter(item => item.id != val.id)
}
+const delR = (val) => {
+ if(val.expertId){
+ state.formData.delData.push(val.id)
+ }
+ randomDataList.value = randomDataList.value.filter(item => item.id != val.id)
+}
const professionChange=(value)=> {
- console.log(value,'val')
+ queryParams.value.domain = value.map(item => item[1])
}
const getDomain = async () => {
- // const res = await getExpertTypes()
- // if(res.code == 200){
- // domainList.value = res.data
- // }else{
- // ElMessage.warning(res.message)
- // }
+ const res = await getExpertTypes()
+ if(res.code == 200){
+ domainList.value = res.data
+ }else{
+ ElMessage.warning(res.message)
+ }
}
-const random = () => {
+const random = async () => {
+ console.log('11',randomDataList.value)
+ randomDataList.value.forEach(item => {
+ if(item.expertId){
+ state.formData.delData.push(item.id)
+ }
+ })
+ if(queryParams.value.num =='' || queryParams.value.num == undefined){
+ ElMessage.warning('拟选用人数不能为空')
+ return
+ }
rLoading.value = true
+ const res = await expertRound(queryParams.value)
+ if(res.code == 200){
+ randomDataList.value = res.data
+ }else{
+ ElMessage.warning(res.message)
+ }
rLoading.value = false
}
diff --git a/src/views/safetyReview/projectManage/components/expertsList.vue b/src/views/safetyReview/projectManage/components/expertsList.vue
index fedffc6..2595871 100644
--- a/src/views/safetyReview/projectManage/components/expertsList.vue
+++ b/src/views/safetyReview/projectManage/components/expertsList.vue
@@ -21,7 +21,7 @@
/>
</el-form-item>
<el-form-item label="等级">
- <el-select v-model="queryParams.level" style="width: 250px" placeholder="等级" >
+ <el-select v-model="queryParams.ratingLevel" style="width: 250px" placeholder="等级" >
<el-option
v-for="item in levelList"
:key="item.id"
@@ -104,9 +104,9 @@
pageSize: 10,
name: '',
phone: '',
- level: '',
- domain: null,
- post: ''
+ ratingLevel: '',
+ smallClassify: null,
+ bigClassify: null,
},
total: 0,
choosed: [],
@@ -134,16 +134,24 @@
const tableRef = ref()
const { queryParams, total, expertList, domainList, levelList , dialogVisible,title,selected, expertType } = toRefs(data);
-const openDialog = (type,choosedData) => {
- getDomain()
+const openDialog = (type,choosedData,domainList) => {
research()
- data.choosed = choosedData
- data.choosed.forEach(item => {
- tableRef.value.toggleRowSelection(item, true);
+ data.dialogVisible = true
+ data.choosed = choosedData.map(item => {
+ return{
+ ...item,
+ id: item.expertId ? item.expertId : item.id
+ }
})
+ nextTick(() => {
+ data.choosed.forEach(item => {
+ tableRef.value.toggleRowSelection(item, true);
+ })
+ })
+ data.domainList = domainList
data.selected = []
data.title = type
- data.dialogVisible = true
+
}
const onSubmit = async () => {
@@ -162,7 +170,7 @@
loading.value = true;
const res = await getExpertsList(data.queryParams)
if(res.code == 200){
- data.expertList = res.data.list.map(item => {
+ data.expertList = res.rows.map(item => {
return{
...item,
birthdayName: item.birthday ? item.birthday.slice(0,10) : '',
@@ -190,7 +198,7 @@
}
})
})
- data.total = res.data.total
+ data.total = res.total
}else{
ElMessage.warning(res.msg)
}
@@ -201,14 +209,14 @@
projectRef.value.openDialog(val);
}
-const getDomain = async () => {
- const res = await getExpertTypes()
- if(res.code == 200){
- data.domainList = res.data
- }else{
- ElMessage.warning(res.message)
- }
-}
+// const getDomain = async () => {
+// const res = await getExpertTypes()
+// if(res.code == 200){
+// data.domainList = res.data
+// }else{
+// ElMessage.warning(res.message)
+// }
+// }
const select = ((selection, row) => {
// data.expertList.forEach(item => {
@@ -241,15 +249,17 @@
pageSize: 10,
name: '',
phone: '',
- level: '',
- domain: null,
- post: ''
+ ratingLevel: '',
+ smallClassify: null,
+ bigClassify: null,
}
getList()
}
const professionChange=(value)=> {
console.log(value,'val')
+ data.queryParams.bigClassify = value[0]
+ data.queryParams.smallClassify = value[1]
}
defineExpose({
diff --git a/src/views/safetyReview/projectManage/components/exportWord.js b/src/views/safetyReview/projectManage/components/exportWord.js
new file mode 100644
index 0000000..32816b3
--- /dev/null
+++ b/src/views/safetyReview/projectManage/components/exportWord.js
@@ -0,0 +1,55 @@
+//引入工具
+import PizZip from 'pizzip';
+import Docxtemplater from 'docxtemplater';
+import JSZipUtils from 'jszip-utils';
+import { saveAs } from 'file-saver';
+
+// 加载 .docx 模板文件
+function loadFile(url, callback) {
+ JSZipUtils.getBinaryContent(url, callback);
+}
+
+// 下载生成的文档
+export function download(file, name) {
+
+}
+
+// 生成并下载 Word 文档(templatePath是word文档模版地址,data是对应的数据)
+export function generateWordDocument(templatePath, data) {
+ loadFile(templatePath, function (error, content) {
+ if (error) {
+ throw error
+ return;
+ }
+
+ try {
+ // 加载模板文件内容到 PizZip
+ const zip = new PizZip(content);
+ const doc = new Docxtemplater(zip, {
+ paragraphLoop: true,
+ linebreaks: true,
+ });
+
+ // 设置模板中的占位符数据
+ doc.setData(data);
+
+ // 渲染文档
+ doc.render();
+
+ // 生成最终的文档 Blob
+ const fileWord = doc.getZip().generate({
+ type: 'blob',
+ mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+ });
+
+ saveAs(fileWord, '专家选用审批单.docx');
+
+ // // 返回生成的文档 Blob
+ // resolve(fileWord);
+ } catch (error) {
+ console.error('Error rendering document:', error);
+ throw error
+ }
+ });
+
+}
diff --git a/src/views/safetyReview/projectManage/components/projectApproval.vue b/src/views/safetyReview/projectManage/components/projectApproval.vue
index 6296004..8a854d5 100644
--- a/src/views/safetyReview/projectManage/components/projectApproval.vue
+++ b/src/views/safetyReview/projectManage/components/projectApproval.vue
@@ -4,36 +4,36 @@
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="项目名称:">
- <span>{{state.dataForm.name}}</span>
+ <span>{{state.dataForm.projectName}}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="被检查/对接单位:">
- <span>{{state.dataForm.unit}}</span>
+ <span>{{state.dataForm.companyName ? state.dataForm.companyName: '--'}}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<el-form-item label="计划实行时间:">
- <span>{{state.dataForm.time}}</span>
+ <span>{{state.dataForm.projectDateStart}}—{{state.dataForm.projectDateEnd}}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目地点:">
- <span>{{state.dataForm.address}}</span>
+ <span>{{state.dataForm.projectAddress}}</span>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="24">
<el-form-item label="项目概况:">
- <span>{{state.dataForm.description}}</span>
+ <span>{{state.dataForm.remark}}</span>
</el-form-item>
</el-col>
</el-row>
</el-form>
- <el-table v-loading="state.loading" :data="state.dataList" :border="true" ref="tableRef" style="width: 100%;">
+ <el-table v-loading="state.loading" row-key="id" :data="state.dataList" :border="true" ref="tableRef" style="width: 100%;">
<el-table-column label="姓名" prop="name" align="center" />
<el-table-column label="性别" prop="sex" align="center" >
<template #default="scope">
@@ -41,37 +41,30 @@
</template>
</el-table-column>
<el-table-column label="身份证号" prop="idCard" align="center" />
- <el-table-column label="等级" prop="level" align="center" />
- <el-table-column label="专业领域" prop="domain" align="center" />
- <el-table-column label="选用方式" prop="type" align="center" >
+ <el-table-column label="等级" prop="ratingLevel" align="center" >
<template #default="scope">
- {{scope.row.type === 0 ? '固定' : '随机' }}
+ <span>{{scope.row.ratingLevel == 1 ?'一级':scope.row.ratingLevel == 1?'二级':'三级'}}</span>
</template>
</el-table-column>
- <el-table-column label="是否为组长" prop="isLeader" align="center" >
+ <el-table-column label="专业领域" prop="domain" align="center" />
+ <el-table-column label="选用方式" prop="selectionMode" align="center" >
<template #default="scope">
- <span v-if="scope.row.isLeader === 0" style="color: red">是</span>
+ {{scope.row.selectionMode === 1 ? '固定' : '随机' }}
+ </template>
+ </el-table-column>
+ <el-table-column label="是否为组长" prop="teamLeader" align="center" >
+ <template #default="scope">
+ <span v-if="scope.row.teamLeader === 1" style="color: red">是</span>
<span v-else>否</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="180">
<template #default="scope">
- <el-button link type="primary" v-if="scope.row.isLeader === 0" @click="handleLeader(scope.row)">取消组长</el-button>
- <el-button link type="primary" v-else @click="handleLeader(scope.row)">设为组长</el-button>
+ <el-button link type="primary" v-if="scope.row.teamLeader === 1" @click="scope.row.teamLeader = 0">取消组长</el-button>
+ <el-button link type="primary" v-else @click="scope.row.teamLeader = 1">设为组长</el-button>
</template>
</el-table-column>
</el-table>
-<!-- <div class="pag-container">-->
-<!-- <el-pagination-->
-<!-- v-model:current-page="state.queryParams.pageNum"-->
-<!-- v-model:page-size="state.queryParams.pageSize"-->
-<!-- :page-sizes="[10,15,20,25]"-->
-<!-- layout="total, sizes, prev, pager, next, jumper"-->
-<!-- :total="state.total"-->
-<!-- @size-change="handleSizeChange"-->
-<!-- @current-change="handleCurrentChange"-->
-<!-- />-->
-<!-- </div>-->
<el-dialog
v-model="dialogVisible"
width="600px"
@@ -81,14 +74,14 @@
<span style="font-size: 18px;font-weight: 600">审批填报:</span>
<div style="display: flex;align-items: flex-end;margin-top: 15px">
<img :src="wordSvg" style="width: 30px;height: 35px" />
- <el-button style="width: 110px;margin-left: 10px" type="primary" >下载审批单word</el-button>
+ <el-button style="width: 110px;margin-left: 10px" type="primary" @click="startGeneration">下载审批单word</el-button>
</div>
</div>
</div>
<div style="margin-top: 30px">
<div style="display: flex">
<span style="font-size: 18px;font-weight: 600">审批记录附件:</span>
- <el-upload :disabled="projectType==='view'" accept=".pdf" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,5)">
+ <el-upload :disabled="projectType==='view'" accept=".pdf" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)">
<el-button type="primary">上传附件PDF</el-button>
<template #tip>
<div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div>
@@ -112,17 +105,22 @@
import {ElMessage, ElMessageBox} from "element-plus";
import {getToken} from "@/utils/auth";
import axios from "axios";
-const emit = defineEmits(["getNextStatus"]);
+import {generateWordDocument} from "@/views/safetyReview/projectManage/components/exportWord";
+import {getCheckInfo, getProjectList} from "@/api/projectManage";
+const emit = defineEmits(["getNextStatus","backStatus"]);
+const prop = defineProps(['projectId'])
const tableRef = ref()
const dialogVisible = ref(false);
const state = reactive({
dataForm: {
- name: 'xxx',
- unit: 'xxx',
- time: '2024年11月1日-2024年11月25日',
- address: 'xxx',
- description: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
-
+ deptName: '',
+ projectName: '',
+ companyName: '',
+ projectDateStart: '',
+ projectDateEnd: '',
+ projectAddress: '',
+ remark: '',
+ projectCheckTime: ''
},
queryParams: {
pageNum: 1,
@@ -131,16 +129,20 @@
loading: false,
dataList: [],
total: 0,
- uploadUrl: import.meta.env.VITE_APP_BASE_API + '',
+ uploadUrl: import.meta.env.VITE_APP_BASE_API + '/common/upload',
header: {
Authorization: getToken()
},
- fileList: []
+ fileList: [],
+ projectId: null
});
const projectType = ref('')
-
onMounted(async () => {
- await getList()
+ if(prop.projectId){
+ state.projectId = prop.projectId
+ await getList()
+ }
+
})
const riskOpen = async (type,val) => {
@@ -164,62 +166,48 @@
}
const nextStatus = () =>{
+ if(state.fileList && state.fileList.length ===0){
+ state.fileList = []
+ ElMessage({
+ type: 'warning',
+ message: '请上传审批记录附件'
+ })
+ return;
+ }
dialogVisible.value = false
emit('getNextStatus', 3);
}
const back = () => {
+ // emit('backStatus', 1);//回到状态1
dialogVisible.value = false
}
const getList = async () => {
state.loading = true;
- state.dataList = [
- {
- id:1,
- name: 'xxx',
- idCard: 'xxx',
- isLeader: 0,
- level: '二级',
- domain: 'xxx',
- type: 0
- },
- {
- id:2,
- name: 'xxx',
- idCard: 'xxx',
- isLeader: 1,
- level: '二级',
- domain: 'xxx',
- type: 1
- }
- ]
- // state.total = 1
- state.loading = false;
-}
-
-// const handleSizeChange = (val) => {
-// state.queryParams.pageNum = 1;
-// state.queryParams.pageSize = val
-// getList()
-// }
-// const handleCurrentChange = (val) => {
-// state.queryParams.pageNum = val
-// getList()
-// }
-
-const handleLeader = (val) => {
- state.dataList.forEach(item => {
- if(val.id === item.id){
- if(val.isLeader === 0){
- item.isLeader = 1
- }else {
- item.isLeader = 0
+ const param = {
+ id:state.projectId
+ }
+ const res = await getCheckInfo(param);
+ if(res.code == 200){
+ state.dataList = res.data.projectExpertCheckResp
+ if(res.data) {
+ const val = res.data
+ for(let i in state.dataForm) {
+ if (validKey(i, val)) {
+ state.dataForm[i] = val[i]
+ }
}
+ state.dataForm.projectCheckTime = res.data.projectCheckTime ?res.data.projectCheckTime : ''
}
- })
-
+ console.log('11',state.dataForm)
+ state.loading = false;
+ }else{
+ ElMessage.warning(res.message)
+ }
}
-
+const validKey=(key,obj)=>{
+ return key in obj
+}
const handleAvatarSuccess = (res, uploadFile) => {
if(res.code == 200){
state.fileList = res.data.map(i=>{
@@ -303,6 +291,29 @@
}
}
+const templatePath = '/example.docx';
+const startGeneration = async () => {
+ const data = state.dataForm
+ data.companyName = data.companyName != '' ? data.companyName: '-'
+ data.projectCheckTime = data.projectCheckTime != '' ? data.projectCheckTime: '-'
+ data.tableData = state.dataList.map(item => {
+ return {
+ ...item,
+ ratingLevel: item.ratingLevel == 1 ? '一级' : item.ratingLevel == 2 ? '二级':item.ratingLevel == 3 ? '三级' : '',
+ sex: item.sex == 0 ? '男' : '女',
+ selectionMode: item.selectionMode == 1 ? '固定' : '随机',
+ teamLeader: item.teamLeader == 1 ? '是' : '否',
+ }
+ })
+ try {
+ generateWordDocument(templatePath, data);
+ } catch (error){
+ ElMessage({
+ type: 'warning',
+ message: '失败'
+ });
+ }
+};
defineExpose({
riskOpen
diff --git a/src/views/safetyReview/projectManage/components/projectArchive.vue b/src/views/safetyReview/projectManage/components/projectArchive.vue
index 04c1d1f..6e365ec 100644
--- a/src/views/safetyReview/projectManage/components/projectArchive.vue
+++ b/src/views/safetyReview/projectManage/components/projectArchive.vue
@@ -1,14 +1,14 @@
<template>
<div class="archive">
<el-form style="display: flex;flex-direction: column" :model="state.dataForm" ref="dataForm" :inline="true" :rules="state.rules" label-width="130px" >
- <el-form-item prop="deptName" label="结束日期:">
+ <el-form-item prop="endTime" label="结束日期:">
<el-date-picker
v-model="state.dataForm.endTime"
type="date"
placeholder="请选择结束日期"
/>
</el-form-item>
- <el-form-item prop="deptName" label="总结描述:">
+ <el-form-item prop="description" label="总结描述:">
<el-input
type="textarea"
:rows="8"
@@ -19,7 +19,19 @@
</el-input>
</el-form-item>
<el-form-item label="附件上传:">
- <el-upload :disabled="projectType==='view'" accept=".pdf" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,5)">
+ <el-upload
+ :disabled="projectType==='view'"
+ accept=".pdf"
+ :action="state.uploadUrl"
+ :headers="state.header"
+ method="post"
+ :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)"
+ :on-exceed="showTip"
+ :on-preview="handlePictureCardPreview"
+ :limit='1'
+ v-model:file-list="state.fileList"
+ :before-upload="picSize"
+ :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)">
<el-button type="primary">上传附件PDF</el-button>
<template #tip>
<div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div>
@@ -43,7 +55,10 @@
endTime: '',
summarize:''
},
- rules: {},
+ rules: {
+ description: [{ required: true, message: "总结描述不能为空", trigger: "blur" }],
+ endTime:[{ required: true, message: "结束日期不能为空", trigger: "blur" }]
+ },
uploadUrl: import.meta.env.VITE_APP_BASE_API + '',
header: {
Authorization: getToken()
diff --git a/src/views/safetyReview/projectManage/index.vue b/src/views/safetyReview/projectManage/index.vue
index e5e37f2..f77bed7 100644
--- a/src/views/safetyReview/projectManage/index.vue
+++ b/src/views/safetyReview/projectManage/index.vue
@@ -19,7 +19,7 @@
<div>项目</div>
<div>总数</div>
</div>
- <div class="font-right">{{search.num.projectTotal}}</div>
+ <div class="font-right">{{search.num.total}}</div>
</div>
<div class="box-right">
<div class="inbox" @click="choose(1)" style="box-shadow: rgba(132, 122, 253, 0.2) 0 3px 5px 0;" :class="{btn1: chooseType === 1}">
@@ -27,7 +27,7 @@
<span class="top-right-font">基本信息</span>
</div>
<div class="bottom">
- <span class="top-right-font-bottom">{{search.num.riskTotal}}</span>
+ <span class="top-right-font-bottom">{{search.num.staging}}</span>
</div>
</div>
<div class="inbox" @click="choose(2)" style="box-shadow: rgba(255, 142, 139, 0.15) 0 3px 5px 0;" :class="{btn2: chooseType === 2}">
@@ -35,7 +35,7 @@
<span class="top-right-font">专家选用</span>
</div>
<div class="bottom">
- <span class="top-right-font-bottom">{{search.num.investigationTotal}}</span>
+ <span class="top-right-font-bottom">{{search.num.expert}}</span>
</div>
</div>
<div class="inbox" @click="choose(3)" style="box-shadow: rgba(222, 106, 169, 0.15) 0 3px 5px 0;" :class="{btn3: chooseType === 3}">
@@ -43,7 +43,7 @@
<span class="top-right-font">项目审批</span>
</div>
<div class="bottom">
- <span class="top-right-font-bottom">{{search.num.reviewTotal}}</span>
+ <span class="top-right-font-bottom">{{search.num.approval}}</span>
</div>
</div>
<div class="inbox" @click="choose(4)" style="box-shadow: rgba(109, 177, 254, 0.2) 0 3px 5px 0;" :class="{btn4: chooseType === 4}">
@@ -51,7 +51,7 @@
<span class="top-right-font">项目归档</span>
</div>
<div class="bottom">
- <span class="top-right-font-bottom">{{search.num.reportTotal}}</span>
+ <span class="top-right-font-bottom">{{search.num.end}}</span>
</div>
</div>
</div>
@@ -61,11 +61,14 @@
<el-table v-loading="loading" :data="dataList" :border="true" ref="tableRef" :height="tableHeight" style="width: 100%;">
<el-table-column label="序号" width="80" align="center" type="index" ></el-table-column>
<el-table-column label="申请时间" prop="createTime" align="center" :show-overflow-tooltip="true" width="180" />
- <el-table-column label="项目名称" prop="name" align="center" :show-overflow-tooltip="true" width="180" />
- <el-table-column label="部门" prop="dept" align="center" />
- <el-table-column label="专家组组长" prop="leader" align="center" width="150"/>
- <el-table-column label="专家组人数" prop="num" align="center" width="150"/>
+ <el-table-column label="项目名称" prop="projectName" align="center" :show-overflow-tooltip="true" width="180" />
+ <el-table-column label="部门" prop="deptName" align="center" />
+ <el-table-column label="专家组组长" prop="deptUserName" align="center" width="150"/>
+ <el-table-column label="专家组人数" prop="expertNum" align="center" width="150"/>
<el-table-column label="当前状态" prop="state" align="center" width="200">
+ <template #default="scope">
+ <span>{{scope.row.state === 0 ? '暂存' : scope.row.state === 1 ? '生成审批单' : scope.row.state === 2 ? '审批通过' :scope.row.state === 3 ?'审批驳回' : '完结' }}</span>
+ </template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="180">
<template #default="scope">
@@ -103,17 +106,10 @@
/>
</el-form-item>
<el-form-item label="项目名称" >
- <el-input v-model.trim="search.queryParams.name" placeholder="请输入项目名称"></el-input>
+ <el-input v-model.trim="search.queryParams.projectName" placeholder="请输入项目名称"></el-input>
</el-form-item>
- <el-form-item label="当前状态" >
- <el-select v-model="search.queryParams.state" class="m-2" size="large" placeholder="请选择" style="width: 100%" >
- <el-option
- v-for="item in stateList"
- :key="item.id"
- :label="item.label"
- :value="item.id"
- />
- </el-select>
+ <el-form-item label="部门名称" >
+ <el-input v-model.trim="search.queryParams.deptName" placeholder="请输入部门名称"></el-input>
</el-form-item>
</el-form>
</div>
@@ -140,6 +136,7 @@
// import {getDict} from "@/api/login";
// import {getDictList} from "@/api/backManage/evaluate";
import Cookies from "js-cookie"
+import {delProject, getProjectList, getProjectNum} from "@/api/projectManage";
const router = useRouter();
const loading = ref(false);
@@ -155,20 +152,18 @@
queryParams: {
pageNum: 1,
pageSize: 20,
- name: '',
- phase: '',
- state: null,
- params:{
+ projectName: '',
+ projectDateStart: '',
+ projectDateEnd: '',
+ step: null
- }
},
num: {
- projectTotal: 0,
- riskTotal: 0,
- investigationTotal: 0,
- reviewTotal: 0,
- reportTotal: 0,
- archiveTotal: 0
+ approval: 0,
+ end: 0,
+ expert: 0,
+ staging: 0,
+ total: 0
}
});
const searchTime = ref([]);
@@ -217,55 +212,27 @@
const chooseType = ref('');
const choose = (val) => {
chooseType.value = val;
- search.queryParams.phase = val;
+ search.queryParams.step = val;
getList();
}
const getList = async () => {
loading.value = true;
- dataList.value = [
- {
- id:1,
- createTime: 'xxx',
- name: 'xxx',
- dept: 'xxx',
- leader: '张三',
- num: 10,
- state: 1,
- reportProgress: 1
-
- }
- ]
- // const res = await getProjectList(search.queryParams);
- // if(res.code == 200){
- // dataList.value = res.data.list.map(item => {
- // return {
- // ...item,
- // process: item.reportProgress <= 4 ? 1 : item.reportProgress > 4 && item.reportProgress <= 6 ? 2 : item.reportProgress > 6 && item.reportProgress <= 9 ? 3 : item.reportProgress > 9 && item.reportProgress <= 11 ? 4 : 5,
- // leaderName: item.leader ? item.leader.name : '',
- // area: item.district ? item.province + '/' + item.city + '/' + item.district : item.city != item.province ? item.province + '/' + item.city: item.province ,
- // filingDate: item.filingDate ? conversionDays(item.filingDate,item.createTime) : conversionDays('',item.createTime),
- // contractMoney: item.contract ? item.contract.contractMoney : '',
- // actualContractMoney: item.contract ? item.contract.actualContractMoney : '',
- // activeConfirm: item.personRecognition ? item.personRecognition.recognitionCnt + '/' + item.personRecognition.personCnt: '',
- // missingMaterialCnt: 3-item.materialCnt,
- // activeConfirmOut: item.personRecognition ? "\'" + item.personRecognition.recognitionCnt + '/' + item.personRecognition.personCnt: '',
- // }
- // })
- total.value = 1
- loading.value = false;
- // console.log('11',dataList.value)
- // }else{
- // ElMessage.warning(res.message)
- // }
+ const res = await getProjectList(search.queryParams);
+ if(res.code == 200){
+ dataList.value = res.rows
+ total.value = res.total
+ loading.value = false;
+ }else{
+ ElMessage.warning(res.message)
+ }
}
const getStatistics = async () => {
- // const {pageNum,pageSize, ...data} = JSON.parse(JSON.stringify(search.queryParams))
- // const res = await getProjectStatistics(data);
- // if(res.code == 200){
- // search.num = res.data
- // }else{
- // ElMessage.warning(res.message)
- // }
+ const res = await getProjectNum();
+ if(res.code == 200){
+ search.num = res.data
+ }else{
+ ElMessage.warning(res.message)
+ }
}
const handleSizeChange = (val) => {
search.queryParams.pageNum = 1;
@@ -278,7 +245,7 @@
}
const toProcess = (type,value,toPath) => {
value.type = type;
- router.push({ path: '/process', query: {id: value.id, type: type, toPath: toPath, process: value.reportProgress}});
+ router.push({ path: '/process', query: {id: value.id, type: type, toPath: toPath, process: value.step}});
}
const del = (val) => {
@@ -291,7 +258,7 @@
type: 'warning',
})
.then( async() => {
- const res = await delProject(val)
+ const res = await delProject(val.id)
if(res.code == 200){
ElMessage.success('数据删除成功')
await getList()
@@ -308,14 +275,14 @@
}
const changeTime=(value)=>{
if(!value){
- search.queryParams.params.endTime = ""
- search.queryParams.params.startTime = ""
+ search.queryParams.projectDateStart = ""
+ search.queryParams.projectDateEnd = ""
}
}
const searchClick = () => {
if(searchTime.value && searchTime.value.length>0){
- search.queryParams.params.startTime = searchTime.value[0]
- search.queryParams.params.endTime = searchTime.value[1]
+ search.queryParams.projectDateStart = searchTime.value[0]
+ search.queryParams.projectDateEnd = searchTime.value[1]
}
getList();
getStatistics();
@@ -326,12 +293,10 @@
search.queryParams = {
pageNum: 1,
pageSize: 20,
- name: '',
- phase: '',
- state: null,
- params:{
-
- }
+ projectName: '',
+ projectDateStart: '',
+ projectDateEnd: '',
+ step: null
}
chooseType.value = '';
getList();
diff --git a/src/views/safetyReview/projectManage/process.vue b/src/views/safetyReview/projectManage/process.vue
index cd85d77..c904f21 100644
--- a/src/views/safetyReview/projectManage/process.vue
+++ b/src/views/safetyReview/projectManage/process.vue
@@ -27,7 +27,7 @@
<div :style="'height:' + middleContentHeight + 'px'" style="overflow-y: scroll;">
<basic-info ref="basicRef" v-if="selectedObj.id === 1" :projectId="projectId" @getNextStatus="getNextStatus"></basic-info>
<expert ref="expertRef" v-if="selectedObj.id === 2" :projectId="projectId" @getNextStatus="getNextStatus"></expert>
- <approval ref="approvalRef" v-if="selectedObj.id === 3" :projectId="projectId" @getNextStatus="getNextStatus"></approval>
+ <approval ref="approvalRef" v-if="selectedObj.id === 3" :projectId="projectId" @getNextStatus="getNextStatus" @back-status="backStatus" ></approval>
<archive ref="archiveRef" v-if="selectedObj.id === 4" :projectId="projectId" @getNextStatus="getNextStatus"></archive>
</div>
@@ -58,6 +58,7 @@
import archive from './components/projectArchive.vue'
import {ElMessage} from "element-plus";
import {get} from "@vueuse/core";
+import {getProjectInfo} from "@/api/projectManage";
const selectedObj = ref({})
const nextObj = ref({})
@@ -172,66 +173,92 @@
}
}
-const getStatus = (id) => {
+const getStatus = async (id) => {
//projectId 项目id,根据id获取当前状态
projectId.value = Number(id)
- //调接口
- const res = projectId.value
- //当前项目状态,编辑、查看的时候定位到最新状态
- newProgress.value = res
- menuList.value.forEach(item => {
- if(projectStatus.value === 'edit'){
- if(item.id <= res){
- item.status = 2
+ const res = await getProjectInfo(projectId.value)
+ if(res.code === 200) {
+ //当前项目状态,编辑、查看的时候定位到最新状态
+ newProgress.value = res.data.step
+ menuList.value.forEach(item => {
+ if(projectStatus.value === 'edit'){
+ if(item.id <= newProgress.value){
+ item.status = 2
+ }
+ if(item.id == newProgress.value){
+ selectedObj.value =item
+ setTimeout(() => {
+ goRouter(selectedObj.value.id)
+ }, 10)
+ }
+ if(item.id == newProgress.value +1){
+ item.status = 1
+ }
+ }else if(projectStatus.value === 'view'){
+ if(item.id <= newProgress.value){
+ item.status = 2
+ }
+ if(item.id == newProgress.value){
+ selectedObj.value =item
+ setTimeout(() => {
+ goRouter(selectedObj.value.id)
+ }, 10)
+ }
}
- if(item.id == res){
+ if( newProgress.value == 4 && item.id == 4){
+ item.status = 2
selectedObj.value =item
setTimeout(() => {
goRouter(selectedObj.value.id)
}, 10)
}
- if(item.id == res +1){
- item.status = 1
- }
- }else if(projectStatus.value === 'view'){
- if(item.id <= res){
- item.status = 2
- }
- if(item.id == res){
- selectedObj.value =item
- setTimeout(() => {
- goRouter(selectedObj.value.id)
- }, 10)
- }
- }
- if(res == 4 && item.id == 4){
- item.status = 2
- selectedObj.value =item
- setTimeout(() => {
- goRouter(selectedObj.value.id)
- }, 10)
- }
- })
+ })
+ }
+ else {
+ ElMessage.warning(res.message)
+ }
console.log('menuList.value',menuList.value)
}
-const getNextStatus = (id) => {
+const getNextStatus = async (id) => {
+ projectId.value = Number(id)
+ //调接口
+ const res = await getProjectInfo(projectId.value)
+ if(res.code === 200) {
+ newProgress.value = res.data.step
+ //定位到下一步状态
+ menuList.value.forEach(item => {
+ if(item.id <= newProgress.value){
+ item.status = 2
+ }else if(item.id == newProgress.value + 1){
+ item.status = 1
+ selectedObj.value =item
+ }
+
+ if( newProgress.value == 4 && item.id == 4){
+ item.status = 2
+ selectedObj.value =item
+ }
+ })
+ }else {
+ ElMessage.warning(res.message)
+ }
+}
+
+const backStatus = (id) => {
//projectId 项目id,根据id获取当前状态
projectId.value = Number(id)
//调接口
const res = projectId.value
newProgress.value = res
- //定位到下一步状态
+ //审核不通过状态回到第二步
menuList.value.forEach(item => {
if(item.id <= res){
item.status = 2
}else if(item.id == res + 1){
item.status = 1
selectedObj.value =item
- }
-
- if(res == 4 && item.id == 4){
- item.status = 2
- selectedObj.value =item
+ }else if(item.id > res + 1){
+ item.status = 0
}
})
}
--
Gitblit v1.9.2