|
|
@@ -4,16 +4,16 @@
|
|
|
<el-form-item label="�微员工账�" prop="qwUserid" v-if="queryParams.type==2">
|
|
|
<el-input
|
|
|
v-model="queryParams.qwUserid"
|
|
|
- placeholder="请输入�微员工账�
|
|
|
+ placeholder="请输入�微员工账�"
|
|
|
clearable
|
|
|
size="small"
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="销售昵� prop="qwUserName" v-if="queryParams.type==1">
|
|
|
+ <el-form-item label="销售昵称" prop="qwUserName" v-if="queryParams.type==1">
|
|
|
<el-input
|
|
|
v-model="queryParams.qwUserName"
|
|
|
- placeholder="请输入销售昵�
|
|
|
+ placeholder="请输入销售昵称"
|
|
|
clearable
|
|
|
size="small"
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
@@ -23,14 +23,14 @@
|
|
|
<el-form-item label="客户昵称" prop="externalUserName">
|
|
|
<el-input
|
|
|
v-model="queryParams.externalUserName"
|
|
|
- placeholder="请输入客户昵�
|
|
|
+ placeholder="请输入客户昵称"
|
|
|
clearable
|
|
|
size="small"
|
|
|
@keyup.enter.native="handleQuery"
|
|
|
/>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="��类� prop="sendType" >
|
|
|
- <el-select v-model="queryParams.sendType" placeholder="请选择��类� clearable size="small">
|
|
|
+ <el-form-item label="��类型" prop="sendType" >
|
|
|
+ <el-select v-model="queryParams.sendType" placeholder="请选择��类型" clearable size="small">
|
|
|
<el-option
|
|
|
v-for="dict in sysQwSopType"
|
|
|
:key="dict.dictValue"
|
|
|
@@ -39,8 +39,8 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="���员)状� prop="sendStatus">
|
|
|
- <el-select v-model="queryParams.sendStatus" placeholder="请选择���员)状� clearable size="small">
|
|
|
+ <el-form-item label="��(�员)状�" prop="sendStatus">
|
|
|
+ <el-select v-model="queryParams.sendStatus" placeholder="请选择��(�员)状�" clearable size="small">
|
|
|
<el-option
|
|
|
v-for="dict in sysQwSopLogsStatus"
|
|
|
:key="dict.dictValue"
|
|
|
@@ -49,27 +49,27 @@
|
|
|
/>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="预计��时� prop="scheduleTime">
|
|
|
+ <el-form-item label="预计��时间" prop="scheduleTime">
|
|
|
<!-- <el-date-picker clearable size="small"-->
|
|
|
<!-- v-model="queryParams.sendTime"-->
|
|
|
<!-- type="datetime"-->
|
|
|
<!-- value-format="yyyy-MM-dd HH:mm:ss"-->
|
|
|
-<!-- placeholder="选择预计��时�>-->
|
|
|
+<!-- placeholder="选择预计��时间">-->
|
|
|
<!-- </el-date-picker>-->
|
|
|
<el-date-picker
|
|
|
clearable size="small"
|
|
|
v-model="scheduleTime"
|
|
|
type="datetimerange"
|
|
|
- range-separator="�
|
|
|
- start-placeholder="开始日�
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
end-placeholder="结�日期"
|
|
|
- placeholder="选择预计��时�
|
|
|
+ placeholder="选择预计��时间"
|
|
|
@change="handleScheduleTimeChange"
|
|
|
>
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="接收(客户)状� prop="receivingStatus">
|
|
|
- <el-select v-model="queryParams.receivingStatus" placeholder="请选择接收(客户)状� clearable size="small">
|
|
|
+ <el-form-item label="接收(客户)状�" prop="receivingStatus">
|
|
|
+ <el-select v-model="queryParams.receivingStatus" placeholder="请选择接收(客户)状�" clearable size="small">
|
|
|
<el-option
|
|
|
v-for="dict in groupMsgSendStatusOptions"
|
|
|
:key="dict.dictValue"
|
|
|
@@ -94,18 +94,41 @@
|
|
|
size="mini"
|
|
|
:loading="exportLoading"
|
|
|
@click="handleExport"
|
|
|
+ v-hasPermi="['qw:sopLogs:export']"
|
|
|
>导出</el-button>
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ plain
|
|
|
+ icon="el-icon-delete"
|
|
|
+ size="mini"
|
|
|
+ :disabled="multiple"
|
|
|
+ @click="handleDelete"
|
|
|
+ v-hasPermi="['qw:sopLogs:remove']"
|
|
|
+ >批é‡�åˆ é™¤</el-button>
|
|
|
+ <el-button
|
|
|
+ type="success"
|
|
|
+ plain
|
|
|
+ icon="el-icon-edit"
|
|
|
+ size="mini"
|
|
|
+ :disabled="multiple"
|
|
|
+ @click="handleEditCourse"
|
|
|
+ v-hasPermi="['qw:sopLogs:editCourse']"
|
|
|
+ >�次��记录</el-button>
|
|
|
</el-col>
|
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
|
</el-row>
|
|
|
|
|
|
- <el-table v-loading="loading" :data="qwSopLogsList">
|
|
|
- <el-table-column label="��类� align="center" prop="sendType" width="80">
|
|
|
+ <el-table v-loading="loading" :data="qwSopLogsList" @selection-change="handleSelectionChange">
|
|
|
+ <el-table-column type="selection" width="55" align="center" />
|
|
|
+ <el-table-column label="编�" align="center" prop="id" />
|
|
|
+ <el-table-column label="��类型" align="center" prop="sendType" width="80">
|
|
|
<template slot-scope="scope">
|
|
|
<dict-tag :options="sysQwSopType" :value="scope.row.sendType"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="�微�员账�" align="center" prop="qwUserid" />
|
|
|
+ <el-table-column label="�微�员昵称" align="center" prop="qwUserName" v-if="queryParams.type==2" />
|
|
|
+<!-- <el-table-column label="系统��昵称" align="center" prop="userName" />-->
|
|
|
<el-table-column label="客户昵称" align="center" prop="externalUserName" />
|
|
|
<el-table-column label="��的消�" align="center" prop="contentJson" >
|
|
|
<template slot-scope="scope">
|
|
|
@@ -114,36 +137,63 @@
|
|
|
</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="�员状� align="center" prop="sendStatus" >
|
|
|
+ <el-table-column label="�员状�" align="center" prop="sendStatus" >
|
|
|
<template slot-scope="scope">
|
|
|
<dict-tag :options="sysQwSopLogsStatus" :value="scope.row.sendStatus"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="预计��时� align="center" prop="sendTime" width="180"/>
|
|
|
- <el-table-column label="实际��时� align="center" prop="realSendTime" width="180"/>
|
|
|
- <el-table-column label="接收状� align="center" prop="receivingStatus" >
|
|
|
+ <el-table-column label="预计��时间" align="center" prop="sendTime" width="180"/>
|
|
|
+ <el-table-column label="实际��时间" align="center" prop="realSendTime" width="180"/>
|
|
|
+<!-- <el-table-column label="获�记录" align="center" prop="takeRecords" width="180">-->
|
|
|
+<!-- <template slot-scope="scope">-->
|
|
|
+<!-- <span v-if="scope.row.takeRecords == 0" :style="{ color: 'red' }" >未获�</span>-->
|
|
|
+<!-- <span v-else-if="scope.row.takeRecords == 1" :style="{ color: 'green' }" >已获�</span>-->
|
|
|
+<!-- <span v-else :style="{ color: 'gray' }" >未知状�</span>-->
|
|
|
+<!-- </template>-->
|
|
|
+<!-- </el-table-column>-->
|
|
|
+ <el-table-column label="客户" align="center" prop="receivingStatus" >
|
|
|
<template slot-scope="scope">
|
|
|
<dict-tag :options="groupMsgSendStatusOptions" :value="scope.row.receivingStatus"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
+ <el-table-column label="生�时间" align="createTime" prop="createTime" width="180" />
|
|
|
<el-table-column label="消�ID" align="center" prop="msgId" />
|
|
|
<el-table-column label="备注" align="center" prop="remark" />
|
|
|
+ <el-table-column label="APP备注" align="center" prop="appSendRemark" />
|
|
|
</el-table>
|
|
|
|
|
|
<el-dialog :visible.sync="contentDialog.isDialogVisible" title="消�详情" width="30%" append-to-body>
|
|
|
<div>
|
|
|
<div v-for="(item, index) in contentDialog.json || []" :key="index">
|
|
|
<el-card class="box-card" style="margin-top: 2%">
|
|
|
- <div slot="header" class="clearfix">
|
|
|
- <span>类型:</span>
|
|
|
- <span v-if="item.contentType == 1">文本</span>
|
|
|
- <span v-if="item.contentType == 2">图片</span>
|
|
|
- <span v-if="item.contentType == 3">�片</span>
|
|
|
- <span v-if="item.contentType == 5">文件</span>
|
|
|
- <span v-if="item.contentType == 6">视频</span>
|
|
|
- <span v-if="item.contentType == 7">è¯éŸ³</span>
|
|
|
+ <div slot="header" class="clearfix" style="display: flex;justify-content: space-between;align-items: center;">
|
|
|
+ <div>
|
|
|
+ <span>类型:</span>
|
|
|
+ <span v-if="item.contentType == 1">文本</span>
|
|
|
+ <span v-if="item.contentType == 2">图片</span>
|
|
|
+ <span v-if="item.contentType == 3">�片</span>
|
|
|
+ <span v-if="item.contentType == 4">�程�</span>
|
|
|
+ <span v-if="item.contentType == 5">文件</span>
|
|
|
+ <span v-if="item.contentType == 6">视频</span>
|
|
|
+ <span v-if="item.contentType == 7">è¯éŸ³</span>
|
|
|
+ <span v-if="item.contentType == 8">视频�</span>
|
|
|
+ <span v-if="item.contentType == 9">APP</span>
|
|
|
+ <span v-if="item.contentType == 10">自定义�程�</span>
|
|
|
+ <span v-if="item.contentType == 12">ç›´æ’å°�程åº�</span>
|
|
|
+ <span v-if="item.contentType == 14">�袋</span>
|
|
|
+ <span v-if="item.contentType == 15">APP文本</span>
|
|
|
+ <span v-if="item.contentType == 16">APPè¯éŸ³</span>
|
|
|
+ <span v-if="item.contentType == 17">�览器看课</span>
|
|
|
+ <span v-if="item.contentType == 4"><el-button size="mini" type="primary" @click="generateShortLink(item)" style="margin-left: 330px;">生æˆ�çŸé“¾</el-button></span>
|
|
|
+ </div>
|
|
|
+ <div v-if="item.sendStatus">
|
|
|
+ <span>��状�:</span>
|
|
|
+ <el-tag type="success" v-if="item.sendStatus == 1">���功</el-tag>
|
|
|
+ <el-tag type="danger" v-if="item.sendStatus == 2">��失败</el-tag>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div v-if="item.contentType == 1" v-safe-html="item.value"></div>
|
|
|
+ <div v-if="item.sendStatus && item.sendStatus == 2">å�‘é€�å¤±è´¥åŽŸå› ï¼š<span style="color: #ff4949">{{item.sendRemarks}}</span></div>
|
|
|
+ <div v-if="item.contentType == 1 || item.contentType == 15" v-safe-html="item.value"></div>
|
|
|
<div v-if="item.contentType == 2">
|
|
|
<el-image
|
|
|
style="width: 100px; height: 100px"
|
|
|
@@ -151,14 +201,14 @@
|
|
|
fit="contain"
|
|
|
@click.prevent="openImageViewer(item.imgUrl)" />
|
|
|
</div>
|
|
|
- <div v-if="item.contentType == 3" class="message-style">
|
|
|
+ <div v-if="item.contentType == 3 || item.contentType == 9" class="message-style">
|
|
|
<div
|
|
|
style="background-color: white; padding: 10px; width: 100%"
|
|
|
@click="openLink(item.linkUrl)">
|
|
|
<span>{{ item.linkTitle }}</span>
|
|
|
<div style="display: flex; justify-content: space-between; width: 100%">
|
|
|
<span style="font-size: 13px; flex: 1">{{ item.linkDescribe }}</span>
|
|
|
- <!-- 点击图片时å�œæ¢äº‹ä»¶å†’æ³?-->
|
|
|
+ <!-- 点击图片时å�œæ¢äº‹ä»¶å†’泡 -->
|
|
|
<el-image
|
|
|
style="width: 50px; height: 50px; flex-shrink: 0"
|
|
|
:src="item.linkImageUrl"
|
|
|
@@ -167,6 +217,16 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div v-if="item.contentType == 4 || item.contentType == 10 || item.contentType == 17" class="message-style">
|
|
|
+ <div style="display: flex; justify-content: space-between; width: 100%">
|
|
|
+ <span style="font-size: 13px; flex: 1">{{ item.miniprogramTitle }}</span>
|
|
|
+ <el-image
|
|
|
+ style="width: 50px; height: 50px; flex-shrink: 0"
|
|
|
+ :src="item.miniprogramPicUrl"
|
|
|
+ fit="contain"
|
|
|
+ @click.stop="openImageViewer(item.miniprogramPicUrl)" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div v-if="item.contentType == 5" class="message-style">
|
|
|
<el-link type="primary" :href="item.fileUrl" download style="padding: 10px">
|
|
|
{{ item.fileUrl }}
|
|
|
@@ -179,7 +239,14 @@
|
|
|
style="width: 200px; height: 100px">
|
|
|
</video>
|
|
|
</div>
|
|
|
- <div v-if="item.contentType == 7" v-safe-html="item.voiceText"></div>
|
|
|
+ <div v-if="item.contentType == 7 || item.contentType == 16">
|
|
|
+ <span>
|
|
|
+ {{ item.value }}
|
|
|
+ </span>
|
|
|
+ <div v-if="!item.voiceUrl" style="margin-top: 3px" >
|
|
|
+ <span style="color: red">æ— è¯éŸ³åœ°å�€</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
|
|
|
<div v-if="item.contentType == 8" class="message-style">
|
|
|
<el-card class="box-card" v-if="item.coverUrl">
|
|
|
@@ -202,7 +269,7 @@
|
|
|
:style="{ width: '200px', height: '200px' }"
|
|
|
></el-image>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="简�" label-width="100px" >
|
|
|
+ <el-form-item label="简介:" label-width="100px" >
|
|
|
<el-input type="textarea" :rows="3" v-model="item.desc" style="width: 90%;margin-top: 1%;" disabled />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="视频地�:" label-width="100px" style="margin-top: 1%" >
|
|
|
@@ -219,7 +286,7 @@
|
|
|
</span>
|
|
|
</el-dialog>
|
|
|
|
|
|
- <!-- 大图预览对��-->
|
|
|
+ <!-- 大图预览对�框 -->
|
|
|
<el-dialog
|
|
|
:visible.sync="dialogVisible"
|
|
|
:modal="false"
|
|
|
@@ -231,6 +298,22 @@
|
|
|
/>
|
|
|
</el-dialog>
|
|
|
|
|
|
+ <el-dialog
|
|
|
+ title="生æˆ�çŸé“¾"
|
|
|
+ :visible.sync="shortLinkDialogVisible"
|
|
|
+ width="30%"
|
|
|
+ v-loading="shortLoading"
|
|
|
+ append-to-body>
|
|
|
+ <el-tooltip placement="top" effect="dark" :content="copyText">
|
|
|
+ <span class="ellipsis" style="max-width:100px;display:inline-block;">{{copyText}}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ <i style="margin-left:120px;cursor: pointer" class="el-icon-document-copy" @click="onCopy"></i>
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button @click="shortLinkDialogVisible = false">� 消</el-button>
|
|
|
+ <el-button type="primary" @click="shortLinkDialogVisible = false">确 定</el-button>
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
<pagination
|
|
|
v-show="total>0"
|
|
|
:total="total"
|
|
|
@@ -238,23 +321,36 @@
|
|
|
:limit.sync="queryParams.pageSize"
|
|
|
@pagination="getList"
|
|
|
/>
|
|
|
+ <el-dialog :title="videoNumOptions.title" :visible.sync="videoNumOptions.open" width="1500px" append-to-body>
|
|
|
+ <userVideo ref="QwUserVideo" @videoResult="qwUserVideoResult"></userVideo>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
+
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { listQwSopLogs, exportQwSopLogs, listQwSopLogsList } from '@/api/qw/sopLogs'
|
|
|
+import {
|
|
|
+ listQwSopLogs,
|
|
|
+ exportQwSopLogs,
|
|
|
+ listQwSopLogsList,
|
|
|
+ delQwSopLogs,
|
|
|
+ editCourseQwSopLogs,
|
|
|
+ generateShortLink
|
|
|
+} from '../../../api/qw/sopLogs'
|
|
|
+import {delSopUserLogsInfo} from "@/api/qw/sopUserLogsInfo";
|
|
|
+import userVideo from "@/views/qw/userVideo/userVideo";
|
|
|
import { safeOpen } from '@/utils/safeUrl'
|
|
|
|
|
|
export default {
|
|
|
name: "sopLogsList",
|
|
|
props:{
|
|
|
- rowDetailFrom:{},
|
|
|
+ rowDetailFrom:{userVideo},
|
|
|
},
|
|
|
|
|
|
watch:{
|
|
|
rowDetailFrom:{
|
|
|
handler(newVal){
|
|
|
- // 当formData�化时�新查�
|
|
|
+ // 当formData�化时�新查询
|
|
|
this.getList(newVal);
|
|
|
},
|
|
|
deep: true
|
|
|
@@ -262,36 +358,44 @@ export default {
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
-
|
|
|
+ videoNumOptions: {
|
|
|
+ title: '选择视频�',
|
|
|
+ open: false,
|
|
|
+ content: null,
|
|
|
+ contentIndex: null,
|
|
|
+ },
|
|
|
+ copyText:"",
|
|
|
+ shortLoading:false,
|
|
|
+ shortLinkDialogVisible:false,
|
|
|
//图片放大
|
|
|
dialogVisible: false,
|
|
|
dialogImageUrl:null,
|
|
|
//时间选择
|
|
|
scheduleTime: null,
|
|
|
- // �罩�
|
|
|
+ // �罩层
|
|
|
loading: true,
|
|
|
- // 导出�罩�
|
|
|
+ // 导出�罩层
|
|
|
exportLoading: false,
|
|
|
// 选䏿•°ç»„
|
|
|
ids: [],
|
|
|
- // ��个��
|
|
|
+ // ��个�用
|
|
|
single: true,
|
|
|
- // �多个��
|
|
|
+ // �多个�用
|
|
|
multiple: true,
|
|
|
// 显示�索�件
|
|
|
showSearch: true,
|
|
|
- // 总��
|
|
|
+ // 总�数
|
|
|
total: 0,
|
|
|
// ä¼�业微信SOP å®šæ—¶ä»»åŠ¡è¡¨æ ¼æ•°æ�®
|
|
|
qwSopLogsList: [],
|
|
|
|
|
|
- //�员状�
|
|
|
+ //�员状�
|
|
|
sysQwSopLogsStatus:[],
|
|
|
|
|
|
- //客户接收状�
|
|
|
+ //客户接收状�
|
|
|
groupMsgSendStatusOptions:[],
|
|
|
|
|
|
- //�微SOP��类�
|
|
|
+ //�微SOP��类型
|
|
|
sysQwSopType: [],
|
|
|
|
|
|
//��的消�
|
|
|
@@ -299,9 +403,9 @@ export default {
|
|
|
isDialogVisible:false,
|
|
|
json: [],
|
|
|
},
|
|
|
- // å¼¹å‡ºå±‚æ ‡é¢?
|
|
|
+ // å¼¹å‡ºå±‚æ ‡é¢˜
|
|
|
title: "",
|
|
|
- // 是�显示弹出�
|
|
|
+ // 是�显示弹出层
|
|
|
open: false,
|
|
|
// 查询�数
|
|
|
queryParams: {
|
|
|
@@ -329,17 +433,17 @@ export default {
|
|
|
created() {
|
|
|
this.getList(this.rowDetailFrom);
|
|
|
|
|
|
- //�员状�
|
|
|
+ //�员状�
|
|
|
this.getDicts("sys_qw_sopLogs_status").then(response => {
|
|
|
this.sysQwSopLogsStatus = response.data;
|
|
|
});
|
|
|
|
|
|
- //客户接收状�
|
|
|
+ //客户接收状�
|
|
|
this.getDicts("sys_qw_groupMsg_SendStatus").then(response => {
|
|
|
this.groupMsgSendStatusOptions = response.data;
|
|
|
});
|
|
|
|
|
|
- //��消�类�
|
|
|
+ //��消�类型
|
|
|
this.getDicts("sys_qw_sop_course_type").then(response => {
|
|
|
this.sysQwSopType = response.data;
|
|
|
});
|
|
|
@@ -347,15 +451,36 @@ export default {
|
|
|
|
|
|
},
|
|
|
methods: {
|
|
|
+
|
|
|
+ qwUserVideoResult(val) {
|
|
|
+
|
|
|
+ // æ ¹æ�®é€‰ä¸çš„内容,将返回的数æ�®æ›´æ–°åˆ°ç›¸åº”的表å�•项
|
|
|
+ const content = this.videoNumOptions.content;
|
|
|
+ const setList = content[this.videoNumOptions.contentIndex];
|
|
|
+ setList.nickname = val.nickname;
|
|
|
+ setList.avatar = val.avatar;
|
|
|
+ setList.coverUrl = val.coverUrl;
|
|
|
+ setList.thumbUrl = val.thumbUrl;
|
|
|
+ setList.desc = val.desc;
|
|
|
+ setList.url = val.url;
|
|
|
+ setList.extras = val.extras;
|
|
|
+ setList.videoId = val.id;
|
|
|
+ console.info(setList)
|
|
|
+
|
|
|
+ this.videoNumOptions.open = false;
|
|
|
+
|
|
|
+ },
|
|
|
/** 查询�业微信SOP 定时任务列表 */
|
|
|
getList(val) {
|
|
|
this.queryParams.sopId = val.id || this.rowDetailFrom.id;
|
|
|
this.queryParams.corpId= val.corpId || this.rowDetailFrom.corpId;
|
|
|
this.queryParams.type= val.type || this.rowDetailFrom.type;
|
|
|
+ this.queryParams.filterSopType=val.filterSopType || this.rowDetailFrom.filterSopType;
|
|
|
this.loading = true;
|
|
|
|
|
|
listQwSopLogsList(this.queryParams).then(response => {
|
|
|
|
|
|
+ // console.log("response.rows",response.rows)
|
|
|
this.qwSopLogsList = response.rows;
|
|
|
this.total = response.total;
|
|
|
this.loading = false;
|
|
|
@@ -372,11 +497,11 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
|
|
|
- // æ ¼å¼�化日期为 yyyy-MM-dd HH:mm:ss 的北京时é—?
|
|
|
+ // æ ¼å¼�化日期为 yyyy-MM-dd HH:mm:ss 的北京时间
|
|
|
formatDateTime(date) {
|
|
|
if (!date) return null;
|
|
|
|
|
|
- // åˆ›å»ºå›½é™…åŒ–æ—¶é—´æ ¼å¼�,指定ä¸?Asia/Shanghai 时区
|
|
|
+ // åˆ›å»ºå›½é™…åŒ–æ—¶é—´æ ¼å¼�,指定为 Asia/Shanghai 时区
|
|
|
const options = {
|
|
|
timeZone: 'Asia/Shanghai',
|
|
|
year: 'numeric',
|
|
|
@@ -385,13 +510,13 @@ export default {
|
|
|
hour: '2-digit',
|
|
|
minute: '2-digit',
|
|
|
second: '2-digit',
|
|
|
- hour12: false, // 24�时�
|
|
|
+ hour12: false, // 24�时制
|
|
|
};
|
|
|
|
|
|
- // 获å�–æ ¼å¼�化的日期å—符串(å¦?2025-01-23, 16:00:00ï¼?
|
|
|
+ // 获å�–æ ¼å¼�化的日期å—符串(如 2025-01-23, 16:00:00)
|
|
|
const formattedDate = new Intl.DateTimeFormat('zh-CN', options).format(new Date(date));
|
|
|
|
|
|
- // 转æ�¢ä¸?yyyy-MM-dd HH:mm:ss æ ¼å¼�
|
|
|
+ // 转æ�¢ä¸º yyyy-MM-dd HH:mm:ss æ ¼å¼�
|
|
|
const [datePart, timePart] = formattedDate.replace(',', '').split(' ');
|
|
|
return `${datePart} ${timePart}`;
|
|
|
},
|
|
|
@@ -421,16 +546,16 @@ export default {
|
|
|
},
|
|
|
|
|
|
openImageViewer(url) {
|
|
|
- // 打开大图预览对��
|
|
|
+ // 打开大图预览对�框
|
|
|
this.dialogImageUrl=url
|
|
|
this.dialogVisible = true;
|
|
|
},
|
|
|
openLink(url){
|
|
|
if (!safeOpen(url, '_blank')) {
|
|
|
- this.$message && this.$message.warning('链接�安全,已拦�);
|
|
|
+ this.$message && this.$message.warning('链接�安全,已拦截');
|
|
|
}
|
|
|
},
|
|
|
- //查看��的消��
|
|
|
+ //查看��的消�体
|
|
|
showContentDialog(contentJson) {
|
|
|
|
|
|
// è§£æž� JSON å—符串为 JavaScript 对象
|
|
|
@@ -450,12 +575,51 @@ export default {
|
|
|
/** �置按钮�作 */
|
|
|
resetQuery() {
|
|
|
this.resetForm("queryForm");
|
|
|
+ this.queryParams.scheduleStartTime=null;
|
|
|
+ this.queryParams.scheduleEndTime=null;
|
|
|
+ this.scheduleTime = null;
|
|
|
this.handleQuery();
|
|
|
},
|
|
|
+ // å¤šé€‰æ¡†é€‰ä¸æ•°æ�®
|
|
|
+ handleSelectionChange(selection) {
|
|
|
+ this.ids = selection.map(item => item.id)
|
|
|
+ this.single = selection.length!==1
|
|
|
+ this.multiple = !selection.length
|
|
|
+ },
|
|
|
+ /** åˆ é™¤æŒ‰é’®æ“�作 */
|
|
|
+ handleDelete(row) {
|
|
|
+ const ids = row.id || this.ids;
|
|
|
+ this.$confirm('是å�¦ç¡®è®¤åˆ 除ã€�执行详情】编å�·ä¸º"ã€�' + ids + '】"的数æ�®é¡¹?', "è¦å‘Š", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "�消",
|
|
|
+ type: "warning"
|
|
|
+ }).then(function() {
|
|
|
+ return delQwSopLogs(ids);
|
|
|
+ }).then(() => {
|
|
|
+ this.getList(this.rowDetailFrom);
|
|
|
+ this.msgSuccess("åˆ é™¤æˆ�功");
|
|
|
+ }).catch(() => {});
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 批�修改��记录
|
|
|
+ */
|
|
|
+ handleEditCourse(row){
|
|
|
+ const ids = row.id || this.ids;
|
|
|
+ this.$confirm('确认è¦�å†�次å�‘é€�ã€�执行详情】编å�·ä¸º"ã€�' + ids + '】"的记录?', "è¦å‘Š", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "�消",
|
|
|
+ type: "warning"
|
|
|
+ }).then(function() {
|
|
|
+ return editCourseQwSopLogs(ids);
|
|
|
+ }).then(() => {
|
|
|
+ this.getList(this.rowDetailFrom);
|
|
|
+ this.msgSuccess("已� 修改记录为 待��~");
|
|
|
+ }).catch(() => {});
|
|
|
+ },
|
|
|
/** 导出按钮�作 */
|
|
|
handleExport() {
|
|
|
const queryParams = this.queryParams;
|
|
|
- this.$confirm('是å�¦ç¡®è®¤å¯¼å‡ºæ‰€æœ‰ä¼�业微信SOP 定时任务数æ�®é¡?', "è¦å‘Š", {
|
|
|
+ this.$confirm('是å�¦ç¡®è®¤å¯¼å‡ºæ‰€æœ‰ä¼�业微信SOP 定时任务数æ�®é¡¹?', "è¦å‘Š", {
|
|
|
confirmButtonText: "确定",
|
|
|
cancelButtonText: "�消",
|
|
|
type: "warning"
|
|
|
@@ -466,7 +630,25 @@ export default {
|
|
|
this.download(response.msg);
|
|
|
this.exportLoading = false;
|
|
|
}).catch(() => {});
|
|
|
+ },
|
|
|
+
|
|
|
+ //生æˆ�çŸé“¾
|
|
|
+ generateShortLink(val){
|
|
|
+ const param = {
|
|
|
+ linkStr:val.miniprogramPage,
|
|
|
+ appId:val.miniprogramAppid
|
|
|
+ };
|
|
|
+ generateShortLink(param).then(res=>{
|
|
|
+ this.copyText = res.urlLink;
|
|
|
+ });
|
|
|
+ this.shortLinkDialogVisible = true;
|
|
|
+ },
|
|
|
+ onCopy(){
|
|
|
+ navigator.clipboard.writeText(this.copyText).then(() => {
|
|
|
+ this.$message.success('�制�功')
|
|
|
+ })
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
};
|
|
|
</script>
|
|
|
@@ -485,4 +667,10 @@ export default {
|
|
|
.message-stayle span {
|
|
|
word-break: break-all;
|
|
|
}
|
|
|
+.ellipsis {
|
|
|
+ max-width:100px;
|
|
|
+ white-space: nowrap;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ display: inline-block;
|
|
|
+}
|
|
|
</style>
|