Pārlūkot izejas kodu

reactor:修复甄别申请时附件的问题;

zhangchong 4 mēneši atpakaļ
vecāks
revīzija
10fbb0470c

+ 10 - 0
src/api/snapshot/config.ts

@@ -25,6 +25,16 @@ export const addIndustry = (data: object) => {
 		data,
 	});
 }
+/**
+ * @description 获取行业详情
+ * @param {string} id
+ */
+export const getIndustryDetail = (id: string) => {
+	return request({
+		url: `/api/v1/Industry/${id}`,
+		method: 'get',
+	});
+}
 /**
  * @description 修改行业
  * @param {object} data

+ 196 - 87
src/views/snapshot/config/industry/components/Industry-add.vue

@@ -8,65 +8,76 @@
 		<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef">
 			<el-row :gutter="10" v-show="state.activeName === '0'">
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="行业名称" prop="settingName" :rules="[{ required: true, message: '请填写行业名称', trigger: 'blur' }]">
-						<el-input v-model="state.ruleForm.settingName" placeholder="请填写行业名称" clearable></el-input>
+					<el-form-item label="行业名称" prop="name" :rules="[{ required: true, message: '请填写行业名称', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.name" placeholder="请填写行业名称" clearable></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="市民红包" prop="sort" :rules="[{ required: true, message: '请填写市民红包', trigger: 'blur' }]">
-						<el-input-number v-model="state.ruleForm.sort" :min="0" :precision="2" class="w100"/>
+					<el-form-item label="市民红包" prop="citizenReadPackAmount" :rules="[{ required: true, message: '请填写市民红包', trigger: 'blur' }]">
+						<el-input-number v-model="state.ruleForm.citizenReadPackAmount" :min="0" :precision="2" class="w100" placeholder="请填写市民红包" />
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="网格员红包" prop="sort" :rules="[{ required: true, message: '请填写网格员红包', trigger: 'blur' }]">
-						<el-input-number v-model="state.ruleForm.sort" :min="0" :precision="2" class="w100"/>
+					<el-form-item label="网格员红包" prop="guiderReadPackAmount" :rules="[{ required: true, message: '请填写网格员红包', trigger: 'blur' }]">
+						<el-input-number v-model="state.ruleForm.guiderReadPackAmount" :min="0" :precision="2" class="w100" placeholder="请填写网格员红包" />
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="阶段性回复间隔时间" prop="settingValue" label-width="150px" :rules="[{ required: true, message: '请填写阶段性回复间隔时间', trigger: 'blur' }]">
-						<el-input type="number" v-model="state.ruleForm.settingValue" placeholder="请填写阶段性回复间隔时间">
-							<template #suffix>
-								小时
-							</template>
+					<el-form-item
+						label="阶段性回复间隔时间"
+						prop="intervalTime"
+						label-width="150px"
+						:rules="[{ required: false, message: '请填写阶段性回复间隔时间', trigger: 'blur' }]"
+					>
+						<el-input type="number" v-model.number="state.ruleForm.intervalTime" placeholder="请填写阶段性回复间隔时间">
+							<template #suffix> 小时 </template>
 						</el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="审批部门" prop="gender" :rules="[{ required: false, message: '请选择审批部门', trigger: 'change' }]">
-						<el-select v-model="state.ruleForm.gender" placeholder="请选择审批部门" class="w100">
+					<el-form-item label="审批部门" prop="approveOrgId" :rules="[{ required: false, message: '请选择审批部门', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.approveOrgId" placeholder="请选择审批部门" class="w100">
 							<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
 						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="关联宣传学习" prop="gender" :rules="[{ required: false, message: '请选择关联宣传学习', trigger: 'change' }]">
-						<el-select v-model="state.ruleForm.gender" placeholder="请选择关联宣传学习" class="w100">
+					<el-form-item
+						label="关联宣传学习"
+						prop="bulletinTypePublicityId"
+						:rules="[{ required: false, message: '请选择关联宣传学习', trigger: 'change' }]"
+					>
+						<el-select v-model="state.ruleForm.bulletinTypePublicityId" placeholder="请选择关联宣传学习" class="w100">
 							<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
 						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="关联操作指引" prop="gender" :rules="[{ required: false, message: '请选择关联操作指引', trigger: 'change' }]">
-						<el-select v-model="state.ruleForm.gender" placeholder="请选择关联操作指引" class="w100">
+					<el-form-item
+						label="关联操作指引"
+						prop="bulletinTypeGuideId"
+						:rules="[{ required: false, message: '请选择关联操作指引', trigger: 'change' }]"
+					>
+						<el-select v-model="state.ruleForm.bulletinTypeGuideId" placeholder="请选择关联操作指引" class="w100">
 							<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
 						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="关联受理类型" prop="gender" :rules="[{ required: false, message: '请选择关联受理类型', trigger: 'change' }]">
-						<el-select v-model="state.ruleForm.gender" placeholder="请选择关联受理类型" class="w100">
+					<el-form-item label="关联受理类型" prop="acceptTypeCode" :rules="[{ required: false, message: '请选择关联受理类型', trigger: 'change' }]">
+						<el-select v-model="state.ruleForm.acceptTypeCode" placeholder="请选择关联受理类型" class="w100">
 							<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
 						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="标题追加信息" prop="settingName" :rules="[{ required: false, message: '请填写标题追加信息', trigger: 'blur' }]">
-						<el-input v-model="state.ruleForm.settingName" placeholder="请填写标题追加信息" clearable></el-input>
+					<el-form-item label="标题追加信息" prop="titleSuffix" :rules="[{ required: false, message: '请填写标题追加信息', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.titleSuffix" placeholder="请填写标题追加信息" clearable></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="系统状态" prop="isAffix">
-						<el-switch v-model="state.ruleForm.isAffix" inline-prompt active-text="启用" inactive-text="禁用" />
+					<el-form-item label="系统状态" prop="isEnable">
+						<el-switch v-model="state.ruleForm.isEnable" inline-prompt active-text="启用" inactive-text="禁用" />
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
@@ -75,126 +86,144 @@
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="排序" prop="sort" :rules="[{ required: false, message: '请填写排序', trigger: 'blur' }]">
-						<el-input-number v-model="state.ruleForm.sort" :min="1" :precision="0" class="w100"/>
+					<el-form-item label="排序" prop="displayOrder" :rules="[{ required: false, message: '请填写排序', trigger: 'blur' }]">
+						<el-input-number v-model="state.ruleForm.displayOrder" :min="1" :precision="0" class="w100" />
 					</el-form-item>
 				</el-col>
 				<el-col>
-					<el-form-item label="页面Url" prop="settingName" :rules="[{ required: false, message: '请填写页面Url', trigger: 'blur' }]">
-						<el-input v-model="state.ruleForm.settingName" placeholder="请填写页面Url" clearable></el-input>
+					<el-form-item label="页面Url" prop="pageUrl" :rules="[{ required: false, message: '请填写页面Url', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.pageUrl" placeholder="请填写页面Url" clearable></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col>
-					<el-form-item label="关怀页面Ur" prop="settingName" :rules="[{ false: true, message: '请填写关怀页面Ur', trigger: 'blur' }]">
-						<el-input v-model="state.ruleForm.settingName" placeholder="请填写关怀页面Ur" clearable></el-input>
+					<el-form-item label="关怀页面Ur" prop="pageCareUrl" :rules="[{ false: true, message: '请填写关怀页面Ur', trigger: 'blur' }]">
+						<el-input v-model="state.ruleForm.pageCareUrl" placeholder="请填写关怀页面Ur" 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="remark" :rules="[{ required: false, message: '请填写帮助引导用语', trigger: 'blur' }]">
+					<el-form-item label="帮助引导用语" prop="txtHelpRemarks" :rules="[{ required: false, message: '请填写帮助引导用语', trigger: 'blur' }]">
 						<el-input
 							type="textarea"
 							:autosize="{ minRows: 6, maxRows: 10 }"
-							v-model="state.ruleForm.remark"
+							v-model="state.ruleForm.txtHelpRemarks"
 							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="remark" :rules="[{ required: false, message: '请填写宫格说明文本', trigger: 'blur' }]">
+					<el-form-item label="宫格说明文本" prop="txtRemarks" :rules="[{ required: false, message: '请填写宫格说明文本', trigger: 'blur' }]">
 						<el-input
 							type="textarea"
 							:autosize="{ minRows: 6, maxRows: 10 }"
-							v-model="state.ruleForm.remark"
+							v-model="state.ruleForm.txtRemarks"
 							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="remark" :rules="[{ required: false, message: '请填写关怀说明', trigger: 'blur' }]">
+					<el-form-item label="关怀说明" prop="txtCareRemarks" :rules="[{ required: false, message: '请填写关怀说明', trigger: 'blur' }]">
 						<el-input
 							type="textarea"
 							:autosize="{ minRows: 6, maxRows: 10 }"
-							v-model="state.ruleForm.remark"
+							v-model="state.ruleForm.txtCareRemarks"
 							placeholder="请填写关怀说明"
 							clearable
 						></el-input>
 					</el-form-item>
 				</el-col>
-
 			</el-row>
 			<el-row v-show="state.activeName === '1'">
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="背景图片" prop="settingName">
+					<el-form-item label="背景图片">
 						<el-upload
 							class="avatar-uploader"
 							:action="action"
 							:show-file-list="false"
-							:on-success="updateSuccess"
-							ref="uploadListRef"
+							:on-success="updateSuccessBg"
+							ref="uploadListRefBg"
 							name="fileData"
+							:on-error="onUploadError"
 						>
-							<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
-							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							<img v-if="bgUrl" :src="bgUrl" class="avatar" alt="" />
+							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus" size="28px"/>
 						</el-upload>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="banner设置" prop="settingName">
+					<el-form-item label="banner设置">
 						<el-upload
 							class="avatar-uploader"
 							:action="action"
 							:show-file-list="false"
+							:on-success="updateSuccessBanner"
+							ref="uploadListRefBanner"
+							name="fileData"
+							:on-error="onUploadError"
 						>
-							<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
-							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							<img v-if="bannerUrl" :src="bannerUrl" class="avatar" alt="" />
+							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus" size="28px" />
 						</el-upload>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="宫格图" prop="settingName">
+					<el-form-item label="宫格图">
 						<el-upload
 							class="avatar-uploader"
 							:action="action"
 							:show-file-list="false"
+							:on-success="updateSuccessCell"
+							ref="uploadListRefCell"
+							name="fileData"
+							:on-error="onUploadError"
 						>
-							<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
-							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							<img v-if="cellImgUrl" :src="cellImgUrl" class="avatar" alt="" />
+							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus" size="28px" />
 						</el-upload>
 					</el-form-item>
 				</el-col>
 				<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-					<el-form-item label="关怀宫格图" prop="settingName">
+					<el-form-item label="关怀宫格图">
 						<el-upload
 							class="avatar-uploader"
 							:action="action"
 							:show-file-list="false"
+							:on-success="updateSuccessCareCell"
+							ref="uploadListRefCareCell"
+							name="fileData"
+							:on-error="onUploadError"
 						>
-							<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
-							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							<img v-if="careCellImgUrl" :src="careCellImgUrl" class="avatar" alt="" />
+							<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus" size="28px" />
 						</el-upload>
 					</el-form-item>
 				</el-col>
+				<el-col>
+					<el-form-item label="附件">
+						<annex-list classify="行业管理上传" v-model="state.ruleForm.files" v-model:format="filesFormat" />
+					</el-form-item>
+				</el-col>
 			</el-row>
-			<el-row v-show="state.activeName === '2'">
-
-			</el-row>
+			<el-row v-show="state.activeName === '2'"> </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>
+			<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="ts">
-import { computed, reactive, ref } from 'vue';
+import { computed, defineAsyncComponent, reactive, ref } from 'vue';
 import { ElMessage, FormInstance, UploadFile, UploadFiles } from 'element-plus';
 import { throttle } from '@/utils/tools';
-import { SetingsAdd } from '@/api/system/parameter';
+import { addIndustry } from '@/api/snapshot/config';
+
+const AnnexList = defineAsyncComponent(() => import('@/components/AnnexList/index.vue')); // 附件列表
+
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
 
@@ -202,14 +231,33 @@ const emit = defineEmits(['updateList']);
 const state = reactive<any>({
 	dialogVisible: false,
 	ruleForm: {
-		settingName: '', // 参数名称
-		code: '', // 参数
-		settingValue: '', // 参数值
-		sort: 0, // 排序
-		remark: '', // 参数说明
+		name: null, // 行业名称
+		citizenReadPackAmount: null, // 市民红包
+		guiderReadPackAmount: null, // 网格员红包
+		intervalTime: 0, // 阶段性回复间隔时间
+		approveOrgId: null, // 审批机构id
+		approveOrgName: null,
+		bulletinTypePublicityId: null, // 关联宣传学习ID
+		bulletinTypePublicityName: null, // 关联宣传学习名称
+		bulletinTypeGuideId: null, // 关联操作指引ID
+		bulletinTypeGuideName: null, // 关联操作指引名称
+		acceptTypeCode: null, // 关联受理类型ID
+		acceptType: null, // 关联受理类型名称
+		titleSuffix: null, // 标题追加信息
+		isEnable: true, // 系统状态
+		displayOrder: 1, // 排序
+		pageUrl: null, // 页面Url
+		pageCareUrl: null, //Care页面Url
+		txtHelpRemarks: null, // 帮助引导用语
+		txtRemarks: null, // 宫格说明文本
+		txtCareRemarks: null, //Care说明
+		backgroundImgUrl: null, // 背景图片
+		bannerImgUrl: null, // banner图片
+		cellImgUrl: null, // 宫格图片
+		careCellImgUrl: null, //Care宫格图片
 	},
-	activeName:'0',
-	tabPaneList:[
+	activeName: '0',
+	tabPaneList: [
 		{
 			label: '参数配置',
 			name: '0',
@@ -225,29 +273,79 @@ const state = reactive<any>({
 	],
 });
 
-const imageUrl = ref('')
+let loading = ref<boolean>(false); // 加载状态
+// 打开弹窗
+const ruleFormRef = ref<RefType>();
+const openDialog = async () => {
+	try {
+		state.dialogVisible = true;
+	} catch (error) {
+		console.log(error);
+	}
+};
+// 上传地址
 const action = computed(() => {
 	return import.meta.env.VITE_API_UPLOAD_URL + '/file/upload?source=hotline';
 });
-const uploadListRef = ref<RefType>(); // 上传组件ref
-// 上传成功
-const updateSuccess = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+const bgUrl = ref(''); // 背景图
+const uploadListRefBg = ref<RefType>(); // 上传组件ref
+// 上传成功背景图
+const updateSuccessBg = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
 	if (response.result.path) {
-		console.log(response);
-		imageUrl.value = import.meta.env.VITE_API_UPLOAD_URL + response.result.path;
+		// bgUrl.value = import.meta.env.VITE_API_UPLOAD_URL + response.result.path;
+		bgUrl.value = URL.createObjectURL(uploadFile.raw!)
+		state.ruleForm.backgroundImgUrl = response.result.id;
 	} else {
-		uploadListRef.value.handleRemove(uploadFile);
+		uploadListRefBg.value.handleRemove(uploadFile);
 		ElMessage.error('上传失败');
 	}
 };
-let loading = ref<boolean>(false);  // 加载状态
-// 打开弹窗
-const ruleFormRef = ref<RefType>();
-const openDialog = async () => {
+// banner图
+const bannerUrl = ref('');
+const uploadListRefBanner = ref<RefType>();
+const updateSuccessBanner = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+	if (response.result.path) {
+		// bannerUrl.value = import.meta.env.VITE_API_UPLOAD_URL + response.result.path;
+		bannerUrl.value = URL.createObjectURL(uploadFile.raw!)
+		state.ruleForm.bannerImgUrl = response.result.id;
+	} else {
+		uploadListRefBanner.value.handleRemove(uploadFile);
+		ElMessage.error('上传失败');
+	}
+};
+// 宫格图
+const cellImgUrl = ref('');
+const uploadListRefCell = ref<RefType>();
+const updateSuccessCell = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+	if (response.result.path) {
+		// cellImgUrl.value = import.meta.env.VITE_API_UPLOAD_URL + response.result.path;
+		cellImgUrl.value = URL.createObjectURL(uploadFile.raw!)
+		state.ruleForm.cellImgUrl = response.result.id;
+	} else {
+		uploadListRefCell.value.handleRemove(uploadFile);
+		ElMessage.error('上传失败');
+	}
+};
+// 关怀宫格图
+const careCellImgUrl = ref('');
+const uploadListRefCareCell = ref<RefType>();
+const updateSuccessCareCell = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+	if (response.result.path) {
+		// careCellImgUrl.value = import.meta.env.VITE_API_UPLOAD_URL + response.result.path;
+		careCellImgUrl.value = URL.createObjectURL(uploadFile.raw!)
+		state.ruleForm.careCellImgUrl = response.result.id;
+	} else {
+		uploadListRefCareCell.value.handleRemove(uploadFile);
+		ElMessage.error('上传失败');
+	}
+};
+// 上传失败
+const onUploadError = (error: Error) => {
 	try {
-		state.dialogVisible = true;
-	} catch (error) {
-		console.log(error);
+		const errMessage = JSON.parse(error.message)?.message ?? '上传失败';
+		ElMessage.error(errMessage);
+	} catch (e) {
+		ElMessage.error('上传失败');
 	}
 };
 // 关闭弹窗
@@ -257,15 +355,28 @@ const closeDialog = () => {
 const close = () => {
 	ruleFormRef.value?.resetFields();
 	ruleFormRef.value?.resetFields();
+	state.ruleForm.backgroundImgUrl = null;
+	state.ruleForm.bannerImgUrl = null;
+	state.ruleForm.cellImgUrl = null;
+	state.ruleForm.careCellImgUrl = null;
+	bgUrl.value = '';
+	bannerUrl.value = '';
+	cellImgUrl.value = '';
+	careCellImgUrl.value = '';
 };
+
+const filesFormat = ref<EmptyArrayType>([]); // 附件列表格式化
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
 	await formEl.validate((valid: boolean) => {
 		if (!valid) return;
 		loading.value = true;
-		state.ruleForm.settingValue = state.ruleForm?.settingValue.split('|');
-		SetingsAdd(state.ruleForm)
+		const requestData = {
+			...state.ruleForm,
+			files: filesFormat.value,
+		};
+		addIndustry(requestData)
 			.then(() => {
 				ElMessage({
 					message: '操作成功',
@@ -273,8 +384,7 @@ const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 				});
 				emit('updateList');
 			})
-			.catch(() => {
-			})
+			.catch(() => {})
 			.finally(() => {
 				loading.value = false;
 				closeDialog();
@@ -307,12 +417,11 @@ defineExpose({
 .avatar-uploader .el-upload:hover {
 	border-color: var(--el-color-primary);
 }
-
-.el-icon.avatar-uploader-icon {
+.avatar-uploader-icon {
 	font-size: 28px;
 	color: #8c939d;
 	width: 178px;
 	height: 178px;
 	text-align: center;
 }
-</style>
+</style>

+ 205 - 28
src/views/snapshot/config/industry/components/Industry-edit.vue

@@ -1,44 +1,184 @@
 <template>
-		<el-dialog v-model="state.dialogVisible" width="50%" draggable :title="dialogTitle">
-			<el-form :model="state.ruleForm" label-width="90px" ref="ruleFormRef">
-				<el-row :gutter="10">
+		<el-dialog v-model="state.dialogVisible" width="50%" draggable :title="dialogTitle"  destroy-on-close append-to-body @close="close">
+			<template #header>
+				<el-tabs v-model="state.activeName">
+					<el-tab-pane :name="item.name" v-for="item in state.tabPaneList" :key="item.name" :label="item.label"></el-tab-pane>
+				</el-tabs>
+			</template>
+			<el-form :model="state.ruleForm" label-width="110px" ref="ruleFormRef" :disabled="loading">
+				<el-row :gutter="10" v-show="state.activeName === '0'">
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="行业名称" prop="name" :rules="[{ required: true, message: '请填写行业名称', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.name" placeholder="请填写行业名称" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="市民红包" prop="citizenReadPackAmount" :rules="[{ required: true, message: '请填写市民红包', trigger: 'blur' }]">
+							<el-input-number v-model="state.ruleForm.citizenReadPackAmount" :min="0" :precision="2" class="w100" placeholder="请填写市民红包"/>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="网格员红包" prop="guiderReadPackAmount" :rules="[{ required: true, message: '请填写网格员红包', trigger: 'blur' }]">
+							<el-input-number v-model="state.ruleForm.guiderReadPackAmount" :min="0" :precision="2" class="w100" placeholder="请填写网格员红包"/>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="阶段性回复间隔时间" prop="intervalTime" label-width="150px" :rules="[{ required: false, message: '请填写阶段性回复间隔时间', trigger: 'blur' }]">
+							<el-input type="number" v-model="state.ruleForm.intervalTime" placeholder="请填写阶段性回复间隔时间">
+								<template #suffix>
+									小时
+								</template>
+							</el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="审批部门" prop="approveOrgId" :rules="[{ required: false, message: '请选择审批部门', trigger: 'change' }]">
+							<el-select v-model="state.ruleForm.approveOrgId" placeholder="请选择审批部门" class="w100">
+								<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="关联宣传学习" prop="bulletinTypePublicityId" :rules="[{ required: false, message: '请选择关联宣传学习', trigger: 'change' }]">
+							<el-select v-model="state.ruleForm.bulletinTypePublicityId" placeholder="请选择关联宣传学习" class="w100">
+								<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="关联操作指引" prop="bulletinTypeGuideId" :rules="[{ required: false, message: '请选择关联操作指引', trigger: 'change' }]">
+							<el-select v-model="state.ruleForm.bulletinTypeGuideId" placeholder="请选择关联操作指引" class="w100">
+								<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="关联受理类型" prop="acceptTypeCode" :rules="[{ required: false, message: '请选择关联受理类型', trigger: 'change' }]">
+							<el-select v-model="state.ruleForm.acceptTypeCode" placeholder="请选择关联受理类型" class="w100">
+								<el-option v-for="item in state.genderOptions" :key="item.key" :label="item.value" :value="item.key" />
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="标题追加信息" prop="titleSuffix" :rules="[{ required: false, message: '请填写标题追加信息', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.titleSuffix" placeholder="请填写标题追加信息" clearable></el-input>
+						</el-form-item>
+					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="参数名称" prop="settingName" :rules="[{ required: true, message: '请填写参数名称', trigger: 'blur' }]">
-							<el-input v-model="state.ruleForm.settingName" placeholder="请填写参数名称" clearable disabled></el-input>
+						<el-form-item label="系统状态" prop="isEnable">
+							<el-switch v-model="state.ruleForm.isEnable" inline-prompt active-text="启用" inactive-text="禁用" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="参数" prop="code" :rules="[{ required: true, message: '请填写参数', trigger: 'blur' }]">
-							<el-input v-model.trim="state.ruleForm.code" placeholder="请填写参数" clearable disabled></el-input>
+						<el-form-item label="小程序状态" prop="isAffix">
+							<el-switch v-model="state.ruleForm.isAffix" inline-prompt active-text="启用" inactive-text="禁用" />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="排序" prop="sort" :rules="[{ required: false, message: '请填写排序', trigger: 'blur' }]">
-							<el-input-number v-model="state.ruleForm.sort" :min="1" :precision="0" :disabled="state.isDisabled" class="w100"/>
+						<el-form-item label="排序" prop="displayOrder" :rules="[{ required: false, message: '请填写排序', trigger: 'blur' }]">
+							<el-input-number v-model="state.ruleForm.displayOrder" :min="1" :precision="0" class="w100"/>
+						</el-form-item>
+					</el-col>
+					<el-col>
+						<el-form-item label="页面Url" prop="pageUrl" :rules="[{ required: false, message: '请填写页面Url', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.pageUrl" placeholder="请填写页面Url" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col>
+						<el-form-item label="关怀页面Ur" prop="pageCareUrl" :rules="[{ false: true, message: '请填写关怀页面Ur', trigger: 'blur' }]">
+							<el-input v-model="state.ruleForm.pageCareUrl" placeholder="请填写关怀页面Ur" 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="txtHelpRemarks" :rules="[{ required: false, message: '请填写帮助引导用语', trigger: 'blur' }]">
+							<el-input
+								type="textarea"
+								:autosize="{ minRows: 6, maxRows: 10 }"
+								v-model="state.ruleForm.txtHelpRemarks"
+								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="txtRemarks" :rules="[{ required: false, message: '请填写宫格说明文本', trigger: 'blur' }]">
+							<el-input
+								type="textarea"
+								:autosize="{ minRows: 6, maxRows: 10 }"
+								v-model="state.ruleForm.txtRemarks"
+								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="settingValue" :rules="[{ required: false, message: '请填写参数值', trigger: 'blur' }]">
-              <el-input
-                type="textarea"
-                v-model="state.ruleForm.settingValue"
-                placeholder="有多个参数值,请以的|隔开,如1|2|3"
-                :disabled="state.isDisabled"
-              ></el-input>
-            </el-form-item>
-          </el-col>
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="参数说明" prop="remark" :rules="[{ required: false, message: '请填写参数说明', trigger: 'blur' }]">
+						<el-form-item label="关怀说明" prop="txtCareRemarks" :rules="[{ required: false, message: '请填写关怀说明', trigger: 'blur' }]">
 							<el-input
-								:disabled="state.isDisabled"
 								type="textarea"
 								:autosize="{ minRows: 6, maxRows: 10 }"
-								v-model="state.ruleForm.remark"
-								placeholder="请填写参数说明"
+								v-model="state.ruleForm.txtCareRemarks"
+								placeholder="请填写关怀说明"
 								clearable
 							></el-input>
 						</el-form-item>
 					</el-col>
+
+				</el-row>
+				<el-row v-show="state.activeName === '1'">
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="背景图片" prop="settingName">
+							<el-upload
+								class="avatar-uploader"
+								:action="action"
+								:show-file-list="false"
+								:on-success="updateSuccess"
+								ref="uploadListRef"
+								name="fileData"
+							>
+								<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
+								<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							</el-upload>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="banner设置" prop="settingName">
+							<el-upload
+								class="avatar-uploader"
+								:action="action"
+								:show-file-list="false"
+							>
+								<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
+								<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							</el-upload>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="宫格图" prop="settingName">
+							<el-upload
+								class="avatar-uploader"
+								:action="action"
+								:show-file-list="false"
+							>
+								<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
+								<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							</el-upload>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="关怀宫格图" prop="settingName">
+							<el-upload
+								class="avatar-uploader"
+								:action="action"
+								:show-file-list="false"
+							>
+								<img v-if="imageUrl" :src="imageUrl" class="avatar" alt=""/>
+								<SvgIcon v-else class="avatar-uploader-icon" name="ele-Plus"/>
+							</el-upload>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-row v-show="state.activeName === '2'">
+
 				</el-row>
 			</el-form>
 			<template #footer v-if="!state.isDisabled">
@@ -52,9 +192,10 @@
 
 <script setup lang="ts" name="parameterEdit">
 import { computed, reactive, ref } from 'vue';
-import { ElMessage, FormInstance } from 'element-plus';
+import { ElMessage, FormInstance, UploadFile, UploadFiles } from 'element-plus';
 import { throttle } from '@/utils/tools';
 import { modifySettings, setitngsDetail } from '@/api/system/parameter';
+import { getIndustryDetail } from '@/api/snapshot/config';
 // 定义子组件向父组件传值/事件
 const emit = defineEmits(['updateList']);
 
@@ -69,7 +210,38 @@ const state = reactive<any>({
 		remark: '', // 参数说明
 	},
 	isDisabled: false, // 是否禁用
+	activeName:'0',
+	tabPaneList:[
+		{
+			label: '参数配置',
+			name: '0',
+		},
+		{
+			label: '图片配置',
+			name: '1',
+		},
+		{
+			label: '操作权限',
+			name: '3',
+		},
+	],
+});
+const imageUrl = ref('')
+const action = computed(() => {
+	return import.meta.env.VITE_API_UPLOAD_URL + '/file/upload?source=hotline';
 });
+const uploadListRef = ref<RefType>(); // 上传组件ref
+// 上传成功
+const updateSuccess = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+	if (response.result.path) {
+		console.log(response);
+		imageUrl.value = import.meta.env.VITE_API_UPLOAD_URL + response.result.path;
+	} else {
+		uploadListRef.value.handleRemove(uploadFile);
+		ElMessage.error('上传失败');
+	}
+};
+
 let loading = ref<boolean>(false);  // 加载状态
 const dialogTitle = computed(() => {
 	return state.isDisabled ? '查看参数' : '编辑参数';
@@ -77,21 +249,26 @@ const dialogTitle = computed(() => {
 // 打开弹窗
 const ruleFormRef = ref<RefType>();
 const openDialog = async (id: string, isDisabled?: boolean) => {
-	ruleFormRef.value?.resetFields();
+	state.dialogVisible = true;
+	loading.value = true;
 	try {
-		const res: any = await setitngsDetail(id);
+		const res: any = await getIndustryDetail(id);
 		state.ruleForm = res.result ?? <EmptyObjectType>{};
-		state.ruleForm.settingValue = state.ruleForm.settingValue?.join('|');
 		state.isDisabled = isDisabled ?? false;
-		state.dialogVisible = true;
+		loading.value = false;
 	} catch (error) {
 		console.log(error);
+		loading.value = false;
 	}
 };
 // 关闭弹窗
 const closeDialog = () => {
 	state.dialogVisible = false;
 };
+const close = () => {
+	ruleFormRef.value?.resetFields();
+	ruleFormRef.value?.resetFields();
+};
 // 新增
 const onSubmit = throttle(async (formEl: FormInstance | undefined) => {
 	if (!formEl) return;

+ 19 - 22
src/views/snapshot/config/industry/index.vue

@@ -44,9 +44,7 @@
 
 <script lang="tsx" setup name="snapshotConfigIndustry">
 import { defineAsyncComponent, onMounted, reactive, ref } from 'vue';
-import { getSystemSettings } from '@/api/system/parameter';
-import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
-import { formatDate } from '@/utils/formatTime';
+import { FormInstance } from 'element-plus';
 import { getIndustryList } from '@/api/snapshot/config';
 
 // 引入组件
@@ -100,52 +98,51 @@ const gridOptions = reactive<any>({
 		{
 			field: 'name',
 			title: '行业名称',
-			minWidth: 120,
 		},
 		{
-			field: 'code',
+			field: 'approveOrgName',
 			title: '审批部门',
-			minWidth: 120,
 		},
 		{
-			field: 'settingValue',
+			field: 'citizenReadPackAmount',
 			title: '市民红包',
-			minWidth: 140,
+		},	{
+			field: 'guiderReadPackAmount',
+			title: '网格员红包',
 		},
 		{
-			field: 'settingValue',
+			field: 'isEnable',
 			title: '启用状态',
-			minWidth: 140,
+			width: 100,
+			slots: {
+				default: ({ row }: any) => {
+					return row.isEnable ? '启用' : '禁用';
+				},
+			},
 		},
 		{
-			field: 'settingValue',
+			field: 'acceptType',
 			title: '关联受理类型',
-			minWidth: 140,
 		},
 		{
-			field: 'settingValue',
+			field: 'titleSuffix',
 			title: '标题追加信息',
-			minWidth: 140,
 		},
 		{
-			field: 'settingValue',
+			field: 'pageUrl',
 			title: '页面URL',
-			minWidth: 140,
 		},
 		{
-			field: 'settingValue',
+			field: 'txtRemarks',
 			title: '帮助说明',
-			minWidth: 140,
 		},
 		{
-			field: 'settingValue',
+			field: 'displayOrder',
 			title: '排序',
-			minWidth: 140,
 		},
 		{
-			field: 'settingValue',
+			field: 'txtCareRemarks',
 			title: '备注',
-			minWidth: 140,
 		},
 		{ title: '操作', width: 90, fixed: 'right', align: 'center', slots: { default: 'action' } },
 	],