فهرست منبع

Merge remote-tracking branch 'origin/dev' into dev

Hwf 9 ماه پیش
والد
کامیت
faef2dccd5

+ 0 - 16
src/types/components.d.ts

@@ -29,13 +29,9 @@ declare module 'vue' {
     ElButton: typeof import('element-plus/es')['ElButton']
     ElCard: typeof import('element-plus/es')['ElCard']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
-    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
-    ElCollapse: typeof import('element-plus/es')['ElCollapse']
-    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
-    ElContainer: typeof import('element-plus/es')['ElContainer']
     ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
     ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
@@ -48,31 +44,23 @@ declare module 'vue' {
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
-    ElHeader: typeof import('element-plus/es')['ElHeader']
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
     ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
     ElLink: typeof import('element-plus/es')['ElLink']
-    ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElOption: typeof import('element-plus/es')['ElOption']
     ElPagination: typeof import('element-plus/es')['ElPagination']
     ElPopover: typeof import('element-plus/es')['ElPopover']
     ElRadio: typeof import('element-plus/es')['ElRadio']
-    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
     ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSegmented: typeof import('element-plus/es')['ElSegmented']
     ElSelect: typeof import('element-plus/es')['ElSelect']
-    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
-    ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
     ElSlider: typeof import('element-plus/es')['ElSlider']
-    ElSpace: typeof import('element-plus/es')['ElSpace']
-    ElStep: typeof import('element-plus/es')['ElStep']
-    ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
@@ -85,7 +73,6 @@ declare module 'vue' {
     ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
-    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     ExcelEditor: typeof import('./../components/ExcelEditor/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
@@ -97,9 +84,6 @@ declare module 'vue' {
     HikvisionPlayer: typeof import('./../components/HKVideo/hikvision-player.vue')['default']
     HKVideo: typeof import('./../components/HKVideo/index.vue')['default']
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
-    IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
-    IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
-    IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

+ 74 - 17
src/views/informationissue/informationApplication.vue

@@ -8,15 +8,22 @@
         <el-form ref="formRef" :model="formData" :rules="rules" label-width="120px">
           <h4 class="common-dialog-title">信息内容</h4>
           <div class="box1">
+
             <el-form-item label="标题:" prop="title">
               <el-input v-model="formData.title" placeholder="请输入标题" style="width: 468px !important" />
             </el-form-item>
 
+            <el-form-item label="信息类型:" prop="info_type">
+              <el-select v-model="formData.info_type" placeholder="请选择信息类型">
+                <el-option v-for="dict in mm_info_type" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
+              </el-select>
+            </el-form-item>
+
             <el-form-item label="发布单位:" prop="publish_group">
               <el-input v-model="formData.publish_group" placeholder="请输入发布单位" style="width: 468px !important" />
             </el-form-item>
 
-            <el-form-item label="信息模板:" prop="templateType">
+            <el-form-item label="信息模板:" prop="template_type">
               <el-radio-group v-model="formData.template_type">
                 <el-radio value="0">预设模板</el-radio>
                 <el-radio value="1">自定义模板</el-radio>
@@ -75,27 +82,29 @@
             </el-form-item>
             <el-form-item label="审核人:" prop="auditor">
               <el-autocomplete
-                v-model="formData.examine_by"
+                v-model="formData.examine_user"
                 :fetch-suggestions="querySearch"
                 placeholder="请输入审核人姓名"
                 style="width: 368px !important"
                 @select="handleSelect"
               >
+                <template #default="{ item }">
+                  <div class="item_row">
+                    <div class="item_row_user_name">账号:<span v-html="highlightKeyword(item)"></span></div>
+                    <div class="item_row_nick_name">姓名:{{ item.nickName }}</div>
+                    <div class="item_row_dept_name">单位:{{ item.deptName || "(空)" }}</div>
+                  </div>
+                </template>
+
                 <template #suffix>
                   <i class="el-icon-search"></i>
                 </template>
-                <template #prepend>
-                  <el-button icon="el-icon-search" @click="openUserSelect"></el-button>
-                </template>
               </el-autocomplete>
             </el-form-item>
           </div>
         </el-form>
         <div class="common-dialog-footer">
-          <!--
-          <el-button @click="$emit('close')">返回</el-button>
-          -->
-          <el-button :loading="buttonLoading" type="primary" @click="submitForm">提交</el-button>
+          <el-button :loading="buttonLoading" type="primary" @click="submitForm" :disabled="buttonDisabled">提交</el-button>
         </div>
       </div>
     </div>
@@ -115,11 +124,16 @@ import { addInformation, getPhoneList, getTemplateList, getUser } from '@/api/in
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 import debounce from 'lodash/debounce';
 
+const { mm_info_type, mm_info_template_type } = toRefs<any>(
+  proxy?.useDict('mm_info_type', 'mm_info_template_type')
+);
 const formRef = ref(null);
 const buttonLoading = ref(false);
+const buttonDisabled = ref(false);
 
 const formData = ref({
   title: '',
+  info_type: '',
   publish_group: '',
   template_type: '0',
   template_id: '',
@@ -129,6 +143,7 @@ const formData = ref({
   publish_time: '', // 存储定时发布的时间
   response_type: '',
   examine_by: '',
+  examine_user: '', // 显示
   attachs: [],
   examine_attachs: [],
   user_count: 0,
@@ -159,7 +174,8 @@ const querySearch = debounce((queryString, cb) => {
   if (queryString) {
     getUser({ userName: queryString })
       .then((res) => {
-        users.value = res.rows.map((user) => ({ value: user.username, username: user.username }));
+        users.value = res.rows.map((user) => ({ value: user.userName, userName: user.userName, nickName: user.nickName, deptName: user.deptName }));
+        console.log('users: ', users.value)
         cb(users.value);
       })
       .catch((error) => {
@@ -169,14 +185,25 @@ const querySearch = debounce((queryString, cb) => {
   } else {
     cb([]);
   }
-}, 6000);
+}, 3000);
+
+function highlightKeyword(item) {
+  const keyword = formData.value.examine_user;
+  if (!keyword) {
+    return item.userName;
+  }
+  const regex = new RegExp(keyword, 'gi');
+  let val = item.userName.replace(regex, match => `<span class="highlight">${match}</span>`);
+  return val;
+}
 
 const handleSelect = (item) => {
-  formData.value.examine_by = item.username;
+  formData.value.examine_by = item.userName;
 };
 
 const rules = {
   title: [{ required: true, message: '请填写标题', trigger: 'blur' }],
+  info_type: [{ required: true, message: '请选择信息类型', trigger: 'change' }],
   content: [{ required: true, message: '请填写信息内容', trigger: 'blur' }],
   publish_group: [{ required: true, message: '请填写发布单位', trigger: 'blur' }],
   publish_time: [{ required: true, message: '请选择发布时间', trigger: 'change' }],
@@ -223,10 +250,11 @@ const submitForm = () => {
         proxy?.$modal.msgError('请选择发布名单');
         return;
       }
-      formData.value.users = selectContactSelectData.value.map((u) => ({ user_id: u.userId, nick_name: u.label }));
+      formData.value.users = selectContactSelectData.value.map((u) => ({ user_id: u.id, nick_name: u.label }));
       try {
         buttonLoading.value = true;
         await addInformation(formData.value);
+        buttonDisabled.value = true;
         proxy?.$modal.msgSuccess('信息发布申请已提交');
       } finally {
         buttonLoading.value = false;
@@ -250,6 +278,7 @@ let contactSelectState = reactive({
 });
 const selectContactSelectData = ref([]);
 const handleContactSelectData = (data) => {
+  console.log('handleContactSelectData:', data);
   selectContactSelectData.value = data;
   formData.value.user_count = data.length;
 };
@@ -258,7 +287,7 @@ const toggleReleaseList = () => {
 };
 const fetchTreeData = async () => {
   try {
-    const response = await getPhoneList();
+    const response = await getPhoneList({});
     if (response && response.data) {
       treeData.value = response.data;
     }
@@ -271,16 +300,18 @@ const openUserSelect = async() => {
 
 };
 
+
 onMounted(() => {
   fetchTreeData();
   formData.value.publish_time = formattedCurrentTime.value;
   getTemplateList({}).then((res) => {
     res.data.forEach((item, index) => {
-      presetTemplates.value.push({ value: item.name, label: item.name, content: item.content });
+      presetTemplates.value.push({ value: item.id, label: item.name, content: item.content });
     });
     getUser({}).then((res) => {
-      // console.log('res:', res);
-      users.value = res.rows.map((user) => ({ value: user.username, username: user.username }));
+      // console.log('getUser res:', res);
+      users.value = res.rows.map((user) => ({ value: user.userName, userName: user.userName, nickName: user.nickName, deptName: user.deptName }));
+      console.log('users.value:', users.value);
     });
   });
 });
@@ -296,4 +327,30 @@ onMounted(() => {
   font-weight: bold; /* 加粗 */
   font-size: 1.2em; /* 放大字体大小 */
 }
+.el-icon-search {
+    height:20px;
+    width:20px;
+    background: url("@/assets/images/search.png") no-repeat;
+    background-size:20px;
+}
+
+::v-deep  .highlight {
+    color: #fd0f0f;
+}
+
+.item_row {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .item_row_user_name {
+    margin-left:0px;
+  }
+  .item_row_nick_name {
+    margin-left:10px;
+  }
+  .item_row_dept_name {
+    margin-left:10px;
+
+  }
+}
 </style>

+ 15 - 4
src/views/informationissue/informationApproval.vue

@@ -16,16 +16,22 @@
                       <el-input v-model="formData.title" disabled placeholder="请输入标题" style="width: 468px !important" />
                     </el-form-item>
 
+                    <el-form-item label="信息类型:" prop="info_type">
+                      <el-input disabled placeholder="请选择类型" style="width: 468px !important">
+                        <dict-tag :options="mm_info_type" :value="formData.info_type"></dict-tag>
+                      </el-input>
+                    </el-form-item>
+                    
                     <el-form-item label="发布单位:" prop="publish_group">
                       <el-input v-model="formData.publish_group" disabled placeholder="请输入发布单位" style="width: 468px !important" />
                     </el-form-item>
 
                     <el-form-item label="信息模板:" prop="template_type">
-                      <el-radio-group v-model="formData.template_type" disabled>
-                        <el-radio value="0">预设模板</el-radio>
-                        <el-radio value="1">自定义模板</el-radio>
-                      </el-radio-group>
+                      <el-input disabled>
+                        <dict-tag :options="mm_info_template_type" :value="formData.template_type"></dict-tag>
+                      </el-input>
                     </el-form-item>
+                    
                     <el-form-item v-if="formData.template_type === '0'" label="预设模板:" prop="template_type">
                       <el-select v-model="formData.template_id" placeholder="请选择预设模板" style="width: 300px !important">
                         <el-option v-for="option in presetTemplates" :key="option.value" :label="option.label" :value="option.value"></el-option>
@@ -160,6 +166,10 @@ import ShowReleaseDetail from './showReleaseDetail.vue';
 import { getInformationView, getTemplateList, submitExamine } from '@/api/informationissue/informationissue';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
+const { mm_info_type, mm_info_template_type } = toRefs<any>(
+  proxy?.useDict('mm_info_type', 'mm_info_template_type')
+);
+
 const processingTime = '1小时 6分22秒';
 const props = defineProps({
   eventId: {
@@ -169,6 +179,7 @@ const props = defineProps({
 });
 const formData = ref({
   title: '',
+  info_type: '',
   publish_group: '',
   template_type: '',
   template_id: '',

+ 5 - 3
src/views/informationissue/informationList.vue

@@ -6,7 +6,9 @@
           <el-form ref="queryFormRef" :model="queryParams" label-width="auto">
             <el-row :gutter="20">
               <el-col :span="8">
-                <el-segmented v-model="queryParams.dispose_status" :options="disposeStatusOptions" size="large" block @change="handleDisposeStatus" />
+                <div style="margin-bottom:10px;">
+                  <el-segmented v-model="queryParams.dispose_status" :options="disposeStatusOptions" size="large" block @change="handleDisposeStatus" />
+                </div>
               </el-col>
             </el-row>
             <el-row :gutter="24">
@@ -45,7 +47,7 @@
           </template>
         </el-table-column>
         <el-table-column label="发布单位" align="center" prop="publish_group" />
-        <el-table-column label="信息内容" align="center" prop="content" />
+        <el-table-column label="信息内容" align="left" prop="content"  width="400"/>
         <el-table-column label="发布时间" align="center" prop="publish_time" />
         <el-table-column label="发布渠道" align="center" prop="publish_channel" />
         <el-table-column label="发布申请人" align="center" prop="nick_name" />
@@ -131,7 +133,7 @@ const data = reactive({
     dispose_status: '0'
   }
 });
-const { queryParams, form } = toRefs(data);
+const { queryParams } = toRefs(data);
 const total = ref(0);
 
 const publishStatusOptions = reactive([