Browse Source

列表操作修改为图标

zhangchong 2 years ago
parent
commit
6bb5d88f3b
30 changed files with 857 additions and 429 deletions
  1. 5 5
      src/components/svgIcon/index.vue
  2. 1 1
      src/layout/lockScreen/index.vue
  3. 1 1
      src/layout/navBars/breadcrumb/breadcrumb.vue
  4. 3 2
      src/layout/navBars/breadcrumb/index.vue
  5. 15 15
      src/layout/navBars/breadcrumb/setings.vue
  6. 267 85
      src/layout/navBars/breadcrumb/telControl.vue
  7. 1 1
      src/layout/routerView/link.vue
  8. 9 0
      src/theme/app.scss
  9. 35 43
      src/theme/element.scss
  10. 1 0
      src/utils/formatTime.ts
  11. 78 0
      src/views/deviceManagement/ivrCategroy/component/addCategroy.vue
  12. 78 0
      src/views/deviceManagement/ivrCategroy/component/editCatehroy.vue
  13. 31 89
      src/views/deviceManagement/ivrCategroy/index.vue
  14. 25 7
      src/views/deviceManagement/ivrList/index.vue
  15. 5 1
      src/views/deviceManagement/tels/index.vue
  16. 11 3
      src/views/deviceManagement/telsGroup/index.vue
  17. 1 4
      src/views/home/index.vue
  18. 3 3
      src/views/system/dept/component/addDept.vue
  19. 3 3
      src/views/system/dept/component/editDept.vue
  20. 3 3
      src/views/system/dept/index.vue
  21. 3 1
      src/views/system/institutionalUsers/roles/component/editRole.vue
  22. 40 19
      src/views/system/institutionalUsers/roles/index.vue
  23. 23 11
      src/views/system/institutionalUsers/user/component/addUser.vue
  24. 27 13
      src/views/system/institutionalUsers/user/component/editUser.vue
  25. 41 13
      src/views/system/institutionalUsers/user/index.vue
  26. 11 4
      src/views/system/menu/index.vue
  27. 10 6
      src/views/system/organizational/index.vue
  28. 83 0
      src/views/telslog/blacklist/component/addBlacklist.vue
  29. 28 81
      src/views/telslog/blacklist/index.vue
  30. 15 15
      src/views/telslog/callRecord/index.vue

+ 5 - 5
src/components/svgIcon/index.vue

@@ -20,8 +20,8 @@ export default defineComponent({
 		},
 		// svg 大小
 		size: {
-			type: Number,
-			default: () => 14,
+			type: String,
+			default: () => '14px',
 		},
 		// svg 颜色
 		color: {
@@ -46,11 +46,11 @@ export default defineComponent({
 		});
 		// 设置图标样式
 		const setIconSvgStyle = computed(() => {
-			return `font-size: ${props.size}px;color: ${props.color};`;
+			return `font-size: ${props.size};color: ${props.color};`;
 		});
 		// 设置图片样式
 		const setIconImgOutStyle = computed(() => {
-			return `width: ${props.size}px;height: ${props.size}px;display: inline-block;overflow: hidden;`;
+			return `width: ${props.size};height: ${props.size}px;display: inline-block;overflow: hidden;`;
 		});
 		// 设置图片样式
 		// https://gitee.com/lyt-top/vue-next-admin/issues/I59ND0
@@ -58,7 +58,7 @@ export default defineComponent({
 			const filterStyle: string[] = [];
 			const compatibles: string[] = ['-webkit', '-ms', '-o', '-moz'];
 			compatibles.forEach((j) => filterStyle.push(`${j}-filter: drop-shadow(${props.color} 30px 0);`));
-			return `width: ${props.size}px;height: ${props.size}px;position: relative;left: -${props.size}px;${filterStyle.join('')}`;
+			return `width: ${props.size};height: ${props.size};position: relative;left: -${props.size};${filterStyle.join('')}`;
 		});
 		return {
 			getIconName,

+ 1 - 1
src/layout/lockScreen/index.vue

@@ -51,7 +51,7 @@
 					<div class="layout-lock-screen-login-icon">
 						<!-- <SvgIcon name="ele-Microphone" :size="20" />
 						<SvgIcon name="ele-AlarmClock" :size="20" /> -->
-						<SvgIcon name="ele-SwitchButton" :size="20" @click="fogetPwd"/>
+						<SvgIcon name="ele-SwitchButton" size="20px" @click="fogetPwd"/>
 					</div>
 				</div>
 			</transition>

+ 1 - 1
src/layout/navBars/breadcrumb/breadcrumb.vue

@@ -3,7 +3,7 @@
 		<SvgIcon
 			class="layout-navbars-breadcrumb-icon"
 			:name="themeConfig.isCollapse ? 'ele-Expand' : 'ele-Fold'"
-			:size="24"
+			size="24"
 			@click="onThemeConfigChange"
 			color="#3A51E0"
 		/>

+ 3 - 2
src/layout/navBars/breadcrumb/index.vue

@@ -2,8 +2,9 @@
 	<div class="layout-navbars-breadcrumb-index" :class="userInfosConfig.showTelControl ? 'showControl' : ''">
 		<Logo v-if="setIsShowLogo" />
 		<Breadcrumb />
-		<TelControl v-if="userInfosConfig.showTelControl"/>
-		<div v-else style="flex:1"></div>
+		<TelControl/>
+		<!-- <TelControl v-if="userInfosConfig.showTelControl"/>
+		<div v-else style="flex:1"></div> -->
 		<Horizontal :menuList="menuList" v-if="isLayoutTransverse" />
 		<User />
 	</div>

+ 15 - 15
src/layout/navBars/breadcrumb/setings.vue

@@ -7,7 +7,7 @@
 				<div class="layout-breadcrumb-seting-bar-flex">
 					<div class="layout-breadcrumb-seting-bar-flex-label">primary</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-color-picker v-model="getThemeConfig.primary" size="default" :predefine="predefineColors" @change="onColorPickerChange"> </el-color-picker>
+						<el-color-picker v-model="getThemeConfig.primary"  :predefine="predefineColors" @change="onColorPickerChange"> </el-color-picker>
 					</div>
 				</div>
 				<div class="layout-breadcrumb-seting-bar-flex mt15">
@@ -22,13 +22,13 @@
 				<div class="layout-breadcrumb-seting-bar-flex">
 					<div class="layout-breadcrumb-seting-bar-flex-label">顶栏背景</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-color-picker v-model="getThemeConfig.topBar" :predefine="predefineColors" size="default" @change="onBgColorPickerChange('topBar')"> </el-color-picker>
+						<el-color-picker v-model="getThemeConfig.topBar" :predefine="predefineColors"  @change="onBgColorPickerChange('topBar')"> </el-color-picker>
 					</div>
 				</div>
 				<div class="layout-breadcrumb-seting-bar-flex">
 					<div class="layout-breadcrumb-seting-bar-flex-label">顶栏默认字体颜色</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-color-picker v-model="getThemeConfig.topBarColor" :predefine="predefineColors" size="default" @change="onBgColorPickerChange('topBarColor')"> </el-color-picker>
+						<el-color-picker v-model="getThemeConfig.topBarColor" :predefine="predefineColors"  @change="onBgColorPickerChange('topBarColor')"> </el-color-picker>
 					</div>
 				</div>
 				<div class="layout-breadcrumb-seting-bar-flex mt10">
@@ -43,13 +43,13 @@
 				<div class="layout-breadcrumb-seting-bar-flex">
 					<div class="layout-breadcrumb-seting-bar-flex-label">菜单背景</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-color-picker v-model="getThemeConfig.menuBar" :predefine="predefineColors" size="default" @change="onBgColorPickerChange('menuBar')"> </el-color-picker>
+						<el-color-picker v-model="getThemeConfig.menuBar" :predefine="predefineColors"  @change="onBgColorPickerChange('menuBar')"> </el-color-picker>
 					</div>
 				</div>
 				<div class="layout-breadcrumb-seting-bar-flex">
 					<div class="layout-breadcrumb-seting-bar-flex-label">菜单默认字体颜色</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-color-picker v-model="getThemeConfig.menuBarColor" :predefine="predefineColors" size="default" @change="onBgColorPickerChange('menuBarColor')"> </el-color-picker>
+						<el-color-picker v-model="getThemeConfig.menuBarColor" :predefine="predefineColors"  @change="onBgColorPickerChange('menuBarColor')"> </el-color-picker>
 					</div>
 				</div>
 				<div class="layout-breadcrumb-seting-bar-flex mt14">
@@ -67,7 +67,7 @@
 						<el-color-picker
 							v-model="getThemeConfig.columnsMenuBar"
 							:predefine="predefineColors"
-							size="default"
+							
 							@change="onBgColorPickerChange('columnsMenuBar')"
 							:disabled="getThemeConfig.layout !== 'columns'"
 						>
@@ -80,7 +80,7 @@
 						<el-color-picker
 							v-model="getThemeConfig.columnsMenuBarColor"
 							:predefine="predefineColors"
-							size="default"
+							
 							@change="onBgColorPickerChange('columnsMenuBarColor')"
 							:disabled="getThemeConfig.layout !== 'columns'"
 						>
@@ -156,7 +156,7 @@
 							:min="1"
 							:max="9999"
 							@change="setLocalThemeConfig"
-							size="default"
+							
 							style="width: 90px"
 						>
 						</el-input-number>
@@ -253,7 +253,7 @@
 				<!-- <div class="layout-breadcrumb-seting-bar-flex mt14">
 					<div class="layout-breadcrumb-seting-bar-flex-label">水印文案</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-input v-model="getThemeConfig.wartermarkText" size="default" style="width: 90px" @input="onWartermarkTextInput($event)"></el-input>
+						<el-input v-model="getThemeConfig.wartermarkText"  style="width: 90px" @input="onWartermarkTextInput($event)"></el-input>
 					</div>
 				</div> -->
 
@@ -262,7 +262,7 @@
 				<div class="layout-breadcrumb-seting-bar-flex mt15">
 					<div class="layout-breadcrumb-seting-bar-flex-label">Tagsview 风格</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-select v-model="getThemeConfig.tagsStyle" placeholder="请选择" size="default" style="width: 90px" @change="setLocalThemeConfig">
+						<el-select v-model="getThemeConfig.tagsStyle" placeholder="请选择"  style="width: 90px" @change="setLocalThemeConfig">
 							<el-option label="风格1" value="tags-style-one"></el-option>
 							<el-option label="风格4" value="tags-style-four"></el-option>
 							<el-option label="风格5" value="tags-style-five"></el-option>
@@ -272,7 +272,7 @@
 				<div class="layout-breadcrumb-seting-bar-flex mt15">
 					<div class="layout-breadcrumb-seting-bar-flex-label">主页面切换动画</div>
 					<div class="layout-breadcrumb-seting-bar-flex-value">
-						<el-select v-model="getThemeConfig.animation" placeholder="请选择" size="default" style="width: 90px" @change="setLocalThemeConfig">
+						<el-select v-model="getThemeConfig.animation" placeholder="请选择"  style="width: 90px" @change="setLocalThemeConfig">
 							<el-option label="slide-right" value="slide-right"></el-option>
 							<el-option label="slide-left" value="slide-left"></el-option>
 							<el-option label="opacitys" value="opacitys"></el-option>
@@ -285,7 +285,7 @@
 						<el-select
 							v-model="getThemeConfig.columnsAsideStyle"
 							placeholder="请选择"
-							size="default"
+							
 							style="width: 90px"
 							:disabled="getThemeConfig.layout !== 'columns'"
 							@change="setLocalThemeConfig"
@@ -301,7 +301,7 @@
 						<el-select
 							v-model="getThemeConfig.columnsAsideLayout"
 							placeholder="请选择"
-							size="default"
+							
 							style="width: 90px"
 							:disabled="getThemeConfig.layout !== 'columns'"
 							@change="setLocalThemeConfig"
@@ -382,13 +382,13 @@
 				</div>
 				<div class="copy-config">
 					<!-- <el-alert title="点击下方按钮,复制布局配置去 `src/store/modules/themeConfig.ts` 中修改。" type="warning" :closable="false"> </el-alert>
-					<el-button size="default" class="copy-config-btn" type="primary" ref="copyConfigBtnRef" @click="onCopyConfigClick">
+					<el-button  class="copy-config-btn" type="primary" ref="copyConfigBtnRef" @click="onCopyConfigClick">
 						<el-icon class="mr5">
 							<ele-CopyDocument />
 						</el-icon>
 						一键复制配置
 					</el-button> -->
-					<el-button size="default" class="copy-config-btn-reset" type="info" @click="onResetConfigClick">
+					<el-button  class="copy-config-btn-reset" type="info" @click="onResetConfigClick">
 						<el-icon class="mr5">
 							<ele-RefreshRight />
 						</el-icon>

+ 267 - 85
src/layout/navBars/breadcrumb/telControl.vue

@@ -4,83 +4,153 @@
  * @version: 
  * @Date: 2022-11-08 14:16:48
  * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-11-17 12:32:49
+ * @LastEditTime: 2022-11-18 16:04:53
 -->
 <template>
     <div class="phoneControls">
         <div class="infos">
-            <div><span>分机号:</span>{{telStatus.telNo}}</div>
-            <div class="bottom_line"><span>状态:</span><b class="qianru_status">{{telStatus.isOnDuty ? '签入' : '签出'}}</b></div>
+            <div><span>分机号:</span>{{ telStatus.telNo }}</div>
+            <div class="bottom_line"><span>状态:</span><b class="qianru_status">{{ telStatus.isOnDuty ? '签入' : '签出' }}</b>
+            </div>
         </div>
         <div class="btns">
             <!-- 签入签出 -->
-            <div class="item"  :class="active.includes('qianchu') ? 'active' : '',userInfos.authBtnList.includes('999101') ? '' : 'disabled'"  @click="onControlClick('qianchu')" v-if="telStatus.isOnDuty">
+            <div class="item" :class="active.includes('qianchu') ? 'active' : ''"  @click="onControlClick('qianchu')" v-if="telStatus.isOnDuty">
                 <img :src="getImageUrl('phoneControls/qianchu_blue.png')" alt="">
                 <span>签出</span>
             </div>
-            <div class="item " :class="active.includes('qianru') ? 'active' : '',userInfos.authBtnList.includes('999102') ? '' : 'disabled'"  @click="onControlClick('qianru')" v-else>
-                <img v-if="active.includes('qianru')" :src="getImageUrl('phoneControls/qianru_white.png')" alt="">
-                <img v-else :src="getImageUrl('phoneControls/qinaru_grey.png')" alt="">
+            <div class="item"  @click="onControlClick('qianru')" v-else>
+                <img :src="getImageUrl('phoneControls/qinaru_grey.png')" alt="">
+                <!-- <img:src="getImageUrl('phoneControls/qianru_grey.png')" alt=""/> -->
                 <span>签入</span>
             </div>
+
             <!-- 挂断 -->
-            <div class="item" :class="active.includes('guaduan') ? 'active' : ''"  @click="onControlClick('guaduan')">
+            <el-popover :width="130*hangupList.length" v-model:visible="showHangupList" :show-arrow="false" trigger="hover" popper-class="hangup-popover" v-if="hangupList.length > 1">
+                <template #reference>
+                    <div class="item" :class="active.includes('guaduan') ? 'active' : ''"
+                        @click="onControlClick('guaduan')">
+                        <img v-if="active.includes('guaduan')" :src="getImageUrl('phoneControls/guaduan_white.png')"
+                            alt="">
+                        <img v-else
+                            :src="telStatus.isOnDuty ? getImageUrl('phoneControls/guaduan_blue.png') : getImageUrl('phoneControls/guaduan_grey.png')"
+                            alt="">
+                        <span>挂断({{ hangupList.length }})</span>
+                    </div>
+                </template>
+                <div class="hangup-container">
+                    <div class="hangup-item" v-for="(item, index) in hangupList" :key="index">
+                        <p class="hangup-item-name">{{ item.name }}</p>
+                        <p class="hangup-item-phoneNumber">{{ item.tel }}</p>
+                        <button class="hangup-item-button" @click="hanup(item.tel)">挂断</button>
+                    </div>
+                </div>
+            </el-popover>
+            <div class="item" :class="active.includes('guaduan') ? 'active' : ''" @click="onControlClick('guaduan')"
+                v-else>
                 <img v-if="active.includes('guaduan')" :src="getImageUrl('phoneControls/guaduan_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/guaduan_blue.png') : getImageUrl('phoneControls/guaduan_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/guaduan_blue.png') : getImageUrl('phoneControls/guaduan_grey.png')"
+                    alt="">
                 <span>挂断</span>
             </div>
+
             <!-- 小休和结束休息 -->
-            <div class="item" :class="active.includes('xiaoxiu') ? 'active' : '',userInfos.authBtnList.includes('999104') ? '' : 'disabled'"  @click="onControlClick('xiaoxiuEnd')" v-if="telStatus.isResting">
+            <div class="item"
+                :class="active.includes('xiaoxiu') ? 'active' : '', userInfos.authBtnList.includes('999104') ? '' : 'disabled'"
+                @click="onControlClick('xiaoxiuEnd')" v-if="telStatus.isResting">
                 <img v-if="active.includes('xiaoxiu')" :src="getImageUrl('phoneControls/xiaoxiu_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/xiaoxiu_blue.png') : getImageUrl('phoneControls/xiaoxiu_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/xiaoxiu_blue.png') : getImageUrl('phoneControls/xiaoxiu_grey.png')"
+                    alt="">
                 <span>结束小休</span>
             </div>
-            <div class="item" :class="active.includes('xiaoxiu') ? 'active' : '',userInfos.authBtnList.includes('999103') ? '' : 'disabled'"  @click="telStatus.isOnDuty ? onControlClick('xiaoxiu') : ''" v-else>
+            <div class="item"
+                :class="active.includes('xiaoxiu') ? 'active' : '', userInfos.authBtnList.includes('999103') ? '' : 'disabled'"
+                @click="telStatus.isOnDuty ? onControlClick('xiaoxiu') : ''" v-else>
                 <img v-if="active.includes('xiaoxiu')" :src="getImageUrl('phoneControls/xiaoxiu_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/xiaoxiu_blue.png') :  getImageUrl('phoneControls/xiaoxiu_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/xiaoxiu_blue.png') : getImageUrl('phoneControls/xiaoxiu_grey.png')"
+                    alt="">
                 <span>小休</span>
             </div>
-            
+
             <!-- 保持和取消保持 -->
-            <div class="item" :class="active.includes('baochi') ? 'active' : ''"  @click="onControlClick('baochi')">
+            <el-popover :width="130*holdList.length" v-model:visible="showHoldList" :show-arrow="false" trigger="hover" popper-class="hangup-popover" v-if="hangupList.length > 1">
+                <template #reference>
+                    <div class="item" :class="active.includes('baochi') ? 'active' : ''"
+                        @click="onControlClick('baochi')">
+                        <img v-if="active.includes('baochi')" :src="getImageUrl('phoneControls/baochi_white.png')"
+                            alt="">
+                        <img v-else
+                            :src="telStatus.isOnDuty ? getImageUrl('phoneControls/baochi_blue.png') : getImageUrl('phoneControls/baochi_grey.png')"
+                            alt="">
+                        <span>保持({{ holdList.length }})</span>
+                    </div>
+                </template>
+                <div class="hangup-container">
+                    <div class="hangup-item" v-for="(item, index) in holdList" :key="index">
+                        <p class="hangup-item-name">{{ item.name }}</p>
+                        <p class="hangup-item-phoneNumber">{{ item.tel }}</p>
+                        <button class="hangup-item-button" @click="hold(item.hold)">{{item.hold?'保持':'取消保持'}}</button>
+                    </div>
+                </div>
+            </el-popover>
+            <div class="item" :class="active.includes('baochi') ? 'active' : ''" @click="onControlClick('baochi')" v-else>
                 <img v-if="active.includes('baochi')" :src="getImageUrl('phoneControls/baochi_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/baochi_blue.png') : getImageUrl('phoneControls/baochi_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/baochi_blue.png') : getImageUrl('phoneControls/baochi_grey.png')"
+                    alt="">
                 <span>保持</span>
             </div>
 
             <div class="item" :class="active.includes('jingyin') ? 'active' : ''" @click="onControlClick('jingyin')">
                 <img v-if="active.includes('jingyin')" :src="getImageUrl('phoneControls/jingyin_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/jingyin_blue.png') : getImageUrl('phoneControls/jingyin_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/jingyin_blue.png') : getImageUrl('phoneControls/jingyin_grey.png')"
+                    alt="">
                 <span>静音</span>
             </div>
 
             <div class="item" :class="active.includes('zhuanjie') ? 'active' : ''" @click="onControlClick('zhuanjie')">
                 <img v-if="active.includes('zhuanjie')" :src="getImageUrl('phoneControls/zhuanjie_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/zhuanjie_blue.png') : getImageUrl('phoneControls/zhuanjie_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/zhuanjie_blue.png') : getImageUrl('phoneControls/zhuanjie_grey.png')"
+                    alt="">
                 <span>转接</span>
             </div>
 
             <div class="item" :class="active.includes('sanfang') ? 'active' : ''" @click="onControlClick('sanfang')">
                 <img v-if="active.includes('sanfang')" :src="getImageUrl('phoneControls/sanfang_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/sanfang_blue.png') : getImageUrl('phoneControls/sanfang_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/sanfang_blue.png') : getImageUrl('phoneControls/sanfang_grey.png')"
+                    alt="">
                 <span>三方会议</span>
             </div>
 
             <div class="item" :class="active.includes('waihu') ? 'active' : ''" @click="onControlClick('waihu')">
                 <img v-if="active.includes('waihu')" :src="getImageUrl('phoneControls/waihu_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/waihu_blue.png') : getImageUrl('phoneControls/waihu_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/waihu_blue.png') : getImageUrl('phoneControls/waihu_grey.png')"
+                    alt="">
                 <span>外呼</span>
             </div>
 
-            <div class="item" :class="active.includes('hujiaozhuanyi') ? 'active' : ''" @click="onControlClick('zhuanyi')">
-                <img v-if="active.includes('hujiaozhuanyi')" :src="getImageUrl('phoneControls/hujiaozhuanyi_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/hujiaozhuanyi_blue.png') : getImageUrl('phoneControls/hujiaozhuanyi_grey.png')" alt="">
+            <div class="item" :class="active.includes('hujiaozhuanyi') ? 'active' : ''"
+                @click="onControlClick('zhuanyi')">
+                <img v-if="active.includes('hujiaozhuanyi')" :src="getImageUrl('phoneControls/hujiaozhuanyi_white.png')"
+                    alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/hujiaozhuanyi_blue.png') : getImageUrl('phoneControls/hujiaozhuanyi_grey.png')"
+                    alt="">
                 <span>呼叫转移</span>
             </div>
 
             <div class="item" :class="active.includes('pingjia') ? 'active' : ''" @click="onControlClick('pingjia')">
                 <img v-if="active.includes('pingjia')" :src="getImageUrl('phoneControls/pingjia_white.png')" alt="">
-                <img v-else :src="telStatus.isOnDuty ? getImageUrl('phoneControls/pingjia_blue.png') : getImageUrl('phoneControls/pingjia_grey.png')" alt="">
+                <img v-else
+                    :src="telStatus.isOnDuty ? getImageUrl('phoneControls/pingjia_blue.png') : getImageUrl('phoneControls/pingjia_grey.png')"
+                    alt="">
                 <span>评价</span>
             </div>
         </div>
@@ -91,13 +161,14 @@
     <!-- 签入 -->
     <el-dialog v-model="showDutyDialog" draggable title="签入" width="400px">
         <el-form :model="dutyForm" label-width="80px" ref="dutyFormRef">
-            <el-form-item label="分机" prop="telNo" :rules="[{required: true,message: '请选择需要签入的分机',trigger: 'change'}]">
+            <el-form-item label="分机" prop="telNo"
+                :rules="[{ required: true, message: '请选择需要签入的分机', trigger: 'change' }]">
                 <el-select v-model="dutyForm.telNo" placeholder="请选择需要签入的分机" class="w100">
                     <el-option v-for="item in telsList" :key="item.id" :label="item.no" :value="item.no" />
                 </el-select>
             </el-form-item>
         </el-form>
-        
+
         <template #footer>
             <span class="dialog-footer">
                 <el-button @click="showDutyDialog = false">取 消</el-button>
@@ -108,90 +179,130 @@
 </template>
 
 <script setup lang="ts" name="telControl">
-import {reactive,toRefs,ref,nextTick} from "vue";
-import { ElMessageBox,ElNotification } from 'element-plus';
+import { reactive, toRefs, ref, nextTick } from "vue";
+import { ElMessageBox, ElNotification } from 'element-plus';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '/@/stores/userInfo';
 import { useTelStatus } from '/@/stores/telStatus';
 import { getImageUrl } from "/@/utils/tools";
 import { getTelsList } from '/@/api/login/user';
-import { onDuty,offDuty,telRest,telUnrest } from '/@/api/login/user';
+import { onDuty, offDuty, telRest, telUnrest } from '/@/api/login/user';
 // import signalR from '/@/utils/signalR';
 const state = reactive({
-    active:<any>['qianru'], // 当前选中
-    showDutyDialog:false, //签入选分机弹窗
-    dutyForm:{
-        telNo:'' //分机号
+    active: <any>[], // 当前选中
+    showDutyDialog: false, //签入选分机弹窗
+    dutyForm: {
+        telNo: '' //分机号
     },
-    telsList:<any>[],// 分机列表
-    loading:false,
+    telsList: <any>[],// 分机列表
+    loading: false,
+    showHangupList:false, //是否展示挂断列表
+    hangupList: [
+        {
+            name: '市民',
+            tel: 13412341234
+        },
+        {
+            name: '坐席',
+            tel: 123456
+        },
+    ], //挂断列表
+    holdList: [
+        {
+            name: '市民',
+            tel: 13412341234,
+            hold:true
+        },
+        {
+            name: '坐席',
+            tel: 123456,
+            hold:false
+        },{
+            name: '坐席',
+            tel: 123456,
+            hold:false
+        },{
+            name: '坐席',
+            tel: 123456,
+            hold:false
+        },{
+            name: '坐席',
+            tel: 123456,
+            hold:false
+        },{
+            name: '坐席',
+            tel: 123456,
+            hold:false
+        },
+    ], // 保持列表
+    showHoldList:false, // 是否展示保持列表
 })
-const {active,showDutyDialog,dutyForm,loading,telsList} = toRefs(state);
+const { active, showDutyDialog, dutyForm, loading, telsList,showHangupList, hangupList, holdList,showHoldList } = toRefs(state);
 const useTelStatusStore = useTelStatus();
 const { telStatus } = storeToRefs(useTelStatusStore);
 const storesUserInfo = useUserInfo();
-const {userInfos} = storeToRefs(storesUserInfo);
+const { userInfos } = storeToRefs(storesUserInfo);
 nextTick(() => {
     useTelStatusStore.getTelStatusAction(); // 查询当前用户签入状态
 });
-const getTelsLists = () =>{// 查询所有分机
+const getTelsLists = () => {// 查询所有分机
     getTelsList().then((res: any) => {
         state.telsList = res?.result ?? [];
     })
 }
 // 点击事件
-const onControlClick = (val:string)=>{
+const onControlClick = (val: string) => {
     switch (val) {
         case 'qianru': //签入
-            if(userInfos.value.authBtnList.includes('999101')){ // 签入权限
-				onDutyFn();
-			}else{
-				console.warn('您没有签入权限')
-			}
+            if (userInfos.value.authBtnList.includes('999101')) { // 签入权限
+                onDutyFn();
+            } else {
+                console.warn('您没有签入权限')
+            }
             break;
         case 'qianchu': //签出
-            if(userInfos.value.authBtnList.includes('999102')){ // 签出权限
-                
-				offDutyFn();
-			}else{
-				console.warn('您没有签出权限')
-			}
+            if (userInfos.value.authBtnList.includes('999102')) { // 签出权限
+
+                offDutyFn();
+            } else {
+                console.warn('您没有签出权限')
+            }
             break;
         case 'guaduan': //挂断
             hangupFn();
             break;
         case 'xiaoxiu': //小休
-            if(userInfos.value.authBtnList.includes('999103')){ // 小休权限
-				xiaoxiuFn();
-			}else{
-				console.warn('您没有小休权限')
-			}
+            if (userInfos.value.authBtnList.includes('999103')) { // 小休权限
+                xiaoxiuFn();
+            } else {
+                console.warn('您没有小休权限')
+            }
             break;
         case 'xiaoxiuEnd': //结束小休
-            if(userInfos.value.authBtnList.includes('999104')){ // 结束小休权限
-				xiaoxiuEndFn();
-			}else{
-				console.warn('您没有结束小休权限')
-			}
+            if (userInfos.value.authBtnList.includes('999104')) { // 结束小休权限
+                xiaoxiuEndFn();
+            } else {
+                console.warn('您没有结束小休权限')
+            }
             break;
         default:
             break;
     }
 }
 const dutyFormRef = ref();
-const onDutyFn = ()=>{ //签入
+const onDutyFn = () => { //签入
     getTelsLists();
     //  重置表单
-    if(dutyFormRef.value){
+    if (dutyFormRef.value) {
         dutyFormRef.value.resetFields();
     }
     state.showDutyDialog = true;
 }
-const clickOnDuty = ()=>{// 确认签入
+const clickOnDuty = () => {// 确认签入
     dutyFormRef.value.validate((valid: boolean) => {
         if (valid) {
             state.showDutyDialog = true;
-            onDuty(state.dutyForm.telNo).then(()=>{
+            onDuty(state.dutyForm.telNo).then(() => {
                 // 开启 signalr 链接
                 // if (Session.get('token')) {
                 // 	signalR.start();
@@ -207,7 +318,7 @@ const clickOnDuty = ()=>{// 确认签入
                 state.showDutyDialog = false;
                 state.loading = false;
                 useTelStatusStore.getTelStatusAction(); // 查询当前用户签入状态
-            }).catch(()=>{
+            }).catch(() => {
                 state.showDutyDialog = false;
                 state.loading = false;
             })
@@ -217,13 +328,13 @@ const clickOnDuty = ()=>{// 确认签入
     });
 }
 // 签出
-const offDutyFn = ()=>{
+const offDutyFn = () => {
     ElMessageBox.confirm(`确定要签出,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning',
     }).then(() => {
-        offDuty().then(()=>{
+        offDuty().then(() => {
             ElNotification({
                 title: '成功',
                 message: '签出成功',
@@ -231,20 +342,24 @@ const offDutyFn = ()=>{
             })
             useTelStatusStore.getTelStatusAction(); // 查询当前用户签入状态
         })
-    }).catch(() => {});
+    }).catch(() => { });
 }
 // 挂断
-const hangupFn = ()=>{
-    
+const hangupFn = () => {
+
+}
+// 挂断其中一个
+const hanup = (tel: any) => {
+    state.showHangupList = false;
 }
 // 小休
-const xiaoxiuFn = ()=>{
+const xiaoxiuFn = () => {
     ElMessageBox.confirm(`确定要开始小休,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning',
     }).then(() => {
-        telRest().then(()=>{
+        telRest().then(() => {
             ElNotification({
                 title: '成功',
                 message: '小休开始',
@@ -252,16 +367,22 @@ const xiaoxiuFn = ()=>{
             })
             useTelStatusStore.getTelStatusAction(); // 查询当前用户签入状态
         })
-    }).catch(() => {});
+    }).catch(() => { });
+}
+const holdFn = ()=>{ // 单个保持
+
+}
+const hold = ()=>{ //保持一个
+    state.showHoldList = false;
 }
 // 小休结束
-const xiaoxiuEndFn = ()=>{
+const xiaoxiuEndFn = () => {
     ElMessageBox.confirm(`确定要结束小休,是否继续?`, '提示', {
         confirmButtonText: '确认',
         cancelButtonText: '取消',
         type: 'warning',
     }).then(() => {
-        telUnrest().then(()=>{
+        telUnrest().then(() => {
             ElNotification({
                 title: '成功',
                 message: '小休结束',
@@ -269,14 +390,15 @@ const xiaoxiuEndFn = ()=>{
             })
             useTelStatusStore.getTelStatusAction(); // 查询当前用户签入状态
         })
-    }).catch(() => {});
+    }).catch(() => { });
 }
 </script>
 
 <style scoped lang="scss">
-.seizeSeat-box{
+.seizeSeat-box {
     display: none;
 }
+
 .phoneControls {
     display: flex;
     flex: 1;
@@ -287,10 +409,12 @@ const xiaoxiuEndFn = ()=>{
     padding: 0 52px;
     color: #333;
     height: 100%;
+
     .infos {
         margin: 20px 0;
         text-align: left;
         width: 120px;
+
         .bottom_line {
             padding-top: 5px;
         }
@@ -307,57 +431,115 @@ const xiaoxiuEndFn = ()=>{
         }
     }
 
+
+
+    // 按钮列表
     .btns {
         display: flex;
         width: calc(100% - 120px);
         justify-content: space-between;
+
         .item {
             text-align: center;
             cursor: pointer;
             width: 100%;
             height: 100%;
-            &:hover{
-                transition: inherit;
-                color: var(--el-color-primary) !important;
-                background-color: var(--hotline-color-seting-main) !important;
+
+            &:hover {
+                color: #fff;
+                background-image: url('../../../assets/images/phoneControls/active.png');
+                background-repeat: no-repeat;
+                background-size: 100% 100%;
+                // height: calc(100% + 20px);
             }
+
             img {
                 display: block;
                 margin: 0 auto;
                 padding-top: 15px;
             }
+
             span {
                 margin-top: 5px;
                 display: inline-block;
             }
-            &.disabled{
+
+            &.disabled {
                 cursor: not-allowed;
             }
         }
-        .active{
+
+        .active {
             color: #fff;
             background-image: url('../../../assets/images/phoneControls/active.png');
             background-repeat: no-repeat;
             background-size: 100% 100%;
             height: calc(100% + 20px);
             background-color: var(--hotline-bg-main-color);
+
             img {
                 display: block;
                 margin: 0 auto;
                 padding-top: 30px;
             }
+
             span {
                 margin-top: 5px;
                 display: inline-block;
             }
-             &:hover{
+
+            &:hover {
                 transition: inherit;
                 color: var(--hotline-color-white) !important;
                 background-color: var(--hotline-bg-main-color) !important;
             }
         }
-        
     }
 
 }
+</style>
+<style lang="scss">
+.el-popover.hangup-popover {
+    background: var(--el-color-primary);
+    border-radius:16px;
+    opacity: .9;
+    box-shadow: 0px 1px 8px 0px rgba(0,15,49,0.1);
+    border: 1px solid #667AED;
+    padding:15px;
+    .hangup-container{
+        display: flex;
+        flex-wrap: nowrap;
+        color: #fff;
+        font-size: var(--el-font-size-small);
+        .hangup-item {
+            text-align: center;
+            width: 130px;
+            border-right: 1px solid #aaa;
+
+            &:last-child {
+                border-right: 0;
+            }
+
+            // &-name {
+            //     // padding-top: 10px;
+            // }
+
+            &-phoneNumber {
+                padding-top: 4px;
+            }
+
+            &-button {
+                background: linear-gradient(0deg, #E3E3E3, #FFFFFF);
+                border-radius: 8px;
+                color:var(--el-color-primary);
+                outline: none;
+                padding:5px 15px;
+                border: none;
+                margin-top: 6px;
+                font-weight: bold;
+                cursor: pointer;
+            }
+        }
+    }
+}
 </style>

+ 1 - 1
src/layout/routerView/link.vue

@@ -4,7 +4,7 @@
 			<div class="layout-link-warp">
 				<i class="layout-link-icon iconfont icon-xingqiu"></i>
 				<div class="layout-link-msg">页面 "{{ currentRouteMeta.title }}" 已在新窗口中打开</div>
-				<el-button class="mt30" round size="default" @click="onGotoFullPage">
+				<el-button class="mt30" round @click="onGotoFullPage">
 					<i class="iconfont icon-lianjie"></i>
 					<span>立即前往体验</span>
 				</el-button>

+ 9 - 0
src/theme/app.scss

@@ -9,6 +9,7 @@
 
 :root {
 	--hotline-color-white: #ffffff;
+	// 整体北京颜色
 	--hotline-bg-main-color: #F0F4FF;
 	--hotline-bg-color: #f5f5ff;
 	--hotline-border-color-light: #f1f2f3;
@@ -24,6 +25,9 @@
 	--hotline--login-text-color:#4564E9;
 	--hotline-main-color: #333;
 	--hotline-overlay-color-lighter-4: rgba(0, 0, 0, 0.4);
+	--hotline-color-popover: #667AED;
+	// 列表操作图标的字体的大小
+	--hotline-table-icon-font-size:16px;
 
 	// element主题色
 	--el-color-danger:#f41e1e;
@@ -373,4 +377,9 @@ body,
 .table-title{
 	font-size: var(--el-font-size-large);
 	font-weight: 600;
+}
+
+// 字体大小
+.ft16{
+	font-size: 16px;
 }

+ 35 - 43
src/theme/element.scss

@@ -3,19 +3,20 @@
 /* Button 按钮
 ------------------------------- */
 // 第三方字体图标大小
-.el-button i.el-icon,
-.el-button i.iconfont,
-.el-button i.fa,
-.el-button--default i.iconfont,
-.el-button--default i.fa {
-	font-size: 14px !important;
-	// margin-right: 5px;
-}
-.el-button--small i.iconfont,
-.el-button--small i.fa {
-	font-size: 12px !important;
-	// margin-right: 5px;
-}
+// 第三方字体图标大小
+// .el-button i.el-icon,
+// .el-button i.iconfont,
+// .el-button i.fa,
+// .el-button--default i.iconfont,
+// .el-button--default i.fa {
+// 	font-size: 14px !important;
+// 	margin-right: 5px;
+// }
+// .el-button--small i.iconfont,
+// .el-button--small i.fa {
+// 	font-size: 12px !important;
+// 	margin-right: 5px;
+// }
 
 /* Input 输入框、InputNumber 计数器
 ------------------------------- */
@@ -214,32 +215,30 @@
 			margin: 0 auto !important;
 			position: absolute;
 			border-radius: var(--el-border-radius-round);
+			.el-dialog__title{
+				font-size: 18px;
+				font-weight: bold;
+			}
+			.el-dialog__header{
+				border-bottom: 1px solid var(--el-border-color);
+				margin-right:0 !important;
+			}
 			.el-dialog__body {
+				max-height: calc(90vh - 111px) !important;
 				padding: 20px !important;
+				overflow-y: auto;
+				overflow-x: hidden;
 			}
 		}
 	}
 }
-/* 弹窗头部样式
-------------------------------- */
-.dialog-title{
-	font-size: 16px;
-	font-weight: bold;
-}
-.el-dialog__header{
-	border-bottom: 1px solid var(--el-border-color);
-	margin-right:0 !important;
-}
-.el-dialog__body {
-	max-height: calc(90vh - 111px) !important;
-	overflow-y: auto;
-	overflow-x: hidden;
-}
 
 /* Card 卡片
 ------------------------------- */
 .el-card{
 	margin-bottom: 10px;
+	--el-card-border-radius: 8px;
+	border: 0;
 	&:last-child{
 		margin: 0;
 	}
@@ -254,6 +253,13 @@
 	.el-button.is-text {
 		padding: 0;
 	}
+	thead{
+		height: 50px !important;
+		color: var(--hotline-main-color);
+	}
+	th.el-table__cell{
+		background-color: var(--hotline-bg-main-color) !important;
+	}
 }
 
 /* scrollbar
@@ -302,18 +308,4 @@
 .el-transfer-panel{
 	width: auto;
 }
-/* card的样式
-------------------------------- */
-.el-card{
-	--el-card-border-radius: 8px;
-	border: 0;
-}
-/* table的样式
-------------------------------- */
-.el-table thead{
-	height: 50px !important;
-	color: var(--hotline-main-color);
-}
-.el-table th.el-table__cell{
-	background-color: var(--hotline-bg-main-color) !important;
-}
+

+ 1 - 0
src/utils/formatTime.ts

@@ -10,6 +10,7 @@
  * @returns 返回拼接后的时间字符串
  */
 export function formatDate(date: Date, format: string): string {
+	date = new Date(date)
 	let we = date.getDay(); // 星期
 	let z = getWeek(date); // 周
 	let qut = Math.floor((date.getMonth() + 3) / 3).toString(); // 季度

+ 78 - 0
src/views/deviceManagement/ivrCategroy/component/addCategroy.vue

@@ -0,0 +1,78 @@
+<template>
+    <div class="deviceManagement-add-categroy-container">
+        <el-dialog v-model="isShowDialog" width="600px" draggable title="新增ivr分类">
+            <el-form :model="ruleForm" label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                        <el-form-item label="ivr分类名称" prop="name"
+                            :rules="[{ required: true, message: '请输入分类名称', trigger: 'blur' }]">
+                            <el-input v-model="ruleForm.name" placeholder="请输入分类名称" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
+                        <el-form-item label="备注" prop="remark">
+                            <el-input v-model="ruleForm.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }"
+                                placeholder="请输入备注" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="isShowDialog = false">取 消</el-button>
+                    <el-button type="primary" @click="onSubmit">保 存</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import {  reactive, ref, toRefs } from "vue";
+import { ElMessage } from 'element-plus'
+import { addIvrCategroies} from "/@/api/deviceManagement/ivr";
+interface stateIvrCategroy {
+    ruleForm: {
+        name: string,
+        remark: string
+    },
+    isShowDialog:boolean
+}
+const state = reactive<stateIvrCategroy>({
+    ruleForm: {
+        name: "",
+        remark: ""
+    },
+    isShowDialog:false
+})
+
+const ruleFormRef = ref();
+const emit = defineEmits(['updateList','openDialog','closeDialog'])
+const openDialog = ()=>{
+    if(ruleFormRef.value){
+        ruleFormRef.value.resetFields();
+    }
+    state.isShowDialog = true;
+    emit('openDialog')
+}
+// 关闭弹窗
+const closeDialog = () => {
+    state.isShowDialog = false;
+    emit('closeDialog')
+};
+const onSubmit = ()=>{// 新增保存
+	ruleFormRef.value.validate((valid: boolean) => {
+        if (valid) {
+			addIvrCategroies(state.ruleForm).then(()=>{
+				ElMessage.success("新增成功")
+				emit("updateList");
+				isShowDialog.value = false;
+			})
+        } else {
+            return false;
+        }
+    });
+}
+const {ruleForm,isShowDialog} = toRefs(state);
+defineExpose({closeDialog,openDialog}) //暴漏方法
+</script>

+ 78 - 0
src/views/deviceManagement/ivrCategroy/component/editCatehroy.vue

@@ -0,0 +1,78 @@
+<template>
+    <div class="deviceManagement-edit-categroy-container">
+        <el-dialog v-model="isShowDialog" width="600px" draggable title="编辑ivr分类">
+            <el-form :model="ruleForm" label-width="100px" ref="ruleFormRef">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                        <el-form-item label="ivr分类名称" prop="name"
+                            :rules="[{ required: true, message: '请输入分类名称', trigger: 'blur' }]">
+                            <el-input v-model="ruleForm.name" placeholder="请输入分类名称" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
+                        <el-form-item label="备注" prop="remark">
+                            <el-input v-model="ruleForm.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }"
+                                placeholder="请输入备注" clearable></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="isShowDialog = false">取 消</el-button>
+                    <el-button type="primary" @click="onSubmit">保 存</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive, toRefs  } from 'vue';
+import {  ElMessage } from 'element-plus';
+import { updateIvrCategroies} from "/@/api/deviceManagement/ivr";
+interface stateIvrCategroy {
+    ruleForm: {
+        name: string,
+        remark: string
+    },
+    isShowDialog:boolean
+}
+const state = reactive<stateIvrCategroy>({
+    ruleForm: {
+        name: "",
+        remark: ""
+    },
+    isShowDialog:false
+})
+const ruleFormRef = ref();
+const emit = defineEmits(['updateList','openDialog','closeDialog'])
+const openDialog = (row:any)=>{
+    if(ruleFormRef.value){
+        ruleFormRef.value.resetFields();
+    }
+    state.ruleForm = JSON.parse(JSON.stringify(row));
+    state.isShowDialog = true;
+    emit('openDialog')
+}
+// 关闭弹窗
+const closeDialog = () => {
+    state.isShowDialog = false;
+    emit('closeDialog')
+};
+const onSubmit = ()=>{// 编辑保存
+	ruleFormRef.value.validate((valid: boolean) => {
+        if (valid) {
+			updateIvrCategroies(state.ruleForm).then(()=>{
+				ElMessage.success("操作成功")
+				emit("updateList");
+				isShowDialog.value = false;
+			})
+        } else {
+            return false;
+        }
+    });
+}
+const {ruleForm,isShowDialog} = toRefs(state);
+defineExpose({closeDialog,openDialog}) //暴漏方法
+</script>

+ 31 - 89
src/views/deviceManagement/ivrCategroy/index.vue

@@ -15,14 +15,29 @@
                     <el-table-column prop="name" label="分类名称" show-overflow-tooltip></el-table-column>
                     <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
                     <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170">
+                        <template #default="scope">
+							<span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
                     </el-table-column>
-                    <el-table-column label="操作" width="150" fixed="right" align="center">
+                    <el-table-column label="操作" width="100" fixed="right" align="center">
                         <template #default="scope">
-                            <el-button text type="primary" @click="onEditCategroy(scope.row)" v-auth="'300303'">修改
-                            </el-button>
+                            <el-tooltip
+                                content="修改"
+                                placement="top-start"
+                            >
+                                <el-button text type="primary" @click="onEditCategroy(scope.row)" v-auth="'300303'">
+                                    <SvgIcon name="ele-EditPen" size="var(--hotline-table-icon-font-size)"/>
+                                </el-button>
+                            </el-tooltip>
+                            <el-tooltip
+                                content="删除"
+                                placement="top-start"
+                            >
+                                <el-button text type="danger" @click="onDelCategroy(scope.row)" v-auth="'300304'">
+                                    <SvgIcon name="ele-Delete" size="var(--hotline-table-icon-font-size)"/>
+                                </el-button>
+                            </el-tooltip>
                             <!-- <el-button text type="success" @click="configIvr(scope.row)">配置ivr</el-button> -->
-                            <el-button text type="danger" @click="onDelCategroy(scope.row)" v-auth="'300304'">删除
-                            </el-button>
                         </template>
                     </el-table-column>
                     <template #empty>
@@ -35,78 +50,31 @@
             </template>
         </div>
 
-
-        <el-dialog v-model="isShowDialog" width="600px" draggable :title="dialogTitle">
-            <el-form :model="ruleForm" label-width="100px" ref="ruleFormRef">
-                <el-row :gutter="35">
-                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-                        <el-form-item label="ivr分类名称" prop="name"
-                            :rules="[{ required: true, message: '请输入分类名称', trigger: 'blur' }]">
-                            <el-input v-model="ruleForm.name" placeholder="请输入分类名称" clearable></el-input>
-                        </el-form-item>
-                    </el-col>
-                    <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
-                        <el-form-item label="备注" prop="remark">
-                            <el-input v-model="ruleForm.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }"
-                                placeholder="请输入备注" clearable></el-input>
-                        </el-form-item>
-                    </el-col>
-                </el-row>
-            </el-form>
-            <template #footer>
-                <span class="dialog-footer">
-                    <el-button @click="isShowDialog = false">取 消</el-button>
-                    <el-button type="primary" @click="onSubmit">保 存</el-button>
-                </span>
-            </template>
-        </el-dialog>
+        <AddCategroy  ref="addCategroyRef" @updateList="handleQuery"/>
+        <EditCategroy  ref="editCategroyRef" @updateList="handleQuery"/>
     </div>
 </template>
 <script lang="ts" setup name="ivrCategroy">
-import { onMounted, reactive, ref, toRefs, computed } from "vue";
+import { defineAsyncComponent, onMounted, ref, computed } from "vue";
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { getIvrCategories, addIvrCategroies, updateIvrCategroies, deleteIvrCategroies } from "/@/api/deviceManagement/ivr";
+import { getIvrCategories, deleteIvrCategroies } from "/@/api/deviceManagement/ivr";
 import { formatDate } from '/@/utils/formatTime';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '/@/stores/userInfo';
+
+const AddCategroy = defineAsyncComponent(() => import('/@/views/deviceManagement/ivrCategroy/component/addCategroy.vue'))
+const EditCategroy = defineAsyncComponent(() => import('/@/views/deviceManagement/ivrCategroy/component/editCatehroy.vue'))
 // import { useRouter } from "vue-router";
 const loading = ref(false);
 const list = ref<any>([]);
-const isShowDialog = ref(false);
-// const router = useRouter();
-let dialogTitle = ref('新增ivr分类');
 
-interface stateIvrCategroy {
-    ruleForm: {
-        name: string,
-        remark: string
-    }
-}
-const state = reactive<stateIvrCategroy>({
-    ruleForm: {
-        name: "",
-        remark: ""
-    }
-})
-const ruleFormRef = ref();
+const addCategroyRef = ref();
+const editCategroyRef = ref();
 const onAddCategory = () => {// 新增分类
-    dialogTitle.value = "新增分类";
-    if (ruleFormRef.value) {
-        ruleFormRef.value.resetFields();
-    }
-    state.ruleForm = {
-        name: "",
-        remark: ""
-    }
-    isShowDialog.value = true;
+    addCategroyRef.value.openDialog()
 }
 const onEditCategroy = (row: any) => {// 编辑分类
-    dialogTitle.value = "编辑分类";
-    if (ruleFormRef.value) {
-        ruleFormRef.value.resetFields();
-    }
-    state.ruleForm = JSON.parse(JSON.stringify(row));
-    isShowDialog.value = true;
+    editCategroyRef.value.openDialog(row)
 }
 const onDelCategroy = (row: any) => { //删除分类
     ElMessageBox.confirm(`此操作将永久删除分类:【${row.name}】,是否继续?`, '提示', {
@@ -124,36 +92,11 @@ const handleQuery = () => { //查询列表
     loading.value = true;
     getIvrCategories().then((res: any) => {
         list.value = res?.result ?? [];
-        for (let i of list.value) {
-            i.creationTime = formatDate(new Date(i.creationTime), 'YYYY-mm-dd HH:MM:SS');
-        }
         setTimeout(() => {
             loading.value = false;
         }, 300);
     })
 }
-const onSubmit = () => {// 保存
-    ruleFormRef.value.validate((valid: boolean) => {
-        if (valid) {
-            loading.value = true;
-            if (dialogTitle.value === '新增分类') {
-                addIvrCategroies(state.ruleForm).then(() => {
-                    ElMessage.success("新增成功")
-                    handleQuery();
-                    isShowDialog.value = false;
-                })
-            } else if (dialogTitle.value === '编辑分类') {
-                updateIvrCategroies(state.ruleForm).then(() => {
-                    ElMessage.success("更新成功")
-                    handleQuery();
-                    isShowDialog.value = false;
-                })
-            }
-        } else {
-            return false;
-        }
-    });
-}
 const storesUserInfo = useUserInfo();
 const { userInfos } = storeToRefs(storesUserInfo);
 const authShow = computed(() => { // 校验是否有查看权限
@@ -169,7 +112,6 @@ const authShow = computed(() => { // 校验是否有查看权限
 //         }
 //     })
 // }
-const { ruleForm } = toRefs(state);
 onMounted(() => {
     if (userInfos.value.authBtnList.includes('300301')) {
         handleQuery();

+ 25 - 7
src/views/deviceManagement/ivrList/index.vue

@@ -17,14 +17,32 @@
                     <el-table-column prop="repeat" label="语音播放次数" show-overflow-tooltip></el-table-column>
                     <el-table-column prop="infoLength" label="按键长度" show-overflow-tooltip></el-table-column>
                     <el-table-column prop="exit" label="按键结束符" show-overflow-tooltip></el-table-column>
-                    <el-table-column label="操作" width="250" fixed="right" align="center">
+                    <el-table-column label="操作" width="150" fixed="right" align="center">
                         <template #default="scope">
-                            <el-button text type="primary" @click="configure(scope.row)" v-auth="'300402'">基础配置
-                            </el-button>
-                            <el-button text type="success" @click="ivrConfigure(scope.row)" v-auth="'300403'">策略配置
-                            </el-button>
-                            <el-button text type="danger" @click="resetIvrConfigure(scope.row)" v-auth="'300404'">
-                                重置策略配置</el-button>
+                            <el-tooltip
+                                content="基础配置"
+                                placement="top-start"
+                            >
+                                <el-button text type="primary" @click="configure(scope.row)" v-auth="'300402'">
+                                    <SvgIcon name="ele-Setting" size="var(--hotline-table-icon-font-size)"/>
+                                </el-button>
+                            </el-tooltip>
+                            <el-tooltip
+                                content="策略配置"
+                                placement="top-start"
+                            >
+                                <el-button text type="success" @click="ivrConfigure(scope.row)" v-auth="'300403'">
+                                    <SvgIcon name="ele-Edit"  size="var(--hotline-table-icon-font-size)"/>
+                                </el-button>
+                            </el-tooltip>
+                            <el-tooltip
+                                content="重置策略配置"
+                                placement="top-start"
+                            >
+                                <el-button text type="danger" @click="resetIvrConfigure(scope.row)" v-auth="'300404'">
+                                    <SvgIcon name="ele-Refresh" size="var(--hotline-table-icon-font-size)"/>
+                                </el-button>
+                            </el-tooltip>
                         </template>
                     </el-table-column>
                     <template #empty>

+ 5 - 1
src/views/deviceManagement/tels/index.vue

@@ -15,7 +15,11 @@
                 <el-table-column prop="groupNames" label="所属分机组" show-overflow-tooltip></el-table-column>
                 <el-table-column prop="registerIP" label="注册IP" show-overflow-tooltip></el-table-column>
                 <el-table-column label="分机状态" show-overflow-tooltip prop="telStatusText"></el-table-column>
-                <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170"></el-table-column>
+                <el-table-column label="创建时间" show-overflow-tooltip width="170">
+                    <template #default="scope">
+                        <span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+                    </template>
+                </el-table-column>
                 <template #empty>
                     <Empty />
                 </template>

+ 11 - 3
src/views/deviceManagement/telsGroup/index.vue

@@ -20,11 +20,20 @@
                 </el-table-column>
                 <el-table-column prop="remark" label="备注" show-overflow-tooltip></el-table-column>
                 <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170">
+                        <template #default="scope">
+							<span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
                 </el-table-column>
                 <el-table-column label="操作" width="100" fixed="right" align="center">
                     <template #default="scope">
-                        <el-button text type="primary" @click="configure(scope.row)" v-auth="'300203'">配置分机组
-                        </el-button>
+                        <el-tooltip
+							content="配置分机组"
+							placement="top-start"
+						>
+							<el-button text type="primary" @click="configure(scope.row)" v-auth="'300203'">
+								<SvgIcon name="ele-Setting" size="var(--hotline-table-icon-font-size)"/>
+							</el-button>
+						</el-tooltip>
                     </template>
                 </el-table-column>
                 <template #empty>
@@ -174,7 +183,6 @@ const getList = () => {
         list.value = response?.result ?? [];
         for (let i of list.value) {
             i.voiceList = i.voice ? i.voice.split('+') : [];
-            i.creationTime = formatDate(new Date(i.creationTime), 'YYYY-mm-dd HH:MM:SS');
             i.telNos = i.tels;
         }
         setTimeout(() => {

+ 1 - 4
src/views/home/index.vue

@@ -4,7 +4,7 @@
  * @version: 
  * @Date: 2022-08-09 16:19:57
  * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-11-17 16:52:39
+ * @LastEditTime: 2022-11-18 16:04:35
 -->
 <template>
 	<div class="home-container layout-pd">
@@ -23,6 +23,3 @@
 <script lang="ts" setup name="home">
 
 </script>
-
-<style scoped lang="scss">
-</style>

+ 3 - 3
src/views/system/dept/component/addDept.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="system-add-dept-container">
 		<el-dialog title="新增部门" v-model="isShowDialog" width="769px">
-			<el-form :model="ruleForm" size="default" label-width="90px">
+			<el-form :model="ruleForm"  label-width="90px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="上级部门">
@@ -59,8 +59,8 @@
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">确 定</el-button>
+					<el-button @click="onCancel" >取 消</el-button>
+					<el-button type="primary" @click="onSubmit" >确 定</el-button>
 				</span>
 			</template>
 		</el-dialog>

+ 3 - 3
src/views/system/dept/component/editDept.vue

@@ -1,7 +1,7 @@
 <template>
 	<div class="system-edit-dept-container">
 		<el-dialog title="修改部门" v-model="isShowDialog" width="769px">
-			<el-form :model="ruleForm" size="default" label-width="90px">
+			<el-form :model="ruleForm"  label-width="90px">
 				<el-row :gutter="35">
 					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="上级部门">
@@ -59,8 +59,8 @@
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
-					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">修 改</el-button>
+					<el-button @click="onCancel" >取 消</el-button>
+					<el-button type="primary" @click="onSubmit" >修 改</el-button>
 				</span>
 			</template>
 		</el-dialog>

+ 3 - 3
src/views/system/dept/index.vue

@@ -2,14 +2,14 @@
 	<div class="system-dept-container layout-padding">
 		<el-card shadow="hover" class="layout-padding-auto">
 			<div class="system-dept-search mb15">
-				<el-input size="default" placeholder="请输入部门名称" style="max-width: 180px"> </el-input>
-				<el-button size="default" type="primary" class="ml10">
+				<el-input  placeholder="请输入部门名称" style="max-width: 180px"> </el-input>
+				<el-button  type="primary" class="ml10">
 					<el-icon>
 						<ele-Search />
 					</el-icon>
 					查询
 				</el-button>
-				<el-button size="default" type="success" class="ml10" @click="onOpenAddDept">
+				<el-button  type="success" class="ml10" @click="onOpenAddDept">
 					<el-icon>
 						<ele-FolderAdd />
 					</el-icon>

+ 3 - 1
src/views/system/institutionalUsers/roles/component/editRole.vue

@@ -49,6 +49,7 @@ export default defineComponent({
 				displayName: '', // 角色标识
 				enable: true, // 角色状态
 				description: '', // 角色描述
+				creationTime:"",
 			},
 		});
 		const ruleFormRef = ref();
@@ -72,9 +73,10 @@ export default defineComponent({
 		const onSubmit = () => {
 			ruleFormRef.value.validate((valid: boolean) => {
 				if (valid) {
+					delete state.ruleForm.creationTime;
 					updateRole(state.ruleForm).then(()=>{
 						ElMessage({
-							message: '新增成功',
+							message: '操作成功',
 							type: 'success',
 						})
 						closeDialog();

+ 40 - 19
src/views/system/institutionalUsers/roles/index.vue

@@ -3,13 +3,13 @@
     <el-card shadow="never">
         <!-- 通用搜索 -->
       <transition name="el-zoom-in-bottom" mode="out-in">
-        <el-form :model="queryParams" ref="ruleFormRef" :inline="true" v-show="showSearch">
+        <el-form :model="queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
           <el-form-item label="搜索内容" prop="SearchText">
             <el-input v-model="queryParams.SearchText" placeholder="请输入搜索内容" clearable @keyup.enter="handleQuery" />
           </el-form-item>
           <el-form-item>
-            <el-button type="primary"  @click="handleQuery" :loading="tableData.loading" v-waves>查询</el-button>
-            <el-button  @click="resetQuery(ruleFormRef)" v-waves>重置</el-button>
+            <el-button type="primary" @click="handleQuery" :loading="loading" v-waves><SvgIcon name="ele-Search" class="mr5"/>查询</el-button>
+						<el-button @click="resetQuery(ruleFormRef)" v-waves><SvgIcon name="ele-Refresh" class="mr5"/>重置</el-button>
           </el-form-item>
         </el-form>
       </transition>
@@ -23,7 +23,7 @@
           </el-button>
         </div>
       </div>
-      <el-table :data="state.tableData.data"  v-loading="tableData.loading" style="width: 100%">
+      <el-table :data="state.tableData.data"  v-loading="loading" style="width: 100%">
         <el-table-column prop="name" label="角色名称" show-overflow-tooltip></el-table-column>
         <el-table-column prop="displayName" label="角色别名" show-overflow-tooltip></el-table-column>
         <el-table-column prop="status" label="角色状态" show-overflow-tooltip>
@@ -33,12 +33,37 @@
           </template>
         </el-table-column>
         <el-table-column prop="description" label="角色描述" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip></el-table-column>
-        <el-table-column label="操作" width="160" fixed="right" align="center">
+        <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip>
           <template #default="scope">
-            <el-button type="primary" text @click="onOpenEditRole(scope.row)"  v-auth="'100203'">修改</el-button>
-            <el-button type="success" text @click="onPermissions(scope.row)"  v-auth="'100204'">配置权限</el-button>
-            <el-button text type="danger" @click="onRowDel(scope.row)"  v-auth="'100202'">删除</el-button>
+							<span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+        </el-table-column>
+        <el-table-column label="操作" width="100" fixed="right" align="center">
+          <template #default="scope">
+            <el-tooltip
+                content="修改"
+                placement="top-start"
+            >
+                <el-button text type="primary" @click="onOpenEditRole(scope.row)" v-auth="'100203'">
+                    <SvgIcon name="ele-Edit" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
+            <el-tooltip
+                content="配置权限"
+                placement="top-start"
+            >
+                <el-button text type="success" @click="onPermissions(scope.row)" v-auth="'100204'">
+                    <SvgIcon name="ele-Setting" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
+            <el-tooltip
+                content="删除"
+                placement="top-start"
+            >
+                <el-button text type="danger" @click="onRowDel(scope.row)" v-auth="'100202'">
+                    <SvgIcon name="ele-Delete" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
           </template>
         </el-table-column>
         <template #empty>
@@ -67,8 +92,8 @@ interface TableDataState {
   tableData: {
     data: Array<any>;
     total: number;
-    loading: boolean;
   };
+  loading: boolean;
 }
 interface queryState {
   queryParams: {
@@ -83,14 +108,13 @@ const PermissionRole = defineAsyncComponent(() => import('/@/views/system/instit
 const addRoleRef = ref();
 const editRoleRef = ref();
 const PermissionRoleRef = ref();
-const showSearch = ref(true);
 const ruleFormRef = ref<FormInstance>();
 const state = reactive<TableDataState>({
   tableData: {
     data: [],
     total: 0,
-    loading: false,
   },
+  loading: false
 });
 const data = reactive<queryState>({
   queryParams: {
@@ -100,7 +124,7 @@ const data = reactive<queryState>({
   },
 });
 const {queryParams} = toRefs(data);
-const {tableData} = toRefs(state);
+const {tableData,loading} = toRefs(state);
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(() => {
   data.queryParams.PageIndex = 1;
@@ -114,18 +138,15 @@ const resetQuery = throttle((formEl: FormInstance | undefined) => {
 },1000);
 /** 获取角色列表 */
 const getList = () => {
-  state.tableData.loading = true;
+  state.loading = true;
   getRoleListPaged(data.queryParams).then((response: any) => {
     state.tableData.data = response?.result.items ?? [];
     state.tableData.total = response?.result.total ?? 0;
-    for (let i of state.tableData.data) {
-      i.creationTime = formatDate(new Date(i.creationTime), 'YYYY-mm-dd HH:MM:SS');
-    }
     setTimeout(() => {
-      state.tableData.loading = false;
+      state.loading = false;
     }, 300);
   }).catch(() => {
-    state.tableData.loading = false;
+    state.loading = false;
   })
 }
 // 打开新增角色弹窗

+ 23 - 11
src/views/system/institutionalUsers/user/component/addUser.vue

@@ -3,27 +3,25 @@
 		<el-dialog v-model="isShowDialog" width="769px" draggable title="新增用户">
 			<el-form :model="ruleForm" label-width="90px"  ref="ruleFormRef">
 				<el-row :gutter="35">
-					<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="ruleForm.name" placeholder="请输入账号" clearable></el-input>
-						</el-form-item>
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+						<el-divider content-position="left"><b class="ft16">基本信息</b></el-divider>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="用户昵称" prop="userName" :rules="[{required: false,message: '请输入用户昵称',trigger: 'blur'}]">
-							<el-input v-model="ruleForm.userName" placeholder="请输入用户昵称" clearable></el-input>
+						<el-form-item label="姓名" prop="userName" :rules="[{required: true,message: '请输入姓名',trigger: 'blur'}]">
+							<el-input v-model="ruleForm.userName" 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="phoneNo" :rules="[{ required: false, message: '请输入手机号', trigger: 'blur' }]">
-							<el-input v-model="ruleForm.phoneNo" placeholder="请输入手机号" clearable></el-input>
+						<el-form-item label="登录账号" prop="name" :rules="[{required: true,message: '请输入登录账号',trigger: 'blur'}]">
+							<el-input v-model="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="parentId" :rules="[{ required: false, message: '请选择上级组织', trigger: 'change' }]">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                        <el-form-item label="所属部门" prop="orgId" :rules="[{ required: true, message: '请选择所属部门', trigger: 'change' }]">
                             <el-cascader
                                 :options="OrgData"
                                 :props="{ checkStrictly: true, value: 'id', label: 'orgName',emitPath:false }"
-                                placeholder="请选择上级组织"
+                                placeholder="请选择所属部门"
                                 clearable
                                 class="w100"
                                 v-model="ruleForm.orgId"
@@ -36,6 +34,11 @@
                             </el-cascader>
                         </el-form-item>
 					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="手机号" prop="phoneNo" :rules="[{ required: false, message: '请输入手机号', trigger: 'blur' }]">
+							<el-input v-model="ruleForm.phoneNo" 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="defaultTelNo" :rules="[{required: false,message: '请选择默认分机',trigger: 'change'}]">
                             <el-select v-model="ruleForm.defaultTelNo"  placeholder="请选择默认分机" class="w100">
@@ -48,6 +51,14 @@
                             </el-select>
 						</el-form-item>
 					</el-col>
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+						<el-divider content-position="left"><b class="ft16">角色配置</b></el-divider>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="工号" prop="staffNo" :rules="[{required: true,message: '请输入工号',trigger: 'blur'}]">
+							<el-input v-model="ruleForm.staffNo" placeholder="请输入工号" clearable></el-input>
+						</el-form-item>
+					</el-col>
 				</el-row>
 			</el-form>
 			<template #footer>
@@ -166,6 +177,7 @@ export default defineComponent({
 			loading,
 			getselKnowledgeList,
 			ruleFormRef,
+			cascaderRef,
 			...toRefs(state),
 		};
 	},

+ 27 - 13
src/views/system/institutionalUsers/user/component/editUser.vue

@@ -3,12 +3,25 @@
 		<el-dialog v-model="isShowDialog" width="769px" draggable title="修改用户">
 			<el-form :model="ruleForm" label-width="90px" ref="ruleFormRef">
 				<el-row :gutter="35">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+						<el-divider content-position="left"><b class="ft16">基本信息</b></el-divider>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="姓名" prop="userName" :rules="[{required: true,message: '请输入姓名',trigger: 'blur'}]">
+							<el-input v-model="ruleForm.userName" 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="parentId" :rules="[{ required: false, message: '请选择上级组织', trigger: 'change' }]">
+						<el-form-item label="登录账号" prop="name" :rules="[{required: true,message: '请输入登录账号',trigger: 'blur'}]">
+							<el-input v-model="ruleForm.name" 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="orgId" :rules="[{ required: true, message: '请选择所属部门', trigger: 'change' }]">
                             <el-cascader
                                 :options="OrgData"
                                 :props="{ checkStrictly: true, value: 'id', label: 'orgName',emitPath:false }"
-                                placeholder="请选择上级组织"
+                                placeholder="请选择所属部门"
                                 clearable
                                 class="w100"
                                 v-model="ruleForm.orgId"
@@ -21,6 +34,11 @@
                             </el-cascader>
                         </el-form-item>
 					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
+						<el-form-item label="手机号" prop="phoneNo" :rules="[{ required: false, message: '请输入手机号', trigger: 'blur' }]">
+							<el-input v-model="ruleForm.phoneNo" 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="defaultTelNo" :rules="[{required: false,message: '请选择默认分机',trigger: 'change'}]">
                             <el-select v-model="ruleForm.defaultTelNo"  placeholder="请选择默认分机" class="w100">
@@ -33,19 +51,12 @@
                             </el-select>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="手机号" prop="phoneNo" :rules="[{ required: true, message: '请输入手机号', trigger: 'blur' },{pattern: /^((12\d)|(13\d)|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/, message: '手机号格式错误'}]">
-							<el-input v-model="ruleForm.phoneNo" 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="name" :rules="[{required: true,message: '请输入用户姓名',trigger: 'blur'}]">
-							<el-input v-model="ruleForm.name" placeholder="请输入用户姓名" clearable></el-input>
-						</el-form-item>
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+						<el-divider content-position="left"><b class="ft16">角色配置</b></el-divider>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
-						<el-form-item label="用户昵称" prop="userName" :rules="[{required: false,message: '请输入用户昵称',trigger: 'blur'}]">
-							<el-input v-model="ruleForm.userName" placeholder="请输入用户昵称" clearable></el-input>
+						<el-form-item label="工号" prop="staffNo" :rules="[{required: true,message: '请输入工号',trigger: 'blur'}]">
+							<el-input v-model="ruleForm.staffNo" placeholder="请输入工号" clearable></el-input>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -103,6 +114,9 @@ export default defineComponent({
 		let loading = ref<boolean>(false);
 		// 打开弹窗
 		const openDialog = (row: any) => {
+			if(ruleFormRef.value){
+				ruleFormRef.value.clearValidate();
+			}
 			state.ruleForm = JSON.parse(JSON.stringify(row));
 			getOrgListFn();
 			getTelsListFn();

+ 41 - 13
src/views/system/institutionalUsers/user/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="system-user-container layout-pd">
     <el-card shadow="never">
-      <el-form :model="queryParams" ref="ruleFormRef" :inline="true" v-show="showSearch">
+      <el-form :model="queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
         <el-form-item label="手机号" prop="PhoneNo">
           <el-input v-model="queryParams.PhoneNo" placeholder="请输入手机号" clearable @keyup.enter="handleQuery" />
         </el-form-item>
@@ -12,8 +12,8 @@
           <el-input v-model="queryParams.NickName" placeholder="请输入昵称" clearable @keyup.enter="handleQuery" />
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="handleQuery" :loading="loading" v-waves>查询</el-button>
-          <el-button @click="resetQuery(ruleFormRef)" v-waves>重置</el-button>
+          <el-button type="primary" @click="handleQuery" :loading="loading" v-waves><SvgIcon name="ele-Search" class="mr5"/>查询</el-button>
+						<el-button @click="resetQuery(ruleFormRef)" v-waves><SvgIcon name="ele-Refresh" class="mr5"/>重置</el-button>
         </el-form-item>
       </el-form>
     </el-card>
@@ -34,13 +34,45 @@
         <el-table-column prop="phoneNo" label="手机号码" show-overflow-tooltip></el-table-column>
         <el-table-column prop="staffNo" label="工号" show-overflow-tooltip></el-table-column>
         <el-table-column prop="defaultTelNo" label="默认分机号" show-overflow-tooltip></el-table-column>
-        <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170"></el-table-column>
-        <el-table-column label="操作" width="250" fixed="right" align="center">
+        <el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170">
           <template #default="scope">
-            <el-button text type="primary" @click="onOpenEditUser(scope.row)" v-auth="'100103'">修改</el-button>
-            <el-button text type="success" @click="onSetRole(scope.row)" v-auth="'100105'">设置角色</el-button>
-            <el-button text type="warning" @click="onRestPwd(scope.row)">重置密码</el-button>
-            <el-button text type="danger" @click="onRowDel(scope.row)" v-auth="'100104'">删除</el-button>
+							<span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+						</template>
+        </el-table-column>
+        <el-table-column label="操作" width="150" fixed="right" align="center">
+          <template #default="scope">
+            <el-tooltip
+                content="修改"
+                placement="top-start"
+            >
+                <el-button text type="primary" @click="onOpenEditUser(scope.row)" v-auth="'100103'">
+                    <SvgIcon name="ele-Edit" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
+            <el-tooltip
+                content="设置角色"
+                placement="top-start"
+            >
+                <el-button text type="success" @click="onSetRole(scope.row)" v-auth="'100105'">
+                    <SvgIcon name="ele-Setting" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
+            <el-tooltip
+                content="重置密码"
+                placement="top-start"
+            >
+                <el-button text type="warning" @click="onRestPwd(scope.row)" v-auth="'100103'">
+                    <SvgIcon name="ele-Refresh" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
+            <el-tooltip
+                content="删除"
+                placement="top-start"
+            >
+                <el-button text type="danger" @click="onRowDel(scope.row)" v-auth="'100104'">
+                    <SvgIcon name="ele-Delete" size="var(--hotline-table-icon-font-size)"/>
+                </el-button>
+            </el-tooltip>
           </template>
         </el-table-column>
         <template #empty>
@@ -90,7 +122,6 @@ const SetRole = defineAsyncComponent(() => import('/@/views/system/institutional
 const loading = ref(false);
 const total = ref(0);
 const list = ref<any>([]);
-const showSearch = ref(true);
 const ruleFormRef = ref<FormInstance>();
 const addUserRef = ref();
 const editUserRef = ref();
@@ -105,9 +136,6 @@ const getList = () => {
   loading.value = true;
   getUserListPaged(data.queryParams).then((response: any) => {
     list.value = response?.result.items ?? [];
-    for (let i of list.value) {
-      i.creationTime = formatDate(new Date(i.creationTime), 'YYYY-mm-dd HH:MM:SS');
-    }
     total.value = response?.result.total;
     setTimeout(() => {
       loading.value = false;

+ 11 - 4
src/views/system/menu/index.vue

@@ -28,11 +28,18 @@
 						{{ scope.row.displayOrder }}
 					</template>
 				</el-table-column>
-				<el-table-column label="操作" show-overflow-tooltip width="160" align="center">
+				<el-table-column label="操作" show-overflow-tooltip width="100" align="center">
 					<template #default="scope">
-						<el-button text type="primary" @click="onOpenEditMenu(scope.row)" v-auth="'100402'">修改
-						</el-button>
-						<el-button text type="danger" @click="onTabelRowDel(scope.row)" v-auth="'100403'">删除</el-button>
+						<el-tooltip content="修改" placement="top-start">
+							<el-button text type="primary" @click="onOpenEditMenu(scope.row)" v-auth="'100402'">
+								<SvgIcon name="ele-Edit" size="var(--hotline-table-icon-font-size)" />
+							</el-button>
+						</el-tooltip>
+						<el-tooltip content="删除" placement="top-start">
+							<el-button text type="danger" @click="onTabelRowDel(scope.row)" v-auth="'100403'">
+								<SvgIcon name="ele-Delete" size="var(--hotline-table-icon-font-size)" />
+							</el-button>
+						</el-tooltip>
 					</template>
 				</el-table-column>
 				<template #empty>

+ 10 - 6
src/views/system/organizational/index.vue

@@ -26,16 +26,19 @@
 						</template>
 					</el-table-column>
 					<el-table-column prop="parentName" label="上级组织" show-overflow-tooltip></el-table-column>
-					<el-table-column label="创建事件" show-overflow-tooltip>
+					<el-table-column prop="orgCode" label="组织编码" show-overflow-tooltip></el-table-column>
+					<el-table-column label="创建时间" show-overflow-tooltip>
 						<template #default="scope">
-							<span>{{ scope.row.creationTime }}</span>
+							<span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
 						</template>
 					</el-table-column>
-					<el-table-column label="操作" show-overflow-tooltip width="160" align="center">
+					<el-table-column label="操作" show-overflow-tooltip width="80" align="center">
 						<template #default="scope">
-							<el-button text type="primary" @click="onOpenEditOrg(scope.row)" v-auth="'100502'">修改
-							</el-button>
-							<!-- <el-button text type="danger" @click="onTabelRowDel(scope.row)">删除</el-button> -->
+							<el-tooltip content="修改" placement="top-start">
+								<el-button text type="primary" @click="onOpenEditOrg(scope.row)" v-auth="'100502'">
+									<SvgIcon name="ele-Edit" size="var(--hotline-table-icon-font-size)" />
+								</el-button>
+							</el-tooltip>
 						</template>
 					</el-table-column>
 					<template #empty>
@@ -58,6 +61,7 @@ import { RouteRecordRaw } from 'vue-router';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '/@/stores/userInfo';
 import { getOrgList } from "/@/api/system/organizational";
+import { formatDate } from '/@/utils/formatTime';
 
 const AddOrg = defineAsyncComponent(() => import('/@/views/system/organizational/component/addOrg.vue'))
 const EditOrg = defineAsyncComponent(() => import('/@/views/system/organizational/component/editOrg.vue'))

+ 83 - 0
src/views/telslog/blacklist/component/addBlacklist.vue

@@ -0,0 +1,83 @@
+<template>
+    <div class="system-add-blackList-container">
+        <el-dialog v-model="isShowDialog" width="500px" draggable title="新增黑名单">
+            <el-form :model="ruleForm" ref="blacklistFormRef" label-width="120px" label-position="left">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+                        <el-form-item label="电话号码" prop="phoneNo" :rules="[{ required: true, message: '请输入电话号码', trigger: 'blur' },
+                            // {pattern: /^((12\d)|(13\d)|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/, message: '手机号格式错误'}
+                        ]">
+                            <el-input v-model="ruleForm.phoneNo" 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="duration"
+                            :rules="[{ required: true, message: '请输入时间(秒)', trigger: 'blur' }]">
+                            <el-input-number v-model="ruleForm.duration" :precision="0" :min="1" class="w100" />
+                        </el-form-item>
+                    </el-col>
+                    <!-- <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
+						<el-form-item label="备注" prop="remark">
+							<el-input v-model="ruleForm.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }" placeholder="请输入备注" clearable></el-input>
+						</el-form-item>
+					</el-col> -->
+                </el-row>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="isShowDialog = false">取 消</el-button>
+                    <el-button type="primary" @click="onSubmit">保 存</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive, toRefs  } from 'vue';
+import {  ElMessage } from 'element-plus';
+import {  addBlacklist } from '/@/api/telslog/blacklist';
+interface stateBacklist {
+    ruleForm:{
+        phoneNo:string,
+        duration:number
+    }
+    isShowDialog:boolean
+}
+const state = reactive<stateBacklist>({
+    ruleForm:{
+        phoneNo:"",
+        duration:1
+    },
+    isShowDialog:false
+})
+const blacklistFormRef = ref();
+const emit = defineEmits(['updateList','openDialog','closeDialog'])
+const openDialog = ()=>{
+    if(blacklistFormRef.value){
+        blacklistFormRef.value.resetFields();
+    }
+    state.isShowDialog = true;
+    emit('openDialog')
+}
+// 关闭弹窗
+const closeDialog = () => {
+    state.isShowDialog = false;
+    emit('closeDialog')
+};
+const onSubmit = ()=>{// 新增保存
+	blacklistFormRef.value.validate((valid: boolean) => {
+        if (valid) {
+			addBlacklist(state.ruleForm).then(()=>{
+				ElMessage.success("新增成功")
+				emit("updateList");
+				isShowDialog.value = false;
+			})
+        } else {
+            return false;
+        }
+    });
+}
+const {ruleForm,isShowDialog} = toRefs(state);
+defineExpose({closeDialog,openDialog}) //暴漏方法
+</script>

+ 28 - 81
src/views/telslog/blacklist/index.vue

@@ -2,13 +2,13 @@
 	<div class="telslog-balckList-container layout-pd">
 		<el-card shadow="never">
 			<!-- 通用搜索 -->
-			<el-form :model="queryParams" ref="ruleFormRef" :inline="true" v-show="showSearch">
+			<el-form :model="queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
 					<el-form-item label="电话号码" prop="PhoneNum">
-						<el-input v-model="queryParams.PhoneNum" placeholder="请输入电话号码" clearable @keyup.enter="handleQuery" />
+						<el-input v-model="queryParams.PhoneNum" placeholder="请输入电话号码" clearable @keyup.enter="handleQuery"/>
 					</el-form-item>
 					<el-form-item>
-						<el-button type="primary" @click="handleQuery" :loading="loading" v-waves>查询</el-button>
-						<el-button @click="resetQuery(ruleFormRef)" v-waves>重置</el-button>
+						<el-button type="primary" @click="handleQuery" :loading="loading" v-waves><SvgIcon name="ele-Search" class="mr5"/>查询</el-button>
+						<el-button @click="resetQuery(ruleFormRef)" v-waves><SvgIcon name="ele-Refresh" class="mr5"/>重置</el-button>
 					</el-form-item>
 				</el-form>
 		</el-card>
@@ -25,10 +25,21 @@
 			<el-table :data="list" v-loading="loading" row-key="id" ref="multipleTableRef" @selection-change="handleSelectionChange" id="table">
 				<el-table-column prop="phoneNo" label="电话号码" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="duration" label="黑名单时长(秒)" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip  width="170"></el-table-column>
+				<el-table-column label="创建时间" show-overflow-tooltip  width="170">
+					<template #default="scope">
+                        <span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+                    </template>
+				</el-table-column>
 				<el-table-column label="操作" width="100" fixed="right" align="center">
 					<template #default="scope">
-						<el-button text type="danger" @click="onRowDel(scope.row)"  v-auth="'200202'">删除</el-button>
+						<el-tooltip
+							content="删除"
+							placement="top-start"
+						>
+							<el-button text type="danger" @click="onRowDel(scope.row)" v-auth="'200202'">
+								<SvgIcon name="ele-Delete" size="var(--hotline-table-icon-font-size)"/>
+							</el-button>
+						</el-tooltip>
 					</template>
 				</el-table-column>
 				<template #empty>
@@ -39,43 +50,19 @@
 			<pagination :total="total" v-model:page="queryParams.PageIndex" v-model:limit="queryParams.pageSize" @pagination="getList" />
 		</el-card>
 
-		<el-dialog v-model="isShowDialog" width="500px" draggable title="新增黑名单">
-			<el-form :model="ruleForm"  ref="blacklistFormRef" label-width="120px" label-position="left">
-				<el-row :gutter="35">
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
-						<el-form-item label="电话号码" prop="phoneNo" :rules="[{ required: true, message: '请输入电话号码', trigger: 'blur' },{pattern: /^((12\d)|(13\d)|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/, message: '手机号格式错误'}]">
-							<el-input v-model="ruleForm.phoneNo" 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="duration" :rules="[{ required: true, message: '请输入时间(秒)', trigger: 'blur' }]">
-							<el-input-number v-model="ruleForm.duration" :precision="0" :min="1" class="w100"/>
-						</el-form-item>
-					</el-col>
-					<!-- <el-col :xs="24" :sm="12" :md="24" :lg="24" :xl="24">
-						<el-form-item label="备注" prop="remark">
-							<el-input v-model="ruleForm.remark" type="textarea" :autosize="{ minRows: 4, maxRows: 6 }" placeholder="请输入备注" clearable></el-input>
-						</el-form-item>
-					</el-col> -->
-				</el-row>
-			</el-form>
-			<template #footer>
-				<span class="dialog-footer">
-					<el-button @click="isShowDialog = false">取 消</el-button>
-					<el-button type="primary" @click="onSubmit">保 存</el-button>
-				</span>
-			</template>
-		</el-dialog>
+		<AddBlacklist ref="addBlacklistRef" @updateList="handleQuery"/>
 	</div>
 </template>
 
 <script lang="ts" setup name="balckList">
-import { ref, reactive, toRefs, onMounted} from 'vue';
+import { defineAsyncComponent, ref, reactive, toRefs, onMounted} from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import type { FormInstance } from 'element-plus';
 import { formatDate } from '/@/utils/formatTime';
-import { blacklistPaged, addBlacklist, balcklistDelete} from '/@/api/telslog/blacklist';
+import { blacklistPaged, balcklistDelete} from '/@/api/telslog/blacklist';
 import { throttle } from '/@/utils/tools';
+
+const AddBlacklist = defineAsyncComponent(() => import('/@/views/telslog/blacklist/component/addBlacklist.vue'))
 interface queryState{
 	queryParams:{
 		PageIndex:number,
@@ -93,7 +80,6 @@ const data = reactive<queryState>({
 const loading = ref(false);
 const total = ref(0);
 const list = ref<any>([]);
-const showSearch = ref(true);
 const ruleFormRef = ref<FormInstance>();
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(()=> {
@@ -105,9 +91,6 @@ const getList = () => {
 	loading.value = true;
 	blacklistPaged(queryParams.value).then((response: any) => {
 		list.value = response?.result.items;
-		for (let i of list.value) {
-			i.creationTime = formatDate(new Date(i.creationTime), 'YYYY-mm-dd HH:MM:SS');
-		}
 		total.value = response?.result.total;
 		setTimeout(() => {
 			loading.value = false;
@@ -127,47 +110,9 @@ const resetQuery = throttle((formEl: FormInstance | undefined) => {
 	handleQuery();
 },1000);
 const { queryParams } = toRefs(data);
-onMounted(() => {
-	getList();
-});
-const isShowDialog = ref(false);
-const blacklistFormRef = ref();
-interface stateBacklist {
-    ruleForm:{
-        phoneNo:string,
-        duration:number
-    }
-}
-const state = reactive<stateBacklist>({
-    ruleForm:{
-        phoneNo:"",
-        duration:1
-    }
-})
+const addBlacklistRef = ref();
 const onAddBacklist = ()=>{// 新增黑名单
-	if(blacklistFormRef.value){
-        blacklistFormRef.value.resetFields();
-    }
-    state.ruleForm = {
-        phoneNo:"",
-        duration:1
-    }
-    isShowDialog.value = true;
-}
-const onSubmit = ()=>{// 新增保存
-	blacklistFormRef.value.validate((valid: boolean) => {
-        if (valid) {
-            loading.value = true;
-			addBlacklist(state.ruleForm).then(()=>{
-				ElMessage.success("新增成功")
-				handleQuery();
-				isShowDialog.value = false;
-			})
-            
-        } else {
-            return false;
-        }
-    });
+	addBlacklistRef.value.openDialog();
 }
 // 删除黑名单
 const onRowDel = (row: any) => {
@@ -181,6 +126,8 @@ const onRowDel = (row: any) => {
 			handleQuery();
 		});
 	}).catch(() => {});
-};
-const {ruleForm} = toRefs(state);
+}
+onMounted(() => {
+	getList();
+});
 </script>

+ 15 - 15
src/views/telslog/callRecord/index.vue

@@ -4,42 +4,42 @@
  * @version: 
  * @Date: 2022-08-16 13:46:36
  * @LastEditors: Please set LastEditors
- * @LastEditTime: 2022-11-17 14:20:24
+ * @LastEditTime: 2022-11-18 16:08:10
 -->
 <template>
 	<div class="telslog-callRecord-container layout-pd">
 		<el-card shadow="never">
 			<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
 				<el-tab-pane label="呼入列表" name="first">
-					<el-form :model="queryParams" ref="ruleFormRef" :inline="true" v-show="showSearch">
+					<el-form :model="queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
 						<el-form-item label="手机号" prop="PhoneNum">
 							<el-input v-model="queryParams.PhoneNum" placeholder="请输入手机号" clearable @keyup.enter="handleQuery" />
 						</el-form-item>
 						<el-form-item>
-							<el-button type="primary" @click="handleQuery" :loading="loading" v-waves>查询</el-button>
-							<el-button  @click="resetQuery(ruleFormRef)" v-waves>重置</el-button>
+							<el-button type="primary" @click="handleQuery" :loading="loading" v-waves><SvgIcon name="ele-Search" class="mr5"/>查询</el-button>
+							<el-button @click="resetQuery(ruleFormRef)" v-waves><SvgIcon name="ele-Refresh" class="mr5"/>重置</el-button>
 						</el-form-item>
 					</el-form>
 				</el-tab-pane>
 				<el-tab-pane label="呼出列表" name="second">
-					<el-form :model="queryParams" ref="ruleFormRef" :inline="true" v-show="showSearch">
+					<el-form :model="queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
 						<el-form-item label="手机号" prop="PhoneNum">
 							<el-input v-model="queryParams.PhoneNum" placeholder="请输入手机号" clearable @keyup.enter="handleQuery" />
 						</el-form-item>
 						<el-form-item>
-							<el-button type="primary"  @click="handleQuery" :loading="loading" v-waves>查询</el-button>
-							<el-button  @click="resetQuery(ruleFormRef)" v-waves>重置</el-button>
+							<el-button type="primary" @click="handleQuery" :loading="loading" v-waves><SvgIcon name="ele-Search" class="mr5"/>查询</el-button>
+							<el-button @click="resetQuery(ruleFormRef)" v-waves><SvgIcon name="ele-Refresh" class="mr5"/>重置</el-button>
 						</el-form-item>
 					</el-form>
 				</el-tab-pane>
 				<el-tab-pane label="未接列表" name="third">
-					<el-form :model="queryParams" ref="ruleFormRef" :inline="true" v-show="showSearch">
+					<el-form :model="queryParams" ref="ruleFormRef" :inline="true" @submit.native.prevent>
 						<el-form-item label="手机号" prop="PhoneNum">
 							<el-input v-model="queryParams.PhoneNum" placeholder="请输入手机号" clearable @keyup.enter="handleQuery" />
 						</el-form-item>
 						<el-form-item>
-							<el-button type="primary" @click="handleQuery" :loading="loading" v-waves>查询</el-button>
-							<el-button @click="resetQuery(ruleFormRef)" v-waves>重置</el-button>
+							<el-button type="primary" @click="handleQuery" :loading="loading" v-waves><SvgIcon name="ele-Search" class="mr5"/>查询</el-button>
+							<el-button @click="resetQuery(ruleFormRef)" v-waves><SvgIcon name="ele-Refresh" class="mr5"/>重置</el-button>
 						</el-form-item>
 					</el-form>
 				</el-tab-pane>
@@ -67,7 +67,11 @@
 				<el-table-column prop="phoneIspText" label="运营商" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="ringOffTypeText" label="挂断类型" show-overflow-tooltip></el-table-column>
 				<el-table-column prop="attribution" label="归属地" show-overflow-tooltip></el-table-column>
-				<el-table-column prop="creationTime" label="创建时间" show-overflow-tooltip width="170"></el-table-column>
+				<el-table-column label="创建时间" show-overflow-tooltip width="170">
+					<template #default="scope">
+                        <span>{{ formatDate(scope.row.creationTime,'YYYY-mm-dd HH:MM:SS') }}</span>
+                    </template>
+				</el-table-column>
 				<template #empty>
 					<Empty />
 				</template>
@@ -106,7 +110,6 @@ const state = reactive({
 const loading = ref(false);
 const total = ref(0);
 const list = ref<any>([]);
-const showSearch = ref(true);
 const ruleFormRef = ref<FormInstance>();
 /** 搜索按钮操作 节流操作 */
 const handleQuery = throttle(()=> {
@@ -118,9 +121,6 @@ const getList = () => {
 	loading.value = true;
 	callPaged(queryParams.value).then((response: any) => {
 		list.value = response?.result.items ?? [];
-		for (let i of list.value) {
-			i.creationTime = formatDate(new Date(i.creationTime), 'YYYY-mm-dd HH:MM:SS');
-		}
 		total.value = response?.result.total;
 		setTimeout(() => {
 			loading.value = false;