|
@@ -232,18 +232,18 @@
|
|
|
<hc-date-picker :dates="tabBetweenTime" clearable @change="tabBetweenTimeUpdate" />
|
|
|
</div>
|
|
|
<div class="ml-2 w-200px">
|
|
|
- <el-select v-model="searchRecleForm.userId" placeholder="操作人" filterable block>
|
|
|
- <el-option v-for="item in userData" :key="item.id" :label="item.contractName" :value="item.id" />
|
|
|
+ <el-select v-model="searchRecycleForm.userId" placeholder="操作人" filterable clearable block>
|
|
|
+ <el-option v-for="item in userData" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="ml-2 w-40">
|
|
|
- <el-select v-model="searchRecleForm.dataStatus" placeholder="是否资料节点" filterable clearable block>
|
|
|
+ <el-select v-model="searchRecycleForm.isData" placeholder="是否资料节点" filterable clearable block>
|
|
|
<el-option label="是" :value="1" />
|
|
|
- <el-option label="未引用" :value="0" />
|
|
|
+ <el-option label="否" :value="0" />
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="ml-2 w-72">
|
|
|
- <el-input v-model="searchRecleForm.queryValue" clearable placeholder="请输入工程划分" @keyup="keyUpEvent" />
|
|
|
+ <el-input v-model="searchRecycleForm.content" clearable placeholder="请输入工程划分" @keyup="keyUpEvent" />
|
|
|
</div>
|
|
|
<div class="ml-2">
|
|
|
<el-button type="primary" @click="searchRecleClick">
|
|
@@ -251,7 +251,7 @@
|
|
|
<span>搜索</span>
|
|
|
</el-button>
|
|
|
</div>
|
|
|
- <div v-if="tabTypeKey === '1'" class="position-absolute right-0">
|
|
|
+ <div v-if="tabTypeKey === '0'" class="position-absolute right-0">
|
|
|
<el-button type="success" :disabled="RecycleCheckedKeys.length < 1" @click="recoverClick">
|
|
|
<hc-icon name="arrow-go-back" />
|
|
|
<span>恢复</span>
|
|
@@ -268,20 +268,15 @@
|
|
|
{{ row?.fileName }}
|
|
|
</div>
|
|
|
</template>
|
|
|
+ <template #isData="{ row }">
|
|
|
+ {{ row?.isData === 1 ? '是' : '否' }}
|
|
|
+ </template>
|
|
|
<template #action="{ row }">
|
|
|
<el-link type="success" @click="recoverClick(row)">恢复</el-link>
|
|
|
</template>
|
|
|
</HcTable>
|
|
|
<template #action>
|
|
|
<div class="foot-recycle">
|
|
|
- <el-button
|
|
|
- :loading="recycleBtnLoading" hc-btn type="primary"
|
|
|
- :disabled="userTypeKey === '2'"
|
|
|
- @click="recycleBtnClick"
|
|
|
- >
|
|
|
- <HcIcon fill name="reply" />
|
|
|
- <span>恢复</span>
|
|
|
- </el-button>
|
|
|
<HcPages :pages="searchRecycleForm" @change="pageRecycleChange" />
|
|
|
</div>
|
|
|
</template>
|
|
@@ -294,7 +289,7 @@
|
|
|
<div v-html="saveData" />
|
|
|
</hc-new-dialog>
|
|
|
<!-- 恢复提醒 -->
|
|
|
- <hc-new-dialog v-model="recoverModal" title="恢复提醒">
|
|
|
+ <hc-new-dialog v-model="recoverModal" title="恢复提醒" :loading="recoverLoading" @save="recoverSave">
|
|
|
<div class="felx-col flex items-center justify-start font-bold">
|
|
|
<div class="mr-4 text-24px">
|
|
|
<HcIcon name="error-warning" class="text-orange" />
|
|
@@ -302,8 +297,8 @@
|
|
|
<div>
|
|
|
<p class="mb-2">
|
|
|
【
|
|
|
- <span v-for="(item, index) in cheVal" :key="item.id" class="mb-2">
|
|
|
- {{ index === cheVal.length - 1 ? item.fileName : `${item.fileName}、` }}
|
|
|
+ <span v-for="(item, index) in showData" :key="item.id" class="mb-2">
|
|
|
+ {{ index === showData.length - 1 ? item.delRootName : `${item.delRootName}、` }}
|
|
|
</span>
|
|
|
】
|
|
|
存在多条删除信息
|
|
@@ -317,7 +312,7 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { onMounted, ref } from 'vue'
|
|
|
+import { onActivated, onMounted, ref } from 'vue'
|
|
|
import { useAppStore } from '~src/store'
|
|
|
import userApi from '~api/userInfo/index'
|
|
|
import { useRoute, useRouter } from 'vue-router'
|
|
@@ -325,6 +320,7 @@ import avatarPng from '~src/assets/images/avatar.png'
|
|
|
import { getHeader } from 'hc-vue3-ui'
|
|
|
import { arrIndex, formValidate, getArrValue, isPhone } from 'js-fast-way'
|
|
|
import { getContractUserList } from '~api/other'
|
|
|
+
|
|
|
import md5 from 'js-md5'
|
|
|
|
|
|
//初始变量
|
|
@@ -408,6 +404,16 @@ const handleMenuValue = (item) => {
|
|
|
}
|
|
|
//获取用户列表
|
|
|
const userListData = ref([])
|
|
|
+const getUserData = async () => {
|
|
|
+ const { data } = await userApi.queryUser({
|
|
|
+ contractId: contractId.value,
|
|
|
+ isRecycleBin:tabTypeKey.value,
|
|
|
+
|
|
|
+ })
|
|
|
+ userData.value = getArrValue(data)
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
const getUserListData = async () => {
|
|
|
const { data } = await getContractUserList({
|
|
|
contractId: contractId.value,
|
|
@@ -417,10 +423,14 @@ const getUserListData = async () => {
|
|
|
//渲染完成
|
|
|
onMounted(() => {
|
|
|
menuObjItem()
|
|
|
- getPageTypeData(menuKey.value)
|
|
|
+ // getPageTypeData(menuKey.value)
|
|
|
+ getUserData()
|
|
|
getUserListData()
|
|
|
})
|
|
|
|
|
|
+onActivated(()=>{
|
|
|
+ getPageTypeData(menuKey.value)
|
|
|
+})
|
|
|
//根据类型,获取相关数据
|
|
|
const getPageTypeData = (key) => {
|
|
|
//编辑状态
|
|
@@ -754,74 +764,66 @@ const tableOperationContent = (row) => {
|
|
|
}
|
|
|
|
|
|
|
|
|
-//个人和全部切换
|
|
|
-const userTypeKey = ref('1')
|
|
|
-const userTypeTab = ref([{ key: '1', name: '个人' }, { key: '2', name: '全部' }])
|
|
|
-const userTypeChange = (item) => {
|
|
|
- userTypeKey.value = item?.key
|
|
|
- if (item?.key === '1') {
|
|
|
- searchRecycleForm.value.createUserName = ''
|
|
|
- } else {
|
|
|
- searchRecycleForm.value.createUserName = 'ALL'
|
|
|
- }
|
|
|
- getRecycleTableData()
|
|
|
-}
|
|
|
+
|
|
|
+
|
|
|
|
|
|
//结构类型tab数据和相关处理
|
|
|
-const tabTypeKey = ref('1')
|
|
|
+const tabTypeKey = ref('0')
|
|
|
const tabTypeTab = ref([
|
|
|
- { key: '1', name: '删除台账' },
|
|
|
- { key: '2', name: '恢复台账' },
|
|
|
+ { key: '0', name: '删除台账' },
|
|
|
+ { key: '1', name: '恢复台账' },
|
|
|
])
|
|
|
const tabTypeChange = (item) => {
|
|
|
tabTypeKey.value = item?.key
|
|
|
tabTypeKey.value = item?.key
|
|
|
searchRecycleForm.value.current = 1
|
|
|
- searchRecycleForm.value.delType = item?.key
|
|
|
+ searchRecycleForm.value.recycleType = item?.key
|
|
|
+
|
|
|
+
|
|
|
getRecycleTableData()
|
|
|
- recycleTableColumn.value = tabTypeKey.value === '1' ? recycleTableColumn1 : recycleTableColumn2
|
|
|
+ recycleTableColumn.value = tabTypeKey.value === '0' ? recycleTableColumn1 : recycleTableColumn2
|
|
|
|
|
|
}
|
|
|
|
|
|
//搜索和分页数据
|
|
|
const searchRecycleForm = ref({
|
|
|
- projectId: projectId.value, contractId: contractId.value, createUserName: '',
|
|
|
- delType: tabTypeKey.value, current: 1, size: 20, total: 0,
|
|
|
+ projectId: projectId.value, contractId: contractId.value, userId: '',
|
|
|
+ recycleType: tabTypeKey.value, current: 1, size: 20, total: 0, content:'',
|
|
|
})
|
|
|
|
|
|
//表格数据
|
|
|
const recycleTableRef = ref(null)
|
|
|
const recycleTableColumn = ref([
|
|
|
- { key: 'fileName', name: '删除位置' },
|
|
|
- { key: 'fileName', name: '工程划分' },
|
|
|
- { key: 'fileName', name: '是否资料节点', width: '100' },
|
|
|
+ { key: 'delRootName', name: '删除位置' },
|
|
|
+ { key: 'position', name: '工程划分' },
|
|
|
+ { key: 'isData', name: '是否资料节点', width: '100' },
|
|
|
{ key: 'fileName', name: '文件题名(施工)' },
|
|
|
- { key: 'fileName', name: '文件题名(监理)' },
|
|
|
+ { key: 'jlFileName', name: '文件题名(监理)' },
|
|
|
{ key: 'createUserName', name: '删除人' },
|
|
|
{ key: 'operationTime', name: '删除时间', align: 'center', width: '180' },
|
|
|
{ key: 'action', name: '操作', width: '80' },
|
|
|
])
|
|
|
const recycleTableColumn1 = [
|
|
|
|
|
|
- { key: 'fileName', name: '删除位置' },
|
|
|
- { key: 'fileName', name: '工程划分' },
|
|
|
- { key: 'fileName', name: '是否资料节点', width: '100' },
|
|
|
+ { key: 'delRootName', name: '删除位置' },
|
|
|
+ { key: 'position', name: '工程划分' },
|
|
|
+ { key: 'isData', name: '是否资料节点', width: '100' },
|
|
|
{ key: 'fileName', name: '文件题名(施工)' },
|
|
|
- { key: 'fileName', name: '文件题名(监理)' },
|
|
|
+ { key: 'jlFileName', name: '文件题名(监理)' },
|
|
|
{ key: 'createUserName', name: '删除人' },
|
|
|
{ key: 'operationTime', name: '删除时间', align: 'center', width: '180' },
|
|
|
{ key: 'action', name: '操作', width: '80' },
|
|
|
|
|
|
]
|
|
|
const recycleTableColumn2 = [
|
|
|
- { key: 'fileName', name: '删除位置' },
|
|
|
- { key: 'fileName', name: '工程划分' },
|
|
|
- { key: 'fileName', name: '是否资料节点', width: '100' },
|
|
|
+ { key: 'delRootName', name: '删除位置' },
|
|
|
+ { key: 'position', name: '工程划分' },
|
|
|
+ { key: 'isData', name: '是否资料节点', width: '100' },
|
|
|
{ key: 'fileName', name: '文件题名(施工)' },
|
|
|
- { key: 'fileName', name: '文件题名(监理)' },
|
|
|
+ { key: 'jlFileName', name: '文件题名(监理)' },
|
|
|
{ key: 'createUserName', name: '恢复人' },
|
|
|
{ key: 'operationTime', name: '恢复时间', align: 'center', width: '180' },
|
|
|
- { key: 'createUserName', name: '删除信息' },
|
|
|
+ { key: 'delInfo', name: '删除信息' },
|
|
|
|
|
|
|
|
|
|
|
@@ -841,19 +843,19 @@ const pageRecycleChange = ({ current, size }) => {
|
|
|
|
|
|
//获取数据
|
|
|
const getRecycleTableData = async () => {
|
|
|
- // const { error, code, data } = await userApi.queryRecycleBinList({
|
|
|
- // projectId: projectId.value,
|
|
|
- // contractId: contractId.value,
|
|
|
- // delType: tabTypeKey.value,
|
|
|
- // ...searchRecycleForm.value,
|
|
|
- // })
|
|
|
- // if (!error && code === 200) {
|
|
|
- // recycleTableData.value = getArrValue(data['records'])
|
|
|
- // searchRecycleForm.value.total = data.total || 0
|
|
|
- // } else {
|
|
|
- // recycleTableData.value = []
|
|
|
- // searchRecycleForm.value.total = 0
|
|
|
- // }
|
|
|
+ const { error, code, data } = await userApi.recycleBinPage({
|
|
|
+ projectId: projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+
|
|
|
+ ...searchRecycleForm.value,
|
|
|
+ })
|
|
|
+ if (!error && code === 200) {
|
|
|
+ recycleTableData.value = getArrValue(data['records'])
|
|
|
+ searchRecycleForm.value.total = data.total || 0
|
|
|
+ } else {
|
|
|
+ recycleTableData.value = []
|
|
|
+ searchRecycleForm.value.total = 0
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//多选
|
|
@@ -862,70 +864,33 @@ const recycleTableSelectionChange = (val) => {
|
|
|
RecycleCheckedKeys.value = val
|
|
|
}
|
|
|
|
|
|
-//恢复
|
|
|
-const recycleBtnLoading = ref(false)
|
|
|
-const recycleBtnClick = async () => {
|
|
|
- const rows = RecycleCheckedKeys.value
|
|
|
- let hasUnoperableData = false
|
|
|
|
|
|
- // 遍历每一行数据,检查 status 字段
|
|
|
- for (const row of rows) {
|
|
|
- if (row.status === 2) {
|
|
|
- hasUnoperableData = true
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
- // 如果存在 status = 2 的数据,则提示用户并返回
|
|
|
- if (hasUnoperableData) {
|
|
|
- window.$message.warning('存在不可操作的数据,请检查后再操作。')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if (rows.length > 0) {
|
|
|
- //请求数据
|
|
|
- recycleBtnLoading.value = true
|
|
|
- const { error, code, msg } = await userApi.recycleBinRegain({
|
|
|
- projectId: projectId.value,
|
|
|
- contractId: contractId.value,
|
|
|
- delType: tabTypeKey.value,
|
|
|
- regainIds: rows,
|
|
|
- })
|
|
|
- recycleBtnLoading.value = false
|
|
|
- if (!error && code === 200) {
|
|
|
- window?.$message?.success('操作成功')
|
|
|
- searchRecycleForm.value.current = 1
|
|
|
- getRecycleTableData()
|
|
|
- } else {
|
|
|
- window?.$message?.error(msg || '操作失败')
|
|
|
- }
|
|
|
- } else {
|
|
|
- window.$message?.warning('请先勾选要恢复的数据')
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
|
|
|
const tabBetweenTime = ref(null)
|
|
|
-const searchRecleForm = ref({
|
|
|
|
|
|
-})
|
|
|
const userData = ref([])
|
|
|
|
|
|
//日期时间被选择
|
|
|
const tabBetweenTimeUpdate = ({ arr, val, query }) => {
|
|
|
betweenTime.value = arr
|
|
|
- console.log('val', val)
|
|
|
- console.log('arr', arr)
|
|
|
- console.log('query', query)
|
|
|
+
|
|
|
+ if (arr.length > 0) {
|
|
|
+ searchRecycleForm.value.startTime = arr[0]
|
|
|
+ searchRecycleForm.value.endTime = arr[1]
|
|
|
+
|
|
|
+ } else {
|
|
|
+ searchRecycleForm.value.startTime = ''
|
|
|
+ searchRecycleForm.value.endTime = ''
|
|
|
+ }
|
|
|
}
|
|
|
const searchRecleClick = () => {
|
|
|
- // getRecycleTableData()
|
|
|
+ getRecycleTableData()
|
|
|
}
|
|
|
const recoverModal = ref(false)
|
|
|
-const recoverClick = (row)=>{
|
|
|
+const recoverClick = async (row)=>{
|
|
|
console.log(row, 'row')
|
|
|
-
|
|
|
- recoverModal.value = true
|
|
|
|
|
|
if (RecycleCheckedKeys.value.length === 0) {
|
|
|
cheVal.value = [row]
|
|
@@ -933,8 +898,44 @@ const recoverClick = (row)=>{
|
|
|
cheVal.value = RecycleCheckedKeys.value
|
|
|
|
|
|
}
|
|
|
+ await getQueryOperation(row)
|
|
|
+ recoverModal.value = true
|
|
|
+
|
|
|
+}
|
|
|
+const showData = ref([])
|
|
|
+const getQueryOperation = async (row )=>{
|
|
|
+ const { error, code, data } = await userApi.queryOperation({
|
|
|
+ id:cheVal.value.map(item => item.id).join(','),
|
|
|
+ })
|
|
|
+
|
|
|
+ if (!error && code === 200) {
|
|
|
+ console.log(data, 'data')
|
|
|
+
|
|
|
+ showData.value = getArrValue(data)
|
|
|
+
|
|
|
+
|
|
|
+ } else {
|
|
|
+ showData.value = []
|
|
|
+ recoverModal.value = false
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
const cheVal = ref([])
|
|
|
+const recoverLoading = ref(false)
|
|
|
+const recoverSave = async ()=>{
|
|
|
+ recoverLoading.value = true
|
|
|
+ const { error, code, msg } = await userApi.recover({
|
|
|
+ ids: cheVal.value.map(item => item.id).join(','),
|
|
|
+ recoverOperationData:1,
|
|
|
+
|
|
|
+ })
|
|
|
+ recoverLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ window.$message.success(msg)
|
|
|
+ getRecycleTableData()
|
|
|
+ }
|
|
|
+ recoverModal.value = false
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|