Commit 546766b0 authored by 沈翠玲's avatar 沈翠玲

标签临时提交

parent de2b5a50
...@@ -156,3 +156,19 @@ export const applyDownloadById = (params) => { ...@@ -156,3 +156,19 @@ export const applyDownloadById = (params) => {
export const downLoadApplyStatusById = (params) => { export const downLoadApplyStatusById = (params) => {
return request.get('/RepairApply/downLoadApplyStatusById', params); return request.get('/RepairApply/downLoadApplyStatusById', params);
}; };
// 添加标签
export const addTag = (params) => {
return request.get('/Loan/addTag', params);
};
// 导入标签
export const importTag = (params) => {
return request.get('/Loan/importTag', params);
};
// 删除标签
export const deleteTag = (params) => {
return request.get('/Loan/deleteTag', params);
};
// 获取标签
export const listTags = (params) => {
return request.get('/Loan/listTags', params);
};
\ No newline at end of file
<template>
<vxe-modal
resize
v-model="showModal"
:title="title"
@hide="onHide"
height="300"
width="430"
show-footer
esc-closable
>
<div class="tag-wrapper">
<template v-if="title === '添加临时标签'">
<div class="flex items-center">
<div>临时标签:</div>
<el-input v-model="form.tag" placeholder="请输入临时标签" style="width: 200px"/>
</div>
</template>
<template v-if="title === '导入批量添加标签'">
<div class="flex justify-center" >
<div style="line-height: 28px;">上传文件:</div>
<el-upload
class="avatar-uploader"
:headers="{ timeout: 600000 }"
ref="uploadRef"
:action="upload.url"
:disabled="upload.isUploading"
accept=".xls, .xlsx"
:auto-upload="true"
:limit="1"
:on-success="handleFileSuccess"
:on-remove="handleRemove"
:on-progress="uploadVideoProcess"
>
<el-button type="primary" plain :loading="upload.isUploading"
>点击上传</el-button
>
</el-upload>
</div>
</template>
<template v-if="title === '删除临时标签'">
<div class="flex items-center">
<div>临时标签:</div>
<el-select
v-model="form.tag"
style="width: 200px"
placeholder="请选择临时标签"
>
<el-option
v-for="item in tagOpt"
:key="item"
:label="item"
:value="item"
/>
</el-select>
</div>
<div class="w-full">
<el-checkbox v-model="form.check">从所有案件中删除此标签</el-checkbox>
</div>
</template>
</div>
<template #footer>
<el-button type="primary" link style="float: left;" v-if="title === '导入批量添加标签'" @click="downloadtemplate">点击下载模版</el-button>
<el-button type="default" @click="showModal = false">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</template>
</vxe-modal>
</template>
<script setup lang="jsx" name="allocationModal">
import { UserFilled } from '@element-plus/icons-vue';
import { RefreshRight } from '@element-plus/icons-vue';
import { ElInputNumber } from 'element-plus';
import { addTag, importTag, deleteTag, listTags } from '@/api/property';
import { inject } from 'vue';
import { computed } from 'vue';
import { getAppEnvConfig } from '@/utils/env';
import { reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
const data = ref([]);
const uploadRef = ref();
const tabledata = ref([]);
const showModal = ref(false);
const form = ref({ tag: '', fileUrl: '', check: false });
const currentAllBtn = ref(1);
const editRowIndex = ref(-1);
const envs = getAppEnvConfig();
const tagOpt = ref([]);
const title = ref();
const curParam = ref({})
const downloadfile = inject('download');
const emits = defineEmits(['success']);
const upload = reactive({
// 是否禁用上传
isUploading: false,
// 上传的地址
url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/upload',
});
const onHide = () => {
form.value = { tag: '', fileUrl: '', check: false };
};
const handleFileSuccess = (response, file, fileList) => {
if (!response.success) {
ElMessage.error({
message: response.message || '检查失败',
plain: true,
});
upload.isUploading = false;
uploadRef.value.clearFiles();
}
if (response.success) {
ElMessage.success({
message: '上传成功',
plain: true,
});
form.value.fileUrl = response.message;
upload.isUploading = false;
}
};
const handleRemove = () => {
form.value.fileUrl = '';
};
const openModal = (type, paramsStatic, selectlist) => {
showModal.value = true;
if (type == 'add') title.value = '添加临时标签'
if (type == 'import') title.value = '导入批量添加标签'
if (type == 'del') title.value = '删除临时标签'
if (selectlist && selectlist.length) {
curParam.value['ids'] = selectlist.map((v) => v.id).join(',');
} else {
curParam.value = paramsStatic;
}
listTags().then(res=>{
if (res.success) {
tagOpt.value = res.result
}
})
};
const uploadVideoProcess = (event, file, fileList) => {
upload.isUploading = true;
};
const backform = () => {
step.value = 0;
};
const submitForm = () => {
if(title.value === '添加临时标签') {
addTag({
tag: form.value.tag,
...curParam.value
}).then(res => {
if (res.success) {
ElMessage.success({
message: '添加成功',
plain: true,
});
showModal.value = false;
emits('success');
}
})
} else if (title.value === '导入批量添加标签') {
if (!form.value.fileUrl) {
return ElMessage.warning({
message: '请上传标签文件',
plain: true,
});
}
importTag({
fileUrl: form.value.fileUrl
}).then(res => {
if (res.success) {
ElMessage.success({
message: '上传成功',
plain: true,
});
showModal.value = false;
emits('success');
}
})
} else{
if (!form.value.tag) {
return ElMessage.warning({
message: '请选择临时标签',
plain: true,
});
}
const param = {
tags: form.value.tag,
}
if (!form.check) {
param['ids'] = curParam.value['ids']
}
deleteTag(param).then(res => {
if (res.success) {
ElMessage.success({
message: '上传成功',
plain: true,
});
showModal.value = false;
emits('success');
}
})
}
};
const downloadtemplate = () => {
downloadfile('/Loan/downloadTag', {}, '标签模版.xls');
};
const handleNodeClick = (data) => {
console.log(data);
};
const resetAllocation = () => {
editRowIndex.value = -1;
};
const changeNum = (type, row, index) => {
editRowIndex.value = index;
console.log('changeNum', type, row, index);
};
const leftChange = (value, direction) => {
console.log(value, direction); //这个就是它包含的所有的属性以及事件,如果需要别的操作直接执行,也可以查询到
};
defineExpose({
openModal,
});
</script>
<style lang="scss" scoped>
.tag-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
height: 100%;
padding-left: 20px;
}
</style>
<template> <template>
<div class="table-box"> <div class="table-box">
<div class="table-inner"> <div class="table-inner">
<ProTable :config="config" ref="caseLRef" :api="getCreditPage" :paramCallback="paramCallback"> <ProTable :config="config" key="caseManag" ref="caseManRef" :api="getCreditPage" :paramCallback="paramCallback">
<template #table_top> <template #table_top>
<div class="style-lable" style="width: 100%"> <div class="style-lable" style="width: 100%">
<div class="item_warp" style="width: 23%"> <div class="item_warp" style="width: 23%">
...@@ -43,31 +43,64 @@ ...@@ -43,31 +43,64 @@
</div> </div>
</template> </template>
<template #left_buttons> <template #left_buttons>
<el-button type="primary" @click="download" v-permission="'caseManageExport'">导出</el-button> <div class="flex rounded w-full h-11 items-center pl-2 btn-grp mb-1">
<el-dropdown @command="(command) => (dataValue = command)">
<span class="el-dropdown-link">
{{ dataValue }}
<el-icon class="el-icon--right">
<arrow-down />
</el-icon>
</span>
<template #dropdown>
<el-dropdown-item
v-for="item in dataOptions"
:key="item.value"
:command="item.value"
>{{ item.label }}</el-dropdown-item
>
</template>
</el-dropdown>
<el-dropdown>
<el-button type="primary" @click="addTag">
<el-icon class="el-icon--left"><arrow-down /></el-icon>添加临时标签
</el-button>
<template #dropdown>
<el-dropdown-menu @click="handleClick">
<el-dropdown-item>导入批量添加标签</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-button type="primary" @click="delTag" style="margin-left: 10px">删除临时标签</el-button>
<el-button type="primary" @click="download" v-permission="'caseManageExport'" style="margin-left: 10px" v-if="dataValue === '对查询结果操作'">导出</el-button>
</div>
<div style="font-size: 15px; margin-top: 10px;"
>选中项:{{ selectdList.length }}
<span class="text-blue-400 cursor-pointer ml-4" @click="cancel">取消</span></div
>
</template> </template>
</ProTable> </ProTable>
</div> </div>
<caseModal ref="caseModalRef" /> <tagModal ref="tagModalRef" @success="query"/>
</div> </div>
</template> </template>
<script setup name="case-manage" lang="jsx"> <script setup name="case-manage" lang="jsx">
import caseModal from './components/caseModal.vue'; import tagModal from './components/tagModal.vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { getCreditPage, getCreditTotal } from '@/api/property'; import { getCreditPage, getCreditTotal } from '@/api/property';
import { ElButton, ElMessage, ElTag } from 'element-plus'; import { ElButton, ElMessage, ElTag } from 'element-plus';
import { getTenantPage } from '@/api/tenant'; import { getTenantPage } from '@/api/tenant';
import { useAuthStore } from '@/stores/modules/auth'; import { useAuthStore } from '@/stores/modules/auth';
const caseModalRef = ref(); const tagModalRef = ref();
const caseLRef = ref(); const caseManRef = ref();
const statisis = ref({}); const statisis = ref({});
const paramsStatic = ref({}); const paramsStatic = ref({});
const { authButtonListGet } = useAuthStore(); // 获取用户权限列表 const { authButtonListGet } = useAuthStore(); // 获取用户权限列表
import { inject } from 'vue'; import { inject } from 'vue';
const downloadfile = inject('download'); const downloadfile = inject('download');
import { onMounted } from 'vue'; import { onMounted, nextTick } from 'vue';
import { getPlatformPage } from '@/api/platform'; import { getPlatformPage } from '@/api/platform';
import { getManageOrgPage } from '@/api/manageOrg'; import { getManageOrgPage } from '@/api/manageOrg';
import { useDict } from '@/hooks/useDict'; import { useDict } from '@/hooks/useDict';
...@@ -90,7 +123,83 @@ ...@@ -90,7 +123,83 @@
'AuditStatus', 'AuditStatus',
'CaseStatus' 'CaseStatus'
); );
const selectdList = ref([]);
const dataValue = ref('对查询结果操作');
const onCheckboxChange = (row) => {
nextTick(() => {
selectdList.value = row.records;
dataValue.value = selectdList.value.length > 0 ? '对选中项操作' : '对查询结果操作';
})
};
const cancel = () =>{
caseManRef.value.element.setAllCheckboxRow(false);
onCheckboxAll({ checked: false, records: [] });
}
const onCheckboxAll = (flag) => {
if (flag.checked) {
selectdList.value = flag.records;
} else {
selectdList.value = [];
}
dataValue.value = selectdList.value.length > 0 ? '对选中项操作' : '对查询结果操作';
};
const dataOptions = [
{
label: '对查询结果操作',
value: '对查询结果操作',
},
{
label: '对选中项操作',
value: '对选中项操作',
},
];
const router = useRouter(); const router = useRouter();
const addTag = () => {
if (dataValue.value === '对选中项操作' && (!selectdList.value || !selectdList.value.length)) {
return ElMessage.warning({
message: '请先选择操作对象!',
plain: true,
});
}
if (dataValue.value === '对选中项操作') {
tagModalRef.value?.openModal('add', JSON.parse(JSON.stringify(paramsStatic.value)),
JSON.parse(JSON.stringify(selectdList.value)))
} else {
tagModalRef.value?.openModal('add', JSON.parse(JSON.stringify(paramsStatic.value)),
[])
}
}
const handleClick = () => {
if (dataValue.value === '对选中项操作' && (!selectdList.value || !selectdList.value.length)) {
return ElMessage.warning({
message: '请先选择操作对象!',
plain: true,
});
}
if (dataValue.value === '对选中项操作') {
tagModalRef.value?.openModal('import', JSON.parse(JSON.stringify(paramsStatic.value)),
JSON.parse(JSON.stringify(selectdList.value)))
} else {
tagModalRef.value?.openModal('import', JSON.parse(JSON.stringify(paramsStatic.value)),
[])
}
}
const delTag = () => {
if (dataValue.value === '对选中项操作' && (!selectdList.value || !selectdList.value.length)) {
return ElMessage.warning({
message: '请先选择操作对象!',
plain: true,
});
}
if (dataValue.value === '对选中项操作') {
tagModalRef.value?.openModal('del', JSON.parse(JSON.stringify(paramsStatic.value)),
JSON.parse(JSON.stringify(selectdList.value)))
} else {
tagModalRef.value?.openModal('del', JSON.parse(JSON.stringify(paramsStatic.value)),
[])
}
}
const onCellClick = (row) => { const onCellClick = (row) => {
router.push({ router.push({
path: '/property/case-detail', path: '/property/case-detail',
...@@ -129,7 +238,9 @@ ...@@ -129,7 +238,9 @@
downloadfile('/LoanExcel/download', paramsStatic.value, '资产列表.xls'); downloadfile('/LoanExcel/download', paramsStatic.value, '资产列表.xls');
}; };
const config = reactive({ const config = reactive({
id: 'caseManage',
columns: [ columns: [
{ type: 'checkbox', title: '', width: 60, fixed: 'left' },
{ {
field: 'caseId', field: 'caseId',
title: '案件ID', title: '案件ID',
...@@ -206,6 +317,18 @@ ...@@ -206,6 +317,18 @@
labelWidth: 90, labelWidth: 90,
}, },
}, },
{
field: 'tag',
title: '临时标签',
showOverflow: 'tooltip',
width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'queryTag',
labelWidth: 90,
},
},
{ {
field: 'discount', field: 'discount',
title: '折扣', title: '折扣',
...@@ -449,17 +572,6 @@ ...@@ -449,17 +572,6 @@
width: 80, width: 80,
search: { el: 'input', props: { clearable: true }, labelWidth: 90 }, search: { el: 'input', props: { clearable: true }, labelWidth: 90 },
}, },
{
field: 'repayStatus',
title: '还款状态',
showOverflow: 'tooltip',
width: 80,
slots: {
default: ({ row }) => {
return <div>{row.repayStatus == 'over' ? '已还款' : '待还款'}</div>;
},
},
},
{ {
field: 'commission', field: 'commission',
showOverflow: 'tooltip', showOverflow: 'tooltip',
...@@ -644,9 +756,11 @@ ...@@ -644,9 +756,11 @@
width: 80, width: 80,
}, },
], ],
onCheckboxChange: onCheckboxChange,
onCheckboxAll: onCheckboxAll,
}); });
const query = () => caseLRef.value?.search(); const query = () => caseManRef.value?.search();
onMounted(() => { onMounted(() => {
query(); query();
......
<template>
<vxe-modal
resize
v-model="showModal"
:title="title"
@hide="onHide"
height="300"
width="430"
show-footer
esc-closable
>
<div class="tag-wrapper">
<template v-if="title === '添加临时标签'">
<div class="flex items-center">
<div>临时标签:</div>
<el-input v-model="form.tag" placeholder="请输入临时标签" style="width: 200px"/>
</div>
</template>
<template v-if="title === '导入批量添加标签'">
<div class="flex items-center">
<div>上传文件:</div>
<el-upload
class="avatar-uploader"
:headers="{ timeout: 600000 }"
ref="uploadRef"
:action="upload.url"
:disabled="upload.isUploading"
accept=".xls, .xlsx"
:auto-upload="false"
:limit="1"
:on-success="handleFileSuccess"
:on-remove="handleRemove"
:on-progress="uploadVideoProcess"
>
<el-button type="primary" plain :loading="upload.isUploading"
>点击上传</el-button
>
</el-upload>
</div>
</template>
</div>
<template #footer>
<el-button type="default" link style="margin-right:auto" v-if="title === '导入批量添加标签'" @click="downloadtemplate">点击下载模版</el-button>
<el-button type="default" @click="showModal = false">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</template>
</vxe-modal>
</template>
<script setup lang="jsx" name="allocationModal">
import { UserFilled } from '@element-plus/icons-vue';
import { RefreshRight } from '@element-plus/icons-vue';
import { ElInputNumber } from 'element-plus';
import { addTag } from '@/api/property';
import { inject } from 'vue';
import { computed } from 'vue';
import { getAppEnvConfig } from '@/utils/env';
import { reactive, ref } from 'vue';
const data = ref([]);
const uploadRef = ref();
const tabledata = ref([]);
const showModal = ref(false);
const form = ref({ tag: '' });
const currentAllBtn = ref(1);
const editRowIndex = ref(-1);
const envs = getAppEnvConfig();
const radio = ref(0);
const title = ref();
const curParam = ref({})
const downloadfile = inject('download');
const emits = defineEmits(['success']);
const upload = reactive({
// 是否禁用上传
isUploading: false,
// 上传的地址
url: envs.VITE_GLOB_API_URL_PREFIX + '/Loan/importTag',
});
const onHide = () => {
form.value = { tag: '' };
};
const handleFileSuccess = (response, file, fileList) => {
if (!response.success) {
ElMessage.error({
message: response.message || '上传失败',
plain: true,
});
upload.isUploading = false;
uploadRef.value.clearFiles();
}
if (response.success) {
ElMessage.success({
message: '上传成功',
plain: true,
});
upload.isUploading = false;
showModal.value = false;
emits('success');
}
};
const handleRemove = () => {
};
const openModal = (type, paramsStatic, selectlist) => {
showModal.value = true;
if (type == 'add') title.value = '添加临时标签'
if (type == 'import') title.value = '导入批量添加标签'
if (type == 'del') title.value = '删除临时标签'
if (selectlist && selectlist.length) {
curParam.value['ids'] = selectlist.map((v) => v.id);
} else {
curParam.value = paramsStatic;
}
};
const uploadVideoProcess = (event, file, fileList) => {
upload.isUploading = true;
};
const backform = () => {
step.value = 0;
};
const submitForm = () => {
if(title.value === '添加临时标签') {
addTag({
...form.value,
...curParam.value
}).then(res => {
if (res.success) {
return ElMessage.success({
message: '添加成功',
plain: true,
});
showModal.value = false;
emits('success');
}
})
} else if (title.value === '导入批量添加标签') {
uploadRef.value?.submit()
} else{
}
};
const downloadtemplate = () => {
downloadfile('/Loan/downloadTag', {}, '标签模版.xls');
};
const handleNodeClick = (data) => {
console.log(data);
};
const resetAllocation = () => {
editRowIndex.value = -1;
};
const changeNum = (type, row, index) => {
editRowIndex.value = index;
console.log('changeNum', type, row, index);
};
const leftChange = (value, direction) => {
console.log(value, direction); //这个就是它包含的所有的属性以及事件,如果需要别的操作直接执行,也可以查询到
};
defineExpose({
openModal,
});
</script>
<style lang="scss" scoped>
.tag-wrapper {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100%;
}
</style>
...@@ -78,15 +78,28 @@ ...@@ -78,15 +78,28 @@
</el-dropdown-menu> </el-dropdown-menu>
</template> </template>
</el-dropdown> </el-dropdown>
<el-dropdown>
<el-button type="primary" @click="addTag">
<el-icon class="el-icon--left"><arrow-down /></el-icon>添加临时标签
</el-button>
<template #dropdown>
<el-dropdown-menu @click="handleClick1">
<el-dropdown-item>导入批量添加标签</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-button type="primary" @click="delTag" style="margin-left: 10px">删除临时标签</el-button>
<el-button type="primary" @click="stayCase">留案 </el-button> <el-button type="primary" @click="stayCase">留案 </el-button>
</div> </div>
</template> </template>
</ProTable> </ProTable>
</div> </div>
<tagModal ref="tagModalRef" @success="query"/>
</div> </div>
</template> </template>
<script setup name="case-manage" lang="jsx"> <script setup name="case-manage" lang="jsx">
import tagModal from './components/tagModal.vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { computed, reactive, ref, nextTick } from 'vue'; import { computed, reactive, ref, nextTick } from 'vue';
import { getCreditPage, getCreditTotal } from '@/api/property'; import { getCreditPage, getCreditTotal } from '@/api/property';
...@@ -118,11 +131,33 @@ ...@@ -118,11 +131,33 @@
'AuditStatus', 'AuditStatus',
'CaseStatus' 'CaseStatus'
); );
const tagModalRef = ref();
const { userInfo } = useUserStore(); const { userInfo } = useUserStore();
const router = useRouter(); const router = useRouter();
const tabs = ref(['全部', '今天待跟进', '明天待跟进', '后天待跟进']); const tabs = ref(['全部', '今天待跟进', '明天待跟进', '后天待跟进']);
const activeName = ref('全部'); const activeName = ref('全部');
const addTag = () => {
if (dataValue.value === '对选中项操作' && (!selectdList.value || !selectdList.value.length)) {
return ElMessage.warning({
message: '请先选择操作对象!',
plain: true,
});
}
if (dataValue.value === '对选中项操作') {
tagModalRef.value?.openModal('add', JSON.parse(JSON.stringify(curParam.value)),
JSON.parse(JSON.stringify(selectdList.value)))
} else {
tagModalRef.value?.openModal('add', JSON.parse(JSON.stringify(curParam.value)),
[])
}
}
const handleClick1 = () => {
tagModalRef.value?.openModal('import')
}
const delTag = () => {
tagModalRef.value?.openModal('del')
}
const selectdList = ref([]); const selectdList = ref([]);
const tableTrue = ref(true); const tableTrue = ref(true);
const curParam = ref({}); const curParam = ref({});
...@@ -301,6 +336,18 @@ ...@@ -301,6 +336,18 @@
labelWidth: 90, labelWidth: 90,
}, },
}, },
{
field: 'tag',
title: '临时标签',
showOverflow: 'tooltip',
width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'queryTag',
labelWidth: 90,
},
},
{ {
field: 'discount', field: 'discount',
title: '折扣', title: '折扣',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment