新增消息管理
This commit is contained in:
parent
968a86277f
commit
987b1e2016
|
|
@ -306,3 +306,14 @@ export function saveUser(data) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*消息管理-获取
|
||||||
|
*/
|
||||||
|
export function noticePage(params) {
|
||||||
|
return request({
|
||||||
|
url: `/admin/notice/noticePage`,
|
||||||
|
method: "GET",
|
||||||
|
params:params
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,7 +82,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="tip" class="el-upload__tip">
|
<div v-if="tip" class="el-upload__tip">
|
||||||
<div style="display: inline-block">
|
<div style="display: inline-block;">
|
||||||
<el-alert :title="tip" type="error" show-icon :closable="false" />
|
<el-alert :title="tip" type="error" show-icon :closable="false" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -186,6 +186,8 @@ const beforeUpload = (file) => {
|
||||||
return isTypeOk;
|
return isTypeOk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const baseUrl = ref(import.meta.env.VITE_UPLOAD_URL);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传文件
|
* 上传文件
|
||||||
*/
|
*/
|
||||||
|
|
@ -204,7 +206,7 @@ const handleUpload = (res) => {
|
||||||
clearInterval(timmer.value);
|
clearInterval(timmer.value);
|
||||||
timmer.value = null;
|
timmer.value = null;
|
||||||
if (res.data) {
|
if (res.data) {
|
||||||
res.data.url = res.data.filepath;
|
res.data.url = baseUrl.value + res.data.filepath;
|
||||||
res.data.fileType = getFileType(res.data.url);
|
res.data.fileType = getFileType(res.data.url);
|
||||||
fileList.value.push(res.data);
|
fileList.value.push(res.data);
|
||||||
emits("onUpdate", fileList.value);
|
emits("onUpdate", fileList.value);
|
||||||
|
|
@ -296,12 +298,12 @@ const setFiles = () => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
watch(
|
// watch(
|
||||||
() => props.listPic,
|
// () => props.listPic,
|
||||||
() => {
|
// () => {
|
||||||
setFiles();
|
// setFiles();
|
||||||
}
|
// }
|
||||||
);
|
// );
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
setFiles();
|
setFiles();
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,16 @@ import { QuillEditor } from '@vueup/vue-quill'
|
||||||
import '@vueup/vue-quill/dist/vue-quill.snow.css'
|
import '@vueup/vue-quill/dist/vue-quill.snow.css'
|
||||||
import { reactive, onMounted, ref, toRaw, watch } from 'vue'
|
import { reactive, onMounted, ref, toRaw, watch } from 'vue'
|
||||||
// import { backsite } from '@/api'
|
// import { backsite } from '@/api'
|
||||||
|
import { uploadFile } from '@/api/file'
|
||||||
|
|
||||||
const props = defineProps(['value'])
|
const props = defineProps(['value','id','userId','FileType'])
|
||||||
const emit = defineEmits(['updateValue'])
|
const emit = defineEmits(['updateValue'])
|
||||||
const content = ref('')
|
const content = ref('')
|
||||||
const myQuillEditor = ref()
|
const myQuillEditor = ref()
|
||||||
watch(() => props.value, (val) => {
|
watch(() => props.value, (val) => {
|
||||||
console.log(toRaw(myQuillEditor.value))
|
// console.log(toRaw(myQuillEditor.value))
|
||||||
toRaw(myQuillEditor.value).setHTML(val)
|
// toRaw(myQuillEditor.value).setHTML(val)
|
||||||
|
content.value = val
|
||||||
}, { deep: true })
|
}, { deep: true })
|
||||||
const fileBtn = ref()
|
const fileBtn = ref()
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
|
|
@ -55,8 +57,10 @@ const imgHandler = (state) => {
|
||||||
}
|
}
|
||||||
const setValue = () => {
|
const setValue = () => {
|
||||||
const text = toRaw(myQuillEditor.value).getHTML()
|
const text = toRaw(myQuillEditor.value).getHTML()
|
||||||
|
// console.log(text,'text===>');
|
||||||
emit('updateValue', text)
|
emit('updateValue', text)
|
||||||
}
|
}
|
||||||
|
const baseImgUrl = ref(import.meta.env.VITE_UPLOAD_URL);
|
||||||
const handleUpload = (e) => {
|
const handleUpload = (e) => {
|
||||||
const files = Array.prototype.slice.call(e.target.files)
|
const files = Array.prototype.slice.call(e.target.files)
|
||||||
if (!files) {
|
if (!files) {
|
||||||
|
|
@ -64,8 +68,20 @@ const handleUpload = (e) => {
|
||||||
}
|
}
|
||||||
const formdata = new FormData()
|
const formdata = new FormData()
|
||||||
formdata.append('file', files[0])
|
formdata.append('file', files[0])
|
||||||
// backsite.uploadFile(formdata)
|
uploadFile(props.userId,props.id,props.FileType,formdata)
|
||||||
|
.then(res => {
|
||||||
|
if (res.data.filepath) {
|
||||||
|
const quill = toRaw(myQuillEditor.value).getQuill()
|
||||||
|
const length = quill.getSelection().index
|
||||||
|
// 插入图片,res为服务器返回的图片链接地址
|
||||||
|
quill.insertEmbed(length, 'image', baseImgUrl.value + res.data.filepath)
|
||||||
|
// 调整光标到最后
|
||||||
|
quill.setSelection(length + 1)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// uploadFile(formdata)
|
||||||
// .then(res => {
|
// .then(res => {
|
||||||
|
// console.log(res,'formdatares====>');
|
||||||
// if (res.data.url) {
|
// if (res.data.url) {
|
||||||
// const quill = toRaw(myQuillEditor.value).getQuill()
|
// const quill = toRaw(myQuillEditor.value).getQuill()
|
||||||
// const length = quill.getSelection().index
|
// const length = quill.getSelection().index
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ import TitleC from "./TitleC/index.vue";
|
||||||
import BaseDialog from './BaseDialog/index.vue'
|
import BaseDialog from './BaseDialog/index.vue'
|
||||||
import CustomUpload from "./CustomUpload/index.vue";
|
import CustomUpload from "./CustomUpload/index.vue";
|
||||||
import QuillEditor from "./QuillEditor/index.vue";
|
import QuillEditor from "./QuillEditor/index.vue";
|
||||||
|
import ImageUpload from "./ImageUpload/index.vue";
|
||||||
// import TEditor from "./Editor/index.vue"
|
// import TEditor from "./Editor/index.vue"
|
||||||
export default [TitleC,BaseDialog,CustomUpload,QuillEditor]
|
export default [TitleC,BaseDialog,CustomUpload,QuillEditor,ImageUpload]
|
||||||
|
|
||||||
|
|
|
||||||
10
src/router/modules/big-data.js
Normal file
10
src/router/modules/big-data.js
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
const Layout = () => import('@/layout/index.vue')
|
||||||
|
|
||||||
|
export default {
|
||||||
|
path: 'http://42.193.40.239:8050/',
|
||||||
|
component: Layout,
|
||||||
|
meta: {
|
||||||
|
title: '大数据分析',
|
||||||
|
icon: 'point',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -38,18 +38,6 @@ export default {
|
||||||
title: '职务管理',
|
title: '职务管理',
|
||||||
breadcrumb: true,
|
breadcrumb: true,
|
||||||
},
|
},
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'postdetail',
|
|
||||||
name: 'post-detail',
|
|
||||||
component: () => import('@/views/system/post-management/detail-post.vue'),
|
|
||||||
meta: {
|
|
||||||
title: '职务详情',
|
|
||||||
sidebar: false,
|
|
||||||
breadcrumb: true,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'role',
|
path: 'role',
|
||||||
|
|
@ -155,6 +143,16 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
path: 'messageindex',
|
||||||
|
name: 'messageindex',
|
||||||
|
meta: {
|
||||||
|
icon: 'point',
|
||||||
|
title: '消息管理',
|
||||||
|
breadcrumb: true,
|
||||||
|
},
|
||||||
|
component: () => import('@/views/system/message/index.vue'),
|
||||||
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -108,6 +108,7 @@ import base from './modules/basemanage';
|
||||||
import trends from './modules/work-trends';
|
import trends from './modules/work-trends';
|
||||||
import manage from './modules/work-manage';
|
import manage from './modules/work-manage';
|
||||||
import statistic from './modules/statistic';
|
import statistic from './modules/statistic';
|
||||||
|
import bigData from './modules/big-data';
|
||||||
|
|
||||||
// 动态路由(异步路由、导航栏路由)
|
// 动态路由(异步路由、导航栏路由)
|
||||||
let asyncRoutes = [
|
let asyncRoutes = [
|
||||||
|
|
@ -125,6 +126,7 @@ let asyncRoutes = [
|
||||||
manage,
|
manage,
|
||||||
statistic,
|
statistic,
|
||||||
system,
|
system,
|
||||||
|
bigData,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ export enum FileType {
|
||||||
//道孚
|
//道孚
|
||||||
workManagement = 'workManagement',//工作管理
|
workManagement = 'workManagement',//工作管理
|
||||||
workDynamics = 'workDynamics',//工作管理
|
workDynamics = 'workDynamics',//工作管理
|
||||||
|
message = 'message',//消息管理富文本
|
||||||
|
messageCover = 'messageCover',//消息管理封面
|
||||||
}
|
}
|
||||||
// 文件接口类型
|
// 文件接口类型
|
||||||
export enum ApiFile {
|
export enum ApiFile {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="percentage-content">
|
<div class="percentage-content">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div style="margin-bottom: 16px" class="h-layout space-between h-center">
|
<div style="margin-bottom: 16px;" class="h-layout space-between h-center">
|
||||||
<div>
|
<div>
|
||||||
<div class="h-layout">
|
<div class="h-layout">
|
||||||
<div class="tool-item" @click="(dialogVisible = true), (form = {}),(readonly=false)">
|
<div class="tool-item" @click="(dialogVisible = true), (form = {}),(readonly=false)">
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="width: 30%">
|
<div style="width: 30%;">
|
||||||
<div>
|
<div>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="search"
|
v-model="search"
|
||||||
|
|
@ -205,15 +205,15 @@ onMounted(() => {
|
||||||
// flex: auto;
|
// flex: auto;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 0.26042vw;
|
border-radius: 0.26042vw;
|
||||||
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
|
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 0.83333vw;
|
padding: 0.83333vw;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden !important;
|
overflow-x: hidden !important;
|
||||||
-moz-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-o-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-ms-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -89,7 +89,7 @@
|
||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="主要功能:" prop="equfunction" style="width: 100%">
|
<el-form-item label="主要功能:" prop="equfunction" style="width: 100%;">
|
||||||
<el-input
|
<el-input
|
||||||
:readonly="props.readonly"
|
:readonly="props.readonly"
|
||||||
placeholder="请输入主要功能"
|
placeholder="请输入主要功能"
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装备照片:">
|
<el-form-item label="工作附件:">
|
||||||
<el-upload
|
<el-upload
|
||||||
class="avatar-uploader"
|
class="avatar-uploader"
|
||||||
ref="upload"
|
ref="upload"
|
||||||
|
|
@ -113,7 +113,7 @@
|
||||||
<img
|
<img
|
||||||
v-if="addPostFactorForm.equipPhoto"
|
v-if="addPostFactorForm.equipPhoto"
|
||||||
:src="addPostFactorForm.equipPhoto"
|
:src="addPostFactorForm.equipPhoto"
|
||||||
style="width: 100%; height: 100%"
|
style="width: 100%; height: 100%;"
|
||||||
/>
|
/>
|
||||||
<el-icon v-else class="avatar-uploader-icon">
|
<el-icon v-else class="avatar-uploader-icon">
|
||||||
<Plus />
|
<Plus />
|
||||||
|
|
|
||||||
|
|
@ -1,176 +1,16 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="content-top">
|
|
||||||
<div
|
|
||||||
class="danger-bg-01"
|
|
||||||
:style="{ 'background-color': item.color }"
|
|
||||||
v-for="(item, index) in dangerlist"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<div style="position: absolute">
|
|
||||||
<div class="danger-left-top">
|
|
||||||
<img src="@/assets/images/yinhuan.png" alt="" />
|
|
||||||
<span>{{ item.name }}风险</span>
|
|
||||||
</div>
|
|
||||||
<div class="danger-left-num">{{ item.num }}</div>
|
|
||||||
</div>
|
|
||||||
<div class="danger-right">
|
|
||||||
<img class="background" src="@/assets/images/zhuangshi.png" alt="" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="content-middle">
|
|
||||||
<div class="content-title">风险统计</div>
|
|
||||||
<div class="content-middle-danger">
|
|
||||||
<div
|
|
||||||
class="middle-danger"
|
|
||||||
:style="{ 'background-color': item.back, color: item.color }"
|
|
||||||
v-for="(item, index) in list"
|
|
||||||
:key="index"
|
|
||||||
>
|
|
||||||
<div class="layui-card-header">{{ item.name }}</div>
|
|
||||||
<div class="layui-card-body">{{ item.num }}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="content-middle" style="height: 22vw">
|
|
||||||
<div class="content-title">统计表</div>
|
|
||||||
<div ref="listDangerCon" class="list-listDangerCon"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { onMounted, reactive, ref, shallowRef } from "vue";
|
import { onMounted, reactive, ref, shallowRef } from "vue";
|
||||||
import { getcompanyEntNum } from "@/api/onefile";
|
|
||||||
import * as echarts from "echarts";
|
|
||||||
// 用户id
|
// 用户id
|
||||||
import useUserStore from "@/store/modules/user";
|
// import useUserStore from "@/store/modules/user";
|
||||||
const userStore = useUserStore();
|
// const userStore = useUserStore();
|
||||||
const user = ref(JSON.parse(userStore.userInfo));
|
// const user = ref(JSON.parse(userStore.userInfo));
|
||||||
const userId = ref(user.value.userId);
|
// const userId = ref(user.value.userId);
|
||||||
const dangerlist = ref([
|
|
||||||
{ name: "红色", num: 0, color: "#FF6A6A" },
|
|
||||||
{ name: "橙色", num: 0, color: "#FF9069" },
|
|
||||||
{ name: "黄色", num: 0, color: "#F2D254" },
|
|
||||||
{ name: "蓝色", num: 0, color: "#78A5F6" },
|
|
||||||
]);
|
|
||||||
const list = ref([
|
|
||||||
{ name: "检查次数", num: 1971, back: "#FFEBEB", color: "#FF5353" },
|
|
||||||
{ name: "隐患总数", num: 134, back: "#EEF4FF", color: "#4D82E1" },
|
|
||||||
{ name: "已整改", num: 121, back: "#E4F4F2", color: "#009688" },
|
|
||||||
]);
|
|
||||||
const listDangerCon = ref();
|
|
||||||
const chart = shallowRef();
|
|
||||||
const optionWater = reactive({
|
|
||||||
tooltip: {
|
|
||||||
trigger: "axis",
|
|
||||||
},
|
|
||||||
toolbox: {
|
|
||||||
feature: {
|
|
||||||
// dataView: { show: true, readOnly: false },
|
|
||||||
// magicType: { show: true, type: ['line', 'bar'] },
|
|
||||||
// restore: { show: true },
|
|
||||||
saveAsImage: { show: true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
data: ["检查次数", "隐患总数", "已整改"],
|
|
||||||
},
|
|
||||||
xAxis: [
|
|
||||||
{
|
|
||||||
type: "category",
|
|
||||||
data: [
|
|
||||||
"1月",
|
|
||||||
"2月",
|
|
||||||
"3月",
|
|
||||||
"4月",
|
|
||||||
"5月",
|
|
||||||
"6月",
|
|
||||||
"7月",
|
|
||||||
"8月",
|
|
||||||
"9月",
|
|
||||||
"10月",
|
|
||||||
"11月",
|
|
||||||
"12月",
|
|
||||||
],
|
|
||||||
axisPointer: {
|
|
||||||
type: "shadow",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
yAxis: [
|
|
||||||
{
|
|
||||||
type: "value",
|
|
||||||
axisLabel: {
|
|
||||||
formatter: "{value} 次",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
name: "检查次数",
|
|
||||||
type: "bar",
|
|
||||||
tooltip: {
|
|
||||||
valueFormatter: function (value) {
|
|
||||||
return value;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data: [
|
|
||||||
2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "隐患总数",
|
|
||||||
type: "bar",
|
|
||||||
tooltip: {
|
|
||||||
valueFormatter: function (value) {
|
|
||||||
return value;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data: [
|
|
||||||
2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "已整改",
|
|
||||||
type: "bar",
|
|
||||||
tooltip: {
|
|
||||||
valueFormatter: function (value) {
|
|
||||||
return value;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
data: [
|
|
||||||
2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3,
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
});
|
|
||||||
//初始化echarts
|
|
||||||
const initCharts = () => {
|
|
||||||
chart.value = echarts.init(listDangerCon.value);
|
|
||||||
chart.value.setOption(optionWater);
|
|
||||||
};
|
|
||||||
const chartResize = () => {
|
|
||||||
chart.value.resize();
|
|
||||||
};
|
|
||||||
// 获取企业统计
|
|
||||||
const getCompanyEntNum = () => {
|
|
||||||
let params = {
|
|
||||||
userId: userId.value,
|
|
||||||
dataType: 2,
|
|
||||||
};
|
|
||||||
|
|
||||||
getcompanyEntNum(params).then((res: any) => {
|
|
||||||
dangerlist.value[0].num = res.data.redNum;
|
|
||||||
dangerlist.value[1].num = res.data.orangeNum;
|
|
||||||
dangerlist.value[2].num = res.data.yellowNum;
|
|
||||||
dangerlist.value[3].num = res.data.blueNum;
|
|
||||||
});
|
|
||||||
};
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
initCharts();
|
|
||||||
chartResize();
|
|
||||||
getCompanyEntNum();
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -179,90 +19,4 @@ onMounted(() => {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
.content-top {
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.danger-bg-01 {
|
|
||||||
height: 160px;
|
|
||||||
width: 24%;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.danger-left-top {
|
|
||||||
color: white;
|
|
||||||
padding: 10px 15px;
|
|
||||||
img {
|
|
||||||
vertical-align: -2px;
|
|
||||||
margin-right: 5px;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
span {
|
|
||||||
font-size: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.danger-left-num {
|
|
||||||
font-size: 52px;
|
|
||||||
padding: 15px;
|
|
||||||
color: rgb(255 255 255);
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
.background {
|
|
||||||
float: right;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
.risk-unit {
|
|
||||||
font-size: 16px;
|
|
||||||
color: white;
|
|
||||||
position: absolute;
|
|
||||||
right: 8px;
|
|
||||||
padding-top: 115px;
|
|
||||||
}
|
|
||||||
.danger-right {
|
|
||||||
}
|
|
||||||
.content-middle {
|
|
||||||
background: #fff;
|
|
||||||
border-radius: 6px;
|
|
||||||
padding: 10px;
|
|
||||||
margin-top: 20px;
|
|
||||||
.content-title {
|
|
||||||
width: 100%;
|
|
||||||
height: 42px;
|
|
||||||
line-height: 42px;
|
|
||||||
color: #333;
|
|
||||||
border-bottom: 1px solid #f6f6f6;
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
.content-middle-danger {
|
|
||||||
padding-top: 10px;
|
|
||||||
width: 100%;
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
.middle-danger {
|
|
||||||
width: 33%;
|
|
||||||
padding: 10px;
|
|
||||||
border-radius: 5px;
|
|
||||||
|
|
||||||
.layui-card-header {
|
|
||||||
height: 42px;
|
|
||||||
line-height: 42px;
|
|
||||||
font-size: 16px;
|
|
||||||
}
|
|
||||||
.layui-card-body {
|
|
||||||
font-size: 36px;
|
|
||||||
line-height: 36px;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
word-break: break-all;
|
|
||||||
white-space: nowrap;
|
|
||||||
margin: 10px 0;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.list-listDangerCon {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -19,8 +19,8 @@ const formType = ref("login");
|
||||||
// 登录
|
// 登录
|
||||||
const loginFormRef = ref();
|
const loginFormRef = ref();
|
||||||
const loginForm = ref({
|
const loginForm = ref({
|
||||||
sysusername: localStorage.login_account || "admin",
|
sysusername: localStorage.login_account || "",
|
||||||
syspassword: "guixi2023",
|
syspassword: "",
|
||||||
verCode: "",
|
verCode: "",
|
||||||
verKey: "",
|
verKey: "",
|
||||||
remember: !!localStorage.login_account,
|
remember: !!localStorage.login_account,
|
||||||
|
|
@ -242,7 +242,7 @@ const handleClose = () => {
|
||||||
:src="img"
|
:src="img"
|
||||||
alt=""
|
alt=""
|
||||||
@click="getCode"
|
@click="getCode"
|
||||||
style="width: 100%; height: 100%"
|
style="width: 100%; height: 100%;"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
|
@ -258,7 +258,7 @@ const handleClose = () => {
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="large"
|
size="large"
|
||||||
style="width: 100%"
|
style="width: 100%;"
|
||||||
@click.prevent="handleLogin"
|
@click.prevent="handleLogin"
|
||||||
>登录</el-button
|
>登录</el-button
|
||||||
>
|
>
|
||||||
|
|
@ -308,7 +308,7 @@ const handleClose = () => {
|
||||||
:src="img"
|
:src="img"
|
||||||
alt=""
|
alt=""
|
||||||
@click="getCode"
|
@click="getCode"
|
||||||
style="width: 100%; height: 100%"
|
style="width: 100%; height: 100%;"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
</el-input>
|
</el-input>
|
||||||
|
|
@ -342,7 +342,7 @@ const handleClose = () => {
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
type="primary"
|
type="primary"
|
||||||
size="large"
|
size="large"
|
||||||
style="width: 100%; margin-top: 20px"
|
style="width: 100%; margin-top: 20px;"
|
||||||
@click.prevent="handleReset"
|
@click.prevent="handleReset"
|
||||||
>确认</el-button
|
>确认</el-button
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -76,11 +76,11 @@ import useUserStore from "@/store/modules/user";
|
||||||
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
||||||
import { getYears } from "@/utils/common";
|
import { getYears } from "@/utils/common";
|
||||||
|
|
||||||
import {
|
// import {
|
||||||
getFactorCheckstandard,
|
// getFactorCheckstandard,
|
||||||
addSafeduty,
|
// addSafeduty,
|
||||||
updateSafeduty,
|
// updateSafeduty,
|
||||||
} from "@/api/performDuties";
|
// } from "@/api/performDuties";
|
||||||
|
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
|
||||||
|
|
@ -133,11 +133,11 @@ import useUserStore from "@/store/modules/user";
|
||||||
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
||||||
import { getYears } from "@/utils/common";
|
import { getYears } from "@/utils/common";
|
||||||
|
|
||||||
import {
|
// import {
|
||||||
getFactorCheckstandard,
|
// getFactorCheckstandard,
|
||||||
addFactor,
|
// addFactor,
|
||||||
updateFactor,
|
// updateFactor,
|
||||||
} from "@/api/performDuties";
|
// } from "@/api/performDuties";
|
||||||
|
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
|
||||||
|
|
@ -32,9 +32,9 @@
|
||||||
/>
|
/>
|
||||||
<div>
|
<div>
|
||||||
<TitleC titleName="履职清单" />
|
<TitleC titleName="履职清单" />
|
||||||
<div class="detail-content" style="flex-direction: column">
|
<div class="detail-content" style="flex-direction: column;">
|
||||||
<!-- 条件筛选 -->
|
<!-- 条件筛选 -->
|
||||||
<div class="h-layout h-center" style="margin-bottom: 16px">
|
<div class="h-layout h-center" style="margin-bottom: 16px;">
|
||||||
<div class="h-layout">
|
<div class="h-layout">
|
||||||
<div
|
<div
|
||||||
class="tool-item"
|
class="tool-item"
|
||||||
|
|
@ -130,7 +130,7 @@
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span
|
<span
|
||||||
v-if="scope.row.isfinish == '已完成'"
|
v-if="scope.row.isfinish == '已完成'"
|
||||||
style="color: green"
|
style="color: green;"
|
||||||
>
|
>
|
||||||
{{ scope.row.isfinish }}
|
{{ scope.row.isfinish }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -191,7 +191,7 @@
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</div>
|
</div>
|
||||||
<TitleC titleName="安全生产职责清单" />
|
<TitleC titleName="安全生产职责清单" />
|
||||||
<div class="h-layout h-center" style="margin-bottom: 16px">
|
<div class="h-layout h-center" style="margin-bottom: 16px;">
|
||||||
<div class="h-layout">
|
<div class="h-layout">
|
||||||
<div
|
<div
|
||||||
class="tool-item"
|
class="tool-item"
|
||||||
|
|
@ -256,14 +256,14 @@
|
||||||
<script lang='ts' setup>
|
<script lang='ts' setup>
|
||||||
import { onMounted, reactive, ref } from "vue";
|
import { onMounted, reactive, ref } from "vue";
|
||||||
import { ElMessage, ElMessageBox } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import {
|
// import {
|
||||||
listPerformDetail,
|
// listPerformDetail,
|
||||||
getFactorType,
|
// getFactorType,
|
||||||
factorPage,
|
// factorPage,
|
||||||
delFactor,
|
// delFactor,
|
||||||
getSafedutyList,
|
// getSafedutyList,
|
||||||
delSafeduty,
|
// delSafeduty,
|
||||||
} from "@/api/performDuties";
|
// } from "@/api/performDuties";
|
||||||
import Adddetails from "./details.vue";
|
import Adddetails from "./details.vue";
|
||||||
import AddSafedutydetails from "./Safedutydetails.vue";
|
import AddSafedutydetails from "./Safedutydetails.vue";
|
||||||
import { getYears } from "@/utils/common";
|
import { getYears } from "@/utils/common";
|
||||||
|
|
@ -445,21 +445,21 @@ onMounted(() => {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 0.26042vw;
|
border-radius: 0.26042vw;
|
||||||
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
|
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 0.83333vw;
|
padding: 0.83333vw;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: hidden !important;
|
overflow-x: hidden !important;
|
||||||
-moz-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-o-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-ms-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
.option-tv {
|
.option-tv {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: --fontSize13;
|
font-size: --fontsize13;
|
||||||
color: --fontColor;
|
color: --fontcolor;
|
||||||
// margin-right: 20px;
|
// margin-right: 20px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -22,13 +22,13 @@
|
||||||
value-format="YYYY-MM-DD" :size="size" />
|
value-format="YYYY-MM-DD" :size="size" />
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item style="width: 100%" label="接受岗位" prop="performId">
|
<el-form-item style="width: 100%;" label="接受岗位" prop="performId">
|
||||||
<el-select v-model="ruleForm.performId" multiple class="m-2" placeholder="请选择接收岗位">
|
<el-select v-model="ruleForm.performId" multiple class="m-2" placeholder="请选择接收岗位">
|
||||||
<el-option v-for="item in performOptions" :key="item.listperformid" :label="item.performclassname"
|
<el-option v-for="item in performOptions" :key="item.listperformid" :label="item.performclassname"
|
||||||
:value="item.listperformid" />
|
:value="item.listperformid" />
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item style="width: 100%" label="任务内容" prop="content">
|
<el-form-item style="width: 100%;" label="任务内容" prop="content">
|
||||||
<el-input :rows="5" v-model="ruleForm.content" type="textarea" placeholder="请输入任务内容" />
|
<el-input :rows="5" v-model="ruleForm.content" type="textarea" placeholder="请输入任务内容" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
|
@ -41,7 +41,7 @@ import { reactive, ref, onMounted, watch } from "vue";
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
import type { FormInstance, FormRules } from 'element-plus'
|
import type { FormInstance, FormRules } from 'element-plus'
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import { getSpecialTasksTypeList, getSpecialTasksPerformList, addSpecialTasks } from "@/api/performDuties";
|
// import { getSpecialTasksTypeList, getSpecialTasksPerformList, addSpecialTasks } from "@/api/performDuties";
|
||||||
import { getUUID, FileType } from "@/utils/common";
|
import { getUUID, FileType } from "@/utils/common";
|
||||||
const baseUrl = ref(import.meta.env.VITE_UPLOAD_IMG_URL);
|
const baseUrl = ref(import.meta.env.VITE_UPLOAD_IMG_URL);
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
@ -140,14 +140,12 @@ watch(
|
||||||
.detailForm-content {
|
.detailForm-content {
|
||||||
margin-right: 30px;
|
margin-right: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-form) {
|
:deep(.el-form) {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
// justify-content: space-around;
|
// justify-content: space-around;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-form-item) {
|
:deep(.el-form-item) {
|
||||||
width: 47%;
|
width: 47%;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@
|
||||||
<div class="finish-progress">
|
<div class="finish-progress">
|
||||||
<xinprogress :tips="dutyProgress.completion + '% 总进度'" :percentage="dutyProgress.factorNum"
|
<xinprogress :tips="dutyProgress.completion + '% 总进度'" :percentage="dutyProgress.factorNum"
|
||||||
:total="dutyProgress.factorTotal" :pformat="processFormat"></xinprogress>
|
:total="dutyProgress.factorTotal" :pformat="processFormat"></xinprogress>
|
||||||
<div class="tool-item" style="margin-right: 0" @click="dutyVisible = true">
|
<div class="tool-item" style="margin-right: 0;" @click="dutyVisible = true">
|
||||||
<svg-icon name="add" class="icon" />
|
<svg-icon name="add" class="icon" />
|
||||||
<span>新增履职记录</span>
|
<span>新增履职记录</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -61,18 +61,18 @@
|
||||||
<span>序列</span>
|
<span>序列</span>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="15">
|
<el-col :span="15">
|
||||||
<span style="justify-content: flex-start">内容</span>
|
<span style="justify-content: flex-start;">内容</span>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<span>完成进度</span>
|
<span>完成进度</span>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-row style="height: inherit; margin-top: -10px" :gutter="10">
|
<el-row style="height: inherit; margin-top: -10px;" :gutter="10">
|
||||||
<el-col :span="24" style="height: 85%; overflow-y: scroll">
|
<el-col :span="24" style="height: 85%; overflow-y: scroll;">
|
||||||
<div class="duty-list-content">
|
<div class="duty-list-content">
|
||||||
<div class="duty-list-item" v-for="(item, index) in dutyList" :key="index" @click="handleShow(item)">
|
<div class="duty-list-item" v-for="(item, index) in dutyList" :key="index" @click="handleShow(item)">
|
||||||
<el-row type="flex" align="middle" style="margin-bottom: 0">
|
<el-row type="flex" align="middle" style="margin-bottom: 0;">
|
||||||
<el-col :span="2">
|
<el-col :span="2">
|
||||||
<span class="number">{{ index + 1 }}</span>
|
<span class="number">{{ index + 1 }}</span>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
@ -82,15 +82,15 @@
|
||||||
<el-col :span="7">
|
<el-col :span="7">
|
||||||
<div class="finish-progress">
|
<div class="finish-progress">
|
||||||
<xinprogress :percentage="item.factorNum" :total="item.factorTotal" :pformat="processFormat"
|
<xinprogress :percentage="item.factorNum" :total="item.factorTotal" :pformat="processFormat"
|
||||||
style="width: 100%"></xinprogress>
|
style="width: 100%;"></xinprogress>
|
||||||
<svg-icon name="arrow" style="cursor: pointer" class="icon_class"
|
<svg-icon name="arrow" style="cursor: pointer;" class="icon_class"
|
||||||
:class="{ 'is-active': item.show }" :cursor="true"></svg-icon>
|
:class="{ 'is-active': item.show }" :cursor="true"></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-collapse-transition>
|
<el-collapse-transition>
|
||||||
<div class="resumption-record-table" v-show="item.show">
|
<div class="resumption-record-table" v-show="item.show">
|
||||||
<el-table :data="resumptionRecords" style="width: 100%" header-row-class-name="el-one-header"
|
<el-table :data="resumptionRecords" style="width: 100%;" header-row-class-name="el-one-header"
|
||||||
border>
|
border>
|
||||||
<el-table-column prop="finishtime" label="时间" align="center"></el-table-column>
|
<el-table-column prop="finishtime" label="时间" align="center"></el-table-column>
|
||||||
<el-table-column prop="workcnt" label="履职记录" align="center"></el-table-column>
|
<el-table-column prop="workcnt" label="履职记录" align="center"></el-table-column>
|
||||||
|
|
@ -123,7 +123,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg" style="padding-top: 0">
|
<div class="bg" style="padding-top: 0;">
|
||||||
<el-tabs class="tabs-msg" v-model="activeIndexMsg" @tab-change="changeActiveIndexMsg">
|
<el-tabs class="tabs-msg" v-model="activeIndexMsg" @tab-change="changeActiveIndexMsg">
|
||||||
<el-tab-pane v-for="item in msgTab" :label="item.title" :name="item.val" :key="item.title">
|
<el-tab-pane v-for="item in msgTab" :label="item.title" :name="item.val" :key="item.title">
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
@ -133,10 +133,9 @@
|
||||||
<svg-icon name="arrow" class="icon"></svg-icon>
|
<svg-icon name="arrow" class="icon"></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
<div style="
|
<div style="
|
||||||
overflow-y: scroll;
|
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
height: 90%;
|
height: 90%;
|
||||||
margin: 0px -16px 16px 0px;
|
margin: 0 -16px 16px 0;
|
||||||
">
|
">
|
||||||
<div class="v-layout msg-item" v-for="item in msgList" :key="item.id"
|
<div class="v-layout msg-item" v-for="item in msgList" :key="item.id"
|
||||||
@click="(msgDetailsVisible = true), (MsgDetailsData = item)">
|
@click="(msgDetailsVisible = true), (MsgDetailsData = item)">
|
||||||
|
|
@ -167,7 +166,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg" style="padding-top: 0">
|
<div class="bg" style="padding-top: 0;">
|
||||||
<el-tabs class="tabs-msg" v-model="activeIndexTask" @tab-change="changeActiveIndexTask">
|
<el-tabs class="tabs-msg" v-model="activeIndexTask" @tab-change="changeActiveIndexTask">
|
||||||
<el-tab-pane v-for="item in taskTab" :label="item.title" :name="item.val" :key="item.title">
|
<el-tab-pane v-for="item in taskTab" :label="item.title" :name="item.val" :key="item.title">
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
|
@ -176,7 +175,7 @@
|
||||||
<span>查看更多</span>
|
<span>查看更多</span>
|
||||||
<svg-icon name="arrow" class="icon"></svg-icon>
|
<svg-icon name="arrow" class="icon"></svg-icon>
|
||||||
</div>
|
</div>
|
||||||
<div style="overflow-y: scroll; height: 80%">
|
<div style="overflow-y: scroll; height: 80%;">
|
||||||
<div class="v-layout task-item" v-for="item in taskList" :key="item.id">
|
<div class="v-layout task-item" v-for="item in taskList" :key="item.id">
|
||||||
<div class="h-layout space-between">
|
<div class="h-layout space-between">
|
||||||
<span class="title">【{{ item.typeTitle }}】</span>
|
<span class="title">【{{ item.typeTitle }}】</span>
|
||||||
|
|
@ -193,7 +192,7 @@
|
||||||
已超时
|
已超时
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: flex; font-size: 12px;color: #999999;justify-content: space-between;">
|
<div style="display: flex; font-size: 12px;color: #999;justify-content: space-between;">
|
||||||
<span class="con">
|
<span class="con">
|
||||||
{{ item.content }}
|
{{ item.content }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -216,7 +215,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="bg" style="
|
<div class="bg" style="
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0px;
|
padding-bottom: 0;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
height: 82%;
|
height: 82%;
|
||||||
">
|
">
|
||||||
|
|
@ -231,7 +230,7 @@
|
||||||
<div class="flex-1"></div>
|
<div class="flex-1"></div>
|
||||||
<div class="h-layout">
|
<div class="h-layout">
|
||||||
<span class="time flex-1">{{ item.createTime }}</span>
|
<span class="time flex-1">{{ item.createTime }}</span>
|
||||||
<span class="time" style="color: var(--blue)">
|
<span class="time" style="color: var(--blue);">
|
||||||
已学习
|
已学习
|
||||||
{{ item.viewingtimes || 0 }}次
|
{{ item.viewingtimes || 0 }}次
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -244,7 +243,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- 添加履职记录 -->
|
<!-- 添加履职记录 -->
|
||||||
<AdddDuty :visible="dutyVisible" :form="{ listdetailid: getUUID() }" @close="getDutyList" />
|
<!-- <AdddDuty :visible="dutyVisible" :form="{ listdetailid: getUUID() }" @close="getDutyList" /> -->
|
||||||
<AddMsg :visible="msgVisible" :form="{}" @close="msgVisible = false" />
|
<AddMsg :visible="msgVisible" :form="{}" @close="msgVisible = false" />
|
||||||
<MsgDetails :visible="msgDetailsVisible" :data="MsgDetailsData" @close="msgDetailsVisible = false" />
|
<MsgDetails :visible="msgDetailsVisible" :data="MsgDetailsData" @close="msgDetailsVisible = false" />
|
||||||
<StuDetails :visible="stuDetailsVisible" :data="stuDetailsData" @close="stuDetailsVisible = false" />
|
<StuDetails :visible="stuDetailsVisible" :data="stuDetailsData" @close="stuDetailsVisible = false" />
|
||||||
|
|
@ -255,13 +254,13 @@
|
||||||
import { getCurrentInstance, onMounted, ref } from "vue";
|
import { getCurrentInstance, onMounted, ref } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import { getUUID } from "@/utils/common";
|
import { getUUID } from "@/utils/common";
|
||||||
import {
|
// import {
|
||||||
factorList, performRecord, factorProgress, getDataCount, getSpecialTasksUserList,
|
// factorList, performRecord, factorProgress, getDataCount, getSpecialTasksUserList,
|
||||||
getSpecialTasksPage, getGovNoticePage, getGovNoticeUserPage, getUserStudyPage, getUserStudy
|
// getSpecialTasksPage, getGovNoticePage, getGovNoticeUserPage, getUserStudyPage, getUserStudy
|
||||||
} from "@/api/performDuties";
|
// } from "@/api/performDuties";
|
||||||
|
|
||||||
import xinprogress from "@/views/components/Progress.vue";
|
import xinprogress from "@/views/components/Progress.vue";
|
||||||
import AdddDuty from "@/views/resumption/record/details.vue";
|
// import AdddDuty from "@/views/resumption/record/details.vue";
|
||||||
import AddMsg from "./details.vue";
|
import AddMsg from "./details.vue";
|
||||||
import MsgDetails from "./msgDetails.vue";
|
import MsgDetails from "./msgDetails.vue";
|
||||||
import StuDetails from "./stuDetails.vue";
|
import StuDetails from "./stuDetails.vue";
|
||||||
|
|
@ -643,21 +642,18 @@ onMounted(() => {
|
||||||
// 顶部
|
// 顶部
|
||||||
.top {
|
.top {
|
||||||
height: 15%;
|
height: 15%;
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
width: 24%;
|
width: 24%;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|
@ -665,37 +661,32 @@ onMounted(() => {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title::before {
|
.title::before {
|
||||||
content: "";
|
content: "";
|
||||||
width: 52%;
|
width: 52%;
|
||||||
height: 4px;
|
height: 4px;
|
||||||
background: #eeeeee;
|
background: #eee;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.img {
|
.img {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.val {
|
.val {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: #61a9f5;
|
color: #61a9f5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.unit {
|
.unit {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
color: #777777;
|
color: #777;
|
||||||
margin-left: 4px;
|
margin-left: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
|
@ -706,72 +697,62 @@ onMounted(() => {
|
||||||
background: linear-gradient(130deg, #a8c0ee 0%, #f4c4ec 100%);
|
background: linear-gradient(130deg, #a8c0ee 0%, #f4c4ec 100%);
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
padding: 24px 21px;
|
padding: 24px 21px;
|
||||||
|
|
||||||
.user {
|
.user {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
|
||||||
.avatar {
|
.avatar {
|
||||||
width: 63px;
|
width: 63px;
|
||||||
height: 63px;
|
height: 63px;
|
||||||
margin-right: 24px;
|
margin-right: 24px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tips {
|
.tips {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
color: #ffffff;
|
color: #fff;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.point {
|
.point {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #ffffff;
|
color: #fff;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
div:active {
|
div:active {
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn div:nth-child(1) {
|
.btn div:nth-child(1) {
|
||||||
width: 130px;
|
width: 130px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
box-shadow: 0px 0px 3px 1px #efb2ea;
|
box-shadow: 0 0 3px 1px #efb2ea;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #4589fe;
|
color: #4589fe;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn div:nth-child(2) {
|
.btn div:nth-child(2) {
|
||||||
width: 130px;
|
width: 130px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
margin-top: 14px;
|
margin-top: 14px;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
box-shadow: 0px 0px 3px 1px #efb2ea;
|
box-shadow: 0 0 3px 1px #efb2ea;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #f78600;
|
color: #f78600;
|
||||||
|
|
@ -783,31 +764,26 @@ onMounted(() => {
|
||||||
.mid {
|
.mid {
|
||||||
height: 42.5%;
|
height: 42.5%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-right: 1%;
|
margin-right: 1%;
|
||||||
|
|
||||||
.finish-progress {
|
.finish-progress {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
.p-svg {
|
.p-svg {
|
||||||
margin-left: 16px;
|
margin-left: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-text {
|
.content-text {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #e6e6e6;
|
background: #e6e6e6;
|
||||||
padding: 8px 0;
|
padding: 8px 0;
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
color: #23293e;
|
color: #23293e;
|
||||||
|
|
@ -818,94 +794,78 @@ onMounted(() => {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.duty-list-content {
|
.duty-list-content {
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
height: inherit;
|
height: inherit;
|
||||||
|
|
||||||
.duty-list-item {
|
.duty-list-item {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
padding-left: 0;
|
padding-left: 0;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
.number {
|
.number {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #606266;
|
color: #606266;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.resumption-record-table {
|
.resumption-record-table {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.duty-list-item:nth-child(odd) {
|
.duty-list-item:nth-child(odd) {
|
||||||
background-color: rgba(230, 230, 230, 0.1);
|
background-color: rgb(230 230 230 / 10%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.duty-list-item:nth-child(even) {
|
.duty-list-item:nth-child(even) {
|
||||||
background-color: rgba(230, 230, 230, 0.3);
|
background-color: rgb(230 230 230 / 30%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
width: 30%;
|
width: 30%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
.bg {
|
.bg {
|
||||||
position: relative;
|
position: relative;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.msg-item {
|
.msg-item {
|
||||||
padding: 12px 0;
|
padding: 12px 0;
|
||||||
border-bottom: 1px dashed #e6e6e6;
|
border-bottom: 1px dashed #e6e6e6;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #0a234a;
|
color: #0a234a;
|
||||||
display: -webkit-box;
|
display: box;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 2;
|
-webkit-line-clamp: 2;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.con {
|
.con {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #222222;
|
color: #222;
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.time {
|
.time {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #545454;
|
color: #545454;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.more {
|
.more {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #999999;
|
color: #999;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
right: 16px;
|
right: 16px;
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
|
|
@ -918,66 +878,56 @@ onMounted(() => {
|
||||||
.bottom {
|
.bottom {
|
||||||
height: 42.5%;
|
height: 42.5%;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
margin-right: 1%;
|
margin-right: 1%;
|
||||||
|
|
||||||
.bg {
|
.bg {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.task-item {
|
.task-item {
|
||||||
padding: 12px 0;
|
padding: 12px 0;
|
||||||
border-bottom: 1px dashed #e6e6e6;
|
border-bottom: 1px dashed #e6e6e6;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #0a234a;
|
color: #0a234a;
|
||||||
display: -webkit-box;
|
display: box;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 2;
|
-webkit-line-clamp: 2;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.con {
|
.con {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #222222;
|
color: #222;
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.more {
|
.more {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #999999;
|
color: #999;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 10px;
|
top: 10px;
|
||||||
right: 16px;
|
right: 16px;
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.right {
|
.right {
|
||||||
width: 30%;
|
width: 30%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
.item-study {
|
.item-study {
|
||||||
margin-bottom: 1%;
|
margin-bottom: 1%;
|
||||||
border-bottom: 1px dashed #e6e6e6;
|
border-bottom: 1px dashed #e6e6e6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.study-l {
|
.study-l {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 154px;
|
width: 154px;
|
||||||
|
|
@ -985,12 +935,10 @@ onMounted(() => {
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
margin: 15px 0;
|
margin: 15px 0;
|
||||||
border-bottom: 1px solid #f5f5f5;
|
border-bottom: 1px solid #f5f5f5;
|
||||||
|
|
||||||
.img {
|
.img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tags {
|
.tags {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
|
@ -998,25 +946,22 @@ onMounted(() => {
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding: 3px 15px;
|
padding: 3px 15px;
|
||||||
background: rgba(1, 1, 1, 0.4);
|
background: rgb(1 1 1 / 40%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.study-r {
|
.study-r {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
margin-left: 24px;
|
margin-left: 24px;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #333333;
|
color: #333;
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
display: -webkit-box;
|
display: box;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 2;
|
-webkit-line-clamp: 2;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.time {
|
.time {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
color: #545454;
|
color: #545454;
|
||||||
|
|
@ -1025,54 +970,46 @@ onMounted(() => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: 16px 16px 16px 0;
|
padding: 16px 16px 16px 0;
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #151933;
|
color: #151933;
|
||||||
}
|
}
|
||||||
|
|
||||||
.more {
|
.more {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
color: #999999;
|
color: #999;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
svg {
|
svg {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg {
|
.bg {
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
border-radius: 16px;
|
border-radius: 16px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.table {
|
.table {
|
||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.filter-tab {
|
.filter-tab {
|
||||||
background: #f1f2f5;
|
background: #f1f2f5;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
padding: 5px;
|
padding: 5px;
|
||||||
color: #777777;
|
color: #777;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
|
|
||||||
.item-tab {
|
.item-tab {
|
||||||
position: relative;
|
position: relative;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
@ -1081,7 +1018,6 @@ onMounted(() => {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
transition: all 0.5s ease;
|
transition: all 0.5s ease;
|
||||||
|
|
||||||
.tips-number {
|
.tips-number {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: -5px;
|
top: -5px;
|
||||||
|
|
@ -1097,20 +1033,17 @@ onMounted(() => {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-checked {
|
.item-checked {
|
||||||
color: #3587fb;
|
color: #3587fb;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.radio {
|
.radio {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #3587fb;
|
color: #3587fb;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
|
|
@ -1118,62 +1051,49 @@ onMounted(() => {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.have-radio {
|
.have-radio {
|
||||||
color: #3587fb;
|
color: #3587fb;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
fill: #3587fb;
|
fill: #3587fb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.complete-radio {
|
.complete-radio {
|
||||||
color: #2ECB89;
|
color: #2ecb89;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
fill: #2ECB89;
|
fill: #2ecb89;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeout-radio {
|
.timeout-radio {
|
||||||
color: #fb4e33;
|
color: #fb4e33;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
fill: #fb4e33;
|
fill: #fb4e33;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-progress) {
|
:deep(.el-progress) {
|
||||||
width: 40%;
|
width: 40%;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-tabs__item) {
|
:deep(.el-tabs__item) {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #222222;
|
color: #222;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
width: 80px;
|
width: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-tabs__item.is-active) {
|
:deep(.el-tabs__item.is-active) {
|
||||||
color: #4882ee;
|
color: #4882ee;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-tabs__active-bar) {
|
:deep(.el-tabs__active-bar) {
|
||||||
height: 4px;
|
height: 4px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
width: 80px;
|
width: 80px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-tabs__header) {
|
:deep(.el-tabs__header) {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.el-table__inner-wrapper::before) {
|
:deep(.el-table__inner-wrapper::before) {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
|
|
||||||
.msgListContent {
|
.msgListContent {
|
||||||
display: -webkit-box;
|
display: box;
|
||||||
-webkit-box-orient: vertical;
|
-webkit-box-orient: vertical;
|
||||||
-webkit-line-clamp: 2;
|
-webkit-line-clamp: 2;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@
|
||||||
</template>
|
</template>
|
||||||
<script lang='ts' setup>
|
<script lang='ts' setup>
|
||||||
import { onMounted, reactive, ref } from "vue";
|
import { onMounted, reactive, ref } from "vue";
|
||||||
import { getGovNoticeUserPage, getGovNoticePage, delGovNotice } from "@/api/performDuties"
|
// import { getGovNoticeUserPage, getGovNoticePage, delGovNotice } from "@/api/performDuties"
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import MsgDetails from "../msgDetails.vue";
|
import MsgDetails from "../msgDetails.vue";
|
||||||
|
|
@ -214,11 +214,9 @@ onMounted(() => {
|
||||||
-ms-box-sizing: border-box;
|
-ms-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-footer button:first-child {
|
.dialog-footer button:first-child {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-uploader .avatar {
|
.avatar-uploader .avatar {
|
||||||
width: 178px;
|
width: 178px;
|
||||||
height: 178px;
|
height: 178px;
|
||||||
|
|
@ -234,11 +232,9 @@ onMounted(() => {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: var(--el-transition-duration-fast);
|
transition: var(--el-transition-duration-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
.avatar-uploader .el-upload:hover {
|
||||||
border-color: var(--el-color-primary);
|
border-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
.el-icon.avatar-uploader-icon {
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
color: #8c939d;
|
color: #8c939d;
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
</template>
|
</template>
|
||||||
<script lang='ts' setup>
|
<script lang='ts' setup>
|
||||||
import { onMounted, reactive, ref } from "vue";
|
import { onMounted, reactive, ref } from "vue";
|
||||||
import { getSpecialTasksUserList, getSpecialTasksPage, delSpecialTasks } from "@/api/performDuties"
|
// import { getSpecialTasksUserList, getSpecialTasksPage, delSpecialTasks } from "@/api/performDuties"
|
||||||
import { ElMessage } from 'element-plus'
|
import { ElMessage } from 'element-plus'
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
|
|
@ -205,22 +205,18 @@ onMounted(() => {
|
||||||
-ms-box-sizing: border-box;
|
-ms-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-footer button:first-child {
|
.dialog-footer button:first-child {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-uploader .avatar {
|
.avatar-uploader .avatar {
|
||||||
width: 178px;
|
width: 178px;
|
||||||
height: 178px;
|
height: 178px;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.radio {
|
.radio {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #3587fb;
|
color: #3587fb;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
height: 15px;
|
height: 15px;
|
||||||
|
|
@ -228,26 +224,20 @@ onMounted(() => {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.have-radio {
|
.have-radio {
|
||||||
color: #3587fb;
|
color: #3587fb;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
fill: #3587fb;
|
fill: #3587fb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.complete-radio {
|
.complete-radio {
|
||||||
color: #2ECB89;
|
color: #2ecb89;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
fill: #2ECB89;
|
fill: #2ecb89;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.timeout-radio {
|
.timeout-radio {
|
||||||
color: #fb4e33;
|
color: #fb4e33;
|
||||||
|
|
||||||
.icon-radio {
|
.icon-radio {
|
||||||
fill: #fb4e33;
|
fill: #fb4e33;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</TitleC>
|
</TitleC>
|
||||||
<div class="h-layout h-center s" style="margin-bottom: 16px">
|
<div class="h-layout h-center s" style="margin-bottom: 16px;">
|
||||||
<!-- <div style="flex: 1"></div> -->
|
<!-- <div style="flex: 1"></div> -->
|
||||||
<div class="label-select">
|
<div class="label-select">
|
||||||
<el-input v-model="search" @keydown.enter.native="getUserStudyPages" placeholder="请输入搜索内容" class="search-input">
|
<el-input v-model="search" @keydown.enter.native="getUserStudyPages" placeholder="请输入搜索内容" class="search-input">
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
<el-table-column prop="coverimg" :resizable="true" align="center" label="封面" width="150">
|
<el-table-column prop="coverimg" :resizable="true" align="center" label="封面" width="150">
|
||||||
<template #default="scope1">
|
<template #default="scope1">
|
||||||
<div style="width: 102px;height: 33px;margin: auto;">
|
<div style="width: 102px;height: 33px;margin: auto;">
|
||||||
<el-image style="width: 100%; height: 100%" :src="scope1.row.coverimg" :zoom-rate="1.2"
|
<el-image style="width: 100%; height: 100%;" :src="scope1.row.coverimg" :zoom-rate="1.2"
|
||||||
:preview-src-list="[scope1.row.coverimg]" fit="cover" :z-index='999' preview-teleported
|
:preview-src-list="[scope1.row.coverimg]" fit="cover" :z-index='999' preview-teleported
|
||||||
:hide-on-click-modal='true' />
|
:hide-on-click-modal='true' />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
<el-table-column :resizable="true" align="left" label="学习标题">
|
<el-table-column :resizable="true" align="left" label="学习标题">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<span :title=scope.row.studyName
|
<span :title=scope.row.studyName
|
||||||
style="white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;padding-left:20px">{{
|
style="white-space: nowrap;overflow: hidden;text-overflow: ellipsis;width: 100%;padding-left: 20px;">{{
|
||||||
scope.row.studyName }}</span>
|
scope.row.studyName }}</span>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
</template>
|
</template>
|
||||||
<script lang='ts' setup>
|
<script lang='ts' setup>
|
||||||
import { onMounted, reactive, ref } from "vue";
|
import { onMounted, reactive, ref } from "vue";
|
||||||
import { getUserStudyPage } from "@/api/performDuties"
|
// import { getUserStudyPage } from "@/api/performDuties"
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import StuDetails from "../stuDetails.vue";
|
import StuDetails from "../stuDetails.vue";
|
||||||
|
|
@ -146,11 +146,9 @@ onMounted(() => {
|
||||||
-ms-box-sizing: border-box;
|
-ms-box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dialog-footer button:first-child {
|
.dialog-footer button:first-child {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-uploader .avatar {
|
.avatar-uploader .avatar {
|
||||||
width: 178px;
|
width: 178px;
|
||||||
height: 178px;
|
height: 178px;
|
||||||
|
|
@ -166,11 +164,9 @@ onMounted(() => {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition: var(--el-transition-duration-fast);
|
transition: var(--el-transition-duration-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.avatar-uploader .el-upload:hover {
|
.avatar-uploader .el-upload:hover {
|
||||||
border-color: var(--el-color-primary);
|
border-color: var(--el-color-primary);
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-icon.avatar-uploader-icon {
|
.el-icon.avatar-uploader-icon {
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
color: #8c939d;
|
color: #8c939d;
|
||||||
|
|
@ -178,9 +174,9 @@ onMounted(() => {
|
||||||
height: 178px;
|
height: 178px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-select {
|
.label-select {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
|
|
||||||
/* margin-bottom: 20px; */
|
/* margin-bottom: 20px; */
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
@ -23,7 +23,7 @@
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" >
|
<script setup lang="ts" >
|
||||||
import { onMounted, watch } from "vue";
|
import { onMounted, watch } from "vue";
|
||||||
import { readGovNotice } from "@/api/performDuties"
|
// import { readGovNotice } from "@/api/performDuties"
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
const user = ref(JSON.parse(userStore.userInfo));
|
const user = ref(JSON.parse(userStore.userInfo));
|
||||||
|
|
@ -72,25 +72,20 @@ watch(
|
||||||
padding-bottom: 50px;
|
padding-bottom: 50px;
|
||||||
margin: auto;
|
margin: auto;
|
||||||
width: 90%;
|
width: 90%;
|
||||||
|
|
||||||
>h1 {
|
>h1 {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
>div:nth-of-type(1) {
|
>div:nth-of-type(1) {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
||||||
>div {
|
>div {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
>h2:nth-of-type(1) {
|
>h2:nth-of-type(1) {
|
||||||
margin-right: 50px;
|
margin-right: 50px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.info-p {
|
.info-p {
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
</template>
|
</template>
|
||||||
<script lang='ts' setup>
|
<script lang='ts' setup>
|
||||||
import { onMounted, reactive, ref } from "vue";
|
import { onMounted, reactive, ref } from "vue";
|
||||||
import { getSpecialTasks, getSpecialTasksUser } from "@/api/performDuties";
|
// import { getSpecialTasks, getSpecialTasksUser } from "@/api/performDuties";
|
||||||
import { getFile } from "@/api/file";
|
import { getFile } from "@/api/file";
|
||||||
import { FileType } from "@/utils/common";
|
import { FileType } from "@/utils/common";
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
|
|
@ -159,18 +159,17 @@ onMounted(() => {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 0.26042vw;
|
border-radius: 0.26042vw;
|
||||||
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
|
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 0.83333vw;
|
padding: 0.83333vw;
|
||||||
overflow-y: scroll;
|
overflow-y: scroll;
|
||||||
overflow-x: hidden !important;
|
overflow-x: hidden !important;
|
||||||
-moz-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-o-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-ms-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
.detail-content {
|
.detail-content {
|
||||||
// padding: 0px 16px 16px 16px;
|
// padding: 0px 16px 16px 16px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
|
|
@ -8,10 +8,6 @@
|
||||||
<svg-icon name="refurbish" class="icon" />
|
<svg-icon name="refurbish" class="icon" />
|
||||||
<span>刷新</span>
|
<span>刷新</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="tool-item">
|
|
||||||
<svg-icon name="export" class="icon" />
|
|
||||||
<span>导出</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -112,7 +112,7 @@ const userId = ref(user.value.userId);
|
||||||
const uuid = ref("");
|
const uuid = ref("");
|
||||||
const ruleForm = reactive<FormRules>({
|
const ruleForm = reactive<FormRules>({
|
||||||
sysusername: [{ required: true, message: "请输入账号", trigger: "blur" }],
|
sysusername: [{ required: true, message: "请输入账号", trigger: "blur" }],
|
||||||
syspassword: [{ required: true,pattern: "^(?=.*[a-zA-Z])(?=.*\\d).{10,}$", message: "请输入10位密码包括英文与数字", trigger: "blur" }],
|
syspassword: [{ required: true,pattern: "^(?=.*[a-zA-Z])(?=.*\\d).{10,}$", message: "请输入10位密码包括大小写英文字母与数字", trigger: "blur" }],
|
||||||
chinaname: [{ required: true, message: "请输入中文名", trigger: "blur" }],
|
chinaname: [{ required: true, message: "请输入中文名", trigger: "blur" }],
|
||||||
userroles: [{ required: true, message: "请选择角色", trigger: "change" }],
|
userroles: [{ required: true, message: "请选择角色", trigger: "change" }],
|
||||||
sysunitorentid: [
|
sysunitorentid: [
|
||||||
|
|
|
||||||
|
|
@ -94,11 +94,11 @@ import useUserStore from "@/store/modules/user";
|
||||||
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
||||||
import { getYears } from "@/utils/common";
|
import { getYears } from "@/utils/common";
|
||||||
|
|
||||||
import {
|
// import {
|
||||||
getFactorCheckstandard,
|
// getFactorCheckstandard,
|
||||||
addFactor,
|
// addFactor,
|
||||||
updateFactor,
|
// updateFactor,
|
||||||
} from "@/api/performDuties";
|
// } from "@/api/performDuties";
|
||||||
|
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,11 @@ import useUserStore from "@/store/modules/user";
|
||||||
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
||||||
import { getYears } from "@/utils/common";
|
import { getYears } from "@/utils/common";
|
||||||
|
|
||||||
import {
|
// import {
|
||||||
getFactorCheckstandard,
|
// getFactorCheckstandard,
|
||||||
addSafeduty,
|
// addSafeduty,
|
||||||
updateSafeduty,
|
// updateSafeduty,
|
||||||
} from "@/api/performDuties";
|
// } from "@/api/performDuties";
|
||||||
|
|
||||||
const formRef = ref<FormInstance>();
|
const formRef = ref<FormInstance>();
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
|
||||||
167
src/views/system/message/add-modify-message.vue
Normal file
167
src/views/system/message/add-modify-message.vue
Normal file
|
|
@ -0,0 +1,167 @@
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<BaseDialog
|
||||||
|
:dialogVisible="props.visible"
|
||||||
|
@close="onclone"
|
||||||
|
:titleName="
|
||||||
|
readonly ? '消息详情' : props.form.govNoticeId ? '编辑消息' : '新增消息'
|
||||||
|
"
|
||||||
|
width="50%"
|
||||||
|
@onSubmit="handleSubmit"
|
||||||
|
:footerclosed="true"
|
||||||
|
:diafooter="true"
|
||||||
|
:footerkeepnaem="props.readonly ? false : true"
|
||||||
|
>
|
||||||
|
<div class="detailForm-content">
|
||||||
|
<el-form
|
||||||
|
ref="formRef"
|
||||||
|
label-position="right"
|
||||||
|
label-width="100"
|
||||||
|
:disabled="readonly"
|
||||||
|
:rules="ruleForm"
|
||||||
|
:model="addMessageForm"
|
||||||
|
>
|
||||||
|
<el-form-item label="标题名称:" prop="title" style="width: 100%;">
|
||||||
|
<el-input
|
||||||
|
placeholder="请输入"
|
||||||
|
v-model="addMessageForm.title"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="内容:" prop="content" style="width: 100%;">
|
||||||
|
<div class="qedit">
|
||||||
|
<QuillEditor
|
||||||
|
class="qedit"
|
||||||
|
:value="addMessageForm.content"
|
||||||
|
@updateValue="getMsg"
|
||||||
|
:id="uuid"
|
||||||
|
:userId="userId"
|
||||||
|
:FileType="FileType.message"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="封面:" prop="content" style="width: 100%;">
|
||||||
|
<CustomUpload
|
||||||
|
:listPic="fileList"
|
||||||
|
:OTCType="FileType.messageCover"
|
||||||
|
:uuid="uuid"
|
||||||
|
:userId="userId"
|
||||||
|
:baseUrl="baseUrl"
|
||||||
|
:max="9"
|
||||||
|
@onUpdate="updateFile"
|
||||||
|
></CustomUpload>
|
||||||
|
<!-- :readonly="readonly" -->
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
</BaseDialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts" >
|
||||||
|
import { reactive, ref, onMounted, watch } from "vue";
|
||||||
|
import useUserStore from "@/store/modules/user";
|
||||||
|
import { getYears, getUUID, FileType } from "@/utils/common";
|
||||||
|
import { ElMessage, FormInstance, FormRules } from "element-plus";
|
||||||
|
import { uploadFile, getFile, delFile } from "@/api/file";
|
||||||
|
const formRef = ref<FormInstance>();
|
||||||
|
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const user = ref(JSON.parse(userStore.userInfo));
|
||||||
|
const userId = ref(user.value.userId);
|
||||||
|
const uuid = ref("");
|
||||||
|
const ruleForm = reactive<FormRules>({
|
||||||
|
title: [{ required: true, message: "请输入标题", trigger: "blur" }],
|
||||||
|
});
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
form: Object,
|
||||||
|
readonly: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
id: String,
|
||||||
|
});
|
||||||
|
const addMessageForm = ref<any>({ content: "",title:"" });
|
||||||
|
const emits = defineEmits(["close", "onSubmit"]);
|
||||||
|
//富文本
|
||||||
|
const getMsg = (val) => {
|
||||||
|
addMessageForm.value.content = val;
|
||||||
|
};
|
||||||
|
|
||||||
|
//保存并退出
|
||||||
|
const handleSubmit = () => {
|
||||||
|
formRef.value?.validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
console.log(addMessageForm.value);
|
||||||
|
|
||||||
|
// const params = JSON.parse(JSON.stringify(addMessageForm.value));
|
||||||
|
// performAdd(params).then((res: any) => {
|
||||||
|
// if (res.code == 1) {
|
||||||
|
// ElMessage.success({
|
||||||
|
// message: "保存成功",
|
||||||
|
// type: "success",
|
||||||
|
// });
|
||||||
|
// onclone();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//上传封面
|
||||||
|
const fileList = ref([]);
|
||||||
|
//查询文件
|
||||||
|
const baseUrl = ref(import.meta.env.VITE_UPLOAD_URL);
|
||||||
|
const getFiles = () => {
|
||||||
|
let otcid = props.govNoticeId;
|
||||||
|
let otctype = FileType.messageCover;
|
||||||
|
getFile(otcid, otctype).then((res: any) => {
|
||||||
|
|
||||||
|
|
||||||
|
fileList.value = res.data;
|
||||||
|
console.log( fileList.value,'res==>');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件列表更新
|
||||||
|
*/
|
||||||
|
const updateFile = (files: any) => {
|
||||||
|
fileList.value = files;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//关闭弹窗
|
||||||
|
const onclone = () => {
|
||||||
|
emits("close");
|
||||||
|
};
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => props.visible,
|
||||||
|
() => {
|
||||||
|
uuid.value = getUUID();
|
||||||
|
getFiles();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
onMounted(() => {});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.detailForm-content {
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
:deep(.el-form) {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
:deep(.el-form-item) {
|
||||||
|
width: 47%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
219
src/views/system/message/index.vue
Normal file
219
src/views/system/message/index.vue
Normal file
|
|
@ -0,0 +1,219 @@
|
||||||
|
<template>
|
||||||
|
<div class="percentage-content">
|
||||||
|
<div class="content">
|
||||||
|
<div class="h-layout space-between h-center">
|
||||||
|
<div>
|
||||||
|
<div class="h-layout">
|
||||||
|
<div class="tool-item" @click="getList">
|
||||||
|
<svg-icon name="refurbish" class="icon" />
|
||||||
|
<span>刷新</span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="tool-item"
|
||||||
|
@click="(dialogVisible = true), (form = {}), (readonly = false)"
|
||||||
|
>
|
||||||
|
<svg-icon name="add" class="icon" />
|
||||||
|
<span>新增</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div style="width: 30%;">
|
||||||
|
<div>
|
||||||
|
<el-input
|
||||||
|
v-model="search"
|
||||||
|
@keydown.enter.native="getList"
|
||||||
|
placeholder="请输入关键字"
|
||||||
|
class="search-input"
|
||||||
|
>
|
||||||
|
<template #append>
|
||||||
|
<span @click="getList" class="search-bottom">
|
||||||
|
<svg-icon name="search" class="icon_class" />
|
||||||
|
<span>搜索</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<el-table
|
||||||
|
ref="loading"
|
||||||
|
class="table"
|
||||||
|
v-loading="tableDataloading"
|
||||||
|
:data="tableData"
|
||||||
|
header-row-class-name="el-one-header"
|
||||||
|
@selection-change="handleSelectionChange"
|
||||||
|
border
|
||||||
|
>
|
||||||
|
<el-table-column
|
||||||
|
align="center"
|
||||||
|
:resizable="true"
|
||||||
|
width="100"
|
||||||
|
label="序列"
|
||||||
|
type="index"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
{{ scope.$index + 1 + (currentPage - 1) * pageSize }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="title"
|
||||||
|
:resizable="true"
|
||||||
|
label="标题"
|
||||||
|
width="250"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="content"
|
||||||
|
:resizable="true"
|
||||||
|
align="center"
|
||||||
|
label="内容"
|
||||||
|
>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
:resizable="true"
|
||||||
|
align="center"
|
||||||
|
width="300"
|
||||||
|
label="操作"
|
||||||
|
>
|
||||||
|
<template #default="scope">
|
||||||
|
<span
|
||||||
|
class="operate"
|
||||||
|
@click="
|
||||||
|
(dialogVisible = true), (form = scope.row), (readonly = false)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<svg-icon name="edit" class="icon"></svg-icon>
|
||||||
|
<span class="edit">编辑</span>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
class="operate"
|
||||||
|
@click="
|
||||||
|
(dialogVisible = true), (form = scope.row), (readonly = true)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<svg-icon name="detail" class="icon"></svg-icon>
|
||||||
|
<span class="detail">详情</span>
|
||||||
|
</span>
|
||||||
|
<span class="operate" @click="clickDelete(scope.row.govNoticeId)">
|
||||||
|
<svg-icon name="delete" class="icon"></svg-icon>
|
||||||
|
<span class="delete">删除</span>
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<!-- 分页 -->
|
||||||
|
<el-pagination
|
||||||
|
class="pagination"
|
||||||
|
@size-change="getList"
|
||||||
|
@current-change="getList"
|
||||||
|
v-model:current-page.sync="currentPage"
|
||||||
|
:page-sizes="[10, 15, 20, 30]"
|
||||||
|
v-model:page-size.sync="pageSize"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
:total="total"
|
||||||
|
background
|
||||||
|
>
|
||||||
|
</el-pagination>
|
||||||
|
</div>
|
||||||
|
<!-- 新增/修改 -->
|
||||||
|
<AddModifyMessage
|
||||||
|
:visible="dialogVisible"
|
||||||
|
:form="form"
|
||||||
|
:readonly="readonly"
|
||||||
|
@close="onclone"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang='ts' setup>
|
||||||
|
import { onMounted, reactive, ref } from "vue";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
import { noticePage } from "@/api/Sys";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import AddModifyMessage from "./add-modify-message.vue";
|
||||||
|
|
||||||
|
import useUserStore from "@/store/modules/user";
|
||||||
|
const userStore = useUserStore();
|
||||||
|
|
||||||
|
const user = ref(JSON.parse(userStore.userInfo));
|
||||||
|
const userId = ref(user.value.userId);
|
||||||
|
|
||||||
|
const search = ref([]);
|
||||||
|
const tableData = ref([]);
|
||||||
|
const currentPage = ref(1);
|
||||||
|
const pageSize = ref(10);
|
||||||
|
const total = ref(0);
|
||||||
|
|
||||||
|
const dialogVisible = ref(false);
|
||||||
|
const form = ref({});
|
||||||
|
const readonly = ref(false);
|
||||||
|
|
||||||
|
//获取列表
|
||||||
|
const tableDataloading = ref(false);
|
||||||
|
const getList = () => {
|
||||||
|
tableDataloading.value = true;
|
||||||
|
let params = {
|
||||||
|
condition: search.value,
|
||||||
|
limit: pageSize.value,
|
||||||
|
page: currentPage.value,
|
||||||
|
};
|
||||||
|
noticePage(params).then((res: any) => {
|
||||||
|
console.log(res,'res==>');
|
||||||
|
|
||||||
|
tableData.value = res.data.list;
|
||||||
|
total.value = res.data.total;
|
||||||
|
tableDataloading.value = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const clickDelete = (govNoticeId) => {
|
||||||
|
// ElMessageBox.confirm("是否确认删除?", "提示", {
|
||||||
|
// confirmButtonText: "是",
|
||||||
|
// cancelButtonText: "否",
|
||||||
|
// type: "warning",
|
||||||
|
// }).then(() => {
|
||||||
|
// delListperform(govNoticeId).then((res: any) => {
|
||||||
|
// if (res.code == 1) {
|
||||||
|
// ElMessage.success({
|
||||||
|
// message: "删除成功",
|
||||||
|
// type: "success",
|
||||||
|
// });
|
||||||
|
// } else {
|
||||||
|
// ElMessage.error({
|
||||||
|
// message: res.message,
|
||||||
|
// type: "error",
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// getList();
|
||||||
|
// });
|
||||||
|
// });
|
||||||
|
};
|
||||||
|
//关闭新增弹窗
|
||||||
|
const onclone = () => {
|
||||||
|
dialogVisible.value = false;
|
||||||
|
form.value = {};
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.content {
|
||||||
|
width: 100%;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 0.26042vw;
|
||||||
|
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
|
||||||
|
height: 100%;
|
||||||
|
padding: 0.83333vw;
|
||||||
|
overflow-y: auto;
|
||||||
|
overflow-x: hidden !important;
|
||||||
|
box-sizing: border-box;
|
||||||
|
.table {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -43,16 +43,14 @@ const getMsg = (val) => {
|
||||||
height: auto;
|
height: auto;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.rg {
|
.rg {
|
||||||
padding: 16px;
|
padding: 16px;
|
||||||
background: #ffffff;
|
background: #fff;
|
||||||
box-shadow: 0px 0px 6px rgba(0, 120, 255, 0.1);
|
box-shadow: 0 0 6px rgb(0 120 255 / 10%);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
|
|
||||||
:deep(.el-radio-button__inner) {
|
:deep(.el-radio-button__inner) {
|
||||||
min-width: 150px;
|
min-width: 150px;
|
||||||
}
|
}
|
||||||
|
|
@ -61,30 +59,26 @@ const getMsg = (val) => {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 0.26042vw;
|
border-radius: 0.26042vw;
|
||||||
box-shadow: 0 0 0.41667vw 0 rgba(8, 33, 85, 0.1);
|
box-shadow: 0 0 0.41667vw 0 rgb(8 33 85 / 10%);
|
||||||
padding: 0.83333vw;
|
padding: 0.83333vw;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden !important;
|
overflow-x: hidden !important;
|
||||||
-moz-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-o-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
-ms-box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.qedit {
|
.qedit {
|
||||||
height: 63vh;
|
height: 63vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
.option {
|
.option {
|
||||||
margin: 50px 0 10px 0;
|
margin: 50px 0 10px;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
width: 10vw;
|
width: 10vw;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@
|
||||||
filterable
|
filterable
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装备照片:" style="width: 100%;">
|
<el-form-item label="工作附件:" style="width: 100%;">
|
||||||
<el-upload
|
<el-upload
|
||||||
class="avatar-uploader"
|
class="avatar-uploader"
|
||||||
ref="uploadAfter"
|
ref="uploadAfter"
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,6 @@
|
||||||
<svg-icon name="refurbish" class="icon" />
|
<svg-icon name="refurbish" class="icon" />
|
||||||
<span>刷新</span>
|
<span>刷新</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="tool-item">
|
|
||||||
<svg-icon name="export" class="icon" />
|
|
||||||
<span>导出</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
value-format="YYYY-MM-DD"
|
value-format="YYYY-MM-DD"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="装备照片:" style="width: 100%;">
|
<el-form-item label="工作附件:" style="width: 100%;">
|
||||||
<el-upload
|
<el-upload
|
||||||
class="avatar-uploader"
|
class="avatar-uploader"
|
||||||
ref="uploadAfter"
|
ref="uploadAfter"
|
||||||
|
|
|
||||||
BIN
道孚县PC管理端.zip
Normal file
BIN
道孚县PC管理端.zip
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user