浏览代码

reactor:首页调整;

zhangchong 1 年之前
父节点
当前提交
f73ebbb6c5

+ 1 - 0
src/components/AnnexList/index.vue

@@ -1,6 +1,7 @@
 <template>
   <slot>
     <el-button @click="uploadAnnex"> <SvgIcon name="ele-Upload" /> {{props.name}} </el-button>
+    <span class="color-info ml10" v-if="state.tableData.length">当前已上传 <span class="color-primary">{{ state.tableData.length }}</span> 个附件</span>
   </slot>
 	<el-dialog v-model="dialogVisible" draggable title="附件列表" ref="dialogRef" width="60%" append-to-body destroy-on-close>
 		<div class="mb20" v-if="!props.readonly">

+ 82 - 23
src/views/business/order/accept/index.vue

@@ -116,15 +116,22 @@
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="来电/信人" prop="fromName" :rules="[{ required: true, message: '请填写来电/信人', trigger: 'blur' }]">
-									<el-input v-model="state.ruleForm.fromName" placeholder="请填写来电/信人" clearable> </el-input>
+								<el-form-item label="来电人姓名" prop="fromName" :rules="[{ required: true, message: '请填写来电人姓名', trigger: 'blur' }]">
+                  <el-row :gutter="10">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="18" :xl="18">
+                      <el-input v-model="state.ruleForm.fromName" placeholder="请填写来电人姓名" clearable> </el-input>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="6" :xl="6">
+                      <el-checkbox v-model="state.ruleForm.isSecret" label="保密" />
+                    </el-col>
+                  </el-row>
 								</el-form-item>
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 								<el-form-item
-									label="来电/信人性别"
+									label="来电人性别"
 									prop="fromGender"
-									:rules="[{ required: true, message: '请选择来电/信人性别', trigger: 'change' }]"
+									:rules="[{ required: true, message: '请选择来电人性别', trigger: 'change' }]"
 								>
 									<el-radio-group v-model="state.ruleForm.fromGender">
 										<el-radio :label="item.key" v-for="item in state.genderOptions" :key="item.key">{{ item.value }}</el-radio>
@@ -133,9 +140,9 @@
 							</el-col>
 							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
 								<el-form-item
-									label="来电/信人身份"
+									label="来电人身份"
 									prop="identityType"
-									:rules="[{ required: true, message: '请选择来电/信人身份', trigger: 'change' }]"
+									:rules="[{ required: true, message: '请选择来电人身份', trigger: 'change' }]"
 								>
 									<el-radio-group v-model="state.ruleForm.identityType" @change="selectIdentity">
 										<el-radio :label="item.key" v-for="item in state.identityTypeOptions" :key="item.key">{{ item.value }}</el-radio>
@@ -206,13 +213,14 @@
 										},
 									]"
 								>
-									<el-input v-model="state.ruleForm.contact" placeholder="请填写联系电话"  @blur="searchHistory" clearable> </el-input>
-								</el-form-item>
-							</el-col>
-							<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-								<el-form-item label="" prop="acceptSms" :rules="[{ required: false, message: '请选择', trigger: 'change' }]">
-									<el-checkbox v-model="state.ruleForm.acceptSms" label="受理短信" />
-									<el-checkbox v-model="state.ruleForm.isSecret" label="是否保密" />
+                  <el-row :gutter="9">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                      <el-input v-model="state.ruleForm.contact" placeholder="请填写联系电话"  @blur="searchHistory" clearable> </el-input>
+                    </el-col>
+                    <el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8">
+                      <el-checkbox v-model="state.ruleForm.acceptSms" label="受理短信" />
+                    </el-col>
+                  </el-row>
 								</el-form-item>
 							</el-col>
 							<!-- 当“来电/信人身份”为“企业”时必填 -->
@@ -222,7 +230,14 @@
 									prop="company"
 									:rules="[{ required: state.ruleForm.identityType === 2, message: '请填写工作单位', trigger: 'blur' }]"
 								>
-									<el-input v-model="state.ruleForm.company" placeholder="请填写工作单位" clearable> </el-input>
+                  <el-autocomplete
+                      v-model="state.ruleForm.company"
+                      :fetch-suggestions="querySearchAsync"
+                      placeholder="请输入企业名称"
+                      @select="handleSelect"
+                      clearable
+                      class="w100"
+                  />
 								</el-form-item>
 							</el-col>
 						</el-row>
@@ -321,21 +336,29 @@
 												v-model="state.ruleForm.areaCode"
 												ref="areaRef"
 												@change="changeArea"
-
 											>
 											</el-cascader>
 										</el-form-item>
 									</el-col>
 									<el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
-										<el-form-item
-											label=""
-											prop="street"
-											:rules="[{ required: false, message: '请填写详细地址', trigger: 'blur' }]"
-											label-width="10px"
-										>
-											<el-input v-model="state.ruleForm.street" placeholder="请填写详细地址" clearable> </el-input>
-										</el-form-item>
+                        <el-form-item
+                            label=""
+                            prop="street"
+                            :rules="[{ required: false, message: '请填写详细地址', trigger: 'blur' }]"
+                            label-width="10px"
+                            class="w100 flex"
+                        >
+                          <el-col  :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                            <el-input v-model="state.ruleForm.street" placeholder="请填写详细地址" clearable> </el-input>
+                          </el-col>
+                        <el-col  :xs="24" :sm="24" :md="24" :lg="7" :xl="7" :offset="1">
+                          <el-button type="primary" link><SvgIcon name="ele-Location" size="16px"/> 地图定位</el-button>
+                         </el-col>
+                        </el-form-item>
 									</el-col>
+                  <div v-if="state.ruleForm.address" class="color-danger mb10 flex-center-align" style="margin-left: 110px">【{{state.ruleForm.address}}】下存在多起【热点类型】时间,点击前往查看或右侧添加重复性事件
+                  <el-button type="primary" link> 查看详情</el-button>
+                  </div>
 								</el-row>
 							</el-col>
 
@@ -694,6 +717,42 @@ state.ruleForm.acceptorStaffNo = userInfos.value.staffNo; // 员工工号
 const route = useRoute(); // 路由
 const router = useRouter(); // 路由
 const historyParams = history.state;
+
+const links = ref<any[]>([])
+const loadAll = () => {
+  return [
+    { value: 'vue', link: 'https://github.com/vuejs/vue' },
+    { value: 'element', link: 'https://github.com/ElemeFE/element' },
+    { value: 'cooking', link: 'https://github.com/ElemeFE/cooking' },
+    { value: 'mint-ui', link: 'https://github.com/ElemeFE/mint-ui' },
+    { value: 'vuex', link: 'https://github.com/vuejs/vuex' },
+    { value: 'vue-router', link: 'https://github.com/vuejs/vue-router' },
+    { value: 'babel', link: 'https://github.com/babel/babel' },
+  ]
+}
+let timeout: ReturnType<typeof setTimeout>
+const querySearchAsync = (queryString: string, cb: (arg: any) => void) => {
+  const results = queryString
+      ? links.value.filter(createFilter(queryString))
+      : links.value
+
+  clearTimeout(timeout)
+  timeout = setTimeout(() => {
+    cb(results)
+  }, 3000 * Math.random())
+}
+const createFilter = (queryString: string) => {
+  return (restaurant: any) => {
+    return (
+        restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
+    )
+  }
+}
+links.value = loadAll();
+
+const handleSelect = (item: Record<string, any>) => {
+  console.log(item)
+}
 // 证件号码验证
 const licenceNoPattern = computed(() => {
 	switch (state.ruleForm.licenceTypeCode) {

+ 3 - 3
src/views/home/component/Backlog-list.vue

@@ -1,9 +1,9 @@
 
 
 <template>
-  <div class="list-content box w100 mb20" style="position: relative" v-loading="state.tableLoading">
+  <el-card shadow="never" class="mb20" style="position: relative" v-loading="state.tableLoading">
     <el-button link type="primary" style="position: absolute;right: 20px;top:32px;z-index:2" @click="linkList">
-      更多<SvgIcon name="ele-ArrowRight" class="ml3"/>
+      更多<SvgIcon name="ele-ArrowRight"/>
     </el-button>
     <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
       <el-tab-pane :name="item.value" v-for="item in tabsList" :key="item.value" :label="item.label"></el-tab-pane>
@@ -234,7 +234,7 @@
     </el-table>
     <!-- 工单详情 -->
     <order-detail ref="orderDetailRef"/>
-  </div>
+  </el-card>
 </template>
 <script setup lang="ts">
 import {reactive, ref,defineAsyncComponent} from "vue";

+ 13 - 3
src/views/home/component/Home-entrance.vue

@@ -16,7 +16,8 @@
 						>
 							<template #item="item">
 								<div class="entrance-list-box-item" :title="item.element.pageName">
-									<img v-lazy="getImageUrl(item.element.fastIcon)" alt="" class="my-handle"  src=""/>
+<!--									<img v-lazy="getImageUrl(item.element.fastIcon)" alt="" class="my-handle"  src=""/>-->
+                  <SvgIcon :name="item.element.icon" class="my-handle" size="42px"/>
 									<p class="entrance-list-box-item-name text-no-wrap">{{ item.element.pageName }}</p>
 									<SvgIcon name="ele-RemoveFilled" class="plus-icon location" color="#ccc" size="24px" @click="removeOne(item.element)" />
 								</div>
@@ -39,7 +40,8 @@
 					<template v-if="state.entranceSelect.length">
 						<ul class="entrance-list-box">
 							<li class="entrance-list-box-item" v-for="(item, index) in state.entranceSelect" :key="item.id" :title="item.pageName">
-								<img v-lazy="getImageUrl(item.fastIcon)" alt="" class="mb10"  src=""/>
+<!--								<img v-lazy="getImageUrl(item.fastIcon)" alt="" class="mb10"  src=""/>-->
+                <SvgIcon :name="item.icon" size="42px" class="entrance-list-box-item-icon"/>
 								<p class="entrance-list-box-item-name text-no-wrap">{{ item.pageName }}</p>
 								<SvgIcon
 									name="ele-CirclePlusFilled"
@@ -188,12 +190,20 @@ defineExpose({ closeDialog, openDialog }); //暴漏方法
 				color: var(--el-text-color-regular);
 				position: relative;
 				user-select: none;
-
+        &-icon{
+          display: inline-block;
+          width: 40px;
+          height: 50px;
+          margin-bottom: 10px;
+          margin-top: 5px;
+        }
 				.my-handle {
+          display: inline-block;
 					width: 40px;
 					height: 50px;
 					margin-bottom: 10px;
 					cursor: grab;
+          margin-top: 5px;
 				}
 
 				.location {

+ 74 - 82
src/views/home/index.vue

@@ -3,26 +3,26 @@
 		<el-row :gutter="20">
 			<el-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16" class="left-content">
 				<el-row :gutter="20">
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
-						<div class="statistics-item box" v-loading="state.loading">
-							<div class="statistics-title">
-								<img v-lazy="getImageUrl('home/Call.png')" alt="" src="" />
-								今日来电
-							</div>
-							<div class="statistics-number">
-								<div class="statistics-number-item">
-									<p class="statistics-number-item-number"><b>520</b></p>
-									<p class="statistics-number-item-tips">全部</p>
-								</div>
-								<div class="statistics-number-item">
-									<p class="statistics-number-item-number"><b>200</b></p>
-									<p class="statistics-number-item-tips">有效</p>
-								</div>
-							</div>
-						</div>
+					<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+            <el-card shadow="never" v-loading="state.loading" class="statistics-item">
+              <div class="statistics-title">
+                <img v-lazy="getImageUrl('home/Call.png')" alt="" src="" />
+                今日来电
+              </div>
+              <div class="statistics-number">
+                <div class="statistics-number-item">
+                  <p class="statistics-number-item-number"><b>520</b></p>
+                  <p class="statistics-number-item-tips">全部</p>
+                </div>
+                <div class="statistics-number-item">
+                  <p class="statistics-number-item-number"><b>200</b></p>
+                  <p class="statistics-number-item-tips">有效</p>
+                </div>
+              </div>
+            </el-card>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
-						<div class="statistics-item box" v-loading="state.loading">
+					<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+						<el-card shadow="never" v-loading="state.loading" class="statistics-item">
 							<div class="statistics-title">
 								<img v-lazy="getImageUrl('home/connectionRate.png')" alt="" src="" />
 								今日接通率
@@ -37,30 +37,25 @@
 									<p class="statistics-number-item-tips">接通率</p>
 								</div>
 							</div>
-						</div>
+						</el-card>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
-						<div class="statistics-item box" v-loading="state.loading">
+					<el-col :xs="24" :sm="24" :md="8" :lg="8" :xl="8">
+						<el-card shadow="never" v-loading="state.loading" class="statistics-item">
 							<div class="statistics-title">
 								<img v-lazy="getImageUrl('home/workOrder.png')" alt="" src="" />
-								受理工单
-							</div>
-							<div class="statistics-number">
-								<p class="statistics-number-item-total"><b>10</b></p>
-							</div>
-						</div>
-					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="6">
-						<div class="statistics-item box" v-loading="state.loading">
-							<div class="statistics-title">
-								<img v-lazy="getImageUrl('home/wait.png')" alt="" src="" />
-								当前等待
-							</div>
-							<div class="statistics-number">
-								<p class="statistics-number-item-total"><b>20</b></p>
-								<p></p>
+								今日受理工单
 							</div>
-						</div>
+              <div class="statistics-number">
+                <div class="statistics-number-item">
+                  <p class="statistics-number-item-number"><b>980</b></p>
+                  <p class="statistics-number-item-tips">受理工单量</p>
+                </div>
+                <div class="statistics-number-item">
+                  <p class="statistics-number-item-number"><b>730</b></p>
+                  <p class="statistics-number-item-tips">今日直办工单里</p>
+                </div>
+              </div>
+						</el-card>
 					</el-col>
 				</el-row>
 
@@ -68,7 +63,7 @@
 			</el-col>
 			<!-- 常用入口 -->
 			<el-col :xs="24" :sm="24" :md="24" :lg="8" :xl="8" class="right-content">
-				<div class="right-entrance box w100" v-loading="state.entranceLoading">
+				<el-card shadow="never" class="right-entrance w100" v-loading="state.entranceLoading">
 					<p class="right-entrance-title">
 						常用入口
 						<span @click="customEntry"> <SvgIcon name="ele-Setting" class="mr5" />自定义 </span>
@@ -76,36 +71,39 @@
 					<template v-if="state.entranceList.length">
 						<ul class="right-entrance-list">
 							<li class="right-entrance-list-item" v-for="item in state.entranceList" :key="item.id" :data-id="item.id" @click="goLink(item.path)">
-								<img v-lazy="getImageUrl(item.fastIcon)" alt="" class="my-handle" src="" />
+<!--								<img v-lazy="getImageUrl(item.fastIcon)" alt="" class="my-handle" src="" />-->
+                <SvgIcon :name="item.icon" size="42px" class="my-handle"/>
 								<p>{{ item.pageName }}</p>
 							</li>
 						</ul>
 					</template>
 					<Empty descriptionData="暂无常用入口" v-else />
-				</div>
-				<div class="right-notice mt20 box w100" v-loading="state.noticeLoading">
-					<p class="right-notice-title">
-						通知公告
-						<el-button type="primary" text bg round v-show="state.noticeList.length" @click="more('notice')">
-							更多
-							<SvgIcon name="ele-Right" class="ml5" color="var(--el-color-primary-light-4)" />
-						</el-button>
-					</p>
-					<template v-if="state.noticeList.length">
-						<vue3-seamless-scroll :list="state.noticeList" class="right-notice-scroll" :hover="true" :limitScrollNum="6">
-							<div class="right-notice-scroll-item" v-for="(item, index) in state.noticeList" :key="index">
+				</el-card>
+        <!-- 通知公告 -->
+        <el-card shadow="never" class="mt20 right-notice" v-loading="state.noticeLoading">
+            <el-tabs v-model="activeName" class="demo-tabs" @tab-change="handleClick">
+              <el-tab-pane label="知识库" name="knowledge"></el-tab-pane>
+              <el-tab-pane label="通知公告" name="notice"></el-tab-pane>
+            </el-tabs>
+            <el-button type="primary" link v-show="state.noticeList.length" @click="more('notice')" class="more">
+              更多
+              <SvgIcon name="ele-ArrowRight"/>
+            </el-button>
+            <template v-if="state.noticeList.length">
+              <vue3-seamless-scroll :list="state.noticeList" class="right-notice-scroll" :hover="true" :limitScrollNum="6">
+                <div class="right-notice-scroll-item" v-for="(item, index) in state.noticeList" :key="index">
 								<span class="right-notice-scroll-item-name text-no-wrap" :title="item.title">
 									<SvgIcon name="iconfont icon-jiadayinliang" class="mr5 vd" />{{ item.title }}</span
-								>
-								<span class="right-notice-scroll-item-date"
-									>{{ formatDate(item.date, 'YYYY-mm-dd') }}
+                >
+                  <span class="right-notice-scroll-item-date"
+                  >{{ formatDate(item.date, 'YYYY-mm-dd') }}
 									<SvgIcon name="ele-DArrowRight" class="ml5" />
 								</span>
-							</div>
-						</vue3-seamless-scroll>
-					</template>
-					<Empty v-else descriptionData="暂无通知公告" />
-				</div>
+                </div>
+              </vue3-seamless-scroll>
+            </template>
+            <Empty v-else descriptionData="暂无通知公告" />
+        </el-card>
 			</el-col>
 		</el-row>
     <!--  常用入口  -->
@@ -158,6 +156,10 @@ const state = reactive({
 	noticeLoading: false, // 公告
 });
 const entranceRef = ref<RefType>(); // 常用入口ref
+const activeName = ref<string>('knowledge'); // tab切换
+const handleClick = ()=>{
+  console.log(activeName.value);
+}
 // 自定义入口
 const customEntry = () => {
 	entranceRef.value.openDialog();
@@ -192,10 +194,6 @@ onMounted(() => {
 });
 </script>
 <style lang="scss" scoped>
-.box {
-	background-color: var(--el-color-white);
-	border-radius: 8px;
-}
 .vd {
 	vertical-align: middle;
 }
@@ -205,7 +203,6 @@ onMounted(() => {
 			display: flex;
 			justify-content: space-between;
 			&-item {
-				padding: 20px;
 				height: 200px;
 				margin-bottom: 20px;
 			}
@@ -245,14 +242,9 @@ onMounted(() => {
 				}
 			}
 		}
-
-		.list-content {
-			padding: 20px;
-		}
 	}
 	.right-content {
 		.right-entrance {
-			padding: 30px 20px;
 			&-title {
 				font-size: var(--el-font-size-medium);
 				display: flex;
@@ -284,11 +276,13 @@ onMounted(() => {
 					cursor: pointer;
 					color: var(--el-text-color-regular);
 					user-select: none;
+          padding: 10px 20px;
 					.my-handle {
+            display: inline-block;
 						width: 40px;
 						height: 50px;
-						margin-top: 15px;
-						margin-bottom: 13px;
+						margin-top: 5px;
+						margin-bottom: 10px;
 					}
 					&:hover {
 						color: var(--el-color-primary);
@@ -298,15 +292,13 @@ onMounted(() => {
 			}
 		}
 		.right-notice {
-			padding: 30px 20px;
-			&-title {
-				font-size: var(--el-font-size-medium);
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				padding-bottom: 20px;
-				font-weight: 600;
-			}
+      position: relative;
+      .more{
+        position: absolute;
+        right: 20px;
+        top: 30px;
+        z-index: 2;
+      }
 			&-scroll {
 				height: 300px;
 				overflow: hidden;

+ 0 - 1
src/views/system/config/advice/index.vue

@@ -123,7 +123,6 @@ const resetQuery = (formEl: FormInstance | undefined) => {
 };
 // 新增意见
 const adviceAddRef = ref<RefType>(); // 意见新增
-console.log(adviceAddRef,21)
 const onAdviceAdd = () => {
 	adviceAddRef.value.openDialog();
 };