徐景良 2024-07-05 08:16:31 +08:00
commit d589db07fd
10 changed files with 115 additions and 41 deletions

View File

@ -27,6 +27,8 @@ enum Api {
GetCaseInfoById = '/api/DroneCaseInfoSingle/GetCaseInfoById',
// 更新案件行政区划
UpdateDroneCaseInfo = '/api/DroneCaseInfoSingle/UpdateDroneCaseInfo',
// 督办流程
Supervise = '/api/WFProcess/Supervise',
}
/**
@ -71,3 +73,6 @@ export function getCaseInfoById(params?: { id: string }) {
}
export const updateDroneCaseInfo = (params: updateCaseInfoParams) =>
defHttp.post({ url: Api.UpdateDroneCaseInfo, params });
export const updateSupervise = (params: {id:string,supervise: number}) =>
defHttp.post({ url: `${Api.Supervise}?id=${params.id}&supervise=${params.supervise}`, params });

View File

@ -69,7 +69,7 @@ export const useUserStore = defineStore({
if (subject != undefined) {
const permissionStore = usePermissionStore();
await permissionStore.buildRoutesAction();
await router.replace(PageEnum.BASE_HOME);
await router.replace(subject);
}
},
setToken(info: string | undefined) {

View File

@ -64,7 +64,7 @@
<a-tag color="processing" v-if="item.address">{{ item.address }}</a-tag>
</div>
<div class="item-info-batch">
<a-tag color="success">{{ item.unitname }}</a-tag>
<a-tag :color="`${item.supervisestate === 0? 'success': item.supervisestate === 1? 'warning': 'error'}`">{{ item.unitname }}</a-tag>
</div>
</div>
</div>
@ -95,12 +95,20 @@
</div>
</div>
</div>
<div class="button-div">
<Icon
style="font-size: 20px; color: #0960bd; cursor: pointer"
icon="ant-design:audit-outlined"
@click="goAudit(item)"
/>
<div class="data-list-item-control">
<a-button
size="small"
:class="`reminders-button ${item.issupervise && 'reminder-button-select'}`"
@click="changeSupervise(item)">
{{item.issupervise? '已督办': '督办'}}
</a-button>
<div class="button-div">
<Icon
style="font-size: 20px; color: #0960bd; cursor: pointer"
icon="ant-design:audit-outlined"
@click="goAudit(item)"
/>
</div>
</div>
</div>
<div v-else class="no-data">
@ -141,11 +149,12 @@
import { onMounted, ref, defineEmits } from 'vue';
import { StarOutlined } from '@ant-design/icons-vue';
import Icon from '@/components/Icon/Icon.vue';
import { getLoadTaskDetailList } from '@/api/bootstraps/index';
import { getLoadTaskDetailList, updateSupervise } from '@/api/bootstraps/index';
import { flowStore } from '@/store/modules/flow';
import { getDetail } from '@/api/sys/WFSchemeInfo';
import { Audit } from '@/views/demo/workflow/task/process/page';
import { Empty } from 'ant-design-vue';
import { message } from 'ant-design-vue';
const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
const emits = defineEmits(['changeTask', 'changeShowParent']);
@ -207,6 +216,23 @@
onMounted(() => {
getTaskList();
});
const changeSupervise = (item) => {
let params = {
id: item.processid,
supervise: 1,
}
if(item.issupervise === 1){
params.supervise = 0
}
updateSupervise(params).then(res => {
if(params.supervise === 1){
message.success('成功发起督办')
}else{
message.success('取消督办成功')
}
getTaskList();
})
}
</script>
<style lang="less">
.full-modal {
@ -349,6 +375,19 @@
}
}
}
.data-list-item-control{
display: flex;
margin-left:10px;
align-items: center;
.reminders-button{
width: 58px;
background: #086DEC;
color: #FFF;
}
.reminder-button-select{
background: rgb(242, 12, 0);
}
}
.button-div {
height: 30px;
width: 30px;
@ -357,7 +396,7 @@
font-size: 20px;
border: 1px solid #d9d9d9;
border-radius: 50%;
margin-left: 20px;
margin-left: 10px;
.collect-button:hover {
color: rgb(255, 205, 42);
}

View File

@ -39,7 +39,7 @@
v-if="formVisble"
/>
</a-tab-pane>
<a-tab-pane key="flow" tab="流程信息" force-render>
<a-tab-pane key="flow" tab="流程模板" force-render>
<div class="process-design" :style="'display: flex; height:' + designerData.height">
<process-viewer :key="`designer-${code}`" :xml="flowContent" v-if="processVisble" />
<div

View File

@ -25,6 +25,13 @@
<a-select-option :value="false">停用</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="流程分类" name="category">
<a-select
v-model:value="modalData.category"
:options="categoryOptions"
:field-names="{ label: 'itemName', value: 'itemValue' }"
/>
</a-form-item>
<a-form-item label="是否是外部链接" name="isExternal">
<a-switch
v-model:checked="modalData.isExternal"
@ -62,13 +69,19 @@
import { PlusOutlined } from '@ant-design/icons-vue';
import { uploadFile } from '@/api/formrender/index';
import { BasicModal, useModalInner } from '@/components/Modal';
import { getLoad } from '@/api/sys/sysDataItemDetail';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_API_URL } = getAppEnvConfig();
const VITE_GLOB_API_URL_VAR = ref<String>(VITE_GLOB_API_URL + '/');
const emit = defineEmits(['submit']);
const { uploadUrl } = useGlobSetting();
const formRef = ref();
const categoryOptions = ref([]);
const rules = {
title: [{ required: true, message: '专栏名称不能为空', trigger: 'blur' }],
linkOrApi: [{ required: true, message: '链接不能为空', trigger: 'blur' }],
// linkOrApi: [{ required: true, message: '', trigger: 'blur' }],
sort: [{ required: true, message: '排序号不能为空', trigger: 'blur' }],
};
@ -87,19 +100,24 @@
//
const fileList = ref([]);
const imageUrl = ref<string>('');
const { uploadUrl } = useGlobSetting();
//
const [registerModal, { closeModal }] = useModalInner((data: any) => {
modaltitle.value = data.title;
modalData.value = data.data;
if (modalData.value.imgUrl) {
imageUrl.value = 'http://192.168.10.102:9023' + '/' + data.data.imgUrl;
imageUrl.value = VITE_GLOB_API_URL_VAR.value + data.data.imgUrl;
} else {
imageUrl.value = '';
}
//
getCategory();
});
async function getCategory() {
categoryOptions.value = await getLoad({ code: 'FlowSort' });
}
//
const handleCustomRequest = (file) => {
fileList.value = [];
@ -108,7 +126,7 @@
uploadFile(formData)
.then((res: any) => {
modalData.value.imgUrl = res[0].filePath;
imageUrl.value = 'http://192.168.10.102:9023' + '/' + res[0].filePath;
imageUrl.value = VITE_GLOB_API_URL_VAR.value + res[0].filePath;
})
.catch((err) => {
file.onError(err);

View File

@ -54,7 +54,7 @@
>
<AsyncComponent ref="pcForm" />
</a-tab-pane>
<a-tab-pane key="flow" tab="流程信息" force-render>
<a-tab-pane key="flow" tab="流程模板" force-render>
<div class="process-design" :style="'display: flex; height:' + designerData.height">
<process-viewer :key="`designer-${code}`" :xml="flowContent" v-if="processVisble" />
<div

View File

@ -56,7 +56,7 @@
>
<AsyncComponent ref="pcForm" />
</a-tab-pane>
<a-tab-pane key="flow" tab="流程信息" force-render>
<a-tab-pane key="flow" tab="流程模板" force-render>
<div class="process-design" style="display: flex; height: calc( 100vh - 350px)">
<process-viewer
v-if="processVisble"
@ -69,7 +69,7 @@
</div>
</a-tab-pane>
<a-tab-pane key="record"
tab="流转记录" force-render>
tab="操作记录" force-render>
<div :style="'padding:10px 0 40px 0;overflow:auto; height:' + designerData.height">
<a-timeline>
<a-timeline-item

View File

@ -26,7 +26,7 @@
v-if="formVisble"
/>
</a-tab-pane>
<a-tab-pane key="flow" tab="流程信息(审核)" force-render>
<a-tab-pane key="flow" tab="流程模板" force-render>
<div class="process-design" :style="'display: flex; height:' + designerData.height">
<process-viewer
v-if="processVisble"

View File

@ -49,7 +49,7 @@
</div>
</a-tab-pane>
<a-tab-pane key="flow" tab="流程信息" force-render>
<a-tab-pane key="flow" tab="流程模板" force-render>
<div class="process-design" :style="'display: flex; height:' + designerData.height">
<process-viewer
v-if="processVisble"
@ -61,7 +61,7 @@
/>
</div>
</a-tab-pane>
<a-tab-pane key="record" tab="流转记录" force-render>
<a-tab-pane key="record" tab="操作记录" force-render>
<div :style="'padding:10px 0 40px 0;overflow:auto; height:' + designerData.height">
<a-timeline>
<a-timeline-item

View File

@ -41,25 +41,26 @@
class="subject_box_btn_div_line"
src="/subject/subject_line.png"
:style="{
top: `${12 * getWrap(item.title) - 323}px`,
top: `${12 * getWrap(item.title) - 313 - 12 * (spanWrap - 1)}px`,
}"
/>
</div>
</div>
<div class="subject_box_overflow">
<!-- <Icon
<Icon
v-if="list.length > 7"
style="font-size: 40px"
class="subject_box_overflow_icon1"
icon="ant-design:right-circle-outlined"
@click="scrollToTarget"
@click="scrollToElement('right')"
/>
<CaretRightOutlined />
<Icon
v-if="list.length > 7"
style="font-size: 40px"
class="subject_box_overflow_icon2"
icon="ant-design:left-circle-outlined"
@click="scrollToTarget"
/> -->
@click="scrollToElement('left')"
/>
</div>
</div>
<div class="subject_bottom">
@ -75,9 +76,13 @@
import { useUserStore } from '@/store/modules/user';
import { getSpecialData } from '@/api/demo/system';
import { onMounted, ref } from 'vue';
import { message } from 'ant-design-vue';
import Icon from '@/components/Icon/Icon.vue';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_API_URL } = getAppEnvConfig();
const VITE_GLOB_API_URL_VAR = ref<String>(VITE_GLOB_API_URL + '/');
const contentArea = ref(null);
const contentArea = ref<HTMLElement | null>(null);
const list: any = ref([]);
const userStore = useUserStore();
const spanWrap = ref(1);
@ -95,29 +100,34 @@
onMounted(() => {
getData();
});
const scrollToTarget = () => {
if (!contentArea.value) return;
// items
// console.log(102, contentArea.value.children);
// const targetElement = contentArea.value.children[2];
// targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
};
//
const scrollToElement = async (type) => {
if (contentArea.value) {
if (type == 'left' && contentArea.value.scrollLeft != 0) {
contentArea.value.scrollLeft = contentArea.value.scrollLeft - 245;
}
if (type == 'right' && contentArea.value.scrollLeft != contentArea.value.scrollWidth) {
contentArea.value.scrollLeft = contentArea.value.scrollLeft + 245;
}
}
};
//
async function getHome(item) {
console.log(item);
if (!item.linkOrApi) {
message.error('跳转链接为空!');
return;
}
if (item.isExternal) {
window.location.href = item.linkOrApi;
} else {
window.location.href =
window.location.href.slice(0, window.location.href.indexOf('#')) + '#' + item.linkOrApi;
userStore.setSubject(item.linkOrApi);
}
// userStore.setSubject(item.linkOrApi);
}
//
function getImageUrl(imgUrl) {
if (imgUrl) {
return 'http://192.168.10.102:9023' + '/' + imgUrl;
return VITE_GLOB_API_URL_VAR.value + imgUrl;
} else {
return '/subject/subject_default.png';
}
@ -226,6 +236,8 @@
position: relative;
top: -300px;
left: 17px;
width: 191px;
height: 191px;
}
&_line {
@ -242,7 +254,7 @@
justify-content: center;
position: relative;
top: -300px;
left: 15px;
left: 8px;
width: 210px;
height: 4px;
//