Ver Fonte

reactor:随手拍信息配置对接;

zhangchong há 4 meses atrás
pai
commit
1b0ce1d83e

+ 0 - 9
src/router/route.ts

@@ -525,15 +525,6 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
 			isKeepAlive: true,
 		},
 	},
-	{
-		path: '/snapshot/info/detail',
-		name: 'snapshotInfoDetail',
-		component: () => import('@/views/snapshot/info/sspConfig/detail.vue'),
-		meta: {
-			title: '公告详情',
-			isKeepAlive: true,
-		},
-	},
 ];
 
 /**

+ 1 - 1
src/views/auxiliary/notice/components/Notice-add.vue

@@ -273,7 +273,7 @@ const openDialog = async (type: string) => {
 				loading.value = false;
 			} catch (error) {
 				console.log(error);
-				loading.value = true;
+				loading.value = false;
 			}
 			break;
 	}

+ 1 - 1
src/views/auxiliary/notice/components/Notice-edit.vue

@@ -347,7 +347,7 @@ const openDialog = async (row: any, type: string) => {
 				loading.value = false;
 			} catch (error) {
 				console.log(error);
-				loading.value = true;
+				loading.value = false;
 			}
 			break;
 	}

+ 209 - 0
src/views/snapshot/info/sspConfig/components/Config-Edit.vue

@@ -0,0 +1,209 @@
+<template>
+	<el-dialog v-model="state.dialogVisible" width="70%" draggable title="编辑随手拍信息配置" @close="close">
+		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" :disabled="loading" scroll-to-error>
+			<el-row :gutter="10">
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="类型" prop="bulletinObj" :rules="[{ required: true, message: '请选择类型', trigger: 'change' }]">
+						<el-select
+							v-model="state.ruleForm.bulletinObj"
+							placeholder="请选择类型"
+							value-key="dicDataValue"
+							class="w100"
+							@change="
+								(e) => {
+									state.ruleForm.bulletinTypeId = e.dicDataValue;
+									state.ruleForm.bulletinTypeName = e.dicDataName;
+								}
+							"
+						>
+							<el-option v-for="item in bulletinTypeOptions" :value="item" :key="item.dicDataValue" :label="item.dicDataName" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="来源" prop="sourceMode" :rules="[{ required: true, message: '请选择来源', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.sourceMode" placeholder="请选择来源" value-key="dicDataValue" class="w100">
+							<el-option v-for="item in bulletinSource" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="标题" prop="title" :rules="[{ required: true, message: '请填写标题', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.title" placeholder="请填写标题" clearable show-word-limit maxlength="200"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="文档编码" prop="no" :rules="[{ required: false, message: '请填写文档编码', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.no" placeholder="请填写文档编码" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="时间" prop="bulletinTime" :rules="[{ required: false, message: '请选择时间', trigger: 'change' }]">
+						<el-date-picker
+							v-model="state.ruleForm.bulletinTime"
+							type="datetime"
+							placeholder="请选择时间"
+							value-format="YYYY-MM-DD[T]HH:mm:ss"
+							class="w100"
+							:disabled-date="disabledDate"
+							popper-class="no-atTheMoment"
+						/>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="所属部门" prop="departmentId" :rules="[{ required: true, message: '请选择所属部门', trigger: 'change' }]">
+						<el-cascader
+							:options="orgsOptions"
+							filterable
+							:props="{ value: 'id', label: 'name', emitPath: false, checkStrictly: true }"
+							placeholder="请选择所属部门"
+							class="w100"
+							v-model="state.ruleForm.departmentId"
+							ref="orgRef"
+							@change="changeOrg"
+							clearable
+						>
+						</el-cascader>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="来源部门" prop="sourceOrgName" :rules="[{ required: false, message: '请填写来源部门', trigger: 'change' }]">
+						<el-input v-model="state.ruleForm.sourceOrgName" placeholder="请填写来源部门" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col>
+					<el-form-item label="公告标识">
+						<el-checkbox v-model="state.ruleForm.isOpen">是否公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isBold">是否加粗</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isOpenWebsite">网站公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isWeibo">微博公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isWeChat">微信公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isTop">是否置顶</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isPopup">是否飘窗</el-checkbox>
+					</el-form-item>
+				</el-col>
+				<el-col>
+					<el-form-item label="视频地址" prop="videoPath" :rules="[{ required: false, message: '请填写视频地址', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.videoPath" placeholder="请填写视频地址" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+					<el-form-item label="内容" prop="content" :rules="[{ required: true, message: '请填写内容', trigger: 'blur' }]">
+						<editor v-model:get-html="state.ruleForm.content" placeholder="请填写内容" height="450px" />
+					</el-form-item>
+				</el-col>
+			</el-row>
+		</el-form>
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(ruleFormRef)" :loading="loading">确 定</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script setup lang="tsx" name="noticeDetail">
+import { reactive, ref, defineAsyncComponent } from 'vue';
+import { throttle } from '@/utils/tools';
+import { ElMessage, FormInstance } from 'element-plus';
+import { disabledDate } from '@/utils/constants';
+import { ElCheckbox } from 'element-plus';
+import { editSnapshotBulletin, editSnapshotBulletinBase, getSnapshotBulletinDetail } from '@/api/snapshot/info';
+// 引入组件
+const Editor = defineAsyncComponent(() => import('@/components/Editor/index.vue')); // 富文本编辑器
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList']);
+// 定义变量内容
+const state = reactive<any>({
+	dialogVisible: false,
+	ruleForm: {
+		bulletinTypeId: null, // 公告类型
+		bulletinTypeName: null, // 公告类型名称
+		title: null, // 标题
+		no: null, // 文档编码
+		bulletinTime: null, // 时间
+		departmentId: null, // 所属部门ID
+		departmentName: null, // 所属部门名称
+		sourceOrgName: null, // 来源单位名称
+		isOpen: false, // 公开
+		isBold: false, // 加粗
+		isOpenWebsite: false, // 网站公开
+		isWeibo: false, // 微博公开
+		isWeChat: false, // 微信公开
+		isTop: false, // 置顶
+		isPopup: false, // 弹窗
+		content: null, // 内容
+		videoPath: null, // 视频地址
+		sourceMode: '1', // 来源方式 默认自建
+	},
+});
+let loading = ref<boolean>(false); // 加载状态
+// 打开弹窗
+const ruleFormRef = ref<RefType>();
+
+const bulletinTypeOptions = ref<EmptyArrayType>([]); // 公告类型
+const orgsOptions = ref<EmptyArrayType>([]); // 来源单位
+const bulletinSource = ref<EmptyArrayType>([]); // 来源
+const openDialog = async (id: string) => {
+	loading.value = true;
+	state.dialogVisible = true;
+	try {
+		const [responseAnnounce, result] = await Promise.all([editSnapshotBulletinBase(), getSnapshotBulletinDetail(id)]);
+		bulletinTypeOptions.value = responseAnnounce.result?.bulletinType ?? [];
+		orgsOptions.value = responseAnnounce.result?.orgsOptions ?? [];
+		bulletinSource.value = responseAnnounce.result?.bulletinSource ?? [];
+
+		state.ruleForm = result.result ?? {};
+		state.ruleForm.bulletinObj = {
+			dicDataValue: result.result?.bulletinTypeId,
+			dicDataName: result.result?.bulletinTypeName,
+		};
+		loading.value = false;
+	} catch (error) {
+		console.log(error);
+		loading.value = false;
+	}
+};
+const orgRef = ref<RefType>(); // 所属部门
+const changeOrg = () => {
+	const currentNode = orgRef.value.getCheckedNodes();
+	if (currentNode) state.ruleForm.departmentName = currentNode[0].label;
+	else state.ruleForm.departmentName = null;
+};
+
+// 保存
+const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	await formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		loading.value = true;
+		const request = {
+			...state.ruleForm,
+		};
+		editSnapshotBulletin(request)
+			.then(() => {
+				loading.value = false;
+				closeDialog();
+				emit('updateList');
+				ElMessage.success('操作成功');
+			})
+			.catch(() => {
+				loading.value = false;
+			});
+	});
+}, 300);
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+const close = () => {
+	ruleFormRef.value?.clearValidate();
+	ruleFormRef.value?.resetFields();
+};
+// 暴露变量
+defineExpose({
+	openDialog,
+	closeDialog,
+});
+</script>

+ 119 - 136
src/views/snapshot/info/sspConfig/components/Config-add.vue

@@ -1,93 +1,98 @@
 <template>
 	<el-dialog v-model="state.dialogVisible" width="70%" draggable title="新增随手拍信息配置" @close="close">
-		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" v-loading="loading" scroll-to-error>
-				<el-row :gutter="10">
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="类型" prop="bulletinObj" :rules="[{ required: true, message: '请选择类型', trigger: 'change' }]">
-							<el-select
-								v-model="state.ruleForm.bulletinObj"
-								placeholder="请选择类型"
-								value-key="dicDataValue"
-								class="w100"
-								@change="
-									(e) => {
-										state.ruleForm.bulletinTypeId = e.dicDataValue;
-										state.ruleForm.bulletinTypeName = e.dicDataName;
-									}
-								"
-							>
-								<el-option v-for="item in bulletinTypeOptions" :value="item" :key="item.dicDataValue" :label="item.dicDataName" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="来源" prop="bulletinObj" :rules="[{ required: true, message: '请选择来源', trigger: 'change' }]">
-							<el-select
-								v-model="state.ruleForm.bulletinObj"
-								placeholder="请选择来源"
-								value-key="dicDataValue"
-								class="w100"
-							>
-								<el-option v-for="item in bulletinTypeOptions" :value="item" :key="item.dicDataValue" :label="item.dicDataName" />
-							</el-select>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-						<el-form-item label="标题" prop="title" :rules="[{ required: true, message: '请填写标题', trigger: 'blur' }]">
-							<el-input v-model="state.ruleForm.title" placeholder="请填写标题" clearable show-word-limit maxlength="200"></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-						<el-form-item label="文档编码" prop="no" :rules="[{ required: true, message: '请填写文档编码', trigger: 'blur' }]">
-							<el-input v-model="state.ruleForm.no" placeholder="请填写文档编码" clearable></el-input>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-						<el-form-item label="时间" prop="bulletinTime" :rules="[{ required: false, message: '请选择时间', trigger: 'change' }]">
-							<el-date-picker
-								v-model="state.ruleForm.bulletinTime"
-								type="datetime"
-								placeholder="请选择时间"
-								value-format="YYYY-MM-DD[T]HH:mm:ss"
-								class="w100"
-								:disabled-date="disabledDate"
-								popper-class="no-atTheMoment"
-							/>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-						<el-form-item label="来源单位" prop="sourceOrgId" :rules="[{ required: true, message: '请选择来源单位', trigger: 'change' }]">
-							<el-cascader
-								:options="orgsOptions"
-								filterable
-								:props="{ value: 'id', label: 'name', emitPath: false, checkStrictly: true }"
-								placeholder="请选择来源单位"
-								class="w100"
-								v-model="state.ruleForm.sourceOrgId"
-								ref="orgRef"
-								@change="changeOrg"
-								clearable
-							>
-							</el-cascader>
-						</el-form-item>
-					</el-col>
-					<el-col>
-						<el-form-item label="公告标识">
-							<el-checkbox v-model="state.ruleForm.isOpen">是否公开</el-checkbox>
-							<el-checkbox v-model="state.ruleForm.isBold">是否加粗</el-checkbox>
-							<el-checkbox v-model="state.ruleForm.isOpenWebsite">网站公开</el-checkbox>
-							<el-checkbox v-model="state.ruleForm.isWeibo">微博公开</el-checkbox>
-							<el-checkbox v-model="state.ruleForm.isWeChat">微信公开</el-checkbox>
-							<el-checkbox v-model="state.ruleForm.isTop">是否置顶</el-checkbox>
-							<el-checkbox v-model="state.ruleForm.isPopup">是否置顶</el-checkbox>
-						</el-form-item>
-					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="内容" prop="content" :rules="[{ required: true, message: '请填写内容', trigger: 'blur' }]">
-							<editor v-model:get-html="state.ruleForm.content" placeholder="请填写内容" height="450px" />
-						</el-form-item>
-					</el-col>
-				</el-row>
+		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" :disabled="loading" scroll-to-error>
+			<el-row :gutter="10">
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="类型" prop="bulletinObj" :rules="[{ required: true, message: '请选择类型', trigger: 'change' }]">
+						<el-select
+							v-model="state.ruleForm.bulletinObj"
+							placeholder="请选择类型"
+							value-key="dicDataValue"
+							class="w100"
+							@change="
+								(e) => {
+									state.ruleForm.bulletinTypeId = e.dicDataValue;
+									state.ruleForm.bulletinTypeName = e.dicDataName;
+								}
+							"
+						>
+							<el-option v-for="item in bulletinTypeOptions" :value="item" :key="item.dicDataValue" :label="item.dicDataName" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+					<el-form-item label="来源" prop="sourceMode" :rules="[{ required: true, message: '请选择来源', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.sourceMode" placeholder="请选择来源" value-key="dicDataValue" class="w100">
+							<el-option v-for="item in bulletinSource" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="标题" prop="title" :rules="[{ required: true, message: '请填写标题', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.title" placeholder="请填写标题" clearable show-word-limit maxlength="200"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="文档编码" prop="no" :rules="[{ required: false, message: '请填写文档编码', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.no" placeholder="请填写文档编码" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="时间" prop="bulletinTime" :rules="[{ required: false, message: '请选择时间', trigger: 'change' }]">
+						<el-date-picker
+							v-model="state.ruleForm.bulletinTime"
+							type="datetime"
+							placeholder="请选择时间"
+							value-format="YYYY-MM-DD[T]HH:mm:ss"
+							class="w100"
+							:disabled-date="disabledDate"
+							popper-class="no-atTheMoment"
+						/>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="所属部门" prop="departmentId" :rules="[{ required: true, message: '请选择所属部门', trigger: 'change' }]">
+						<el-cascader
+							:options="orgsOptions"
+							filterable
+							:props="{ value: 'id', label: 'name', emitPath: false, checkStrictly: true }"
+							placeholder="请选择所属部门"
+							class="w100"
+							v-model="state.ruleForm.departmentId"
+							ref="orgRef"
+							@change="changeOrg"
+							clearable
+						>
+						</el-cascader>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+					<el-form-item label="来源部门" prop="sourceOrgName" :rules="[{ required: false, message: '请填写来源部门', trigger: 'change' }]">
+						<el-input v-model="state.ruleForm.sourceOrgName" placeholder="请填写来源部门" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col>
+					<el-form-item label="公告标识">
+						<el-checkbox v-model="state.ruleForm.isOpen">是否公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isBold">是否加粗</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isOpenWebsite">网站公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isWeibo">微博公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isWeChat">微信公开</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isTop">是否置顶</el-checkbox>
+						<el-checkbox v-model="state.ruleForm.isPopup">是否飘窗</el-checkbox>
+					</el-form-item>
+				</el-col>
+				<el-col>
+					<el-form-item label="视频地址" prop="videoPath" :rules="[{ required: false, message: '请填写视频地址', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.videoPath" placeholder="请填写视频地址" clearable></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+					<el-form-item label="内容" prop="content" :rules="[{ required: true, message: '请填写内容', trigger: 'blur' }]">
+						<editor v-model:get-html="state.ruleForm.content" placeholder="请填写内容" height="450px" />
+					</el-form-item>
+				</el-col>
+			</el-row>
 		</el-form>
 		<template #footer>
 			<span class="dialog-footer">
@@ -113,53 +118,52 @@ const emit = defineEmits(['updateList']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		bulletinTypeId:null, // 公告类型
-		bulletinTypeName:null, // 公告类型名称
-		title:null, // 标题
-		no:null, // 文档编码
-		bulletinTime:null, // 时间
-		sourceOrgId:null, // 来源单位
-		sourceOrgName:null, // 来源单位名称
-		isOpen:false, // 公开
-		isBold:false, // 加粗
-		isOpenWebsite:false, // 网站公开
-		isWeibo:false, // 微博公开
-		isWeChat:false, // 微信公开
-		isTop:false ,// 置顶
-		isPopup:false, // 弹窗
-		content:null, // 内容
+		bulletinTypeId: null, // 公告类型
+		bulletinTypeName: null, // 公告类型名称
+		title: null, // 标题
+		no: null, // 文档编码
+		bulletinTime: null, // 时间
+		departmentId: null, // 所属部门ID
+		sourceOrgName: null, // 所属部门名称
+		departmentName: null, // 来源单位名称
+		isOpen: false, // 公开
+		isBold: false, // 加粗
+		isOpenWebsite: false, // 网站公开
+		isWeibo: false, // 微博公开
+		isWeChat: false, // 微信公开
+		isTop: false, // 置顶
+		isPopup: false, // 弹窗
+		content: null, // 内容
+		videoPath: null, // 视频地址
+		sourceMode: '1', // 来源方式 默认自建
 	},
-	searchContent: '', // 搜索内容
 });
 let loading = ref<boolean>(false); // 加载状态
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 
 const bulletinTypeOptions = ref<EmptyArrayType>([]); // 公告类型
-const pushRangesOptions = ref<EmptyArrayType>([]); // 公告范围
 const orgsOptions = ref<EmptyArrayType>([]); // 来源单位
-const userTables = ref<EmptyArrayType>([]); // 通知对象 个人
-const bulletinDisplayLocation = ref<EmptyArrayType>([]); // 公告位置
+const bulletinSource = ref<EmptyArrayType>([]); // 来源
 const openDialog = async (type: string) => {
 	loading.value = true;
 	state.dialogVisible = true;
 	try {
 		const responseAnnounce = await editSnapshotBulletinBase();
 		bulletinTypeOptions.value = responseAnnounce.result?.bulletinType ?? [];
-		pushRangesOptions.value = responseAnnounce.result?.pushRanges ?? [];
 		orgsOptions.value = responseAnnounce.result?.orgsOptions ?? [];
-		bulletinDisplayLocation.value = responseAnnounce.result?.bulletinDisplayLocation ?? [];
+		bulletinSource.value = responseAnnounce.result?.bulletinSource ?? [];
 		loading.value = false;
 	} catch (error) {
 		console.log(error);
 		loading.value = true;
 	}
 };
-const orgRef = ref<RefType>(); //来源单位
+const orgRef = ref<RefType>(); // 所属部门
 const changeOrg = () => {
 	const currentNode = orgRef.value.getCheckedNodes();
-	if(currentNode)  state.ruleForm.sourceOrgName = currentNode[0].label;
-	else state.ruleForm.sourceOrgName = null;
+	if (currentNode) state.ruleForm.departmentName = currentNode[0].label;
+	else state.ruleForm.departmentName = null;
 };
 
 // 保存
@@ -168,31 +172,10 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	await formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		loading.value = true;
-
-		const pushRanges = state.ruleForm.pushRangesArray.map((item: any) => {
-			return {
-				key: item.dicDataValue,
-				value: item.dicDataName,
-			};
-		});
-		const displayLocation = state.ruleForm.displayLocationArr.map((item: any) => {
-			return {
-				key: item.dicDataValue,
-				value: item.dicDataName,
-			};
-		});
-		const bulletinRequest = {
-			title: state.ruleForm.title,
-			content: state.ruleForm.content,
-			bulletinTypeId: state.ruleForm.bulletinTypeId,
-			bulletinTypeName: state.ruleForm.bulletinTypeName,
-			loseEfficacyTime: state.ruleForm.loseEfficacyTime,
-			sourceOrgId: state.ruleForm.sourceOrgId,
-			sourceOrgName: state.ruleForm.sourceOrgName,
-			pushRanges,
-			displayLocation
+		const request = {
+			...state.ruleForm,
 		};
-		addSnapshotBulletin(bulletinRequest)
+		addSnapshotBulletin(request)
 			.then(() => {
 				loading.value = false;
 				closeDialog();

+ 145 - 0
src/views/snapshot/info/sspConfig/components/Config-detail.vue

@@ -0,0 +1,145 @@
+<template>
+	<el-dialog v-model="state.dialogVisible" width="70%" draggable title="随手拍信息配置详情" append-to-body destroy-on-close>
+		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" :disabled="loading" scroll-to-error>
+			<el-text tag="h2" size="large" style="text-align: center">{{ state.ruleForm.title }}</el-text>
+			<el-divider />
+			<p style="text-align: center" class="mb10">
+				<span class="mr5">创建时间:{{ formatDate(state.ruleForm.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+				<span class="mr5">类别:{{ state.ruleForm.bulletinTypeName }}</span>
+				<span class="mr5">编号:{{ state.ruleForm.no }}</span>
+				<span class="mr5">创建人:{{ state.ruleForm.creatorName }}</span>
+				<span class="mr5">已被阅读:{{ state.ruleForm.readedNum }}</span>
+				<span class="mr5">所属部门:{{ state.ruleForm.departmentName }}</span>
+				<span class="mr5">审核状态:{{ state.ruleForm.bulletinStateTxt }}</span>
+				<span>来源方式:{{ state.ruleForm.sourceMode === '1' ? '自建' : '外部' }}</span>
+			</p>
+			<p style="text-align: center" class="mb10">
+				<span class="mr5">是否公开:{{ state.ruleForm.isOpen ? '是' : '否' }}</span>
+				<span class="mr5">是否加粗:{{ state.ruleForm.isBold ? '是' : '否' }}</span>
+				<span class="mr5">网站公开:{{ state.ruleForm.isOpenWebsite ? '是' : '否' }}</span>
+				<span class="mr5">微博公开:{{ state.ruleForm.isWeibo ? '是' : '否' }}</span>
+				<span class="mr5">微信公开:{{ state.ruleForm.isWeChat ? '是' : '否' }}</span>
+				<span class="mr5">是否置顶:{{ state.ruleForm.isTop ? '是' : '否' }}</span>
+				<span>是否飘窗:{{ state.ruleForm.isPopup ? '是' : '否' }}</span>
+			</p>
+			<p style="text-align: center">
+				<span class="mr5">结束时间:{{ formatDate(state.ruleForm.bulletinTime, 'YYYY-mm-dd HH:MM:SS') }}</span>
+				<span>来源单位:{{ state.ruleForm.sourceOrgName }}</span>
+			</p>
+			<el-divider />
+			<div v-html="state.ruleForm.content"></div>
+		</el-form>
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="closeDialog" class="default-button">取 消</el-button>
+				<el-button
+					type="primary"
+					@click="onAudit"
+					:loading="loading"
+					v-if="state.ruleForm.bulletinState === 1"
+					v-auth="'snapshot:info:sspConfig:audit'"
+					>审 批</el-button
+				>
+			</span>
+		</template>
+	</el-dialog>
+	<el-dialog v-model="state.dialogVisibleAudit" width="500px" draggable title="审批" @close="close" destroy-on-close>
+		<el-form :model="state.examineForm" label-width="110px" ref="examineFormRef">
+			<el-form-item label="审核结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
+				<el-radio-group v-model="state.examineForm.isPass">
+					<el-radio :value="true">同意</el-radio>
+					<el-radio :value="false">不同意</el-radio>
+				</el-radio-group>
+			</el-form-item>
+			<el-form-item label="审核理由" prop="reason" :rules="[{ required: false, message: '请填写审核理由', trigger: 'blur' }]">
+				<el-input v-model="state.examineForm.reason" placeholder="请填写审核理由" type="textarea" :autosize="{ minRows: 4, maxRows: 8 }"></el-input>
+			</el-form-item>
+		</el-form>
+		<template #footer>
+			<span class="dialog-footer">
+				<el-button @click="state.dialogVisibleAudit = false" class="default-button">取 消</el-button>
+				<el-button type="primary" @click="onSubmit(examineFormRef)" :loading="loading">确定</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script setup lang="tsx" name="noticeDetail">
+import { reactive, ref } from 'vue';
+import { auditSnapshotBulletin, getSnapshotBulletinDetail } from '@/api/snapshot/info';
+import { formatDate } from '@/utils/formatTime';
+import { ElMessage, FormInstance } from 'element-plus';
+import { circularAudit } from '@/api/auxiliary/notice';
+// 定义子组件向父组件传值/事件
+const emit = defineEmits(['updateList']);
+// 定义变量内容
+const state = reactive<any>({
+	dialogVisible: false,
+	ruleForm: {},
+	searchContent: '', // 搜索内容
+	dialogVisibleAudit: false,
+	examineForm: {
+		isPass: true,
+		reason: '',
+	},
+});
+let loading = ref<boolean>(false); // 加载状态
+// 打开弹窗
+const ruleFormRef = ref<RefType>();
+
+const openDialog = async (id: string) => {
+	loading.value = true;
+	state.dialogVisible = true;
+	try {
+		const { result } = await getSnapshotBulletinDetail(id);
+		state.ruleForm = result ?? {};
+		loading.value = false;
+	} catch (error) {
+		console.log(error);
+		loading.value = false;
+	}
+};
+// 关闭弹窗
+const closeDialog = () => {
+	state.dialogVisible = false;
+};
+// 审批
+const onAudit = () => {
+	state.dialogVisibleAudit = true;
+};
+const examineFormRef = ref<RefType>();
+const close = () => {
+	examineFormRef.value?.resetFields();
+	examineFormRef.value?.clearValidate();
+};
+// 审核提交
+const onSubmit = (formEl: FormInstance | undefined) => {
+	if (!formEl) return;
+	formEl.validate((valid: boolean) => {
+		if (!valid) return;
+		loading.value = true;
+		const request = {
+			reason: state.examineForm.reason,
+			id: state.ruleForm.id,
+			isPass: state.examineForm.isPass,
+		};
+		auditSnapshotBulletin(request)
+			.then(() => {
+				loading.value = false;
+				closeDialog();
+				state.dialogVisibleAudit = false;
+				emit('updateList');
+				ElMessage.success('审核完成');
+			})
+			.catch(() => {
+				state.dialogVisibleAudit = false;
+				loading.value = false;
+			});
+	});
+};
+// 暴露变量
+defineExpose({
+	openDialog,
+	closeDialog,
+});
+</script>

+ 0 - 236
src/views/snapshot/info/sspConfig/detail.vue

@@ -1,236 +0,0 @@
-<template>
-	<div class="snapshot-info-ssp-config-detail-container layout-pd">
-		<el-card shadow="never" v-loading="loading">
-			<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" class="show-info-form">
-				<template v-if="['通知详情'].includes(noticeType)">
-					<el-row :gutter="0">
-						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-							<el-form-item label="通知类型">
-								{{ state.ruleForm.circularTypeName }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="通知标题">
-								{{ state.ruleForm.title }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="必须阅读">
-								{{ state.ruleForm.isMustRead ? '是' : '否' }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="失效时间:">
-								{{ formatDate(state.ruleForm.lostEfficacyTime, 'YYYY-mm-dd HH:MM:SS') }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="通知对象:">
-								{{ state.ruleForm.circularTypeText }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="已阅读数量:">
-								<el-popover :width="450" trigger="click" popper-class="notice-container">
-									<template #reference>
-										<el-button placement="right" link type="primary">{{ state.ruleForm?.readedNum + '/' + state.ruleForm?.needReadNum }}</el-button>
-									</template>
-									<div class="notice-container-box">
-										<div class="notice-container-box-inner">
-											已读:{{ state.ruleForm?.readedNum }}
-											<el-scrollbar class="mt5" v-if="state.ruleForm?.circularReadGroups?.length">
-												<el-tag v-for="item in state.ruleForm?.circularReadGroups.filter((i) => i.isRead)"
-													>{{ state.ruleForm.circularType === 1 ? item.userName : item.orgName }}
-													<span v-if="item.isTimeOut" class="color-danger">(超时阅读)</span>
-												</el-tag>
-											</el-scrollbar>
-										</div>
-										<div class="notice-container-box-inner">
-											未读:{{ state.ruleForm?.needReadNum - state.ruleForm?.readedNum }}
-											<el-scrollbar class="mt5 mb10" v-if="state.ruleForm.circularReadGroups?.length">
-												<el-tag v-for="item in state.ruleForm.circularReadGroups.filter((i) => !i.isRead)">{{
-													state.ruleForm.circularType === 1 ? item.userName : item.orgName
-												}}</el-tag>
-											</el-scrollbar>
-										</div>
-									</div>
-								</el-popover>
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-							<el-form-item label="文档内容:">
-								<div v-html="state.ruleForm.content"></div>
-							</el-form-item>
-						</el-col>
-					</el-row>
-				</template>
-				<template v-if="['公告详情'].includes(noticeType)">
-					<el-row :gutter="10">
-						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-							<el-form-item label="公告类型:">
-								{{ state.ruleForm.bulletinTypeName }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="公告标题:">
-								{{ state.ruleForm.title }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="失效时间:">
-								{{ formatDate(state.ruleForm.loseEfficacyTime, 'YYYY-mm-dd HH:MM:SS') }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
-							<el-form-item label="来源单位:">
-								{{ state.ruleForm.sourceOrgName }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-							<el-form-item label="公告范围:">
-								{{ state.ruleForm.pushRangesText }}
-							</el-form-item>
-						</el-col>
-						<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="editor-content-view">
-							<el-form-item label="文档内容:">
-								<div v-html="state.ruleForm.content"></div>
-							</el-form-item>
-						</el-col>
-					</el-row>
-				</template>
-			</el-form>
-			<el-button type="primary" @click="onAudit" title="通知审批" v-if="state.ruleForm?.circularState == 1" v-auth="'auxiliary:notice:audit'">
-				审批
-			</el-button>
-			<el-button type="primary" @click="onAudit" title="公告审批" v-if="state.ruleForm?.bulletinState == 1" v-auth="'auxiliary:bulletin:audit'">
-				审批
-			</el-button>
-		</el-card>
-		<el-dialog v-model="state.dialogVisible" width="500px" draggable :title="noticeType" @close="close">
-			<el-form :model="state.examineForm" label-width="110px" ref="examineFormRef">
-				<el-form-item label="审核结果" prop="isPass" :rules="[{ required: true, message: '请选择审批结果', trigger: 'change' }]">
-					<el-radio-group v-model="state.examineForm.isPass">
-						<el-radio :value="true">同意</el-radio>
-						<el-radio :value="false">不同意</el-radio>
-					</el-radio-group>
-				</el-form-item>
-				<el-form-item label="审核理由" prop="reason" :rules="[{ required: true, message: '请填写审核理由', trigger: 'blur' }]">
-					<el-input v-model="state.examineForm.reason" placeholder="请填写审核理由" type="textarea" :autosize="{ minRows: 4, maxRows: 8 }"></el-input>
-				</el-form-item>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="state.dialogVisible = false" class="default-button">取 消</el-button>
-						<el-button type="primary" @click="onSubmit(examineFormRef)" :loading="loading">确定</el-button>
-				</span>
-			</template>
-		</el-dialog>
-		<!-- 流程审批 -->
-		<process-audit ref="processAuditRef" @orderProcessSuccess="closePage" />
-	</div>
-</template>
-<script setup lang="ts" name="snapshotInfoDetail">
-import { reactive, onMounted, ref, defineAsyncComponent } from 'vue';
-import { useRoute } from 'vue-router';
-import { formatDate } from '@/utils/formatTime';
-import { bulletinAudit, bulletinDetail, circularAudit, circularDetail, circularRead } from '@/api/auxiliary/notice';
-import mittBus from '@/utils/mitt';
-import { FormInstance } from 'element-plus';
-import { throttle } from '@/utils/tools';
-const ProcessAudit = defineAsyncComponent(() => import('@/components/ProcessAudit/index.vue')); // 流程审批
-// 定义变量内容
-const state = reactive<any>({
-	dialogVisible: false,
-	ruleForm: <EmptyObjectType>{},
-	examineForm: <EmptyObjectType>{
-		isPass:true,
-		reason:'',
-	},
-});
-const noticeType = ref<any>('通知详情');
-const loading = ref<boolean>(false);
-const isRead = ref<string | string[]>('0');
-const getDetail = async (id: string | string[]) => {
-	loading.value = true;
-	try {
-		switch (noticeType.value) {
-			case '通知详情':
-				if (isRead.value === '1') {
-					// 阅读
-					const readCircularRes = await circularRead(id);
-					state.ruleForm = readCircularRes.result;
-				} else {
-					// 查看详情
-					const circularRes = await circularDetail(id);
-					state.ruleForm = circularRes.result;
-				}
-				break;
-			case '公告详情':
-				const bulletinRes = await bulletinDetail(id);
-				state.ruleForm = bulletinRes.result;
-				break;
-			default:
-				break;
-		}
-		loading.value = false;
-	} catch (error) {
-		loading.value = false;
-		console.log(error);
-	}
-};
-const route = useRoute();
-const onAudit = () => {
-	state.dialogVisible = true;
-};
-// 关闭当前页
-const closePage = () => {
-	state.dialogVisible = false;
-  mittBus.emit('clearCache', 'auxiliaryNotice');
-	// 关闭当前 tagsView
-	mittBus.emit('onCurrentContextmenuClick', Object.assign({}, { contextMenuClickId: 1, ...route }));
-};
-const examineFormRef = ref<RefType>();
-// 审核提交
-const onSubmit =  throttle(async (formEl: FormInstance | undefined) => {
-	if (!formEl) return;
-	await formEl.validate((valid: boolean) => {
-		if (!valid) return;
-		loading.value = true;
-		const request = {
-			reason: state.examineForm.reason,
-			id: route.params.id,
-			isPass:state.examineForm.isPass,
-		};
-		switch (noticeType.value) {
-			case '通知详情':
-				circularAudit(request)
-					.then(() => {
-						closePage();
-					})
-					.catch(() => {
-						state.dialogVisible = false;
-						loading.value = false;
-					});
-				break;
-			case '公告详情':
-				bulletinAudit(request)
-					.then(() => {
-						closePage();
-					})
-					.catch(() =>{
-						state.dialogVisible = false;
-						loading.value = false;
-					})
-		}
-	})
-},300);
-const close = () => {
-	examineFormRef.value?.resetFields();
-	examineFormRef.value?.clearValidate();
-};
-onMounted(() => {
-	noticeType.value = route.params?.tagsViewName ?? '通知详情';
-	isRead.value = route.params?.isRead ?? '0';
-	getDetail(route.params.id);
-});
-</script>

+ 123 - 49
src/views/snapshot/info/sspConfig/index.vue

@@ -6,9 +6,7 @@
 					<el-form :model="state.queryParams" ref="ruleFormRef" inline @submit.native.prevent :disabled="gridOptions.loading">
 						<el-form-item label="审批状态" prop="State">
 							<el-radio-group v-model="state.queryParams.State" @change="handleQuery">
-								<el-radio value="0">未提交</el-radio>
-								<el-radio value="1">审批中</el-radio>
-								<el-radio value="2">已审批</el-radio>
+								<el-radio v-for="item in bulletinState" :label="item.value" :value="item.key" :key="item.key"></el-radio>
 							</el-radio-group>
 						</el-form-item>
 						<el-form-item label="标题" prop="Title">
@@ -40,6 +38,24 @@
 					>
 						提交
 					</el-button>
+					<el-button
+						link
+						type="primary"
+						@click="onShelfFn(row)"
+						v-if="[2].includes(row.bulletinState) && !row.isArrive"
+						v-auth="'snapshot:info:sspConfig:onShelf'"
+					>
+						上架
+					</el-button>
+					<el-button
+						link
+						type="primary"
+						@click="offShelfFn(row)"
+						v-if="[2].includes(row.bulletinState) && row.isArrive"
+						v-auth="'snapshot:info:sspConfig:offShelf'"
+					>
+						下架
+					</el-button>
 					<el-button link type="primary" @click="onDetail(row)" v-if="[1, 2].includes(row.bulletinState)"> 查看详情 </el-button>
 				</template>
 				<template #pager>
@@ -57,7 +73,13 @@
 		<el-drawer v-model="drawer" title="更多查询" size="500px">
 			<el-form :model="state.queryParams" ref="drawerRuleFormRef" @submit.native.prevent label-width="100px">
 				<el-form-item label="类别名称" prop="SnapshotBulletinTypeName">
-					<el-input v-model="state.queryParams.SnapshotBulletinTypeName" placeholder="请填写类别名称" clearable @keyup.enter="handleQuery" class="keyword-input" />
+					<el-input
+						v-model="state.queryParams.SnapshotBulletinTypeName"
+						placeholder="请填写类别名称"
+						clearable
+						@keyup.enter="handleQuery"
+						class="keyword-input"
+					/>
 				</el-form-item>
 				<el-form-item label="文档编号" prop="No">
 					<el-input v-model="state.queryParams.No" placeholder="请填写文档编号" clearable @keyup.enter="handleQuery" />
@@ -88,26 +110,33 @@
 				<el-button @click="resetQuery(drawerRuleFormRef)" class="default-button"> <SvgIcon name="ele-Refresh" class="mr5" />重置 </el-button>
 			</template>
 		</el-drawer>
-		<!--  新增线索  -->
+		<!--  新增  -->
 		<config-add ref="configAddRef" @updateList="queryList" />
-		<!--  修改线索  -->
-		<clue-edit ref="clueEditRef" @updateList="queryList" />
+		<!--  修改  -->
+		<config-edit ref="configEditRef" @updateList="queryList" />
+		<!--  详情  -->
+		<config-detail ref="configDetailRef" @updateList="queryList" />
 	</div>
 </template>
 
 <script lang="tsx" setup name="snapshotInfoSspConfig">
 import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
-import { ElMessageBox, FormInstance } from 'element-plus';
-import { getSnapshotBulletinBaseData, getSnapshotBulletinList } from '@/api/snapshot/info';
-import { useRouter } from 'vue-router';
+import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
+import {
+	delSnapshotBulletin,
+	getSnapshotBulletinBaseData,
+	getSnapshotBulletinList,
+	shelfSnapshotBulletin,
+	submitSnapshotBulletin,
+} from '@/api/snapshot/info';
 import { defaultTimeStartEnd, shortcuts } from '@/utils/constants';
 import Other from '@/utils/other';
 
 // 引入组件
 const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
-const ClueAdd = defineAsyncComponent(() => import('@/views/snapshot/config/clue/components/Clue-add.vue')); // 新增线索
-const ClueEdit = defineAsyncComponent(() => import('@/views/snapshot/config/clue/components/Clue-edit.vue')); // 修改线索
 const ConfigAdd = defineAsyncComponent(() => import('@/views/snapshot/info/sspConfig/components/Config-add.vue')); // 新增
+const ConfigEdit = defineAsyncComponent(() => import('@/views/snapshot/info/sspConfig/components/Config-edit.vue')); // 编辑
+const ConfigDetail = defineAsyncComponent(() => import('@/views/snapshot/info/sspConfig/components/Config-detail.vue')); // 详情
 
 // 定义变量内容
 const state = reactive<any>({
@@ -116,15 +145,15 @@ const state = reactive<any>({
 		// 查询参数
 		PageIndex: 1,
 		PageSize: 20,
-		State: '0', // 审核状态
-		SnapshotBulletinTypeName:null, // 类型名称
-		Title:null, // 标题
-		No:null ,// 文档编号
-		DepartmentName:null, // 部门名称
-		CreatorName:null, // 发布人
-		fbTime:[], // 发布时间
-		BeginCreationTime:null,
-		EndCreationTime:null,
+		State: 0, // 审核状态 默认草稿
+		SnapshotBulletinTypeName: null, // 类型名称
+		Title: null, // 标题
+		No: null, // 文档编号
+		DepartmentName: null, // 部门名称
+		CreatorName: null, // 发布人
+		fbTime: [], // 发布时间
+		BeginCreationTime: null,
+		EndCreationTime: null,
 	},
 	total: 0, // 总条数
 });
@@ -160,66 +189,96 @@ const gridOptions = reactive<any>({
 	height: 'auto',
 	columns: [
 		{
-			field: 'bulletinTypeName',
+			field: 'snapshotBulletinTypeName',
 			title: '类别名称',
-			width: 100,
+			width: 150,
 		},
 		{
 			field: 'title',
 			title: '标题',
 			minWidth: 200,
+			slots: {
+				default: ({ row }) => {
+					return (
+						<el-button link type="primary" onClick={() => onDetail(row)}>
+							{row.title}
+						</el-button>
+					);
+				},
+			},
 		},
 		{
-			field: 'citizenReadPackAmountTxt',
+			field: 'no',
 			title: '文档编码',
 			width: 100,
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'readedNum',
 			title: '阅读次数',
 			width: 100,
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'departmentName',
 			title: '部门名称',
 			width: 140,
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'creatorName',
 			title: '发布人',
 			width: 120,
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'bulletinTime',
 			title: '发布时间',
 			width: 160,
+			formatter: 'formatDate',
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'isOpen',
 			title: '是否公开',
 			width: 100,
+			slots: {
+				default: ({ row }) => {
+					return row.isOpen ? '是' : '否';
+				},
+			},
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'isOpenWebsite',
 			title: '网站公开',
 			width: 100,
+			slots: {
+				default: ({ row }) => {
+					return row.isOpenWebsite ? '是' : '否';
+				},
+			},
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'isWeChat',
 			title: '微信公开',
 			width: 100,
+			slots: {
+				default: ({ row }) => {
+					return row.isWeChat ? '是' : '否';
+				},
+			},
 		},
 		{
-			field: 'guiderReadPackAmountTxt',
+			field: 'isWeibo',
 			title: '微博公开',
 			width: 100,
+			slots: {
+				default: ({ row }) => {
+					return row.isWeibo ? '是' : '否';
+				},
+			},
 		},
 		{
 			field: 'bulletinStateText',
 			title: '审批状态',
 			width: 100,
 		},
-		{ title: '操作', width: 200, fixed: 'right', align: 'center', slots: { default: 'action' } },
+		{ title: '操作', width: 200, fixed: 'right', showOverflow: false, align: 'center', slots: { default: 'action' } },
 	],
 	data: [],
 });
@@ -265,9 +324,9 @@ const onAdd = () => {
 	configAddRef.value.openDialog();
 };
 // 编辑
-const clueEditRef = ref<RefType>();
+const configEditRef = ref<RefType>();
 const onEdit = (row: any) => {
-	clueEditRef.value.openDialog(row.id);
+	configEditRef.value.openDialog(row.id);
 };
 
 // 删除
@@ -280,12 +339,17 @@ const onDelete = (row: any) => {
 		cancelButtonClass: 'default-button',
 		autofocus: false,
 	})
-		.then(() => {})
+		.then(() => {
+			delSnapshotBulletin(row.id).then(() => {
+				ElMessage.success('操作成功');
+				queryList();
+			});
+		})
 		.catch(() => {});
 };
 // 提交
 const onCommit = (row: any) => {
-	ElMessageBox.confirm(`您确定要提交:【${row.title}】,是否继续?`, '提示', {
+	ElMessageBox.confirm(`您确定要提交审批:【${row.title}】,是否继续?`, '提示', {
 		confirmButtonText: '确认',
 		cancelButtonText: '取消',
 		type: 'warning',
@@ -293,7 +357,12 @@ const onCommit = (row: any) => {
 		cancelButtonClass: 'default-button',
 		autofocus: false,
 	})
-		.then(() => {})
+		.then(() => {
+			submitSnapshotBulletin({ id: row.id }).then(() => {
+				ElMessage.success('操作成功');
+				queryList();
+			});
+		})
 		.catch(() => {});
 };
 // 上架
@@ -306,7 +375,12 @@ const onShelfFn = (row: any) => {
 		cancelButtonClass: 'default-button',
 		autofocus: false,
 	})
-		.then(() => {})
+		.then(() => {
+			shelfSnapshotBulletin({ id: row.id, isArrive: true }).then(() => {
+				ElMessage.success('操作成功');
+				queryList();
+			});
+		})
 		.catch(() => {});
 };
 // 下架
@@ -319,25 +393,25 @@ const offShelfFn = (row: any) => {
 		cancelButtonClass: 'default-button',
 		autofocus: false,
 	})
-		.then(() => {})
+		.then(() => {
+			shelfSnapshotBulletin({ id: row.id, isArrive: false }).then(() => {
+				ElMessage.success('操作成功');
+				queryList();
+			});
+		})
 		.catch(() => {});
 };
 // 查看详情
-const router = useRouter();
+const configDetailRef = ref<RefType>();
 const onDetail = (row: any) => {
-	router.push({
-		path: '/snapshot/info/detail',
-		query: {
-			id: row.id,
-			tagsViewName: row.name,
-		},
-	});
+	configDetailRef.value.openDialog(row.id);
 };
 // 获取基础信息
+const bulletinState = ref<EmptyArrayType>([]);
 const getBaseInfo = async () => {
 	try {
 		const { result } = await getSnapshotBulletinBaseData();
-		console.log(result);
+		bulletinState.value = result.bulletinState;
 	} catch (e) {
 		console.log(e);
 	}