lcw
This commit is contained in:
@ -1,15 +1,12 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="转合成">
|
||||
</PageTitle>
|
||||
</div>
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
@ -125,7 +122,7 @@ const getList = () => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight -200
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
<template>
|
||||
<div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button :type="qh ? 'primary' : 'default'" @click="add(true)" size="small">文件中转</el-button>
|
||||
<el-button :type="qh ? 'default' : 'primary'" @click="add(false)" size="small">点对点</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<FileTransfer v-if="qh" />
|
||||
<FileOrientation v-else />
|
||||
</div>
|
||||
|
||||
</template>
|
||||
<script setup>
|
||||
import PageTitle from "@/components/aboutTable/PageTitle.vue";
|
||||
import FileTransfer from "@/views/backOfficeSystem/HumanIntelligence/fileTransfer/index.vue"
|
||||
import FileOrientation from "@/views/backOfficeSystem/HumanIntelligence/fileOrientation/index.vue"
|
||||
import { ref } from "vue";
|
||||
const qh = ref(true)
|
||||
const add = (flag) => {
|
||||
qh.value = flag
|
||||
}
|
||||
</script>
|
||||
@ -1,15 +1,11 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="转线索">
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData">
|
||||
@ -145,7 +141,7 @@ const getList = () => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 200;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="工作考核">
|
||||
<el-button type="primary" @click="addEdit('add', '')">
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button size="small" type="primary" @click="addEdit('add', '')">
|
||||
<el-icon style="vertical-align: middle"><CirclePlus /></el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
</template>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" />
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable
|
||||
|
||||
@ -152,9 +152,7 @@ watch(() => D_BZ_BQJB, val => {
|
||||
{ label: "情报类型", prop: 'qblx', placeholder: "请选择情报类型", showType: "select", options: D_GS_XS_LX },
|
||||
{ label: "情报来源", prop: 'cjLx', placeholder: "请选择情报来源", showType: "select", options: D_BZ_CJLX },
|
||||
{ label: "情报处置状态", prop: 'czzt', placeholder: "请选择处置状态", showType: "select", options: D_BZ_QBCZZT },
|
||||
{
|
||||
label: "标签级别", prop: 'qbjbList', placeholder: "请选择标签", showType: "select", options: list.value
|
||||
},
|
||||
{label: "标签级别", prop: 'qbjbList', placeholder: "请选择标签", showType: "select", options: list.value},
|
||||
{ label: "来源单位", prop: 'ssbmdm', placeholder: "请选择来源单位", showType: "department" },
|
||||
{ label: "关键字", prop: 'keyword', placeholder: "请输入关键字", showType: "input" },
|
||||
]
|
||||
|
||||
@ -0,0 +1,726 @@
|
||||
<template>
|
||||
<div class="dialog" v-if="dialogForm">
|
||||
<div class="head_box">
|
||||
<span class="title">{{ title }}</span>
|
||||
<div>
|
||||
<el-button @click="submitForm()" type="primary" v-if="!disabled">保存</el-button>
|
||||
<el-button @click="close">关闭</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-container">
|
||||
<div class="form-content" v-loading="loading">
|
||||
<!-- <div class="form_cnt"> -->
|
||||
<FormMessage :disabled="disabled" v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
<template #jbxx>
|
||||
<div>
|
||||
<h3 class="tags-title">报送情况</h3>
|
||||
<div style="display: flex;justify-content:space-between;width: 200%;">
|
||||
<div>录入人:{{ userName }}</div>
|
||||
<div>录入单位:{{ userInfo.deptName }}</div>
|
||||
<div>本年度报送信息量:{{ tjcll.cnl || 0 }}</div>
|
||||
<div>采纳量:{{ tjcll.sbsl || 0 }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #shzt>
|
||||
<div v-if="disabled">
|
||||
<h3 class="tags-title">审核状态</h3>
|
||||
<div style="display: flex;justify-content:space-between;width: 200%;">
|
||||
<div style="display: flex;">
|
||||
市审核状态:<DictTag v-model:value="listQuery.sldshzt" :options="dict.D_BZ_SSSHZT" :tag="false" />
|
||||
</div>
|
||||
<div style="display: flex;">
|
||||
县审核状态:<DictTag v-model:value="listQuery.xldshzt" :options="dict.D_BZ_SSSHZT" :tag="false" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
<!-- </div> -->
|
||||
<div class="tags-section" v-if="disabled">
|
||||
<h3 class="tags-title">关注部门</h3>
|
||||
<div class="tags-container">
|
||||
<div v-for="(tag, index) in listQuery.gzbmList" :key="tag.id || index" class="tag-item">
|
||||
<div class="tag-content">
|
||||
{{ tag.ssbm }}
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!listQuery.gzbmList || listQuery.gzbmList.length === 0" class="no-tags">
|
||||
暂无标签
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tags-section" v-if="disabled">
|
||||
<h3 class="tags-title">关联标签</h3>
|
||||
<div class="tags-container">
|
||||
<div v-for="(tag, index) in listQuery.glbqList" :key="tag.id || index" class="tag-item">
|
||||
<div class="tag-content">
|
||||
{{ tag.bqmc }}
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!listQuery.glbqList || listQuery.glbqList.length === 0" class="no-tags">
|
||||
暂无标签
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tags-section" v-if="disabled">
|
||||
<h3 class="tags-title">续报信息</h3>
|
||||
<div class="list-container">
|
||||
<div v-for="(item, index) in dataList.xb" :key="item.id || index" class="list-item">
|
||||
<div class="list-content">
|
||||
{{ item.bcnr }}
|
||||
</div>
|
||||
<div class="tag-actions">
|
||||
<el-icon class="action-icon edit-icon" :size="32" @click="openPursue('续报信息', item)">
|
||||
<EditPen />
|
||||
</el-icon>
|
||||
<el-icon class="action-icon delete-icon" :size="32" @click="handleDeleteTag(item)">
|
||||
<Delete />
|
||||
</el-icon>
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!dataList.xb || dataList.xb.length === 0" class="no-tags">
|
||||
暂无续报信息
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tags-section" v-if="disabled">
|
||||
<h3 class="tags-title">补充信息</h3>
|
||||
<div class="list-container">
|
||||
<div v-for="(item, index) in dataList.bc" :key="item.id || index" class="list-item">
|
||||
<div class="list-content">
|
||||
{{ item.bcnr }}
|
||||
</div>
|
||||
<div class="tag-actions">
|
||||
<el-icon class="action-icon edit-icon" :size="32" @click="openPursue('信息追加', item)">
|
||||
<EditPen />
|
||||
</el-icon>
|
||||
<el-icon class="action-icon delete-icon" :size="32" @click="handleDeleteTag(item)">
|
||||
<Delete />
|
||||
</el-icon>
|
||||
</div>
|
||||
</div>
|
||||
<span v-if="!dataList.bc || dataList.bc.length === 0" class="no-tags">
|
||||
暂无补充信息
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="ml50 mr50 timeline-container" v-if="disabled">
|
||||
<div class="timeline-title">信息流程展示</div>
|
||||
<el-timeline class="timeline-full-width">
|
||||
<el-timeline-item :timestamp="item.czsj" placement="top" v-for="(item, index) in lcList" :key="index">
|
||||
<el-card class="process-card">
|
||||
<div class="process-info">
|
||||
<div class="info-label">处置人:</div>
|
||||
<div class="info-value">{{ item.czrxm || '未记录' }}</div>
|
||||
</div>
|
||||
<div class="process-info">
|
||||
<div class="info-label">处置结果:</div>
|
||||
<div class="info-value">
|
||||
<DictTag :tag="false" :value="item.czzt" :options="dict.D_BZ_LCZT" />
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<MOSTY.Empty :show="lcList.length == 0" :imgSize="100"></MOSTY.Empty>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<pursueContent v-model="pursueShow" :dataList="dataVals" :title="processtitle" :updeteBool="true" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { xxcjAddEntity, xxcjUpdateEntity, xxcjSelectByid, xxcjSelectCzlcList, xxcjSelectListBc, xxcjDeletesBc, addEntity, xxcjTjcll, xxcjXxzhs } from "@/api/xxcj.js"
|
||||
import { EditPen, Delete } from '@element-plus/icons-vue'
|
||||
import { ref, defineExpose, onMounted, defineEmits, watch, getCurrentInstance } from "vue"
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import pursueContent from "@/views/backOfficeSystem/HumanIntelligence/components/pursueContent.vue";
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
const emit = defineEmits(["getList"]);
|
||||
const props = defineProps({
|
||||
dict: Object,
|
||||
titleData: {
|
||||
type: String,
|
||||
default: ""
|
||||
},
|
||||
showBc: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
});
|
||||
const loading = ref(false)
|
||||
const dialogForm = ref(false); //弹窗
|
||||
const formData = ref();
|
||||
const rules = ref({
|
||||
qbmc: [{ required: true, message: "请输入情报标题", trigger: "blur" }],
|
||||
qbnr: [{ required: true, message: "请输入情报内容", trigger: "blur" }],
|
||||
bcnr: [{ required: true, message: "请输入续报内容", trigger: "blur" }],
|
||||
})
|
||||
const tjcll = ref({})
|
||||
const getXxcjTjcll = () => {
|
||||
xxcjTjcll({}).then(res => {
|
||||
tjcll.value = res
|
||||
}).catch(error => {
|
||||
console.error('请求失败:', error)
|
||||
})
|
||||
}
|
||||
watch(() => dialogForm.value, (val) => {
|
||||
if (val) {
|
||||
if (formType.value === 'followUpReport') {
|
||||
formData.value = [
|
||||
{ label: "情报标题", prop: "qbmc", type: "input", width: '45%', disabled: true },
|
||||
{ label: "续报内容", prop: "bcnr", type: "textarea", width: '100%', rows: 100 },
|
||||
]
|
||||
} else {
|
||||
formData.value = [
|
||||
{ label: "情报标题", prop: "qbmc", type: "input", width: '45%' },
|
||||
{ label: "情报内容", prop: "qbnr", type: "textarea", width: '100%', rows: 100 },
|
||||
{ label: "附件上传", prop: "fjdz", type: "upload", width: '100%', isImg: false },
|
||||
{ label: "", prop: "jbxx", type: "slot", width: '100%',},
|
||||
{ label: "", prop: "shzt", type: "slot", width: '100%' },
|
||||
|
||||
]
|
||||
}
|
||||
}
|
||||
}, { deep: true })
|
||||
const fjdz = ref()
|
||||
const listQuery = ref({}); //表单
|
||||
const elform = ref();
|
||||
onMounted(() => {
|
||||
|
||||
})
|
||||
const msgeDat = ref()
|
||||
const title = ref("")
|
||||
const showPj = ref(false)
|
||||
const disabled = ref(false)
|
||||
/** 类型 add 新增 info 详情 edit 编辑 followUpReport 续报*/
|
||||
const formType = ref('add')
|
||||
const userInfo = ref({})
|
||||
const userName = ref('')
|
||||
// 初始化数据
|
||||
const init = (type, row) => {
|
||||
userInfo.value = getItem('deptId') ? getItem('deptId')[0] : {}
|
||||
userName.value = getItem('USERNAME')
|
||||
getXxcjTjcll()
|
||||
const titleObj = {
|
||||
add: "新增",
|
||||
info: "详情",
|
||||
edit: "编辑",
|
||||
followUpReport: "续报"
|
||||
}
|
||||
title.value = titleObj[type]
|
||||
disabled.value = type == 'info' ? true : false
|
||||
fjdz.value = []
|
||||
dialogForm.value = true;
|
||||
formType.value = type
|
||||
if (type == 'info' || type == 'edit' || type == 'followUpReport') {
|
||||
showPj.value = true
|
||||
msgeDat.value = row
|
||||
getqbcjPldb(row.id)
|
||||
getxxcjSelectListBc(row.id, '01')
|
||||
getxxcjSelectListBc(row.id, '02')
|
||||
// 初始化表单数据,并根据详情页设置禁用状态
|
||||
if (row) getDataById(row.id);
|
||||
// getqbcjCzztList()
|
||||
} else {
|
||||
showPj.value = false
|
||||
}
|
||||
};
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
xxcjSelectByid({ id }).then((res) => {
|
||||
|
||||
lcList.value = res.czlcList || []
|
||||
listQuery.value = res;
|
||||
listQuery.value.fjdz = res.fjdz ? res.fjdz?.split(",") : []
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
// 新增
|
||||
const submitForm = () => {
|
||||
elform.value.submit(valid => {
|
||||
if (valid) {
|
||||
loading.value = true
|
||||
const promes = {
|
||||
...listQuery.value,
|
||||
fjdz: listQuery.value.fjdz && listQuery.value.fjdz.length > 0 ? listQuery.value.fjdz.map(item => {
|
||||
return item.id
|
||||
}).join(',') : '',
|
||||
qbly: 0,
|
||||
}
|
||||
if (title.value == '新增') {
|
||||
xxcjAddEntity(promes).then((res) => {
|
||||
emit("getList")
|
||||
close()
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
} else if (title.value == '编辑') {
|
||||
xxcjUpdateEntity(promes).then((res) => {
|
||||
emit("getList")
|
||||
close()
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
} else if (title.value == '续报') {
|
||||
const params = {
|
||||
qbid: listQuery.value.id,
|
||||
czlx: '01',
|
||||
ysnr: listQuery.value.qbnr,
|
||||
bcnr: promes.bcnr,
|
||||
}
|
||||
addEntity(params).then((res) => {
|
||||
emit("getList")
|
||||
close()
|
||||
}).finally(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
// 关闭
|
||||
const close = () => {
|
||||
if (route.query.id) {
|
||||
const query = { ...route.query };
|
||||
delete query.id;
|
||||
router.replace({ query });
|
||||
}
|
||||
fjdz.value = []
|
||||
lcList.value = []
|
||||
listQuery.value = {};
|
||||
dialogForm.value = false;
|
||||
loading.value = false;
|
||||
};
|
||||
|
||||
const lcList = ref([])
|
||||
const getqbcjPldb = (id) => {
|
||||
xxcjSelectCzlcList({ qbid: id }).then(res => {
|
||||
console.log(res);
|
||||
|
||||
lcList.value = res || []
|
||||
})
|
||||
.catch(() => {
|
||||
})
|
||||
}
|
||||
//
|
||||
const dataList = ref({
|
||||
xb: [],
|
||||
bc: [],
|
||||
})
|
||||
const getxxcjSelectListBc = (id, lx) => {
|
||||
xxcjSelectListBc({ qbid: id, czlx: lx }).then(res => {
|
||||
if (lx == '01') {
|
||||
dataList.value.xb = res || []
|
||||
} else {
|
||||
dataList.value.bc = res || []
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 处理标签删除
|
||||
const handleDeleteTag = (tag) => {
|
||||
proxy.$confirm("确定要删除吗?", "警告", { type: "warning" }).then(() => {
|
||||
const userName = getItem('USERNAME')
|
||||
if (userName == tag.bcrxm) {
|
||||
xxcjDeletesBc({ ids: [tag.id] }).then(res => {
|
||||
ElMessage({
|
||||
message: '删除成功',
|
||||
type: 'success',
|
||||
showClose: true,
|
||||
})
|
||||
getxxcjSelectListBc(msgeDat.value.id, '01')
|
||||
getxxcjSelectListBc(msgeDat.value.id, '02')
|
||||
})
|
||||
} else {
|
||||
proxy.$message({
|
||||
message: '您不是该数据的创建人,不能删除',
|
||||
type: 'warning',
|
||||
showClose: true,
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
//
|
||||
const pursueShow = ref(false)
|
||||
const dataVals = ref([])
|
||||
const processtitle = ref()
|
||||
const openPursue = (title, data) => {
|
||||
const userName = getItem('USERNAME')
|
||||
if (userName == data.bcrxm) {
|
||||
pursueShow.value = true
|
||||
processtitle.value = title
|
||||
dataVals.value = data
|
||||
} else {
|
||||
proxy.$message({
|
||||
message: '您不是该数据的创建人,不能进行操作',
|
||||
type: 'warning',
|
||||
showClose: true,
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
defineExpose({ init });
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "~@/assets/css/layout.scss";
|
||||
@import "~@/assets/css/element-plus.scss";
|
||||
|
||||
::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
|
||||
color: #0072ff;
|
||||
background: rgba(0, 114, 255, 0.3);
|
||||
}
|
||||
|
||||
.boxlist {
|
||||
width: 99%;
|
||||
height: 225px;
|
||||
margin-top: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
::v-deep .avatar-uploader {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
::v-deep .el-upload-list {
|
||||
margin-left: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
::v-deep .el-upload-list__item-name .el-icon {
|
||||
top: 3px;
|
||||
}
|
||||
|
||||
.form_cnt {
|
||||
// width: 75%;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.person {
|
||||
padding-left: 20px;
|
||||
width: 25%;
|
||||
// height: 100vh;
|
||||
}
|
||||
|
||||
/* 补充信息样式 */
|
||||
.supplement-title {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #333;
|
||||
margin: 16px 0 10px 0;
|
||||
padding-left: 5px;
|
||||
border-left: 3px solid #24b6dd;
|
||||
}
|
||||
|
||||
.supplement-list {
|
||||
margin-left: 5px;
|
||||
}
|
||||
|
||||
.supplement-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 8px 12px;
|
||||
background-color: #f5f7fa;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 8px;
|
||||
margin-right: 10px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.supplement-item:hover {
|
||||
background-color: #ecf5ff;
|
||||
border-color: #c6e2ff;
|
||||
}
|
||||
|
||||
.supplement-content {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
color: #606266;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.supplement-actions {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.action-icon {
|
||||
// font-size: 24px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.edit-icon {
|
||||
color: #24b6dd;
|
||||
}
|
||||
|
||||
.edit-icon:hover {
|
||||
color: #409eff;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.delete-icon {
|
||||
color: #f56c6c;
|
||||
}
|
||||
|
||||
.delete-icon:hover {
|
||||
color: #f78989;
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
/* 时间线标题样式 */
|
||||
.timeline-title {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
padding: 12px 16px;
|
||||
margin-bottom: 10px;
|
||||
background-color: #f5f7fa;
|
||||
border-bottom: 1px solid #ebeef5;
|
||||
border-radius: 4px 4px 0 0;
|
||||
}
|
||||
|
||||
/* 时间线样式优化 */
|
||||
.el-timeline {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* 处置流程卡片样式 */
|
||||
.process-card {
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08);
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 16px;
|
||||
border-left: 3px solid #409EFF;
|
||||
}
|
||||
|
||||
.process-card:hover {
|
||||
box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.12);
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
/* 卡片内部信息样式 */
|
||||
.process-info {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 12px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.process-info:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #409EFF;
|
||||
margin-right: 8px;
|
||||
min-width: 65px;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
font-size: 14px;
|
||||
color: #606266;
|
||||
line-height: 1.6;
|
||||
flex: 1;
|
||||
word-break: break-word;
|
||||
}
|
||||
|
||||
/* 时间戳样式 */
|
||||
.el-timeline-item__timestamp {
|
||||
font-size: 13px;
|
||||
color: #909399;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/* 时间线节点样式 */
|
||||
.el-timeline-item__node {
|
||||
background-color: #409EFF;
|
||||
}
|
||||
|
||||
::v-deep .el-textarea__inner {
|
||||
height: 50vh !important;
|
||||
}
|
||||
|
||||
/* 容器类样式 */
|
||||
.form-container {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.form-content {
|
||||
// display: flex;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.timeline-container {
|
||||
border: 1px solid #ebeef5;
|
||||
flex: 1;
|
||||
margin: 0 10px;
|
||||
}
|
||||
|
||||
/* 时间线宽度 */
|
||||
.timeline-full-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 标签区域样式 */
|
||||
.tags-section {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* 标签标题样式 */
|
||||
.tags-title {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
margin-bottom: 8px;
|
||||
padding-left: 5px;
|
||||
border-left: 3px solid #409EFF;
|
||||
}
|
||||
|
||||
/* 标签容器样式 */
|
||||
.tags-container {
|
||||
padding: 12px;
|
||||
background-color: #f5f7fa;
|
||||
border-radius: 4px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
/* 标签项目样式 */
|
||||
.tag-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 6px 10px;
|
||||
background-color: #ecf5ff;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #d9ecff;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* 标签项目悬停效果 */
|
||||
.tag-item:hover {
|
||||
background-color: #e6f7ff;
|
||||
border-color: #91d5ff;
|
||||
box-shadow: 0 2px 8px rgba(0, 123, 255, 0.15);
|
||||
}
|
||||
|
||||
/* 标签内容样式 */
|
||||
.tag-content {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
color: #303133;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 标签操作按钮样式 */
|
||||
.tag-actions {
|
||||
display: flex;
|
||||
// align-items: flex-start;
|
||||
gap: 8px;
|
||||
}
|
||||
|
||||
/* 操作图标样式 */
|
||||
.action-icon {
|
||||
font-size: 18px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
padding: 6px 8px;
|
||||
border-radius: 4px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
/* 编辑图标样式 */
|
||||
.edit-icon {
|
||||
color: #409EFF;
|
||||
background-color: #ecf5ff;
|
||||
}
|
||||
|
||||
.edit-icon:hover {
|
||||
color: #66B1FF;
|
||||
background-color: #e6f7ff;
|
||||
transform: scale(1.05);
|
||||
box-shadow: 0 2px 4px rgba(64, 158, 255, 0.2);
|
||||
}
|
||||
|
||||
/* 列表容器样式 */
|
||||
.list-container {
|
||||
padding: 12px;
|
||||
background-color: #f5f7fa;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* 列表项样式 */
|
||||
.list-item {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 10px 12px;
|
||||
background-color: #ffffff;
|
||||
border-radius: 4px;
|
||||
margin-bottom: 8px;
|
||||
border: 1px solid #e4e7ed;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
/* 列表项悬停效果 */
|
||||
.list-item:hover {
|
||||
background-color: #f5f7fa;
|
||||
border-color: #dcdfe6;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 列表内容样式 */
|
||||
.list-content {
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
color: #303133;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 删除图标样式 */
|
||||
.delete-icon {
|
||||
color: #F56C6C;
|
||||
background-color: #fef0f0;
|
||||
}
|
||||
|
||||
.delete-icon:hover {
|
||||
color: #F78989;
|
||||
background-color: #fde2e2;
|
||||
transform: scale(1.05);
|
||||
box-shadow: 0 2px 4px rgba(245, 108, 108, 0.2);
|
||||
}
|
||||
|
||||
/* 无标签提示样式 */
|
||||
.no-tags {
|
||||
color: #909399;
|
||||
font-size: 14px;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,89 @@
|
||||
<!--文件导出 -->
|
||||
<template>
|
||||
<el-dialog :model-value="modelValue" :title="title" :width="width" @close="close" append-to-body>
|
||||
<div style="height: 15vh;">
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules" :labelWidth="100" />
|
||||
</div>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button type="primary" @click="exportCurrentTable">确定 </el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { onMounted, reactive, watch, ref, getCurrentInstance } from 'vue'
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
|
||||
import { xxcjXxcjSh } from "@/api/xxcj.js"
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '30%'
|
||||
}, dict: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
},
|
||||
title: {
|
||||
type: String,
|
||||
default: '审批'
|
||||
}, dataModel: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
})
|
||||
const listQuery = ref({})
|
||||
const elform = ref()
|
||||
const rules = ref({
|
||||
shzt: { required: true, message: '请选择审批状态', trigger: ['blur', 'change'] },
|
||||
shyh: { required: true, message: '请输入不通过原因', trigger: ['blur', 'change'] }
|
||||
})
|
||||
const formData = ref([
|
||||
{ label: "审批状态", prop: "shzt", type: "select", width: '100%', options: [{ label: "通过", value: "02" }, { label: "不通过", value: "03" }] },
|
||||
{}
|
||||
])
|
||||
// watch(() => listQuery.value.modelValue, (newVal, oldVal) => {
|
||||
// if (newVal) {
|
||||
// listQuery.value.xxid = props.dataModel.id
|
||||
// }
|
||||
// })
|
||||
watch(() => listQuery.value.shzt == '03', (newVal, oldVal) => {
|
||||
if (newVal) {
|
||||
formData.value[1] = { label: "不通过原因", prop: "shyh", type: "textarea", width: '100%', rows: 3 }
|
||||
} else {
|
||||
formData.value[1] = {}
|
||||
}
|
||||
})
|
||||
|
||||
const exportCurrentTable = () => {
|
||||
elform.value.submit(valid => {
|
||||
const params = { ...listQuery.value, xxid: props.dataModel.id}
|
||||
xxcjXxcjSh(params).then(res => {
|
||||
proxy.$message({ type: "success", message: "审批成功" });
|
||||
emit('getList')
|
||||
emit('update:modelValue', false)
|
||||
elform.value.reset()
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
watch(() => props.modelValue, (newVal, oldVal) => {
|
||||
if (newVal) {
|
||||
listQuery.value.id = props.dataModel.id
|
||||
}
|
||||
})
|
||||
const emit = defineEmits(['update:modelValue','getList'])
|
||||
|
||||
|
||||
|
||||
const close = () => {
|
||||
emit('update:modelValue', false)
|
||||
}
|
||||
|
||||
</script>
|
||||
205
src/views/backOfficeSystem/HumanIntelligence/auditList/index.vue
Normal file
205
src/views/backOfficeSystem/HumanIntelligence/auditList/index.vue
Normal file
@ -0,0 +1,205 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10 mb10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox heightBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<template #qblx="{ row }">
|
||||
<DictTag :tag="false" :value="row.qblx" :options="D_GS_XS_LX" />
|
||||
</template>
|
||||
<template #qbly="{ row }">
|
||||
<DictTag :tag="false" :value="row.qbly" :options="D_BZ_CJLX" />
|
||||
</template>
|
||||
<template #czzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.czzt" :options="D_BZ_QBCZZT" />
|
||||
</template>
|
||||
<template #lczt="{ row }">
|
||||
<DictTag :tag="false" :value="row.lczt" :options="D_BZ_LCZT" />
|
||||
</template>
|
||||
<template #xldshzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.sldshzt" :options="D_BZ_SSSHZT" />
|
||||
</template>
|
||||
<template #sldshzt="{ row }">
|
||||
<DictTag :tag="false" :value="row.sldshzt" :options="D_BZ_SSSHZT" />
|
||||
</template>
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="danger" @click="openDoingLogin(row)"
|
||||
v-if="row.sldshzt == '01' && getRole() == '02'">审批</el-link>
|
||||
<el-link size="small" type="danger" @click="openDoingLogin(row)"
|
||||
v-if="row.xldshzt == '01' && getRole() == '01'">审批</el-link>
|
||||
<el-link size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
...pageData.pageConfiger,
|
||||
total: pageData.total
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<AddForm ref="detailDiloag" @getList="getList" :dict="{ D_BZ_LCZT, D_BZ_SSSHZT }" />
|
||||
</div>
|
||||
<Doinglogin v-model="doingloginModel" :dataModel="dataModel" :dict="{ D_BZ_SSSHZT }" @getList="getList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import Doinglogin from "./components/doinglogin.vue";
|
||||
import Pages from "@/components/aboutTable/Pages.vue";
|
||||
import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "./components/addForm.vue";
|
||||
import { xxcjSelectDshPage } from '@/api/xxcj.js'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import { getItem } from "@/utils/storage";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_BZ_SSSHZT, D_GS_XS_LX, D_BZ_BQJB, D_BZ_QBCZZT, D_BZ_CJLX, D_BZ_LCZT } =
|
||||
proxy.$dict('D_BZ_SSSHZT', 'D_GS_XS_LX', 'D_BZ_BQJB', 'D_BZ_QBCZZT', 'D_BZ_CJLX', 'D_BZ_LCZT'); //获取字典数据
|
||||
const searchBox = ref(); //搜索框
|
||||
const searchConfiger = ref([
|
||||
{ label: "录入人", prop: 'xssbr', placeholder: "请输入录入人", showType: "input" },
|
||||
{ label: "录入单位", prop: "ssbmdm", placeholder: "请选择录入单位", showType: "department" },
|
||||
{ label: "编号", prop: 'xsBh', placeholder: "请输入编号", showType: "input" },
|
||||
{ label: "时间", prop: "startTime", placeholder: "请选择时间", showType: "daterange" },
|
||||
{ label: "情报标题", prop: 'qbmc', placeholder: "请输入情报标题", showType: "input" },
|
||||
{ label: "标签级别", prop: 'qbjb', placeholder: "请选择标签级别", showType: "select", options: D_BZ_BQJB },
|
||||
{ label: "情报处置状态", prop: 'lczt', placeholder: "请选择处置状态", showType: "select", options: D_BZ_LCZT },
|
||||
{ label: "关键字", prop: 'keyword', placeholder: "请输入关键字", showType: "input" },
|
||||
]);
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "checkBox",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 200,
|
||||
tableColumn: [
|
||||
{ label: "情报上报时间", prop: "sxsbsj" },
|
||||
{ label: "情报编号", prop: "xsBh" },
|
||||
{ label: "情报标题", prop: "qbmc" },
|
||||
{ label: "情报来源", prop: "qbly", showSolt: true },
|
||||
{ label: "上报人", prop: "xssbr" },
|
||||
{ label: "上报单位", prop: "ssbm" },
|
||||
{ label: "县审核", prop: "xldshzt", showSolt: true },
|
||||
{ label: "市审核", prop: "sldshzt", showSolt: true },
|
||||
]
|
||||
});
|
||||
const queryFrom = ref({});
|
||||
/** 获取当前角色 */
|
||||
function getRole() {
|
||||
const { deptBizType, deptLevel } = getItem('deptId')[0]
|
||||
/** 是否是市情指领导 */
|
||||
const isShiQzLeader = getItem('roleList').find(item => item.roleCode == 'JS_666666') != undefined
|
||||
if (isShiQzLeader) return '02'
|
||||
const isXQzLeader = getItem('roleList').find(item => item.roleCode == 'JS_999999') != undefined
|
||||
if (isXQzLeader) return '01'
|
||||
}
|
||||
// 搜索
|
||||
const onSearch = (val) => {
|
||||
const promes = {
|
||||
...pageData.pageConfiger,
|
||||
...val,
|
||||
startTime: val.startTime ? val.startTime[0] : '',
|
||||
endTime: val.endTime ? val.endTime[1] : '',
|
||||
}
|
||||
queryFrom.value = { ...promes }
|
||||
pageData.pageConfiger.pageCurrent = 1;
|
||||
getList()
|
||||
}
|
||||
|
||||
const changeNo = (val) => {
|
||||
pageData.pageConfiger.pageCurrent = val;
|
||||
getList()
|
||||
}
|
||||
const changeSize = (val) => {
|
||||
pageData.pageConfiger.pageSize = val;
|
||||
getList()
|
||||
}
|
||||
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value };
|
||||
xxcjSelectDshPage(data).then(res => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
pageData.tableConfiger.loading = false;
|
||||
}).catch(() => { pageData.tableConfiger.loading = false; })
|
||||
}
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
tabHeightFn()
|
||||
getList()
|
||||
});
|
||||
//审批
|
||||
const doingloginModel = ref(false)
|
||||
const dataModel = ref({})
|
||||
const openDoingLogin = (row) => {
|
||||
dataModel.value = row
|
||||
doingloginModel.value = true
|
||||
}
|
||||
const detailDiloag=ref()
|
||||
const addEdit = (type, row) => {
|
||||
setTimeout(() => {
|
||||
detailDiloag.value.init(type, row);
|
||||
}, 500)
|
||||
};
|
||||
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 200;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.label-pop {
|
||||
position: relative;
|
||||
|
||||
&::before {
|
||||
position: absolute;
|
||||
content: '*';
|
||||
top: 0;
|
||||
left: -7px;
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.el-loading-mask {
|
||||
background: rgba(0, 0, 0, 0.5) !important;
|
||||
}
|
||||
|
||||
:v-deep .el-dialog {
|
||||
width: 90% !important;
|
||||
}
|
||||
|
||||
.zdy-model-dialogs {
|
||||
/* background-color: rgb(50, 148, 214); */
|
||||
background: url("~@/assets/images/bg46.png") no-repeat center center;
|
||||
background-size: 100% 100%;
|
||||
padding: 8px 10px;
|
||||
box-sizing: border-box;
|
||||
pointer-events: auto !important;
|
||||
height: calc(100% - 50px);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.vertical-middle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
@ -0,0 +1,205 @@
|
||||
<template>
|
||||
<div style="width: 100%;">
|
||||
<div style="margin: 0 auto;">
|
||||
<MOSTY.Upload v-model="listQuery.img" :isImg="isImg" :limit="limit" :isAll="false" :disabled="disabled"
|
||||
:showBtn="true" :showFileList="false" />
|
||||
</div>
|
||||
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<div class="operation-links">
|
||||
<el-link size="small" type="primary" @click="previewFile(row)" class="link-item primary-link"
|
||||
v-if="row.wjlx == '.png' || row.wjlx == '.jpg' || row.wjlx == '.jpeg'">预览</el-link>
|
||||
<el-link size="small" type="primary" @click="downloadFile(row)" class="link-item primary-link">下载</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)" class="link-item danger-link">删除</el-link>
|
||||
</div>
|
||||
</template>
|
||||
</MyTable>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import * as MOSTY from "@/components/MyComponents/index";
|
||||
import MyTable from "@/components/aboutTable/MyTable.vue";
|
||||
import { reactive, watch,getCurrentInstance } from "vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
isImg: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 0,
|
||||
}, disabled: {
|
||||
type: Boolean,
|
||||
default: () => { },
|
||||
},
|
||||
imgMsg: {
|
||||
type: Array,
|
||||
default: () => { },
|
||||
}
|
||||
});
|
||||
const emit = defineEmits(["changeData"]);
|
||||
const listQuery = reactive({
|
||||
img: "",
|
||||
});
|
||||
const pageData = reactive({
|
||||
tableData: [],
|
||||
keyCount: 0,
|
||||
tableConfiger: {
|
||||
rowHieght: 61,
|
||||
showSelectType: "null",
|
||||
loading: false
|
||||
},
|
||||
total: 0,
|
||||
pageConfiger: {
|
||||
pageSize: 20,
|
||||
pageCurrent: 1
|
||||
},
|
||||
controlsWidth: 280,
|
||||
tableColumn: [
|
||||
{ label: "文件名称", prop: "wjmc" },
|
||||
{ label: "文件大小", prop: "wjdx" },
|
||||
]
|
||||
});
|
||||
watch(() => listQuery.img, (newVal, oldVal) => {
|
||||
pageData.tableData = newVal.map(item => {
|
||||
return {
|
||||
wjmc: item.name,
|
||||
wjdx:parseFloat((item.id.fileSize/1024/1024).toFixed(2)),
|
||||
url: item.id.url
|
||||
}
|
||||
})
|
||||
emit("changeData", pageData.tableData);
|
||||
})
|
||||
watch(() => props.imgMsg, (newVal, oldVal) => {
|
||||
pageData.tableData = newVal.map(item => {
|
||||
return {
|
||||
...item,
|
||||
}
|
||||
})
|
||||
},{deep:true,immediate:true})
|
||||
const deleteFile = (row) => {
|
||||
pageData.tableData = pageData.tableData.filter(item => item.url !== row.url)
|
||||
const data=pageData.tableData.map(item => {
|
||||
return {
|
||||
wjmc: item.wjmc,
|
||||
wjdx: parseFloat(item.wjdx),
|
||||
url: item.url
|
||||
}
|
||||
})
|
||||
|
||||
emit("changeData",data);
|
||||
}
|
||||
const downloadFile = async (item) => {
|
||||
console.log(item);
|
||||
try {
|
||||
const dataList =[item]
|
||||
if (dataList.length === 0) {
|
||||
proxy.$message.warning('没有文件可下载');
|
||||
return;
|
||||
}
|
||||
|
||||
const downloadCount = dataList.length;
|
||||
let successCount = 0;
|
||||
let failCount = 0;
|
||||
|
||||
proxy.$message.info(`开始下载${downloadCount}个文件...`);
|
||||
|
||||
// 并行下载所有文件
|
||||
const downloadPromises = dataList.map(async (fileData, index) => {
|
||||
|
||||
try {
|
||||
// 使用fetch获取文件内容
|
||||
const response = await fetch(fileData.url);
|
||||
if (!response.ok) {
|
||||
throw new Error('文件下载失败');
|
||||
}
|
||||
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
|
||||
// 设置下载文件的名称,避免冲突
|
||||
const fileName = dataList.length > 1
|
||||
? `${item.wjmc}_${index + 1}`
|
||||
: item.wjmc;
|
||||
downloadLink.download = fileName;
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
|
||||
// 清理
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
}, 100);
|
||||
|
||||
successCount++;
|
||||
} catch (error) {
|
||||
console.error(`文件${index + 1}下载失败:`, error);
|
||||
failCount++;
|
||||
}
|
||||
});
|
||||
|
||||
// 等待所有下载完成
|
||||
await Promise.all(downloadPromises);
|
||||
|
||||
// 显示下载结果
|
||||
if (failCount === 0) {
|
||||
proxy.$message.success(`成功下载${successCount}个文件`);
|
||||
} else if (successCount === 0) {
|
||||
proxy.$message.error(`所有${failCount}个文件下载失败`);
|
||||
} else {
|
||||
proxy.$message.warning(`成功下载${successCount}个文件,失败${failCount}个文件`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('文件下载失败:', error);
|
||||
proxy.$message.error('文件下载失败,请稍后重试');
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.operation-links {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
|
||||
.link-item {
|
||||
display: inline-block;
|
||||
padding: 4px 12px;
|
||||
border-radius: 4px;
|
||||
font-size: 12px;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
opacity: 0.8;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
}
|
||||
|
||||
.primary-link {
|
||||
color: #409EFF;
|
||||
background-color: #ECF5FF;
|
||||
|
||||
&:hover {
|
||||
background-color: #D9ECFF;
|
||||
}
|
||||
}
|
||||
|
||||
.danger-link {
|
||||
color: #F56C6C;
|
||||
background-color: #FEF0F0;
|
||||
|
||||
&:hover {
|
||||
background-color: #FEE2E2;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -1,20 +1,19 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="文件定向传输">
|
||||
<el-button type="primary" @click="getDataById('add', '')">
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button size="small" type="primary" @click="getDataById('add', '')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
@ -28,11 +27,12 @@
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="getDataById('edit',row)">修改</el-link>
|
||||
<el-link size="small" type="primary" @click="getDataById('detail',row)">详情</el-link>
|
||||
<el-link size="small" type="primary" @click="previewFile(row)" v-if="row.wjlx == '.png'||row.wjlx == '.jpg'||row.wjlx == '.jpeg'">预览</el-link>
|
||||
<el-link size="small" type="primary" @click="downloadFile(row)">下载</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="getDataById('edit', row)">修改</el-link>
|
||||
<el-link size="small" type="primary" @click="getDataById('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="primary" @click="previewFile(row)"
|
||||
v-if="row.wjlx == '.png' || row.wjlx == '.jpg' || row.wjlx == '.jpeg'">预览</el-link>
|
||||
<el-link size="small" type="primary" @click="downloadFile(row)">下载</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -41,7 +41,8 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList"/>
|
||||
<AddForm ref="addForm" @getList="getList" />
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -53,7 +54,7 @@ import { useRoute } from 'vue-router'
|
||||
|
||||
import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue";
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import { deleteWjZzzAddEntity, getWjZzzAddEntity ,selectDxzjList} from '@//api/qbcj.js'
|
||||
import { deleteWjZzzAddEntity, getWjZzzAddEntity, selectDxzjList } from '@//api/qbcj.js'
|
||||
import AddForm from "@/views/backOfficeSystem/HumanIntelligence/fileTransfer/components/addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
// const { D_BZ_CJLX, D_GS_XS_LX } = proxy.$dict("D_BZ_CJLX", "D_GS_XS_LX"); //获取字典数据
|
||||
@ -88,7 +89,7 @@ const qxkz = reactive({
|
||||
})
|
||||
|
||||
const searchConfiger = ref([
|
||||
{ label: "情报标题", prop: 'qbmc', placeholder: "请输入情报标题", showType: "input" },
|
||||
{ label: "文件名称", prop: 'wjmc', placeholder: "请输入文件名称", showType: "input" },
|
||||
// { label: "情报来源", prop: 'cjLx', placeholder: "请选择情报来源", showType: "select", options: D_BZ_CJLX },
|
||||
// { label: "来源单位", prop: 'ssbmdm', placeholder: "请选择来源单位", showType: "department" }
|
||||
]);
|
||||
@ -109,12 +110,14 @@ const pageData = reactive({
|
||||
controlsWidth: 240,
|
||||
tableColumn: [
|
||||
{ label: "文件名称", prop: "wjmc" },
|
||||
{ label: "上传人", prop: "scrxm" },
|
||||
{ label: "文件大小", prop: "wjdx", showSolt: true },
|
||||
{ label: "文件类别", prop: "wjlb", showSolt: true },
|
||||
{ label: "所属部门", prop: "ssbm" },
|
||||
{ label: "文件描述", prop: "qbnr" },
|
||||
]
|
||||
});
|
||||
|
||||
const queryFrom = ref({});
|
||||
|
||||
// 搜索
|
||||
@ -145,7 +148,7 @@ const changeSize = (val) => {
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value ,wjlb:'02'};
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value, wjlb: '02' };
|
||||
selectDxzjList(data).then(res => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
@ -156,7 +159,7 @@ const getList = () => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -168,47 +171,77 @@ const getRouter = () => {
|
||||
}
|
||||
const addForm = ref(null)
|
||||
const getDataById = (type, row) => {
|
||||
addForm.value.init(type, row,'02');
|
||||
addForm.value.init(type, row, '02');
|
||||
}
|
||||
const previewFile = (item) => {
|
||||
window.open(item.wjdz);
|
||||
window.open(item.wjdz);
|
||||
}
|
||||
const downloadFile = async (item) => {
|
||||
console.log(item);
|
||||
try {
|
||||
// 显示加载提示
|
||||
// proxy.$message({
|
||||
// message: '开始下载文件...',
|
||||
// type: 'info',
|
||||
// duration: 0,
|
||||
// showClose: true
|
||||
// });
|
||||
proxy.$message.info('开始下载文件...');
|
||||
// 使用fetch获取文件内容
|
||||
const response = await fetch(item.wjdz);
|
||||
if (!response.ok) {
|
||||
throw new Error('文件下载失败');
|
||||
const dataList =JSON.parse(item.wjdz)
|
||||
if (dataList.length === 0) {
|
||||
proxy.$message.warning('没有文件可下载');
|
||||
return;
|
||||
}
|
||||
console.log(dataList);
|
||||
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
const downloadCount = dataList.length;
|
||||
let successCount = 0;
|
||||
let failCount = 0;
|
||||
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
proxy.$message.info(`开始下载${downloadCount}个文件...`);
|
||||
|
||||
// 设置下载文件的名称
|
||||
downloadLink.download = item.wjmc;
|
||||
// 并行下载所有文件
|
||||
const downloadPromises = dataList.map(async (fileData, index) => {
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
try {
|
||||
// 使用fetch获取文件内容
|
||||
const response = await fetch(fileData.url);
|
||||
if (!response.ok) {
|
||||
throw new Error('文件下载失败');
|
||||
}
|
||||
|
||||
// 清理
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
|
||||
// 显示下载成功提示
|
||||
proxy.$message.success('文件下载成功');
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
|
||||
// 设置下载文件的名称,避免冲突
|
||||
const fileName = dataList.length > 1
|
||||
? `${item.wjmc}_${index + 1}`
|
||||
: item.wjmc;
|
||||
downloadLink.download = fileName;
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
|
||||
// 清理
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
}, 100);
|
||||
|
||||
successCount++;
|
||||
} catch (error) {
|
||||
console.error(`文件${index + 1}下载失败:`, error);
|
||||
failCount++;
|
||||
}
|
||||
});
|
||||
|
||||
// 等待所有下载完成
|
||||
await Promise.all(downloadPromises);
|
||||
// 显示下载结果
|
||||
if (failCount === 0) {
|
||||
proxy.$message.success(`成功下载${successCount}个文件`);
|
||||
} else if (successCount === 0) {
|
||||
proxy.$message.error(`所有${failCount}个文件下载失败`);
|
||||
} else {
|
||||
proxy.$message.warning(`成功下载${successCount}个文件,失败${failCount}个文件`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('文件下载失败:', error);
|
||||
proxy.$message.error('文件下载失败,请稍后重试');
|
||||
@ -220,7 +253,7 @@ const deleteFile = (row) => {
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
deleteWjZzzAddEntity({ids:[row.id]}).then(res => {
|
||||
deleteWjZzzAddEntity({ ids: [row.id] }).then(res => {
|
||||
proxy.$message.success('删除成功');
|
||||
getList();
|
||||
}).catch(() => {
|
||||
|
||||
@ -8,11 +8,13 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form_cnt">
|
||||
|
||||
<FormMessage v-model="listQuery" :formList="formData" ref="elform" :rules="rules">
|
||||
<template #wjdz>
|
||||
<div style="width: 100%;">
|
||||
<FileUploadList @changeData="changeData" :imgMsg="imgMsg"/>
|
||||
<!-- <div style="width: 100%;">
|
||||
<UploadFile v-model="imgMsg" :limit="1" :isImg="false" :isAll="false" />
|
||||
</div>
|
||||
</div> -->
|
||||
</template>
|
||||
<template #jsrxm>
|
||||
<el-input v-model="listQuery.jsrxm" placeholder="请输入接收人" readonly @click="chooseUserVisible = true" />
|
||||
@ -26,6 +28,7 @@
|
||||
<script setup>
|
||||
import FormMessage from "@/components/aboutTable/FormMessage.vue";
|
||||
import { qcckGet, qcckPost } from "@/api/qcckApi.js";
|
||||
import FileUploadList from "@/views/backOfficeSystem/HumanIntelligence/fileOrientation/components/fileUploadList.vue";
|
||||
import UploadFile from "@/components/MyComponents/Upload/index.vue";
|
||||
import ChooseUser from "@/components/ChooseList/ChooseUser/index.vue"
|
||||
import { ref, defineExpose, reactive, defineEmits, getCurrentInstance, watch } from "vue";
|
||||
@ -49,16 +52,16 @@ const formData = ref([
|
||||
// },
|
||||
]);
|
||||
const listQuery = ref({}); //表单
|
||||
watch(() => imgMsg.value, (newVal, oldVal) => {
|
||||
if (newVal.length > 0) {
|
||||
listQuery.value.wjdz= newVal[0].id?newVal[0].id.url:listQuery.value.wjdz,
|
||||
listQuery.value.wjdx= newVal[0].id?(newVal[0].id.fileSize / 1024 / 1024).toFixed(2):listQuery.value.wjdx,
|
||||
listQuery.value.wjmc= newVal[0].id?newVal[0].name:listQuery.value.wjmc,
|
||||
listQuery.value. wjlx= newVal[0].id?newVal[0].id.fileSuffix:listQuery.value.wjlx
|
||||
} else {
|
||||
listQuery.value = {}
|
||||
}
|
||||
}, { deep: true })
|
||||
// watch(() => imgMsg.value, (newVal, oldVal) => {
|
||||
// if (newVal.length > 0) {
|
||||
// listQuery.value.wjdz= newVal[0].id?newVal[0].id.url:listQuery.value.wjdz,
|
||||
// listQuery.value.wjdx= newVal[0].id?(newVal[0].id.fileSize / 1024 / 1024).toFixed(2):listQuery.value.wjdx,
|
||||
// listQuery.value.wjmc= newVal[0].id?newVal[0].name:listQuery.value.wjmc,
|
||||
// listQuery.value. wjlx= newVal[0].id?newVal[0].id.fileSuffix:listQuery.value.wjlx
|
||||
// } else {
|
||||
// listQuery.value = {}
|
||||
// }
|
||||
// }, { deep: true })
|
||||
watch(() => listQuery.value.wjlb, (newVal, oldVal) => {
|
||||
listQuery.value.wjlb = newVal
|
||||
if (newVal == '02') {
|
||||
@ -75,7 +78,7 @@ watch(() => listQuery.value.wjlb, (newVal, oldVal) => {
|
||||
{ label: "文件", prop: "wjdz", type: "slot", width: "100%" },
|
||||
{ label: "文件大小", prop: "wjdx", type: "input", width: "30%", placeholder: "单位:MB",disabled: true },
|
||||
{ label: "文件名称", prop: "wjmc", type: "input", width: "30%" },
|
||||
{ label: "文件文件类型", prop: "wjlx", type: "input", width: "30%" ,disabled: true},
|
||||
// { label: "文件文件类型", prop: "wjlx", type: "input", width: "30%" },
|
||||
{ label: "接收人", prop: "jsrxm", type: "slot", width: "100%" },
|
||||
{ label: "接收部门", prop: "jsbmdm", type: "department", depMc: "jsbmmc", multiple: true },
|
||||
{ label: "文件描述", prop: "wjms", type: "textarea", width: "100%" },]
|
||||
@ -93,7 +96,7 @@ watch(() => listQuery.value.wjlb, (newVal, oldVal) => {
|
||||
{ label: "文件", prop: "wjdz", type: "slot", width: "100%" },
|
||||
{ label: "文件大小", prop: "wjdx", type: "input", width: "30%", placeholder: "单位:MB" },
|
||||
{ label: "文件名称", prop: "wjmc", type: "input", width: "30%" },
|
||||
{ label: "文件文件类型", prop: "wjlx", type: "input", width: "30%" },
|
||||
// { label: "文件文件类型", prop: "wjlx", type: "input", width: "30%" },
|
||||
{ label: "文件描述", prop: "wjms", type: "textarea", width: "100%" },]
|
||||
}
|
||||
})
|
||||
@ -103,6 +106,9 @@ const loading = ref(false);
|
||||
const elform = ref();
|
||||
const title = ref("");
|
||||
const rules = reactive({
|
||||
wjmc: [
|
||||
{ required: true, message: "请输入文件名称", trigger: "blur" },
|
||||
],
|
||||
});
|
||||
|
||||
// 初始化数据
|
||||
@ -116,9 +122,8 @@ const init = (type, row,wjlb) => {
|
||||
// 根据id查询详情
|
||||
const getDataById = (id) => {
|
||||
getWjZzzAddEntityById(id).then((res) => {
|
||||
|
||||
listQuery.value = res;
|
||||
imgMsg.value = res.wjdz.split(',')
|
||||
imgMsg.value =JSON.parse(res.wjdz)
|
||||
listQuery.value.jsbmdm = res.jsdxList.filter(item => item.jsbmdm).map(item => item.jsbmdm)
|
||||
listQuery.value.jsbmmc=res.jsdxList.filter(item => item.jsbmdm).map(item => item.jsbmmc)
|
||||
userList.value = res.jsdxList.filter(item => {
|
||||
@ -133,7 +138,17 @@ const getDataById = (id) => {
|
||||
listQuery.value.jsrxm=userList.value.map(item => item.userName).join(',')
|
||||
});
|
||||
};
|
||||
|
||||
const wjList=ref({})
|
||||
const changeData = (val) => {
|
||||
console.log(val);
|
||||
let wjsize=0
|
||||
for (let i = 0; i < val.length; i++) {
|
||||
console.log(val[i].wjdx);
|
||||
wjsize+= val[i].wjdx
|
||||
}
|
||||
listQuery.value.wjdx = wjsize
|
||||
wjList.value.wjdz =val
|
||||
};
|
||||
// 提交
|
||||
const submit = () => {
|
||||
elform.value.submit(async (data) => {
|
||||
@ -150,7 +165,7 @@ const submit = () => {
|
||||
jsbmmc: listQuery.value.jsbmmc[index],
|
||||
})):[]
|
||||
const list = [...ryList, ...bmList]
|
||||
let params = { ...listQuery.value, jsdxList: list };
|
||||
let params = { ...listQuery.value, jsdxList: list,...wjList.value,wjdz:JSON.stringify(wjList.value.wjdz) };
|
||||
try {
|
||||
loading.value = true;
|
||||
let res
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="文件中转">
|
||||
<el-button type="primary" @click="getDataById('add', '')">
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button size="small" type="primary" @click="getDataById('add', '')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
</template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
@ -28,11 +28,12 @@
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<el-link size="small" type="primary" @click="getDataById('edit',row)">修改</el-link>
|
||||
<el-link size="small" type="primary" @click="getDataById('detail',row)">详情</el-link>
|
||||
<el-link size="small" type="primary" @click="previewFile(row)" v-if="row.wjlx == '.png'||row.wjlx == '.jpg'||row.wjlx == '.jpeg'">预览</el-link>
|
||||
<el-link size="small" type="primary" @click="downloadFile(row)">下载</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
||||
<el-link size="small" type="primary" @click="getDataById('edit', row)">修改</el-link>
|
||||
<el-link size="small" type="primary" @click="getDataById('detail', row)">详情</el-link>
|
||||
<el-link size="small" type="primary" @click="previewFile(row)"
|
||||
v-if="row.wjlx == '.png' || row.wjlx == '.jpg' || row.wjlx == '.jpeg'">预览</el-link>
|
||||
<el-link size="small" type="primary" @click="downloadFile(row)">下载</el-link>
|
||||
<el-link size="small" type="danger" @click="deleteFile(row)">删除</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -41,7 +42,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
</div>
|
||||
<AddForm ref="addForm" @getList="getList"/>
|
||||
<AddForm ref="addForm" @getList="getList" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
@ -53,7 +54,7 @@ import { useRoute } from 'vue-router'
|
||||
import { qbcjZxsSelectPage } from "@/api/qbcj.js";
|
||||
import { reactive, ref, onMounted, getCurrentInstance, watch } from "vue";
|
||||
import { getItem } from '@//utils/storage.js'
|
||||
import { deleteWjZzzAddEntity, getWjZzzAddEntity } from '@//api/qbcj.js'
|
||||
import { deleteWjZzzAddEntity, getWjZzzAddEntity } from '@//api/qbcj.js'
|
||||
import AddForm from "./components/addForm.vue";
|
||||
const { proxy } = getCurrentInstance();
|
||||
// const { D_BZ_CJLX, D_GS_XS_LX } = proxy.$dict("D_BZ_CJLX", "D_GS_XS_LX"); //获取字典数据
|
||||
@ -88,7 +89,7 @@ const qxkz = reactive({
|
||||
})
|
||||
|
||||
const searchConfiger = ref([
|
||||
{ label: "情报标题", prop: 'qbmc', placeholder: "请输入情报标题", showType: "input" },
|
||||
{ label: "文件名称", prop: 'wjmc', placeholder: "请输入文件名称", showType: "input" },
|
||||
// { label: "情报来源", prop: 'cjLx', placeholder: "请选择情报来源", showType: "select", options: D_BZ_CJLX },
|
||||
// { label: "来源单位", prop: 'ssbmdm', placeholder: "请选择来源单位", showType: "department" }
|
||||
]);
|
||||
@ -145,7 +146,7 @@ const changeSize = (val) => {
|
||||
// 获取列表
|
||||
const getList = () => {
|
||||
pageData.tableConfiger.loading = true;
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value,wjlb:'01' };
|
||||
let data = { ...pageData.pageConfiger, ...queryFrom.value, wjlb: '01' };
|
||||
getWjZzzAddEntity(data).then(res => {
|
||||
pageData.tableData = res.records || [];
|
||||
pageData.total = res.total;
|
||||
@ -156,7 +157,7 @@ const getList = () => {
|
||||
|
||||
// 表格高度计算
|
||||
const tabHeightFn = () => {
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
|
||||
pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 270;
|
||||
window.onresize = function () {
|
||||
tabHeightFn();
|
||||
};
|
||||
@ -168,47 +169,78 @@ const getRouter = () => {
|
||||
}
|
||||
const addForm = ref(null)
|
||||
const getDataById = (type, row) => {
|
||||
addForm.value.init(type, row,'01');
|
||||
addForm.value.init(type, row, '01');
|
||||
}
|
||||
const previewFile = (item) => {
|
||||
window.open(item.wjdz);
|
||||
window.open(item.wjdz);
|
||||
}
|
||||
const downloadFile = async (item) => {
|
||||
console.log(item);
|
||||
try {
|
||||
// 显示加载提示
|
||||
// proxy.$message({
|
||||
// message: '开始下载文件...',
|
||||
// type: 'info',
|
||||
// duration: 0,
|
||||
// showClose: true
|
||||
// });
|
||||
proxy.$message.info('开始下载文件...');
|
||||
// 使用fetch获取文件内容
|
||||
const response = await fetch(item.wjdz);
|
||||
if (!response.ok) {
|
||||
throw new Error('文件下载失败');
|
||||
const dataList =JSON.parse(item.wjdz)
|
||||
if (dataList.length === 0) {
|
||||
proxy.$message.warning('没有文件可下载');
|
||||
return;
|
||||
}
|
||||
console.log(dataList);
|
||||
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
const downloadCount = dataList.length;
|
||||
let successCount = 0;
|
||||
let failCount = 0;
|
||||
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
proxy.$message.info(`开始下载${downloadCount}个文件...`);
|
||||
|
||||
// 设置下载文件的名称
|
||||
downloadLink.download = item.wjmc;
|
||||
// 并行下载所有文件
|
||||
const downloadPromises = dataList.map(async (fileData, index) => {
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
try {
|
||||
// 使用fetch获取文件内容
|
||||
const response = await fetch(fileData.url);
|
||||
if (!response.ok) {
|
||||
throw new Error('文件下载失败');
|
||||
}
|
||||
|
||||
// 清理
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
// 将响应转换为Blob对象
|
||||
const blob = await response.blob();
|
||||
|
||||
// 显示下载成功提示
|
||||
proxy.$message.success('文件下载成功');
|
||||
// 创建下载链接
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = URL.createObjectURL(blob);
|
||||
|
||||
// 设置下载文件的名称,避免冲突
|
||||
const fileName = dataList.length > 1
|
||||
? `${item.wjmc}_${index + 1}`
|
||||
: item.wjmc;
|
||||
downloadLink.download = fileName;
|
||||
|
||||
// 触发下载
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
|
||||
// 清理
|
||||
setTimeout(() => {
|
||||
document.body.removeChild(downloadLink);
|
||||
URL.revokeObjectURL(downloadLink.href);
|
||||
}, 100);
|
||||
|
||||
successCount++;
|
||||
} catch (error) {
|
||||
console.error(`文件${index + 1}下载失败:`, error);
|
||||
failCount++;
|
||||
}
|
||||
});
|
||||
|
||||
// 等待所有下载完成
|
||||
await Promise.all(downloadPromises);
|
||||
|
||||
// 显示下载结果
|
||||
if (failCount === 0) {
|
||||
proxy.$message.success(`成功下载${successCount}个文件`);
|
||||
} else if (successCount === 0) {
|
||||
proxy.$message.error(`所有${failCount}个文件下载失败`);
|
||||
} else {
|
||||
proxy.$message.warning(`成功下载${successCount}个文件,失败${failCount}个文件`);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('文件下载失败:', error);
|
||||
proxy.$message.error('文件下载失败,请稍后重试');
|
||||
@ -220,7 +252,7 @@ const deleteFile = (row) => {
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
deleteWjZzzAddEntity({ids:[row.id]}).then(res => {
|
||||
deleteWjZzzAddEntity({ ids: [row.id] }).then(res => {
|
||||
proxy.$message.success('删除成功');
|
||||
getList();
|
||||
}).catch(() => {
|
||||
|
||||
@ -22,6 +22,19 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<template #shzt>
|
||||
<div v-if="disabled">
|
||||
<h3 class="tags-title">审核状态</h3>
|
||||
<div style="display: flex;justify-content:space-between;width: 200%;">
|
||||
<div style="display: flex;">
|
||||
市审核状态:<DictTag v-model:value="listQuery.sldshzt" :options="dict.D_BZ_SSSHZT" :tag="false" />
|
||||
</div>
|
||||
<div style="display: flex;">
|
||||
县审核状态:<DictTag v-model:value="listQuery.xldshzt" :options="dict.D_BZ_SSSHZT" :tag="false" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</FormMessage>
|
||||
<!-- </div> -->
|
||||
<div class="tags-section" v-if="disabled">
|
||||
@ -170,9 +183,8 @@ watch(() => dialogForm.value, (val) => {
|
||||
{ label: "情报标题", prop: "qbmc", type: "input", width: '45%' },
|
||||
{ label: "情报内容", prop: "qbnr", type: "textarea", width: '100%', rows: 100 },
|
||||
{ label: "附件上传", prop: "fjdz", type: "upload", width: '100%', isImg: false },
|
||||
{ label: "", prop: "jbxx", type: "slot", width: '100%', isImg: false },
|
||||
|
||||
|
||||
{ label: "", prop: "jbxx", type: "slot", width: '100%',},
|
||||
{ label: "", prop: "shzt", type: "slot", width: '100%' },
|
||||
]
|
||||
}
|
||||
}
|
||||
@ -294,7 +306,6 @@ const lcList = ref([])
|
||||
const getqbcjPldb = (id) => {
|
||||
xxcjSelectCzlcList({ qbid: id }).then(res => {
|
||||
console.log(res);
|
||||
|
||||
lcList.value = res || []
|
||||
})
|
||||
.catch(() => {
|
||||
|
||||
@ -1,42 +1,42 @@
|
||||
<template>
|
||||
<div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Searchs :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<div class="titleBox">
|
||||
<PageTitle>
|
||||
<el-button type="primary" @click="addEdit('add')">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="addEdit('add')" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
<span class="vertical-middle">新增</span>
|
||||
</el-button>
|
||||
<el-button type="primary" @click="dologCancel()">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<el-button type="primary" @click="dologCancel()" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
<span class="vertical-middle">导出</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="handleSumbit(ids)" v-if="qxkz.deptLevel != '01'">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="handleSumbit(ids)" v-if="qxkz.deptLevel != '01'"
|
||||
size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">上报</span>
|
||||
<span class="vertical-middle">上报</span>
|
||||
</el-button>
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="delDictItem(ids)">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<el-button type="primary" :disabled="ids.length === 0" @click="delDictItem(ids)" size="small">
|
||||
<el-icon class="vertical-middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">删除</span>
|
||||
</el-button>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<span class="vertical-middle">删除</span>
|
||||
</el-button></template>
|
||||
</PageTitle>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox" :style="{ height: (pageData.tableHeight + 40) + 'px' }">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"
|
||||
@chooseData="chooseData" @handleRowClick="openXxqk">
|
||||
@chooseData="chooseData" @handleCellClick="openXxqk">
|
||||
<template #qblx="{ row }">
|
||||
<DictTag :tag="false" :value="row.qblx" :options="D_GS_XS_LX" />
|
||||
</template>
|
||||
@ -52,31 +52,34 @@
|
||||
|
||||
<template #cyqk="{ row }">
|
||||
<el-link v-if="isShowBtn('采纳')" size="small" type="danger" @click="cnMsg(row)"
|
||||
:disabled="butcontroll('02', row.lczt)">采纳</el-link>
|
||||
:disabled="butcontroll('04', row.lczt)">采纳</el-link>
|
||||
<!-- 只有上报状态才能回退 -->
|
||||
<el-link v-if="isShowBtn('回退')" size="small" type="danger" @click="rollbackNewspapers(row)"
|
||||
:disabled="butcontroll('03', row.lczt)">回退</el-link>
|
||||
:disabled="butcontroll('04', row.lczt)">回退</el-link>
|
||||
</template>
|
||||
<!-- 操作 -->
|
||||
<template #controls="{ row }">
|
||||
<!-- "市情指挥人员": ["采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门", "送审"], -->
|
||||
<!-- "县情指人员": ["上报", "回退", "修改", "详情", "送审"], -->
|
||||
<template #controls="{ row }">
|
||||
<el-link v-if="isShowBtn('送审', row) && qxkz.deptLevel == '01'" :disabled="row.sldshzt != '00'||row.lczt != '04'" size="small"
|
||||
type="primary" @click="postXxcjXxcjTjsh(row)">送审</el-link>
|
||||
<el-link v-if="isShowBtn('送审', row) && qxkz.deptLevel == '02'" :disabled="row.xldshzt != '00'||row.lczt != '04'" size="small"
|
||||
type="primary" @click="postXxcjXxcjTjsh(row)">送审</el-link>
|
||||
<!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
||||
<!-- 在提交和退回得状态才能进行上报 -->
|
||||
<el-link v-if="isShowBtn('上报')" size="small" type="primary" @click="appearNewspapers(row)">上报</el-link>
|
||||
<!-- 只有上报状态才能进行采纳 -->
|
||||
|
||||
<!-- 只有采纳状态才能分组 -->
|
||||
<el-link v-if="isShowBtn('上报')" size="small" type="primary" @click="appearNewspapers(row)" :disabled="row.xldshzt != '02'">上报</el-link>
|
||||
<el-link v-if="isShowBtn('分组')" size="small" type="primary" @click="opneMsg(row)"
|
||||
:disabled="butcontroll('01', row.lczt)">分组</el-link>
|
||||
:disabled="row.sldshzt != '02'">分组</el-link>
|
||||
<!-- 只有领导有肯定 -->
|
||||
<el-link v-if="isShowBtn('肯定')" size="small" type="primary" @click="affirm(row)">肯定</el-link>
|
||||
<el-link v-if="isShowBtn('删除')" size="small" type="primary" @click="delDictItem(row.id)">删除</el-link>
|
||||
<!-- <el-link v-if="isShowBtn('肯定')" size="small" type="primary" @click="affirm(row)">肯定</el-link> -->
|
||||
<el-link v-if="isShowBtn('删除')" size="small" type="primary" @clic.stopk="delDictItem(row.id)">删除</el-link>
|
||||
<el-link v-if="isShowBtn('修改', row)" size="small" type="primary" @click="addEdit('edit', row)">修改</el-link>
|
||||
<el-link v-if="isShowBtn('续报', row)" size="small" type="primary"
|
||||
@click="addEdit('followUpReport', row)">续报</el-link>
|
||||
<el-link v-if="isShowBtn('续报', row)" size="small" type="primary" @click="addEdit('followUpReport', row)">续报</el-link>
|
||||
|
||||
<el-link v-if="isShowBtn('详情')" size="small" type="primary" @click="addEdit('info', row)">详情</el-link>
|
||||
<!-- 所有状态都能进行转线索 -->
|
||||
<el-link v-if="isShowBtn('转线索')" size="small" type="primary" @click="FollowUpOnLeads(row)"
|
||||
:disabled="butcontroll('01', row.lczt)">转线索</el-link>
|
||||
:disabled="row.sldshzt != '02' ">转线索</el-link>
|
||||
<!-- 所有状态都能进行转合成 -->
|
||||
<!-- <el-link v-if="isShowBtn('转合成')" size="small" type="primary" @click="openFkDialogszl(row)"
|
||||
:disabled="butcontroll('01', row.lczt)">转合成</el-link> -->
|
||||
@ -84,10 +87,10 @@
|
||||
<!-- <el-link v-if="isShowBtn('转会商')" size="small" type="primary" @click="handleTransferMerchant(row)"
|
||||
:disabled="butcontroll('01', row.lczt)">转会商</el-link> -->
|
||||
|
||||
<el-link v-if="isShowBtn('关注部门')" size="small" type="primary" @click="FollowUpOnDept(row)">关注</el-link>
|
||||
<el-link v-if="isShowBtn('关注部门')" :disabled="row.sldshzt != '02'" size="small" type="primary" @click="FollowUpOnDept(row)">关注</el-link>
|
||||
<!-- 市局能给所有数据创建标签 -->
|
||||
<el-link v-if="isShowBtn('打标签')" size="small" type="primary" @click="openCustomTag(row)"
|
||||
:disabled="butcontroll('01', row.lczt)">打标签</el-link>
|
||||
:disabled="row.sldshzt != '02' ">打标签</el-link>
|
||||
</template>
|
||||
</MyTable>
|
||||
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
|
||||
@ -96,7 +99,7 @@
|
||||
}"></Pages>
|
||||
</div>
|
||||
<!-- 新增 -->
|
||||
<AddForm ref="detailDiloag" @getList="getList" :titleData="titleData" :dict="{ D_BZ_LCZT }" />
|
||||
<AddForm ref="detailDiloag" @getList="getList" :titleData="titleData" :dict="{ D_BZ_LCZT, D_BZ_SSSHZT }" />
|
||||
</div>
|
||||
<ExportFile v-model="exportFileModel" :tableColumn="tableColumn" :dict="{ D_GS_XS_LY, D_GS_XS_LX, D_GS_XS_LX }"
|
||||
:dataModel="pageData.tableData" />
|
||||
@ -120,7 +123,7 @@ import Searchs from "@/components/aboutTable/Search.vue";
|
||||
import AddForm from "./components/addForm.vue";
|
||||
import { useRouter, useRoute } from 'vue-router'
|
||||
import { qbcjSelectQbsbPage, qbcjDeletes, qbcjCzzt, qbcjPlsb } from "@/api/Intelligence.js";
|
||||
import { xxcjSelectXxsbPage, xxcjDeletes, xxcjXxzsx, xxcjUpdateCzlc, xxcjXxqd } from '@/api/xxcj.js'
|
||||
import { xxcjSelectXxsbPage, xxcjDeletes, xxcjXxzsx, xxcjUpdateCzlc, xxcjXxqd, xxcjXxcjTjsh } from '@/api/xxcj.js'
|
||||
import { reactive, ref, onMounted, getCurrentInstance, nextTick } from "vue";
|
||||
import MakeTag from '../components/maketag.vue'
|
||||
import ExportFile from './components/exportFile.vue'
|
||||
@ -133,11 +136,11 @@ import transferMerchant from "./components/transferMerchant.vue";
|
||||
import { isShiQingZhi } from "@/utils/auth.js"
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
const { D_GS_XS_LY, D_BZ_SSZT, D_BZ_SF, D_GS_XS_LX, D_BZ_BQJB,
|
||||
const { D_GS_XS_LY, D_BZ_SSSHZT, D_BZ_SSZT, D_BZ_SF, D_GS_XS_LX, D_BZ_BQJB,
|
||||
D_GS_XS_QTLX, D_GS_ZDQT_LB,
|
||||
D_BZ_BMJB, D_BZ_CLPP, D_BZ_CLYS, D_BZ_CLLX, D_BZ_XZQHDM, D_BZ_QBCZZT, D_BZ_CJLX, D_BZ_LCZT,
|
||||
D_XXCJ_BQLX } =
|
||||
proxy.$dict("D_BZ_BMJB", "D_GS_XS_LY",
|
||||
proxy.$dict("D_BZ_BMJB", "D_GS_XS_LY", 'D_BZ_SSSHZT',
|
||||
"D_BZ_SSZT", "D_BZ_SF", "D_GS_XS_LX", "D_GS_XS_QTLX",
|
||||
"D_GS_ZDQT_LB", "D_BZ_CLPP", "D_BZ_CLYS", "D_BZ_CLLX", "D_BZ_XZQHDM", "D_BZ_QBCZZT", "D_BZ_CJLX", "D_BZ_BQJB", "D_BZ_LCZT", "D_XXCJ_BQLX"); //获取字典数据
|
||||
const detailDiloag = ref();
|
||||
@ -158,9 +161,9 @@ const isShowTransferMerchantTc = ref(false)
|
||||
|
||||
const isShow = ref(false)
|
||||
const searchConfiger = ref([
|
||||
{ label: "录入人", prop: 'keyword', placeholder: "请输入录入人", showType: "input" },
|
||||
{ label: "录入人", prop: 'xssbr', placeholder: "请输入录入人", showType: "input" },
|
||||
{ label: "录入单位", prop: "ssbmdm", placeholder: "请选择录入单位", showType: "department" },
|
||||
{ label: "编号", prop: 'keyword', placeholder: "请输入编号", showType: "input" },
|
||||
{ label: "编号", prop: 'xsBh', placeholder: "请输入编号", showType: "input" },
|
||||
{ label: "时间", prop: "startTime", placeholder: "请选择时间", showType: "daterange" },
|
||||
{ label: "情报标题", prop: 'qbmc', placeholder: "请输入情报标题", showType: "input" },
|
||||
{ label: "标签级别", prop: 'qbjb', placeholder: "请选择标签级别", showType: "select", options: D_BZ_BQJB },
|
||||
@ -351,6 +354,7 @@ const handleSumbit = () => {
|
||||
// <!-- [04、06、07、08、09] -->打标签
|
||||
// <!-- [03、05] -->采纳
|
||||
// <!-- [04] -->回退
|
||||
// <!-- (01 提交 02 上报县局 03 上班市局 04 采纳 05 退回 06 打标签 07 转合成 08 转线索 09 转会商)v-if="qxkz.deptLevel == '01'" -->
|
||||
const butcontroll = (val, zt) => {
|
||||
switch (val) {
|
||||
case '01':
|
||||
@ -359,6 +363,8 @@ const butcontroll = (val, zt) => {
|
||||
return !(['03', '05'].includes(zt))
|
||||
case '03':
|
||||
return !(['02', '03', '04'].includes(zt))
|
||||
case '04':
|
||||
return ([ '04', '05' ,'06', '07', '08', '09'].includes(zt))
|
||||
}
|
||||
}
|
||||
|
||||
@ -421,18 +427,18 @@ const tableColumn = reactive([
|
||||
])
|
||||
// 详情
|
||||
const addEdit = (type, row) => {
|
||||
|
||||
|
||||
isShow.value = true;
|
||||
setTimeout(() => {
|
||||
detailDiloag.value.init(type, row);
|
||||
}, 500)
|
||||
};
|
||||
const openXxqk = (row) => {
|
||||
isShow.value = true;
|
||||
setTimeout(() => {
|
||||
detailDiloag.value.init('info', row);
|
||||
}, 500)
|
||||
if (row.column.property == 'qbmc' || row.column.property == 'xsBh') {
|
||||
isShow.value = true;
|
||||
setTimeout(() => {
|
||||
detailDiloag.value.init('info', row.row);
|
||||
}, 500)
|
||||
}
|
||||
}
|
||||
const route = useRoute()
|
||||
const titleData = ref()
|
||||
@ -442,6 +448,8 @@ const qxkz = reactive({
|
||||
roleCode: false,
|
||||
depBool: false
|
||||
});
|
||||
const qxzt = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
const { deptBizType, deptLevel } = getItem('deptId')[0]
|
||||
const Jb = deptLevel[0] == '2' ? '01' : deptLevel[0] == '3' ? '02' : '03'
|
||||
@ -518,6 +526,13 @@ const openFkDialogszl = (row) => {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** 获取当前角色 */
|
||||
function getRole() {
|
||||
const { deptBizType, deptLevel } = getItem('deptId')[0]
|
||||
@ -539,8 +554,8 @@ const isShowBtn = (btnName, row = {}) => {
|
||||
/** 按钮权限 */
|
||||
const buttonPermissions = {
|
||||
"市情指领导": ["肯定", "采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门"],
|
||||
"市情指挥人员": ["采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门"],
|
||||
"县情指人员": ["上报", "回退", "修改", "详情"],
|
||||
"市情指挥人员": ["采纳", "回退", "分组", "转线索", "转合成", "转会商", "打标签", "修改", "详情", "关注部门", "送审"],
|
||||
"县情指人员": ["上报", "回退", "修改", "详情", "送审"],
|
||||
"部门": ["上报", "新增", "修改", "续报", "详情"]
|
||||
};
|
||||
|
||||
@ -561,7 +576,29 @@ const handleTransferMerchant = (row) => {
|
||||
}
|
||||
|
||||
|
||||
// 送审
|
||||
const postXxcjXxcjTjsh = (row) => {
|
||||
proxy.$confirm("确定要送审吗", "提示", { type: "warning" }).then(() => {
|
||||
xxcjXxcjTjsh({ xxid: row.id }).then(res => {
|
||||
proxy.$message({ type: "success", message: "送审成功" });
|
||||
getList();
|
||||
})
|
||||
}).catch(() => { })
|
||||
}
|
||||
const getDisabled = (val, zt) => {
|
||||
console.log(val, zt);
|
||||
|
||||
// switch (val) {
|
||||
// case '01':
|
||||
// return !(['04', '06', '07', '08', '09'].includes(zt))
|
||||
// case '02':
|
||||
// return !(['03', '05'].includes(zt))
|
||||
// case '03':
|
||||
// return !(['02', '03', '04'].includes(zt))
|
||||
// case '04':
|
||||
// return ([ '04', '05' ,'06', '07', '08', '09'].includes(zt))
|
||||
// }
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@ -597,4 +634,8 @@ const handleTransferMerchant = (row) => {
|
||||
height: calc(100% - 50px);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.vertical-middle {
|
||||
vertical-align: middle;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,25 +1,25 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="titleBox">
|
||||
<PageTitle title="临安码线索">
|
||||
<el-button type="primary" @click="addEdit('add', null)">
|
||||
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" size="small" @click="addEdit('add', null)">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">新增</span>
|
||||
</el-button>
|
||||
<el-button type="danger" @click="plDelDictItem">
|
||||
<el-button type="danger" size="small" @click="plDelDictItem">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<Dete />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">批量删除</span>
|
||||
</el-button>
|
||||
</el-button></template>
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 搜索 -->
|
||||
<div ref="searchBox">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
|
||||
@ -5,14 +5,16 @@
|
||||
<div ref="searchBox" class="mt10">
|
||||
<Search :searchArr="searchConfiger" @submit="onSearch" :key="pageData.keyCount" />
|
||||
</div>
|
||||
<div class="titleBox">
|
||||
<PageTitle :title="routerMate.title">
|
||||
<el-button type="primary" @click="dologCancel()">
|
||||
<PageTitle :malginLeft="10" :height="35" backgroundColor="#ffff" :marginBottom="5" :marginTop="5">
|
||||
<template #left>
|
||||
<el-button type="primary" @click="dologCancel()" size="small">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
</el-icon>
|
||||
<span style="vertical-align: middle">导出</span>
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
<!-- <el-button v-if="qxkz.deptLevel == '01'" type="primary" :disabled="ids.length === 0" @click="batchMark(ids)">
|
||||
<el-icon style="vertical-align: middle">
|
||||
<CirclePlus />
|
||||
@ -20,7 +22,6 @@
|
||||
<span style="vertical-align: middle">批量打标</span>
|
||||
</el-button> -->
|
||||
</PageTitle>
|
||||
</div>
|
||||
<!-- 表格 -->
|
||||
<div class="tabBox">
|
||||
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
|
||||
|
||||
Reference in New Issue
Block a user