Sfoglia il codice sorgente

信息沟通列表表单

cyy 1 anno fa
parent
commit
bb5f17a74d

+ 1 - 1
.env.development

@@ -3,7 +3,7 @@
 ENV = 'development'
 
 # ========base api======================
-VUE_APP_BASE_API = ''http://dev1.local/ibps''
+VUE_APP_BASE_API = 'http://dev1.local/ibps'
 VUE_APP_BASE_WEBSOCKET_API = 'ws://127.0.0.1:5888'
 
 # ========report api======================

+ 233 - 0
src/api/platform/form/transfer.js

@@ -0,0 +1,233 @@
+import request from '@/utils/request'
+import { FORM_URL } from '@/api/baseUrl'
+
+/**
+ * 流水号
+ * @param {*} params
+ */
+export function getNextIdByAlias(params) {
+  return request({
+    url: FORM_URL() + '/jc/sys/getNextIdByAlias',
+    method: 'post',
+    data: params
+  })
+}
+/**
+ * 开始流程
+ * @param {*} params
+ */
+export function findFormJsonByBo(params) {
+  return request({
+    url: FORM_URL() + '/bpm/instance/start',
+    method: 'post',
+    data: params
+  })
+}
+
+/**
+ * 快照
+ * @param {*} params
+ */
+export function snapshot( params) {
+  return request({
+    url: FORM_URL() + `/file/upload/runQianUpload?url=${encodeURIComponent(params.url)}&name=${params.name}&type=${params.type}`,
+    method: 'post',
+    data: {}
+  })
+}
+/**
+ * 保存数据
+ * @param {*} params
+ */
+export function save(params) {
+  return request({
+    url: FORM_URL() + '/form/def/save/vo',
+    method: 'post',
+    isLoading: true,
+    data: params
+  })
+}
+
+/**
+ * 复制前数据请求
+ * @param {*} params
+ */
+export function preCopy(params) {
+  return request({
+    url: FORM_URL() + '/form/def/preCopy',
+    method: 'post',
+    params: params
+  })
+}
+
+/**
+ * 保存复制的数据
+ * @param {*} params
+ */
+export function saveCopy(params) {
+  return request({
+    url: FORM_URL() + '/form/def/copy',
+    method: 'post',
+    isLoading: true,
+    data: params
+  })
+}
+
+/**
+ * 判断key是否存在
+ * @param {*} params
+ */
+export function isFormKeyExists(params) {
+  return request({
+    url: FORM_URL() + '/form/def/isFormKeyExists',
+    method: 'post',
+    params
+  })
+}
+/**
+ * 设计表单
+ * @param {*} params
+ */
+export function design(params) {
+  return request({
+    url: FORM_URL() + '/form/def/design',
+    method: 'get',
+    params
+  })
+}
+
+/**
+ * 获取数据
+ * @param {*} params
+ */
+export function get(params) {
+  return request({
+    url: FORM_URL() + '/form/def/get',
+    method: 'get',
+    params
+  })
+}
+/**
+ * 获取表单定义数据
+ * @param {*} params
+ */
+export function getFormDataByFormDefId(params) {
+  return request({
+    url: FORM_URL() + '/form/def/getFormDataByFormDefId',
+    method: 'get',
+    params
+  })
+}
+/**
+ * 通过formkey获取表单定义数据
+ * @param {*} params
+ */
+export function getFormDataByFormKey(params) {
+  return request({
+    url: FORM_URL() + '/form/def/getFormDataByFormKey',
+    method: 'get',
+    params
+  })
+}
+
+/**
+ * 获取表单定义数据
+ * @param {*} params
+ */
+export function getFormData(params) {
+  return request({
+    url: FORM_URL() + '/form/def/getFormData',
+    method: 'post',
+    params
+  })
+}
+
+/**
+ * 构建业务对象树
+ * @param {*} params
+ */
+export function buildTree(params) {
+  return request({
+    url: FORM_URL() + '/form/def/buildTree',
+    method: 'post',
+    params
+  })
+}
+
+/**
+ * 导入文件
+ * @param {*} file
+ */
+export function importForm(file) {
+  const data = new FormData() // 创建form对象
+  data.append('file', file)
+  return request({
+    url: FORM_URL() + '/form/def/importForm',
+    method: 'post',
+    isLoading: true,
+    gateway: true,
+    data: data
+  })
+}
+
+/**
+ * 导出文件
+ * @param {*} params
+ */
+export function exportFile(params) {
+  return request({
+    url: FORM_URL() + '/form/def/exportForm',
+    method: 'post',
+    responseType: 'arraybuffer',
+    isLoading: true,
+    params: params
+  })
+}
+
+/**
+ * 根据表单key获取表单字段的意见字段
+ * @param {*} params
+ */
+export function findFormOptionField(params) {
+  return request({
+    url: FORM_URL() + '/form/def/findFormOptionField',
+    method: 'get',
+    params
+  })
+}
+
+/**
+ * 获取表单下拉
+ * @param {*} params
+ */
+export function getFormList(params) {
+  return request({
+    url: FORM_URL() + '/form/def/getTableList',
+    method: 'get',
+    params: params
+  })
+}
+
+/**
+ * 获取表单
+ * @param {*} params
+ */
+export function getFormKey(params) {
+  return request({
+    url: FORM_URL() + '/form/def/getMainByFormKey',
+    method: 'get',
+    params: params
+  })
+}
+
+/**
+ * 选择器范围脚本
+ * @param {*} params
+ */
+export function getScriptValue(params) {
+  return request({
+    url: FORM_URL() + '/form/def/getScriptValue',
+    method: 'post',
+    data: params
+  })
+}

BIN
src/assets/images/add.png


+ 2 - 0
src/main.js

@@ -17,6 +17,7 @@ import "./errorLog"; // error log 错误日志
 import i18n from "./i18n"; // Internationalization 国际化
 import utils from "./utils/util"; // utils 帮助类
 import common from "./utils/common"; // 通用请求
+import methCommon from "./utils/meth.js"
 import env from "@/env";
 import ActionUtils from "@/utils/action";
 
@@ -26,6 +27,7 @@ Vue.use(Vant); // 导入vant
 Vue.prototype.$action = ActionUtils; // 全局action
 Vue.prototype.$utils = utils; // 全局帮助类
 Vue.prototype.$common = common; // 通用请求
+Vue.prototype.$methCommon = methCommon
 // 基础路径
 Vue.prototype.$baseUrl = process.env.VUE_APP_PUBLIC_PATH || "/";
 // 当前环境

+ 41 - 0
src/utils/action.js

@@ -253,6 +253,47 @@ const action = {
     vm[resultTypeKey] = this.handleResultType(vm, options)
     vm[resultMessageKey] = null
   },
+  /**
+   * 处理通用接口列表数据
+   * @param vm 当前对象
+   * @param data 后台返回的列表数据
+   * @param options 参数
+   *   dataResultKey 默认 dataResult
+   *  pageResultKey 默认 pageResult
+   *  resultKey 结果key 默认 listData
+   *  pageKey 分页key 默认 pagination
+   */
+  handleListDataCommon: function(vm, data, options = {}) {
+    const loadingKey = options.loadingKey || 'loading'
+    const refreshingKey = options.refreshingKey || 'refreshing'
+    const finishedKey = options.finishedKey || 'finished'
+    const dataResultKey = options.dataResultKey || 'data'
+    const pageResultKey = options.pageResultKey || 'pageResult'
+    const resultKey = options.resultKey || 'listData'
+    const paginationKey = options.paginationKey || 'pagination'
+    const pageKey = options.pageKey || 'page'
+    const resultTypeKey = options.resultTypeKey || 'resultType'
+    const resultMessageKey = options.resultMessageKey || 'resultMessage'
+
+    const listData = data ? data[dataResultKey] || [] : []
+    const pagination = data ? data[pageResultKey] || {} : {}
+    if (vm[refreshingKey]) {
+      vm[resultKey] = []
+      vm[refreshingKey] = false
+    }
+
+    if (Utils.isNotEmpty(listData)) {
+      vm[pageKey] = vm[pageKey] + 1
+      vm[resultKey] = vm[resultKey].concat(listData)
+    }
+    vm[loadingKey] = false
+    vm[finishedKey] = Utils.isEmpty(listData) ? true : false
+
+    // vm[paginationKey] = pagination
+    // 处理结果类型
+    vm[resultTypeKey] = this.handleResultType(vm, options)
+    vm[resultMessageKey] = null
+  },
   handleResultType: function(vm, options) {
     const resultKey = options.resultKey || 'listData'
     const finishedKey = options.finishedKey || 'finished'

+ 3 - 1
src/utils/common.js

@@ -3,6 +3,7 @@ import { mapValues } from 'lodash'
 import { encryptByAes } from '@/utils/encrypt'
 // import { preview } from '@/business/platform/form/utils/custom/preview'
 import request from './joinCURD'
+import getRequest from './general'
 import pinyin4js from 'pinyin4js'
 // import { snapshoot } from "@/api/platform/file/attachment";
 import { getNextIdByAlias } from '@/api/platform/system/identity'
@@ -233,5 +234,6 @@ export default {
   // removeFormData,
   replaceNullWithEmpty,
   Utils,
-  ActionUtils
+  ActionUtils,
+  getRequest
 }

+ 149 - 0
src/utils/general.js

@@ -0,0 +1,149 @@
+// import {
+// 	encryptByAes
+// } from './encrypt'
+// import {
+// 	http
+// } from '@/common/service/service.js'
+
+// import https from '../service/http.js'
+import { SINGLE_APP } from '@/api/baseUrl'
+export default {
+	getParams(params) {
+		const parts = params.split('&')
+		const result = []
+		parts.forEach((item, index) => {
+			const [key, value] = item.split('=')
+			// 第一个参数转换=为%3D,后续参数不转换=
+			if (index === 0) {
+				result.push(`${key}%3D${encodeURIComponent(value)}`)
+			} else {
+				result.push(`${key}=${encodeURIComponent(value)}`)
+			}
+		})
+		return result.join('&')
+	},
+	downloadReport(src, where, type = 6) {
+		// 目前可用type    6:生成报表的pdf文件【默认】   7:生成报表的word文件   3:生成报表的excel文件
+		return `${SINGLE_APP().slice(0, 17)}demo/reportServlet?action=${type}&file=${encodeURIComponent('金通医学实验室管理系统' + '/' + src)}&print=1&srcType=file&paramString=${this.getParams(where)}`
+	},
+  checkPhone (value) {
+    const reg = /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$/
+    if (!reg.test(value)) {
+      return false
+    }
+    return true
+  },
+  checkEmail (value) {
+    const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+    if (!reg.test(value)) {
+      return false
+    }
+    return true
+  },
+	// getNormal(type) {
+	// 	let normal = {
+	// 		// sql: 'encipher',
+	// 		sql: 'general',
+	// 		delete: 'batchDelete',
+	// 		add: 'addDataContextTable',
+	// 		update: 'updatesBatchContextTable'
+	// 	}
+	// 	return normal[type]
+	// },
+	// getDateNow(length = 10, formatType) {
+	// 	if (formatType === 'string') {
+	// 		return new Date(new Date().getTime() + 28800000).toJSON().slice(0, length).replace(/[-:T]/g, '')
+	// 	}
+	// 	return new Date(new Date().getTime() + 28800000).toJSON().slice(0, length).replace('T', ' ')
+	// },
+	// dealData(args, type) {
+	// 	// sql方法特殊处理
+	// 	if (type === 'sql') {
+	// 		args = {
+	// 			sql: args.replace(/\n/g, ' ')
+	// 		}
+	// 	}
+	// 	const data = typeof args === 'object' ? JSON.stringify(args) : args
+	// 	const res = {
+	// 		ciphertext: encryptByAes(data),
+	// 		plaintext: args
+	// 	}
+	// 	return JSON.stringify(res)
+	// },
+	// getRepust(type, data, url = '', method = 'post') {
+	// 	return new Promise((resolve, reject) => {
+	// 		if (type == 'url' && url) {
+	// 			if (method == 'post') {
+	// 				this.getUrlPost(url, data).then(res => {
+	// 					resolve(res)
+	// 				}).catch(err => {
+	// 					reject(err)
+	// 				})
+	// 			}
+	// 			if (method == 'get') {
+	// 				this.getUrlGet(url, data).then(res => {
+	// 					resolve(res)
+	// 				}).catch(err => {
+	// 					reject(err)
+	// 				})
+	// 			}
+	// 		} else {
+	// 			if (method == 'post') {
+	// 				this.getGeneralPost(type, data).then(res => {
+	// 					resolve(res)
+	// 				}).catch(err => {
+	// 					reject(err)
+	// 				})
+
+	// 			}
+	// 			if (method == 'get') {
+	// 				this.getGeneralGet(type, data).then(res => {
+	// 					resolve(res)
+	// 				}).catch(err => {
+	// 					reject(err)
+	// 				})
+	// 			}
+	// 		}
+
+	// 	})
+
+	// },
+	// getGeneralPost(type, data) {
+	// 	return new Promise((resolve, reject) => {
+	// 		let requestData = this.dealData(data, type)
+	// 		http.post(`/ibps/business/v3/sys/universal/${this.getNormal(type)}`, requestData).then(res => {
+	// 			resolve(res)
+	// 		}).catch(err => {
+	// 			reject(err)
+	// 		})
+	// 	})
+	// },
+	// getGeneralGet(type, data) {
+	// 	return new Promise((resolve, reject) => {
+	// 		let requestData = this.dealData(data, type)
+	// 		http.get(`/ibps/business/v3/sys/universal/${this.getNormal(type)}`, requestData).then(res => {
+	// 			resolve(res)
+	// 		}).catch(err => {
+	// 			reject(err)
+	// 		})
+	// 	})
+	// },
+	// getUrlPost(url, data) {
+	// 	return new Promise((resolve, reject) => {
+	// 		http.post(url, data).then(res => {
+	// 			resolve(res)
+	// 		}).catch(err => {
+	// 			reject(err)
+	// 		})
+	// 	})
+	// },
+	// getUrlGet(url, data) {
+	// 	return new Promise((resolve, reject) => {
+	// 		http.get(url, data).then(res => {
+	// 			resolve(res)
+	// 		}).catch(err => {
+	// 			reject(err)
+	// 		})
+	// 	})
+	// }
+}

+ 43 - 0
src/utils/meth.js

@@ -0,0 +1,43 @@
+export default {
+	//时间
+	time(index) {
+		var nowDate = new Date((new Date).getTime() + 8 * 60 * 60 * 1000)
+		var time = nowDate.toJSON().split('T').join(' ').substr(0, index)
+		return time
+	},
+	//弹出提示
+	// getPrompt(title, icon = 'none', duration = 2000) {
+	// 	uni.showToast({
+	// 		title: title,
+	// 		icon: icon,
+	// 		duration: duration
+	// 	})
+	// },
+	getShowToast(val1, val2) {
+		let title = '必填'
+		switch (val2) {
+			case 1:
+				title = '必选一项'
+				break
+			case 2:
+				title = '必添加'
+				break
+			case 3:
+				title = '大于1'
+				break
+			default:
+				title = '必填'
+		}
+		this.getPrompt(val1 + title)
+	},
+	//弹出提示
+	// getShowLoading(title = '加载中', mask = true) {
+	// 	uni.showLoading({
+	// 		title: title,
+	// 		mask: mask
+	// 	})
+	// 	setTimeout(() => {
+	// 		uni.hideLoading()
+	// 	}, 1000 * 10)
+	// },
+}

+ 872 - 0
src/views/platform/bpmn/communication/communication.vue

@@ -0,0 +1,872 @@
+<template>
+  <van-overlay class="backgroundSty" z-index="2004" :show="showPop">
+    <div style="height:5%">
+      <van-sticky>
+        <van-nav-bar :title="'沟通记录 ' +  (typeValue == '3'? '编制' : typeValue == '4' ? '修改': typeValue == '1' ? '详情' : '')"
+          :left-text="'x'" left-arrow
+          :right-text="typeValue == '4'?'退回原因':''"
+          @click-left="closePop()" @click-right="toCheckMode()" />
+      </van-sticky>
+    </div>
+    <div class="scrollView">
+      <van-form @submit="onSubmit">
+        <van-field label="表单编号:" placeholder="请输入表单编号" v-model="form.biaoDanBianHao" label-width = "6em" input-align="left" readonly />
+        <van-field
+          v-model="form.keHuLianXiRen"
+          required
+          label="用户姓名:"
+          placeholder="请输入用户姓名"
+          label-width = "6em" 
+          clearable
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-field
+          v-model="form.keHuDanWeiMin"
+          required
+          label="用户单位:"
+          placeholder="请输入用户单位"
+          label-width = "6em" 
+          clearable
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-field
+          v-model="form.lianXiDianHua"
+          required
+          label="联系电话:"
+          placeholder="请输入联系电话"
+          label-width = "6em" 
+          clearable
+          :rules="[{ validator:$common.getRequest.checkPhone, message: '手机号格式错误' }]"
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-field
+          v-model="form.yongHuYouXiang"
+          required
+          label="用户邮箱:"
+          placeholder="请输入用户邮箱"
+          label-width = "6em" 
+          clearable
+          :rules="[{ validator:$common.getRequest.checkEmail, message: '邮箱格式错误' }]"
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-field
+          required
+          label="沟通类型:"
+          placeholder="请选择沟通类型"
+          label-width = "6em"
+          :value="form.gouTongLeiXing"
+          @click="sheetShow = true"
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-popup v-model="sheetShow" position="bottom">
+          <van-picker
+            show-toolbar
+            :columns="list"
+            @confirm="actionSheetCallback"
+            @cancel="sheetShow = false"
+          />
+        </van-popup>
+        <van-field
+          v-if="form.gouTongLeiXing == '其它'"
+          v-model="form.qiTa"
+          required
+          label="其他类型:"
+          placeholder="请输入其他类型"
+          label-width = "6em" 
+          clearable
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-field
+          required
+          label="沟通时间:"
+          placeholder="请选择沟通时间"
+          label-width = "6em"
+          :value="form.gouTongRiQi"
+          @click="gouTongRiQiClick(form.gouTongRiQi)"
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+        <van-popup v-model="timeShow" position="bottom">
+          <van-datetime-picker
+            v-model="xuanzeTime"
+            type="datetime"
+            @confirm="timeShowCallback"
+            @cancel="timeShow = false"
+          />
+        </van-popup>
+        <van-field
+          v-model="form.weiTuoDanHao"
+          required
+          autosize
+          type="textarea"
+          label="沟通事项:"
+          placeholder="请输入沟通事项"
+          label-width = "6em" 
+          clearable
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+			</van-form>
+      <van-cell-group>
+        <div class="verticalLine" style="width:6em;padding: 1em 0;">沟通内容</div>
+        <van-field
+          v-model="form.gouTongNeiRong"
+          autosize
+          type="textarea"
+          label=""
+          placeholder="意见和建议"
+          label-width = "0" 
+          clearable
+          :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+        />
+      </van-cell-group>
+      
+      <ibps-uploader
+        v-model="form.fuJian"
+        label="附件"
+        download
+        placeholder="请上传附件"
+        :have-padding="false"
+        multiple
+        clearable
+        :readonly="typeValue != 3 && typeValue != 4 ? true: false"
+      />
+      <ibps-signature
+        v-if="form.leiXing == '2'"
+        v-model="form.keHu"
+        label="用户确认"
+        class="yonghu"
+        placeholder=" "
+        :readonly="typeValue == 3 && typeValue == 4 ? true: false"
+      />
+      <van-cell-group  v-if="typeValue != 3 && typeValue != 4">
+        <div class="verticalLine" style="width:8em;padding: 1em 0;">沟通内容确定</div>
+        <van-field
+          v-model="form.gouTongQueDingNei"
+          autosize
+          type="textarea"
+          label=""
+          placeholder="意见和建议"
+          label-width = "0" 
+          clearable
+          :readonly="typeValue != 2"
+        />
+      </van-cell-group>
+      <ibps-signature
+        v-if="form.leiXing == '1'"
+        v-model="form.keHu"
+        label="沟通确认"
+        class="yonghu"
+        placeholder=" "
+        :readonly="typeValue != 2"
+      />
+
+			<div class="padding flex flex-direction" v-if="typeValue == '3'">
+				<van-button type="success" class="btn btn-back-color" @click="onSubmit">提交
+				</van-button>
+			</div>
+			<div class="padding flex flex-direction" v-if="typeValue == '2'">
+				<van-button type="success" class="btn btn-back-color" @click="onAgree('已完成','同意','确定')">同意
+				</van-button>
+			</div>
+			<div class="padding flex flex-direction" v-if="typeValue == '4'">
+				<van-button type="success" class="btn btn-back-color" @click="onAgree('已编制','重新提交','提交')">修改
+				</van-button>
+			</div>
+		</div>
+    
+  </van-overlay>
+</template>
+<script>
+  import random from '@/mixins/random'
+  import bpmnStatus from '@/mixins/bpmnStatus'
+
+  import ApprovePopup from '@/business/platform/bpmn/form-ext/approve'
+
+  import IbpsMoreSearch from '@/components/ibps-more-search'
+  import IbpsAvatar from '@/components/ibps-avatar'
+  import IbpsToolbar from '@/components/ibps-toolbar'
+  import IbpsListResultPage from '@/components/ibps-list-result-page'
+  import IbpsTypeTree from '@/business/platform/cat/type/tree'
+  import IbpsBpmnDefinition from '@/business/platform/bpmn/definition/field'
+  import IbpsUploader from '@/business/platform/file/uploader'
+
+  import IbpsBpmnFormrenderDialog from '@/business/platform/bpmn/form/dialog'
+
+  import { getNextIdByAlias, findFormJsonByBo, snapshot } from '@/api/platform/form/transfer'
+  import { agree } from '@/api/platform/bpmn/bpmTask'
+
+
+  export default {
+    components: {
+      IbpsMoreSearch,
+      IbpsAvatar,
+      IbpsListResultPage,
+      IbpsTypeTree,
+      IbpsBpmnDefinition,
+      IbpsToolbar,
+      ApprovePopup,
+      IbpsBpmnFormrenderDialog,
+      IbpsUploader
+    },
+    mixins: [random, bpmnStatus],
+    props: {
+      showPop:{
+        type: Boolean,
+        default: false
+      },
+      typeValue:{
+        type: String,
+        default: '3'
+      },
+      id:{
+        type: String,
+        default: ''
+      }
+    },
+    data() {
+      const useId = this.$store.getters.userId
+      return {
+        useId,
+        show: this.showPop,
+        // typeValue: '3',
+				sheetShow: false,
+				taskId: '',
+				form: {
+					xuanZeKeHu: '',
+					biaoDanBianHao: '',
+					buMenName: '',
+					keHuDanWeiMin: '',
+					keHuLianXiRen: '',
+					weiTuoDanHao: '',
+					lianXiDianHua: '',
+					yangPinMingCheng: '',
+					yangPinBianHao: '',
+					yangPinLeiXing: '',
+					baoGaoBianHao: '',
+					gouTongLeiXing: '',
+					gouTongNeiRong: '',
+					keHu: '',
+					gouTongQueDingNei: '',
+					leiXing: '2',
+					yongHuYouXiang: '',
+					xuanZeKeHu: '',
+					qiTa: ''
+				},
+				fuJianShangChuanArray: [],
+				popupShow: false,
+				list: [{
+					text: '投诉'
+				}, {
+					text: '检验项目'
+				}, {
+					text: '危机值报告'
+				}, {
+					text: '口头报告结果'
+				}, {
+					text: '延迟报告'
+				}, {
+					text: '其它'
+				}],
+				kehuXinXinList: [],
+
+				weiTuoList: [],
+				bianZhiRenName: '',
+				queDingRenName: '',
+				backShow: false,
+				option: '',
+				content: '',
+				timeShow: false,
+				params: {
+					year: true,
+					month: true,
+					day: true,
+					hour: true,
+					minute: true,
+					second: false
+				},
+				level: null,
+				mainPosition: {
+					id: ''
+				},
+        xuanzeTime: null,
+      }
+    },
+    watch:{
+      showPop:{
+        handler: function (val, oldVal) {
+          if(val === true){
+            this.form = {
+              xuanZeKeHu: '',
+              biaoDanBianHao: '',
+              buMenName: '',
+              keHuDanWeiMin: '',
+              keHuLianXiRen: '',
+              weiTuoDanHao: '',
+              lianXiDianHua: '',
+              yangPinMingCheng: '',
+              yangPinBianHao: '',
+              yangPinLeiXing: '',
+              baoGaoBianHao: '',
+              gouTongLeiXing: '',
+              gouTongNeiRong: '',
+              keHu: '',
+              gouTongQueDingNei: '',
+              leiXing: '2',
+              yongHuYouXiang: '',
+              xuanZeKeHu: '',
+              qiTa: ''
+            }
+            this.getKehu()
+            this.level = this.$store.getters.level
+            let mainPosition = this.$store.getters.mainPosition
+            this.mainPosition = mainPosition
+            if (this.id && this.id!='') {
+              // this.id = this.id
+              this.getDe(this.id)
+            } else {
+              this.getGtbh()
+            }
+            // if (this.typeValue) {
+            //   this.typeValue = this.typeValue
+            // }
+          }
+        },
+        immediate: true
+      }
+    },
+    created() {
+			
+		},
+    computed: {
+      rightText() {
+        return this.checkMode ? this.$t('common.button.cancel') : this.$t('common.button.manage')
+      },
+      selectedIds() {
+        return this.checkedIds.join(',')
+      }
+    },
+    methods: {
+      closePop() {
+        this.$emit('updataSet',false)
+      },
+      toCheckMode() {
+        if (this.$utils.isEmpty(this.listData)) {
+          return
+        }
+        if (this.checkMode) {
+          this.show = true
+          this.checkedIds = []
+        }
+        this.checkMode = !this.checkMode
+      },
+      actionSheetCallback(e) {
+				this.form.gouTongLeiXing = e.text
+        this.sheetShow = false
+			},
+      timeShowCallback(e) {
+        const nowDate = new Date((e).getTime() + 8 * 60 * 60 * 1000)
+		    const time = nowDate.toJSON().split('T').join(' ').substr(0, 16)
+        this.form.gouTongRiQi = time
+        this.timeShow = false
+      },
+      gouTongRiQiClick(e){
+        this.timeShow = true
+      },
+			// 获取上传状态
+			select(file) {
+				this.$uploades.selectUpload(file).then(res => {
+					res.forEach(item => {
+						this.fuJianShangChuanArray.push(item)
+					})
+				})
+			},
+			// 删除
+			deleteMe(id) {
+				this.fuJianShangChuanArray = this.fuJianShangChuanArray.filter(item => item.id !== id)
+			},
+			// 获取上传进度
+			progress(e) {},
+			// 上传成功
+			success(file) {},
+			// 上传失败
+			fail(e) {},
+			//弹出框显示
+			qianming(index) {
+				this.popupShow = true
+			},
+			//清除签名
+			deqianming(index) {
+				this.form.keHu = ''
+			},
+			//保存签名
+			save(val) {
+				this.form.keHu = val
+				this.popupShow = false
+			},
+			//清除签名
+			clear(val) {
+				this.form.keHu = ''
+			},
+			/**
+			 * 关闭签名弹窗
+			 */
+			close() {
+				this.popupShow = false
+			},
+
+			//获取样品编号
+			getGtbh(callback) {
+				let smsParams = {
+					alias: "gtbh"
+				};
+				let this_ = this
+				getNextIdByAlias(smsParams).then(res => {
+					if (res.state == 200) {
+						const data = res.data
+						this.form.biaoDanBianHao = data
+					}
+				});
+			},
+			getKehu() {
+				let info = this.$store.getters.userInfo
+				if (info) {
+					this.form.keHuDanWeiMin = info.user.qq
+					this.form.lianXiDianHua = info.user.mobile
+					// this.form.keHuDanWeiMingChe = info.user.id
+					this.form.keHuLianXiRen = info.user.fullname
+					this.form.gouTongLeiXing = '投诉'
+					this.form.gouTongRiQi = this.$methCommon.time(16)
+          this.xuanzeTime = new Date()
+					this.form.yongHuYouXiang = info.user.email
+				}
+			},
+			getDe(id) {
+				let sql =
+					`select * from t_khgtjlb where id_ = ${id}`
+
+				this.$common.request('sql', sql).then(res => {
+					if (res.state == 200) {
+						const data = res.variables.data[0]
+						this.form = {
+							id: data.id_,
+							xuanZeKeHu: data.xuan_ze_ke_hu_,
+							biaoDanBianHao: data.biao_dan_bian_hao,
+							buMenName: data.xuan_ze_ke_hu_,
+							keHuDanWeiMin: data.ke_hu_dan_wei_min,
+							keHuLianXiRen: data.ke_hu_lian_xi_ren,
+							weiTuoDanHao: data.wei_tuo_dan_hao_,
+							lianXiDianHua: data.lian_xi_dian_hua_,
+							yangPinMingCheng: data.yang_pin_ming_che,
+							yangPinBianHao: data.yang_pin_bian_hao,
+							yangPinLeiXing: data.yang_pin_lei_xing,
+							baoGaoBianHao: data.bao_gao_bian_hao_,
+							gouTongLeiXing: data.gou_tong_lei_xing,
+							gouTongNeiRong: data.gou_tong_nei_rong,
+							keHu: data.ke_hu_,
+							gouTongQueDingNei: data.gou_tong_que_ding,
+							leiXing: data.lei_xing_,
+							bianZhiShiJian: data.bian_zhi_shi_jian,
+							gouTongRiQi: data.gou_tong_ri_qi_,
+							yongHuYouXiang: data.yong_hu_you_xiang,
+							gouTongRenYuan: data.gou_tong_ren_yuan,
+							xuanZeKeHu: data.xuan_ze_ke_hu_,
+              fuJian: data.fu_jian_
+						}
+						if (this.typeValue == '2' || this.typeValue == '4') {
+							this.getTaskId(data.id_)
+						}
+					}
+				})
+			},
+			getFileList(ids) {
+				this.$uploades.getFilesList(ids, this).then(res => {
+					this.fuJianShangChuanArray = res
+				})
+			},
+			onSubmit() {
+				if (!this.getYanZheng()) {
+					return
+				}
+				let tmpArray = []
+				this.fuJianShangChuanArray.forEach((item) => {
+					tmpArray.push(item.id)
+				})
+
+				let info = this.$store.getters.userInfo
+				let useId = info.user.id
+				let detpId = info.employee.positions
+				let para = {
+					"parameters": [{
+							"key": "defId",
+							"value": "1056942070293331968"
+						},
+						{
+							"key": "version",
+							"value": "0"
+						},
+						{
+							"key": "data",
+							"value": ""
+						}
+					]
+				}
+				this.form.fuJian = tmpArray.join(",")
+				this.form.bianZhiRen = useId
+				this.form.bianZhiShiJian = this.$methCommon.time(16)
+				// this.form.bianZhiBuMen = this.mainPosition.id || detpId
+				this.form.bianZhiBuMen =  detpId
+        
+				this.form.shiFouGuoShen = "已编制"
+				this.form.diDian = this.level.second
+				this.form.xuanZeKeHu = useId
+				para.parameters[2].value = JSON.stringify(this.form)
+				let that = this
+        
+				findFormJsonByBo(para).then(res => {
+					if (res.data.state == 200) {
+						this.$toast.success('提交成功!')
+						setTimeout(() => {
+							this.getPageA()
+						}, 1000);
+					}
+				}).catch((err) => {
+
+				});
+			},
+			onAgree(shiFouGuoShen, opinion, type) {
+				if (this.typeValue !== '2' && !this.getYanZheng()) {
+					return
+				}
+				let info = this.$store.getters.userInfo
+				let useId = info.user.id
+				let detpId = info.employee.positions
+				let tmpArray = []
+				this.fuJianShangChuanArray.forEach((item) => {
+					tmpArray.push(item.id)
+				})
+				this.form.fuJian = tmpArray.join(",")
+				this.form.shiFouGuoShen = shiFouGuoShen
+				this.form.diDian = this.level.second
+				this.form.shiFouGuoShen = shiFouGuoShen
+				let editData = {
+					data: JSON.stringify(this.form),
+					opinion: opinion,
+					taskId: this.taskId
+				}
+				agree(editData).then(res => {
+					if (res.state == 200) {
+
+						if (this.typeValue == '2') {
+							setTimeout(() => {
+								this.getPath(this.id)
+							}, 1000)
+						} else {
+              this.$toast.success(type + '成功!')
+							this.getPageA()
+						}
+            this.$toast.success(type + '成功!')
+						setTimeout(() => {
+							this.getPageA()
+						}, 1000);
+
+					} else {
+            this.$toast.fail(type+'异常!')
+					}
+				});
+
+			},
+			//生成快照
+			getPath(id) {
+				let org = this.level.first
+
+				let url = this.$common.getRequest.downloadReport('咨询活动/客户沟通记录表.rpx', `id_=${id}&org_=${org}`)
+				let data = {
+					url,
+					name: '用户沟通记录表' + this.$methCommon.time(19),
+					type: 'pdf'
+				}
+				snapshot(data).then(res => {
+					let result = res.data
+					if (result.state == 200) {
+						this.updateData(id, result.data.id)
+					}
+
+				})
+			},
+			updateData(id, fileId) {
+				let pp = {
+					updList: [{
+						where: {
+							id_: id
+						},
+						param: {
+							kuai_zhao_: fileId,
+							shi_fou_guo_shen_: '已完成'
+						}
+					}],
+					tableName: "t_khgtjlb"
+				}
+				let data = this.$sig(pp)
+				this.$common.request('update', data).then(res => {
+					this.$methCommon.getPrompt('提交成功', 'success')
+					setTimeout(() => {
+						this.getPageA()
+					}, 1000);
+				})
+			},
+			getYanZheng() {
+				let suList = ['keHuLianXiRen', 'keHuDanWeiMin', 'lianXiDianHua', 'yongHuYouXiang', 'weiTuoDanHao', 'gouTongNeiRong']
+				let suListName = ['用户姓名', '用户单位', '联系电话', '用户邮箱', '沟通事项', '沟通内容']
+				for (let item in suList) {
+					if (!this.form[suList[item]]) {
+            this.$toast({
+              duration: 2000, // 持续展示 toast
+              message: '请输入' + suListName[item]
+            })
+						return false
+					}
+				}
+
+				let selList = ['gouTongRiQi', 'gouTongLeiXing']
+				let selListName = ['沟通时间', '沟通类型']
+				for (let item in selList) {
+					if (!this.form[selList[item]]) {
+            this.$toast({
+              duration: 2000, // 持续展示 toast
+              message: '请选择' + selListName[item]
+            })
+						return false
+					}
+				}
+
+				if (!this.form.keHu) {
+          this.$toast({
+            duration: 2000, // 持续展示 toast
+            message: '请填写签名'
+          })
+					return false
+				}
+
+				if (this.form.gouTongLeiXing == '其它' && !this.form.qiTa) {
+          this.$toast({
+            duration: 2000, // 持续展示 toast
+            message: '请填写其他类型'
+          })
+					return false
+				}
+
+				return true
+			},
+			//根据委托单id查询 taskId
+			getTaskId(id) {
+				let sql = ``
+				if (this.typeValue == '2') {
+					sql =
+						`select TASK_ID_,PROC_INST_ID_ from ibps_bpm_tasks where NAME_ = '确认' and NODE_ID_ = 'Activity_02lroj1' and PROC_DEF_KEY_ = 'Process_0pjp1fy' and EXEC_ID_ = (select PROC_INST_ID_ from act_ru_execution where ACT_ID_ = 'Activity_02lroj1' and BUSINESS_KEY_ = '${id}') ORDER BY CREATE_TIME_ desc`
+				} else if (this.typeValue == '4') {
+					sql =
+						`select TASK_ID_,PROC_INST_ID_ from ibps_bpm_tasks where NAME_ = '沟通' and NODE_ID_ = 'Activity_0qy1dd7' and PROC_DEF_KEY_ = 'Process_0pjp1fy' and EXEC_ID_ = (select PROC_INST_ID_ from act_ru_execution where ACT_ID_ = 'Activity_0qy1dd7' and BUSINESS_KEY_ = '${id}') ORDER BY CREATE_TIME_ desc`
+				}
+				this.$common.request('sql', sql).then(res => {
+					if (res.state == 200) {
+						let result = res.variables.data[0]
+						this.taskId = result.TASK_ID_
+
+						this.getProcInstId(result.PROC_INST_ID_)
+					}
+				})
+			},
+			//根据委托单id查询 taskId
+			getProcInstId(id) {
+				let sql =
+					`select OPTION_ from ibps_bpm_oper_log where PROC_INST_ID_ = '${id}'   order by create_time_ desc  limit 1`
+				this.$common.request('sql', sql).then(res => {
+					if (res.data.state == 200) {
+						let result = res.data.variables.data[0]
+						this.option = result.OPTION_
+					}
+				})
+			},
+			getShow() {
+				this.$refs['picker'].show();
+			},
+			getPageA() {
+				let pages = getCurrentPages()
+				let prevPage = pages[pages.length - 2]
+				prevPage.$vm.getValue()
+				// uni.navigateBack({
+				// 	dalta: 1
+				// })
+			},
+			uploadClick(item) {
+				if (/^(pdf|png|jpg|jpeg|gif)$/.test(item.ext)) {
+					// uni.navigateTo({
+					// 	url: `/pages/fileView/fileView?id=${item.id}&ext=${item.ext}`
+					// })
+				} else {
+					this.$uploades.download(item.id, item.name, this)
+				}
+			},
+			//退回原因
+			getBack() {
+				this.content = this.option
+				this.backShow = true
+			},
+			cancel() {
+				this.backShow = false
+			},
+      formatter(type, val) {
+        if (type === 'year') {
+          return val + '年';
+        }
+        if (type === 'month') {
+          return val + '月';
+        }
+        if (type === 'day') {
+          return val + '日';
+        }
+        return val;
+      }
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  ::v-deep .van-cell__title {
+    width: 65%;
+
+    .van-cell__label {
+      overflow-wrap: break-word;
+    }
+  }
+  .sectionBox {
+		display: flex;
+		align-items: center;
+		margin-bottom: 2px;
+		font-size: 14px;
+		color: rgba(128, 138, 135, .9);
+
+		.left {
+			width: 90px;
+
+		}
+	}
+  .sectionBox::before {
+    content: '';
+    width: 5px;
+    height: 14px;
+    border-radius: 2px;
+    margin-right: 5px;
+  }
+  .btn-back-color {
+		background-color: #30c2bd !important;
+    border: none;
+	}
+  .btn-sty {
+    padding: 0 13px;
+    border-radius: 5px;
+  }
+  .u-m-r-15 {
+    margin-right: 8px !important;
+  }
+  .verticalLine {
+    color: #000;
+    font-size: 13px;
+    margin-bottom: 20px;
+  }
+  .verticalLine::before {
+    content: '';
+    width: 5px;
+    height: 14px;
+    background-color: #2979ff;
+    border-radius: 2px;
+    margin-right: 5px;
+  }
+  .suspensionBtn {
+    width: 80px;
+    height: 80px;
+    position: fixed;
+    top: 75%;
+    right: 2%;
+    img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+  .backgroundSty {
+    height: 100%;
+    background-color: #fff;
+  }
+  .cu-form-group .title {
+		min-width: 180px;
+	}
+  .padding{
+    padding-bottom: 15px;
+    padding-top: 5px;
+    background-color: #f8f8f8;
+    display: flex;
+    justify-content: center;
+  }
+	.btn {
+		width: 90%;
+    padding: 15px;
+    border-radius: 5px;
+	}
+
+	.fileBox {
+		line-height: 50px;
+		color: #888888;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		border: 1px solid #DDDDDD;
+		border-radius: 8px;
+		padding: 5px;
+		margin-top: 10px;
+	}
+
+	.u-update-content {
+		font-size: 26px;
+		// color: $u-content-color;
+		line-height: 1.7;
+		padding: 30px;
+	}
+  .verticalLine {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 14px;
+    color: rgb(51, 51, 51);
+  }
+  .verticalLine::before {
+    content: '';
+    width: 5px;
+    height: 14px;
+    background-color: #2979ff;
+    border-radius: 2px;
+    margin-right: 5px;
+  }
+  .scrollView {
+    overflow-y: scroll;
+    height: 95%;
+  }
+  .scrollView::-webkit-scrollbar{
+    display: none;
+  }
+  ::v-deep .yonghu .van-cell--borderless {
+    padding-left: 8px;
+  }
+  ::v-deep .yonghu .van-cell .van-field__label {
+    display: flex;
+    align-items: center;
+    justify-content: left;
+    font-size: 14px;
+    color: rgb(51, 51, 51);
+  }
+  ::v-deep .yonghu .van-cell .van-field__label::before {
+    content: '';
+    width: 5px;
+    height: 14px;
+    background-color: #2979ff;
+    border-radius: 2px;
+    margin-right: 5px;
+  }
+</style>

+ 412 - 0
src/views/platform/bpmn/communication/communicationList.vue

@@ -0,0 +1,412 @@
+<template>
+  <div :class="{'ibps-fixed-toolbar':checkMode}">
+    <van-sticky>
+      <van-nav-bar :title="generateTitle($route.name,$route.params.title||$route.meta.title)"
+        :left-text="$t('common.button.back')" left-arrow
+        @click-left="$router.push({ name: 'dashboard' })" />
+      <van-search v-model="twoParam" show-action placeholder="请输入表单编号/用户姓名" @search="onSearch">
+        <template #action>
+          <van-icon name="filter-o" :class="{'ibps-active':stateActive}" @click="clickMoreSearch" />
+        </template>
+      </van-search>
+    </van-sticky>
+    <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
+      <van-list v-model="loading" :finished="finished" @load="loadData">
+        <van-checkbox-group v-model="checkedIds">
+          <van-cell v-for="(item,index) in listData" :key="item.id+index" >
+            <div class="sectionBox verticalLine">
+							<div class="left ">表单编号:</div>
+							<div>{{item.biao_dan_bian_hao}} </div>
+						</div>
+            <div class="sectionBox">
+							<div class="left">用户姓名:</div>
+							<div>{{item.ke_hu_lian_xi_ren}} </div>
+						</div>
+						<div class="sectionBox">
+							<div class="left">用户单位:</div>
+							<div>{{item.ke_hu_dan_wei_min}} </div>
+						</div>
+						<div class="sectionBox">
+							<div class="left">沟通类型:</div>
+							<div>{{item.gou_tong_lei_xing}} </div>
+						</div>
+						<div class="sectionBox">
+							<div class="left">状态:</div>
+							<div style="color: #7349ff;" v-if="item.shi_fou_guo_shen_ == '1'">已完成</div>
+							<div style="color: red;" v-else-if="item.shi_fou_guo_shen_ == '已退回'">已退回</div>
+							<div v-else>
+								{{item.shi_fou_guo_shen_}}
+							</div>
+						</div>
+						<div style=" width: 100%; text-align: right; padding-top: 5rpx;padding-bottom: 0rpx;">
+							<van-button type="warning" size="small" @click="getGo(item.id_,'2')" class="u-m-r-15 btn-sty" v-if="item.lei_xing_ == '1' && item.shi_fou_guo_shen_ == '已编制'">确定</van-button>
+							<van-button type="success" size="small" class="u-m-r-15 btn-sty" @click="getGo(item.id_,'4')" v-if="item.shi_fou_guo_shen_ == '已退回'">修改
+							</van-button>
+							<van-button type="warning" size="small" class="btn-back-color btn-sty" @click="getGo(item.id_,'1')">查阅
+							</van-button>
+						</div>
+          </van-cell>
+        </van-checkbox-group>
+      </van-list>
+      <ibps-list-result-page :result-type="resultType" :error-type="errorType" :result-message="resultMessage" />
+    </van-pull-refresh>
+    <div class="suspensionBtn">
+      <img src="@/assets/images/add.png" alt="" srcset="" @click="LiftUpPop()">
+    </div>
+    <approve-popup :visible="batchOpinionPopup" :task-id="selectedIds" :action="actionName"
+      @close="(visible)=>{batchOpinionPopup =visible}" @callback="onRefreshPage" />
+    <!--高级查询-->
+    <ibps-more-search :show="moreSearchPopup" :search-forms="searchForms" @callback="onMoreSearch"
+      @close="callback => moreSearchPopup = callback" @reset-form="resetForm">
+      <template v-slot:definition>
+        <ibps-bpmn-definition v-model="defKey" value-key="defKey" input-align="left" class="van-hairline--bottom" />
+      </template>
+    </ibps-more-search>
+    <communication :showPop = "showPop" @updataSet="updataSet" :typeValue = "typeValue" :id = "id"></communication>
+  </div>
+</template>
+<script>
+  import i18n from '@/utils/i18n'
+  import random from '@/mixins/random'
+  import bpmnStatus from '@/mixins/bpmnStatus'
+  import ActionUtils from '@/utils/action'
+
+  import ApprovePopup from '@/business/platform/bpmn/form-ext/approve'
+
+  import IbpsMoreSearch from '@/components/ibps-more-search'
+  import IbpsAvatar from '@/components/ibps-avatar'
+  import IbpsToolbar from '@/components/ibps-toolbar'
+  import IbpsListResultPage from '@/components/ibps-list-result-page'
+  import IbpsTypeTree from '@/business/platform/cat/type/tree'
+  import IbpsBpmnDefinition from '@/business/platform/bpmn/definition/field'
+
+  import IbpsBpmnFormrenderDialog from '@/business/platform/bpmn/form/dialog'
+  import communication from './communication.vue'
+
+  export default {
+    components: {
+      IbpsMoreSearch,
+      IbpsAvatar,
+      IbpsListResultPage,
+      IbpsTypeTree,
+      IbpsBpmnDefinition,
+      IbpsToolbar,
+      ApprovePopup,
+      IbpsBpmnFormrenderDialog,
+      communication
+    },
+    mixins: [random, bpmnStatus],
+    data() {
+      const useId = this.$store.getters.userId
+      return {
+        useId,
+        moreSearchPopup: false,
+        stateActive: false,
+        searchForms: {
+          forms: [
+            { prop: 'biao_dan_bian_hao', label: '表单编号', fieldType: 'text'  },
+            { prop: 'ke_hu_lian_xi_ren', label: '用户姓名',  fieldType: 'text' },
+            { prop: 'gou_tong_lei_xing', label: '沟通类型', fieldType: 'checker', cols: 3, options: [
+                {
+                  value: '全部',
+                  label: '全部'
+                }, {
+                  value: '投诉',
+                  label: '投诉'
+                }, {
+                  value: '检验项目',
+                  label: '检验项目'
+                }, {
+                  value: '危机值报告',
+                  label: '危机值报告'
+                }, {
+                  value: '口头报告结果',
+                  label: '口头报告结果'
+                }, {
+                  value: '延迟报告',
+                  label: '延迟报告'
+                }, {
+                  value: '其它',
+                  label: '其它'
+                }
+              ]
+            }
+          ]
+        },
+        subject: '',
+        typeId: '',
+        defKey: '',
+        twoParam: '',
+        moreParams: {},
+
+        listData: [],
+        pagination: {},
+        sorts: {},
+
+        loading: false,
+        finished: false,
+        refreshing: false,
+        resultType: 'init',
+        errorType: null,
+        resultMessage: null,
+
+        checkMode: false,
+        checkedIds: [],
+        show: false,
+        batchOpinionPopup: false,
+        actionName: 'agree',
+
+        typeTreePopup: false,
+        scrollWhere: 0,
+        taskId: '',
+        formrenderVisible: false,
+        formrenderTitle: '',
+        page: 0,
+        showPop: false,
+        typeValue: '0',
+        id: ''
+      }
+    },
+    computed: {
+      rightText() {
+        return this.checkMode ? this.$t('common.button.cancel') : this.$t('common.button.manage')
+      },
+      selectedIds() {
+        return this.checkedIds.join(',')
+      }
+    },
+    methods: {
+      updataSet(v){
+        this.showPop=v
+        this.startScroll()
+      },
+      generateTitle(name, title) { // generateTitle by vue-i18n
+        return i18n.generateTitle(name, title)
+      },
+      /**
+       * 加载数据
+       */
+      loadData(j) {
+        this.loading = true
+        const params = this.getSearcFormData()
+        if( j === 'search'){
+          this.page = 0
+        }
+        let itemSql = ``
+        let gtlx = params.parameters.find( i => i.key === 'gou_tong_lei_xing' ) || ''
+				if ( gtlx && gtlx.value != '全部') {
+					itemSql = itemSql + `and gou_tong_lei_xing = '${gtlx.value}'`
+				}
+        let bdbh = params.parameters.find( i => i.key === 'biao_dan_bian_hao' ) || ''
+				if ( bdbh && bdbh.value != '全部') {
+					itemSql = itemSql + `and biao_dan_bian_hao like '%${bdbh.value}%'`
+				}
+        let khlxr = params.parameters.find( i => i.key === 'ke_hu_lian_xi_ren' ) || ''
+				if ( khlxr && khlxr.value != '全部') {
+					itemSql = itemSql + `and ke_hu_lian_xi_ren like '%${khlxr.value}%'`
+				}
+        let two = params.parameters.find( i => i.key === 'two' ) || ''
+				if ( two ) {
+					itemSql = itemSql + `and (ke_hu_lian_xi_ren like '%${two.value}%' or biao_dan_bian_hao like '%${two.value}%')`
+				}
+        let sql =
+					`select * from t_khgtjlb where (create_by_ = '${this.useId}' or xuan_ze_ke_hu_ = '${this.useId}') ${itemSql}  ORDER BY create_time_ desc LIMIT ${this.page*params.requestPage.limit},${params.requestPage.limit}`
+        this.$common.request('sql', sql).then(response => {
+          // 处理数据
+          ActionUtils.handleListDataCommon(this, response.variables)
+        }).catch((e) => {
+          ActionUtils.handleErrorData(this, e)
+        })
+      },
+      /**
+       * 获取格式化参数
+       */
+      getSearcFormData() {
+        let params = {}
+        if (this.$utils.isNotEmpty(this.twoParam)) {
+          params['two'] = this.twoParam
+        }
+        // if (this.$utils.isNotEmpty(this.typeId)) {
+        //   params['Q^temp.TYPE_ID_^S'] = this.typeId
+        // }
+        // if (this.$utils.isNotEmpty(this.defKey)) {
+        //   params['Q^temp.proc_def_key_^S'] = this.defKey
+        // }
+        if (this.$utils.isNotEmpty(this.moreParams)) {
+          params = Object.assign(params, this.moreParams)
+        }
+        return ActionUtils.formatParams(
+          params,
+          this.pagination,
+          this.sorts)
+      },
+      LiftUpPop() {
+        this.scrollWhere = window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;
+        this.stopScroll()
+        this.getGo('', '3')
+      },
+      /**
+       * 下拉刷新
+       */
+      onRefresh() {
+        this.refreshing = true
+        this.finished = false
+        this.loading = true
+        this.onSearch()
+      },
+      /**
+       * 查询
+       */
+      onSearch() {
+        this.stateActive = false
+        ActionUtils.initListData(this)
+        this.loadData('search')
+      },
+      /**
+       * 高级查询
+       */
+      onMoreSearch(params) {
+        this.moreParams = params
+        this.onSearch()
+        if (this.$utils.isNotEmpty(params)) {
+          this.stateActive = true
+        }
+      },
+      /**
+       * 弹窗更多查询条件
+       */
+      clickMoreSearch() {
+        this.moreSearchPopup = true
+        this.stateActive = false
+      },
+      /**
+       * 重置表单
+       */
+      resetForm() {
+        this.typeId = ''
+        this.defKey = ''
+      },
+
+      onRefreshPage() {
+        this.checkedIds = []
+        this.checkMode = false
+        this.onRefresh()
+      },
+
+      onClick(item, index) {
+        if (this.checkMode) {
+          this.$refs.checkboxes[index].toggle()
+        } else {
+          this.taskId = item.id
+          this.formrenderTitle = item.procDefName
+          this.formrenderVisible = true
+        }
+      },
+      clickType() {
+        this.typeTreePopup = true
+      },
+      clickTypeNode(data) {
+        this.typeId = data.id
+        this.onMoreSearch({})
+      },
+      toCheckMode() {
+        if (this.$utils.isEmpty(this.listData)) {
+          return
+        }
+        if (this.checkMode) {
+          this.show = true
+          this.checkedIds = []
+        }
+        this.checkMode = !this.checkMode
+      },
+      stopScroll(){
+        let mid = this.scrollWhere
+        // document.documentElement.style.overflow='hidden';
+        document.body.style.overflow='hidden';
+        // document.documentElement.style.position='fixed';
+        document.body.style.position='fixed';
+        // document.documentElement.style.top=-mid+'px';
+        document.body.style.top=-mid+'px';
+      },
+      //启用页面滚动
+      startScroll(){
+        // document.documentElement.style.overflow='';
+        document.body.style.overflow='auto';
+        document.body.style.position='static';
+        window.scrollTo(0,this.scrollWhere)
+        this.scrollWhere=0
+      },
+      getGo(id, typeValue) {
+        this.id = id
+        this.typeValue = typeValue
+        this.showPop = true
+				// uni.navigateTo({
+				// 	url: `./communication?id=${id}&typeValue=${typeValue}`
+				// })
+			},
+    }
+  }
+</script>
+<style lang="scss" scoped>
+  ::v-deep .van-cell__title {
+    width: 65%;
+
+    .van-cell__label {
+      overflow-wrap: break-word;
+    }
+  }
+  .sectionBox {
+		display: flex;
+		align-items: center;
+		margin-bottom: 2px;
+		font-size: 14px;
+		color: rgba(128, 138, 135, .9);
+
+		.left {
+			width: 90px;
+
+		}
+	}
+  .sectionBox::before {
+    content: '';
+    width: 5px;
+    height: 14px;
+    border-radius: 2px;
+    margin-right: 5px;
+  }
+  .btn-back-color {
+		background-color: #30c2bd !important;
+    border: none;
+	}
+  .btn-sty {
+    padding: 0 13px;
+    border-radius: 5px;
+  }
+  .u-m-r-15 {
+    margin-right: 8px !important;
+  }
+  .verticalLine {
+    color: #000;
+    font-size: 13px;
+    margin-bottom: 20px;
+  }
+  .verticalLine::before {
+    content: '';
+    width: 5px;
+    height: 14px;
+    background-color: #2979ff;
+    border-radius: 2px;
+    margin-right: 5px;
+  }
+  .suspensionBtn {
+    width: 80px;
+    height: 80px;
+    position: fixed;
+    top: 75%;
+    right: 2%;
+    img {
+      width: 100%;
+      height: 100%;
+    }
+  }
+</style>