Luka пре 1 дан
родитељ
комит
bb26caf618

+ 1 - 1
src/components/components/pageTitle.vue

@@ -1,7 +1,7 @@
 <template>
 	<div
 		class="hero-title"
-		:style="'color:' + props.color + ';textAlign:' + props.textAlign + ';padding:' + props.padding"
+		:style="'color:' + props.color + ';text-align:' + props.textAlign + ';padding:' + props.padding"
 	>
 		{{ props.title }}
 	</div>

+ 35 - 2
src/views/addressBook/components/detail.vue

@@ -78,6 +78,27 @@
 											<el-radio value="n">否</el-radio>
 										</el-radio-group>
 									</template>
+									<template v-if="item.type === 'userName'">
+										<el-select
+											:disabled="item.disabled"
+											v-model="formData[item.prop]"
+											multiple
+											filterable
+											remote
+											reserve-keyword
+											:placeholder="item.placeholder"
+											:remote-method="remoteuserNameMethod"
+											:loading="userLoading"
+											style="width: 100%"
+										>
+											<el-option
+												v-for="item in options"
+												:key="item.value"
+												:label="item.label"
+												:value="item.value"
+											/>
+										</el-select>
+									</template>
 								</el-form-item>
 							</el-col>
 						</template>
@@ -101,8 +122,6 @@
 import { reactive, ref } from 'vue';
 import type { FormInstance } from 'element-plus';
 import useSystemStore from '@/store/main';
-import { outTypeList } from '@/libs/commonMeth';
-import { template } from 'lodash';
 // 定义props
 interface IProps {
 	modalConfig: {
@@ -130,6 +149,20 @@ const systemStore = useSystemStore();
 
 const { pageDetailInfo, pageOperateType } = storeToRefs(systemStore);
 
+interface userNameListItem {
+	value: string;
+	label: string;
+}
+const options = ref<userNameListItem[]>([]);
+const userLoading = ref(false);
+const remoteuserNameMethod = (query: string) => {
+	if (query) {
+		// userLoading.value = true;
+	} else {
+		options.value = [];
+	}
+};
+
 onMounted(async () => {});
 
 // 定义数据绑定

+ 8 - 3
src/views/addressBook/components/treeSelect.vue

@@ -30,6 +30,7 @@
 <script setup lang="ts">
 import { ref, computed } from 'vue';
 import { ElTree } from 'element-plus';
+import { fa } from 'element-plus/es/locale';
 
 const emit = defineEmits(['treeCheck']);
 
@@ -113,7 +114,9 @@ const handleCheckChange = (data: Tree, checked: boolean, indeterminate: boolean)
 	// 以上参数按照项目需求取值,正常情况下只会用到 allCheckedKeys
 	const allCheckedKeys = treeRef.value?.getCheckedKeys(false) || [];
 	// console.log('所有勾选的节点ID:', allCheckedKeys);
-	emit('treeCheck', allCheckedKeys);
+	if (tabsItem.value) {
+		emit('treeCheck', allCheckedKeys);
+	}
 };
 
 // 处理搜索
@@ -122,10 +125,12 @@ const handleSearch = () => {
 };
 
 // 处理重置
-const handleReset = () => {
+const tabsItem = ref(true);
+const handleReset = (str: any) => {
 	searchKeyword.value = '';
 	treeRef.value!.setCheckedKeys([], false);
 	treeRef.value?.filter('');
+	tabsItem.value = str;
 };
 defineExpose({ handleReset });
 </script>
@@ -169,7 +174,7 @@ defineExpose({ handleReset });
 .tree-wrapper {
 	border: 1px solid #e4e7ed;
 	border-radius: 4px;
-	max-height: 500px;
+	min-height: 300px;
 	overflow-y: auto;
 	padding: 10px 0;
 }

+ 4 - 4
src/views/addressBook/config/content.config.ts

@@ -8,9 +8,9 @@ const contentConfig = {
 	},
 	propsList: [
 		{ type: 'index', label: '序号' },
-		{ type: 'normal', label: '单位名称', prop: 'contactDeptName', fixed: true },
-		{ type: 'normal', label: '所属部门', prop: 'relName', width: 140 },
-		{ type: 'normal', label: '职务', prop: 'dutyName', width: 140 },
+		{ type: 'normal', label: '单位名称', sortable: true, prop: 'contactDeptName' },
+		{ type: 'normal', label: '所属部门', sortable: true, prop: 'relName', width: 140 },
+		{ type: 'normal', label: '职务', prop: 'dutyName', sortable: true, width: 140 },
 		{ type: 'normal', label: '联络人姓名', prop: 'userName', width: 140 },
 		{ type: 'normal', label: '联系方式', prop: 'mobilePhone', width: 140 },
 		{ type: 'normal', label: '固定电话', prop: 'telephone', width: 140 },
@@ -19,7 +19,7 @@ const contentConfig = {
 		{ type: 'normal', label: '微信号', prop: 'wx', width: 140 },
 		{ type: 'normal', label: '电子邮箱', prop: 'email', width: 140 },
 		{ type: 'normal', label: '通讯录状态', prop: 'status', width: 180 },
-		{ type: 'handler', label: '操作', slotName: 'operate', width: 180 },
+		{ type: 'handler', label: '操作', slotName: 'operate', width: 180, fixed: 'right' },
 	],
 };
 

+ 4 - 4
src/views/addressBook/config/content.nonIndustry.config.ts

@@ -8,9 +8,9 @@ const contentConfig = {
 	},
 	propsList: [
 		{ type: 'index', label: '序号' },
-		{ type: 'normal', label: '单位名称', prop: 'contactDeptName', fixed: true },
-		{ type: 'normal', label: '所属部门', prop: 'relName', width: 140 },
-		{ type: 'normal', label: '职务', prop: 'dutyName', width: 140 },
+		{ type: 'normal', label: '单位名称', sortable: true, prop: 'contactDeptName' },
+		{ type: 'normal', label: '所属部门', sortable: true, prop: 'relName', width: 140 },
+		{ type: 'normal', label: '职务', prop: 'dutyName', sortable: true, width: 140 },
 		{ type: 'normal', label: '联络人姓名', prop: 'userName', width: 140 },
 		{ type: 'normal', label: '联系方式', prop: 'mobilePhone', width: 140 },
 		{ type: 'normal', label: '固定电话', prop: 'telephone', width: 140 },
@@ -19,7 +19,7 @@ const contentConfig = {
 		{ type: 'normal', label: '微信号', prop: 'wx', width: 140 },
 		{ type: 'normal', label: '电子邮箱', prop: 'email', width: 140 },
 		{ type: 'normal', label: '通讯录状态', prop: 'status', width: 180 },
-		{ type: 'handler', label: '操作', slotName: 'operate', width: 180 },
+		{ type: 'handler', label: '操作', slotName: 'operate', width: 180, fixed: 'right' },
 	],
 };
 

+ 1 - 1
src/views/addressBook/config/detail.config.ts

@@ -43,7 +43,7 @@ const modalConfig = {
 		{
 			label: '联络人名称',
 			prop: 'userName',
-			type: 'input',
+			type: 'userName',
 			placeholder: '请输入联络人名称',
 		},
 		{

+ 1 - 1
src/views/addressBook/config/detail.nonIndustry.config.ts

@@ -42,7 +42,7 @@ const modalConfig = {
 		{
 			label: '联络人名称',
 			prop: 'userName',
-			type: 'input',
+			type: 'userName',
 			placeholder: '请输入联络人名称',
 		},
 		{

+ 5 - 8
src/views/addressBook/index.vue

@@ -93,20 +93,17 @@ const getTreeCheck = async data => {
 		} else {
 			searchNonIndustryConfig.pageListParams.deptIds = data.join();
 		}
-		if (tabsItem.value == false) {
-			await tableListRef.value[0].fetchPageListData({ deptIds: data.join() });
-		}
+
+		await tableListRef.value[0].fetchPageListData({ deptIds: data.join() });
 	}
 };
 const treeSelectdRef = ref<InstanceType<typeof TreeSelect>>();
 const searchTableRef = ref<InstanceType<typeof pageSearch>>();
-const tabsItem = ref(false);
 const handleClick = async (tab: TabsPaneContext) => {
 	console.log(tab.props.name);
-	tabsItem.value = true;
 	setTimeout(() => {
 		if (treeSelectdRef.value) {
-			treeSelectdRef.value[0].handleReset();
+			treeSelectdRef.value[0].handleReset(false);
 		}
 		if (searchTableRef.value) {
 			searchTableRef.value[0].handleResetClick();
@@ -171,7 +168,7 @@ searchItem();
 <style scoped lang="scss">
 .sensitive-words {
 	margin: 20px;
-	height: calc(100vh - 130px);
+	height: calc(100vh - 20vh);
 }
 
 .status {
@@ -190,7 +187,7 @@ searchItem();
 }
 
 .table-box {
-	width: 70%;
+	width: 75%;
 	display: flex;
 	flex-direction: column;
 }

+ 41 - 10
src/views/globalparam/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<div class="globalparam-box">
+	<div class="globalparam-box" v-loading="devLoading">
 		<pageTitle :title="title"></pageTitle>
 		<div class="form">
 			<el-form
@@ -79,11 +79,11 @@
 </template>
 
 <script setup lang="ts" name="modal">
-import { reactive, ref } from 'vue';
-import type { FormInstance } from 'element-plus';
+import { getCurrentInstance, ComponentInternalInstance, ref, reactive } from 'vue';
+import type { FormInstance, FormRules } from 'element-plus';
 import pageTitle from '@/components/components/pageTitle.vue';
 import useSystemStore from '@/store/main';
-
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const dataForm = reactive<any>({
 	receParamValue: 5,
 	handParamValue: 1,
@@ -98,27 +98,58 @@ const systemStore = useSystemStore();
 const resetForm = () => {
 	if (!dataFormRef.value) return;
 	dataFormRef.value.resetFields();
+	dataForm.value = JSON.parse(dataString.value);
+};
+/* 自定义校验:仅数字 + 英文逗号 */
+const validateHoliday = (rule: any, value: string, callback: (err?: Error) => void) => {
+	if (!value) return callback(new Error('请输入假期列表'));
+	if (!/^\d+(,\d+)*$/.test(value)) {
+		return callback(new Error('仅允许输入数字,用英文逗号分隔'));
+	}
+	callback();
 };
-const dataRule = {
+const dataRule: FormRules = {
 	receParamValue: [{ required: true, message: '请输入接收超期时限时间', trigger: 'blur' }],
 	handParamValue: [{ required: true, message: '请输入处理超期时限时间', trigger: 'blur' }],
 	closParamValue: [{ required: true, message: '请输入关闭时限时间', trigger: 'blur' }],
-	holidayParamValue: [{ required: true, message: '请输入假期列表', trigger: 'blur' }],
-	txdateParamValue: [{ required: true, message: '请输入调休列表', trigger: 'blur' }],
+	holidayParamValue: [
+		{ required: true, message: '请输入假期列表', trigger: 'blur' },
+		{ validator: validateHoliday, trigger: 'blur' },
+	],
+	txdateParamValue: [
+		{ required: true, message: '请输入调休列表', trigger: 'blur' },
+		{ validator: validateHoliday, trigger: 'blur' },
+	],
 };
-
 // 点击确定
 function handleConfirmClick(formEl: FormInstance | undefined) {
 	if (!formEl) return;
 	formEl.validate((valid, fields) => {
 		if (valid) {
+			proxy!.$modal.msgSuccess('您已保存成功');
 		} else {
 			console.log('error submit!', fields);
 		}
 	});
 }
-
-function getOverTime() {}
+const devLoading = ref(false);
+const dataString = ref();
+function getOverTime() {
+	// devLoading.value = true;
+	// getOverTime({}).then(response => {
+	// 	const data = response.data;
+	// 	if (data.code === 0) {
+	// 		devLoading.value = false;
+	// 		dataForm.receParamValue = parseInt(dataForm.receParamValue);
+	// 		dataForm.handParamValue = parseInt(dataForm.handParamValue);
+	// 		dataForm.closParamValue = parseInt(dataForm.closParamValue);
+	// 		dataString.value = JSON.stringify(dataForm);
+	// 	} else {
+	// 		devLoading.value = false;
+	// 		proxy!.$modal.msgError(data.msg);
+	// 	}
+	// });
+}
 getOverTime();
 </script>
 

+ 6 - 6
src/views/notificationListManage/config/content.config.ts

@@ -5,18 +5,18 @@ const contentConfig = {
 	},
 	propsList: [
 		{ type: 'index', label: '事项编号' },
-		{ type: 'normal', label: '发布单位', prop: 'releaseDeptName', fixed: true },
-		{ type: 'normal', label: '通报类型', prop: 'reportType', width: 140 },
-		{ type: 'normal', label: '通报事项类别', prop: 'reportMattersType', width: 140 },
-		{ type: 'normal', label: '通报事项', prop: 'mattersContent', width: 80 },
-		{ type: 'normal', label: '通报标准', prop: 'reportStandard', width: 90 },
+		{ type: 'normal', label: '发布单位', prop: 'releaseDeptName' },
+		{ type: 'normal', label: '通报类型', prop: 'reportType', sortable: true, width: 140 },
+		{ type: 'normal', label: '通报事项类别', prop: 'reportMattersType', sortable: true, width: 140 },
+		{ type: 'normal', label: '通报事项', prop: 'mattersContent', sortable: true, width: 100 },
+		{ type: 'normal', label: '通报标准或具体行为列举', prop: 'reportStandard', width: 180 },
 		{ type: 'normal', label: '通报依据', prop: 'reportBasis', width: 90 },
 		{ type: 'custom', label: '发出单位', prop: 'sendDeptName', width: 220 },
 		{ type: 'custom', label: '接收单位', prop: 'receiveDeptName', width: 220 },
 		{ type: 'normal', label: '发布状态', prop: 'reportStatus', width: 140 },
 		{ type: 'normal', label: '创建日期', prop: 'createTime', width: 140 },
 		{ type: 'normal', label: '创建人员', prop: 'creator', width: 140 },
-		{ type: 'handler', label: '操作', slotName: 'operate', width: 180 },
+		{ type: 'handler', label: '操作', slotName: 'operate', width: 180, fixed: 'right' },
 	],
 };
 

+ 33 - 8
src/views/notificationListManage/config/search.config.ts

@@ -7,8 +7,8 @@ const searchConfig = {
 	pageName: 'rentalCompany',
 	formItems: [
 		{
-			label: '发单位',
-			prop: 'sendDeptIds',
+			label: '发单位',
+			prop: 'releaseDeptName',
 			type: 'select',
 			multiple: true,
 			options: [
@@ -82,6 +82,27 @@ const searchConfig = {
 			placeholder: '请输入通报依据',
 		},
 		{
+			label: '发出单位',
+			prop: 'sendDeptIds',
+			type: 'select',
+			multiple: true,
+			options: [
+				{
+					label: '全部',
+					value: 'all',
+				},
+				{
+					label: '上海海事',
+					value: 'msg',
+				},
+				{
+					label: '广州海事',
+					value: 'assist',
+				},
+			] as Array<Inew>,
+			placeholder: '请选择发出单位',
+		},
+		{
 			label: '接收单位',
 			prop: 'receiveDeptName',
 			type: 'select',
@@ -109,16 +130,20 @@ const searchConfig = {
 			multiple: true,
 			options: [
 				{
-					label: '待发布',
-					value: 'inner',
+					label: '全部',
+					value: '0',
 				},
 				{
-					label: '已发布',
-					value: 'outer',
+					label: '待提交',
+					value: '1',
 				},
 				{
-					label: '已结案',
-					value: 'outer',
+					label: '可用',
+					value: '2',
+				},
+				{
+					label: '废止',
+					value: '3',
 				},
 			] as Array<Inew>,
 			placeholder: '请选择接收单位',