作者 朱兆平

Merge remote-tracking branch 'origin/master'

@@ -3026,8 +3026,7 @@ @@ -3026,8 +3026,7 @@
3026 "deep-equal": { 3026 "deep-equal": {
3027 "version": "1.0.1", 3027 "version": "1.0.1",
3028 "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 3028 "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
3029 - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",  
3030 - "dev": true 3029 + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
3031 }, 3030 },
3032 "deep-is": { 3031 "deep-is": {
3033 "version": "0.1.3", 3032 "version": "0.1.3",
@@ -3835,6 +3834,11 @@ @@ -3835,6 +3834,11 @@
3835 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 3834 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
3836 "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" 3835 "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk="
3837 }, 3836 },
  3837 + "fast-diff": {
  3838 + "version": "1.1.2",
  3839 + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz",
  3840 + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig=="
  3841 + },
3838 "fast-json-stable-stringify": { 3842 "fast-json-stable-stringify": {
3839 "version": "2.0.0", 3843 "version": "2.0.0",
3840 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 3844 "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
@@ -9553,8 +9557,7 @@ @@ -9553,8 +9557,7 @@
9553 "object-assign": { 9557 "object-assign": {
9554 "version": "4.1.1", 9558 "version": "4.1.1",
9555 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 9559 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
9556 - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",  
9557 - "dev": true 9560 + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
9558 }, 9561 },
9559 "object-copy": { 9562 "object-copy": {
9560 "version": "0.1.0", 9563 "version": "0.1.0",
@@ -9838,6 +9841,11 @@ @@ -9838,6 +9841,11 @@
9838 "no-case": "^2.2.0" 9841 "no-case": "^2.2.0"
9839 } 9842 }
9840 }, 9843 },
  9844 + "parchment": {
  9845 + "version": "1.1.4",
  9846 + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz",
  9847 + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg=="
  9848 + },
9841 "parent-module": { 9849 "parent-module": {
9842 "version": "1.0.1", 9850 "version": "1.0.1",
9843 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 9851 "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
@@ -10666,6 +10674,41 @@ @@ -10666,6 +10674,41 @@
10666 "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", 10674 "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=",
10667 "dev": true 10675 "dev": true
10668 }, 10676 },
  10677 + "quill": {
  10678 + "version": "1.3.7",
  10679 + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz",
  10680 + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==",
  10681 + "requires": {
  10682 + "clone": "^2.1.1",
  10683 + "deep-equal": "^1.0.1",
  10684 + "eventemitter3": "^2.0.3",
  10685 + "extend": "^3.0.2",
  10686 + "parchment": "^1.1.4",
  10687 + "quill-delta": "^3.6.2"
  10688 + },
  10689 + "dependencies": {
  10690 + "clone": {
  10691 + "version": "2.1.2",
  10692 + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
  10693 + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
  10694 + },
  10695 + "eventemitter3": {
  10696 + "version": "2.0.3",
  10697 + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz",
  10698 + "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo="
  10699 + }
  10700 + }
  10701 + },
  10702 + "quill-delta": {
  10703 + "version": "3.6.3",
  10704 + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz",
  10705 + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==",
  10706 + "requires": {
  10707 + "deep-equal": "^1.0.1",
  10708 + "extend": "^3.0.2",
  10709 + "fast-diff": "1.1.2"
  10710 + }
  10711 + },
10669 "randombytes": { 10712 "randombytes": {
10670 "version": "2.1.0", 10713 "version": "2.1.0",
10671 "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 10714 "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -12821,6 +12864,15 @@ @@ -12821,6 +12864,15 @@
12821 } 12864 }
12822 } 12865 }
12823 }, 12866 },
  12867 + "vue-quill-editor": {
  12868 + "version": "3.0.6",
  12869 + "resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",
  12870 + "integrity": "sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==",
  12871 + "requires": {
  12872 + "object-assign": "^4.1.1",
  12873 + "quill": "^1.3.4"
  12874 + }
  12875 + },
12824 "vue-router": { 12876 "vue-router": {
12825 "version": "2.8.1", 12877 "version": "2.8.1",
12826 "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.8.1.tgz", 12878 "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.8.1.tgz",
@@ -28,6 +28,7 @@ @@ -28,6 +28,7 @@
28 "vue": "^2.2.2", 28 "vue": "^2.2.2",
29 "vue-count-to": "^1.0.13", 29 "vue-count-to": "^1.0.13",
30 "vue-i18n": "^8.14.0", 30 "vue-i18n": "^8.14.0",
  31 + "vue-quill-editor": "^3.0.6",
31 "vue-router": "^2.3.0", 32 "vue-router": "^2.3.0",
32 "vuex": "^2.0.0-rc.6", 33 "vuex": "^2.0.0-rc.6",
33 "xlsx": "^0.15.6" 34 "xlsx": "^0.15.6"
1 1
2 var websock = null; 2 var websock = null;
3 var global_callback = null; 3 var global_callback = null;
4 -var serverPort = '10003'; //webSocket连接端口 4 +var serverPort = '10002'; //webSocket连接端口
5 5
6 6
7 function getWebIP(){ 7 function getWebIP(){
@@ -11,7 +11,7 @@ function getWebIP(){ @@ -11,7 +11,7 @@ function getWebIP(){
11 11
12 function initWebSocket(){ //初始化weosocket 12 function initWebSocket(){ //初始化weosocket
13 //ws地址 13 //ws地址
14 - var wsuri = "ws://" +getWebIP()+ ":" + serverPort+"/log"; 14 + var wsuri = "ws://" +getWebIP()+ ":" + serverPort+"/websocket";
15 websock = new WebSocket(wsuri); 15 websock = new WebSocket(wsuri);
16 websock.onmessage = function(e){ 16 websock.onmessage = function(e){
17 websocketonmessage(e); 17 websocketonmessage(e);
@@ -50,6 +50,8 @@ function sendSock(agentData,callback){ @@ -50,6 +50,8 @@ function sendSock(agentData,callback){
50 50
51 //数据接收 51 //数据接收
52 function websocketonmessage(e){ 52 function websocketonmessage(e){
  53 +
  54 + console.log("------>"+e.data);
53 global_callback(JSON.parse(e.data)); 55 global_callback(JSON.parse(e.data));
54 } 56 }
55 57
@@ -67,7 +69,7 @@ function websocketOpen(e){ @@ -67,7 +69,7 @@ function websocketOpen(e){
67 console.log("连接成功"); 69 console.log("连接成功");
68 } 70 }
69 71
70 -// initWebSocket(); 72 +initWebSocket();
71 73
72 export{sendSock} 74 export{sendSock}
73 75
  1 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimSun]::before,
  2 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimSun]::before {
  3 + content: "宋体";
  4 + font-family: "SimSun";
  5 +}
  6 +
  7 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=SimHei]::before,
  8 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=SimHei]::before {
  9 + content: "黑体";
  10 + font-family: "SimHei";
  11 +}
  12 +
  13 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Microsoft-YaHei]::before,
  14 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Microsoft-YaHei]::before {
  15 + content: "微软雅黑";
  16 + font-family: "Microsoft YaHei";
  17 +}
  18 +
  19 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=KaiTi]::before,
  20 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=KaiTi]::before {
  21 + content: "楷体";
  22 + font-family: "KaiTi";
  23 +}
  24 +
  25 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=FangSong]::before,
  26 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=FangSong]::before {
  27 + content: "仿宋";
  28 + font-family: "FangSong";
  29 +}
  30 +
  31 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Arial]::before,
  32 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Arial]::before {
  33 + content: "Arial";
  34 + font-family: "Arial";
  35 +}
  36 +
  37 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=Times-New-Roman]::before,
  38 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=Times-New-Roman]::before {
  39 + content: "Times New Roman";
  40 + font-family: "Times New Roman";
  41 +}
  42 +
  43 +.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=sans-serif]::before,
  44 +.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=sans-serif]::before {
  45 + content: "sans-serif";
  46 + font-family: "sans-serif";
  47 +}
  48 +
  49 +.ql-font-SimSun {
  50 + font-family: "SimSun";
  51 +}
  52 +
  53 +.ql-font-SimHei {
  54 + font-family: "SimHei";
  55 +}
  56 +
  57 +.ql-font-Microsoft-YaHei {
  58 + font-family: "Microsoft YaHei";
  59 +}
  60 +
  61 +.ql-font-KaiTi {
  62 + font-family: "KaiTi";
  63 +}
  64 +
  65 +.ql-font-FangSong {
  66 + font-family: "FangSong";
  67 +}
  68 +
  69 +.ql-font-Arial {
  70 + font-family: "Arial";
  71 +}
  72 +
  73 +.ql-font-Times-New-Roman {
  74 + font-family: "Times New Roman";
  75 +}
  76 +
  77 +.ql-font-sans-serif {
  78 + font-family: "sans-serif";
  79 +}
  1 +<!-- 组件代码如下 -->
  2 +<template>
  3 + <div>
  4 + <script id="editor" type="text/plain"></script>
  5 + </div>
  6 +</template>
  7 +<script>
  8 + export default {
  9 + name: 'UE',
  10 + data() {
  11 + return {
  12 + editor: null
  13 + }
  14 + },
  15 + props: {
  16 + defaultMsg: {
  17 + type: String
  18 + },
  19 + config: {
  20 + type: Object
  21 + }
  22 + },
  23 + mounted() {
  24 + const _this = this;
  25 + this.editor = UE.getEditor('editor', this.config); // 初始化UE
  26 + this.editor.addListener("ready", function () {
  27 + _this.editor.setContent(_this.defaultMsg) // 确保UE加载完成后,放入内容。
  28 + });
  29 + },
  30 + methods: {
  31 + getUEContent() { // 获取内容方法
  32 + return this.editor.getContent()
  33 + }
  34 + },
  35 + destroyed() {
  36 + this.editor.destroy()
  37 + }
  38 + }
  39 +
  40 +</script>
@@ -67,7 +67,7 @@ @@ -67,7 +67,7 @@
67 <!--工具条--> 67 <!--工具条-->
68 <el-col :span="24" class="toolbar"> 68 <el-col :span="24" class="toolbar">
69 <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button> 69 <el-button type="danger" @click="batchRemove" :disabled="this.sels.length===0">批量删除</el-button>
70 - <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="5" :total="total" style="float:right;"> 70 + <el-pagination layout="prev, pager, next" @current-change="handleCurrentChange" :page-size="pageSize" :total="total" style="float:right;">
71 </el-pagination> 71 </el-pagination>
72 </el-col> 72 </el-col>
73 73
@@ -101,7 +101,7 @@ @@ -101,7 +101,7 @@
101 </el-dialog> 101 </el-dialog>
102 102
103 <!--新增界面--> 103 <!--新增界面-->
104 - <el-dialog title="新增" :visible.sync="addFormVisible" width="60%"> 104 + <el-dialog title="新增" :visible.sync="addFormVisible" width="70%">
105 <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm"> 105 <el-form :model="addForm" label-width="80px" :rules="addFormRules" ref="addForm">
106 <el-form-item label="工单名称" prop="processname"> 106 <el-form-item label="工单名称" prop="processname">
107 <el-input v-model="addForm.processname" auto-complete="off" placeholder="请输入工单标题:"></el-input> 107 <el-input v-model="addForm.processname" auto-complete="off" placeholder="请输入工单标题:"></el-input>
@@ -119,7 +119,14 @@ @@ -119,7 +119,14 @@
119 @change="cascaderhandleChange"></el-cascader-panel> 119 @change="cascaderhandleChange"></el-cascader-panel>
120 </el-form-item> 120 </el-form-item>
121 <el-form-item label="工单内容" prop="reason"> 121 <el-form-item label="工单内容" prop="reason">
122 - <el-input type="textarea" v-model="addForm.reason"></el-input> 122 + <div>
  123 + <el-card style="height: 310px;">
  124 + <quill-editor v-model="addForm.reason" ref="myQuillEditor" style="height: 310px;" :options="editorOption">
  125 +
  126 + </quill-editor>
  127 + </el-card>
  128 + </div>
  129 + <!--<el-input type="textarea" v-model="addForm.reason"></el-input>-->
123 </el-form-item> 130 </el-form-item>
124 <el-form-item label="指定部门"> 131 <el-form-item label="指定部门">
125 <el-tree 132 <el-tree
@@ -138,19 +145,28 @@ @@ -138,19 +145,28 @@
138 <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button> 145 <el-button type="primary" @click.native="addSubmit" :loading="addLoading">提交</el-button>
139 </div> 146 </div>
140 </el-dialog> 147 </el-dialog>
  148 +
141 </section> 149 </section>
142 </template> 150 </template>
143 151
144 <script> 152 <script>
  153 + import {
  154 + quillEditor
  155 + } from 'vue-quill-editor'
  156 + import 'quill/dist/quill.core.css'
  157 + import 'quill/dist/quill.snow.css'
  158 + import 'quill/dist/quill.bubble.css'
145 import util from '../../common/js/util' 159 import util from '../../common/js/util'
146 import NProgress from 'nprogress' 160 import NProgress from 'nprogress'
147 import { getList,add,vacationTypeOptions} from '@/api/process_api'; 161 import { getList,add,vacationTypeOptions} from '@/api/process_api';
  162 + import SOC from '@/api/socket';
148 import moment from 'moment' 163 import moment from 'moment'
149 import {parseTime, pickerOptions} from '@/utils' 164 import {parseTime, pickerOptions} from '@/utils'
150 import loginUserInfo from '@/api/base' 165 import loginUserInfo from '@/api/base'
151 import ElFormItem from "../../../node_modules/element-ui/packages/form/src/form-item.vue"; 166 import ElFormItem from "../../../node_modules/element-ui/packages/form/src/form-item.vue";
152 export default { 167 export default {
153 - components: {ElFormItem}, 168 + name: 'FuncFormsEdit',
  169 + components: {ElFormItem,quillEditor},
154 data() { 170 data() {
155 return { 171 return {
156 filters: { 172 filters: {
@@ -239,7 +255,11 @@ @@ -239,7 +255,11 @@
239 label: 'label' 255 label: 'label'
240 }, 256 },
241 pickerOptions: pickerOptions, 257 pickerOptions: pickerOptions,
242 - vacationTypeOptions: vacationTypeOptions 258 + vacationTypeOptions: vacationTypeOptions,
  259 + drawer: true,
  260 + direction:'rtl',
  261 + content: null,
  262 + editorOption: {}
243 } 263 }
244 }, 264 },
245 methods: { 265 methods: {
@@ -267,7 +287,15 @@ @@ -267,7 +287,15 @@
267 }, 287 },
268 handleCurrentChange(val) { 288 handleCurrentChange(val) {
269 this.pageNum = val; 289 this.pageNum = val;
  290 + this.getProcessList();
270 }, 291 },
  292 + /*handleClose(done) {
  293 + this.$confirm('确认关闭?')
  294 + .then(_ => {
  295 + done();
  296 + })
  297 + .catch(_ => {});
  298 + },*/
271 //获取工单列表 299 //获取工单列表
272 getProcessList() { 300 getProcessList() {
273 let para = { 301 let para = {