vue2-client 1.4.21 → 1.4.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Change Log
2
2
  > 所有关于本项目的变化都在该文档里。
3
3
 
4
+ **1.4.22 -2022-09-28 @苗艳强**
5
+ - 查询表单新增多选框
6
+ - 售后工单页面增加客户信息传参
7
+
4
8
  **1.4.20 -2022-09-28 @江超**
5
9
  - 功能修改:
6
10
  - `AppData`修复没有设置徽标时,字典类型数据显示异常的问题
package/package.json CHANGED
@@ -1,78 +1,78 @@
1
- {
2
- "name": "vue2-client",
3
- "version": "1.4.21",
4
- "private": false,
5
- "scripts": {
6
- "serve": "vue-cli-service serve",
7
- "build": "vue-cli-service build",
8
- "test:unit": "vue-cli-service test:unit",
9
- "lint": "vue-cli-service lint",
10
- "build:preview": "vue-cli-service build --mode preview",
11
- "lint:nofix": "vue-cli-service lint --no-fix"
12
- },
13
- "dependencies": {
14
- "@amap/amap-jsapi-loader": "^1.0.1",
15
- "@antv/g2plot": "^2.4.20",
16
- "lodash.get": "^4.4.2",
17
- "js-base64": "^3.7.2",
18
- "jsencrypt": "^3.2.1",
19
- "vue-json-viewer": "^2.2.22",
20
- "xlsx": "0.18.5",
21
- "file-saver": "^2.0.5",
22
- "@vue/babel-preset-jsx": "^1.4.0",
23
- "@antv/data-set": "^0.11.8",
24
- "animate.css": "^4.1.1",
25
- "ant-design-vue": "^1.7.8",
26
- "axios": "^0.27.2",
27
- "clipboard": "^2.0.11",
28
- "core-js": "^3.23.5",
29
- "date-fns": "^2.28.0",
30
- "default-passive-events": "^2.0.0",
31
- "enquire.js": "^2.1.6",
32
- "highlight.js": "^10.7.3",
33
- "js-cookie": "^2.2.1",
34
- "mockjs": "^1.1.0",
35
- "nprogress": "^0.2.0",
36
- "viser-vue": "^2.4.8",
37
- "vue": "2.6.14",
38
- "vue-i18n": "^8.27.2",
39
- "vue-router": "^3.5.4",
40
- "vuedraggable": "^2.24.3",
41
- "vuex": "^3.6.2"
42
- },
43
- "devDependencies": {
44
- "script-loader": "^0.7.2",
45
- "@ant-design/colors": "^6.0.0",
46
- "@babel/core": "^7.18.10",
47
- "@vue/cli-plugin-babel": "^4.5.19",
48
- "@vue/cli-plugin-eslint": "^4.5.19",
49
- "@vue/cli-service": "^4.5.19",
50
- "@vue/eslint-config-standard": "^4.0.0",
51
- "@vuepress/plugin-back-to-top": "^1.9.7",
52
- "babel-eslint": "^10.1.0",
53
- "babel-plugin-transform-remove-console": "^6.9.4",
54
- "babel-polyfill": "^6.26.0",
55
- "compression-webpack-plugin": "^4.0.1",
56
- "deepmerge": "^4.2.2",
57
- "eslint": "^6.8.0",
58
- "eslint-plugin-import": "^2.26.0",
59
- "eslint-plugin-node": "^11.1.0",
60
- "eslint-plugin-vue": "^6.2.2",
61
- "eslint-plugin-promise": "^4.3.1",
62
- "eslint-plugin-standard": "^4.1.0",
63
- "fast-deep-equal": "^3.1.3",
64
- "less-loader": "^6.2.0",
65
- "style-resources-loader": "^1.5.0",
66
- "vue-cli-plugin-style-resources-loader": "^0.1.5",
67
- "vue-template-compiler": "2.6.14",
68
- "vuepress": "^1.9.7",
69
- "webpack": "^4.46.0",
70
- "webpack-theme-color-replacer": "1.4.1",
71
- "whatwg-fetch": "^3.6.2"
72
- },
73
- "browserslist": [
74
- "> 1%",
75
- "last 2 versions",
76
- "not ie <= 10"
77
- ]
78
- }
1
+ {
2
+ "name": "vue2-client",
3
+ "version": "1.4.22",
4
+ "private": false,
5
+ "scripts": {
6
+ "serve": "vue-cli-service serve",
7
+ "build": "vue-cli-service build",
8
+ "test:unit": "vue-cli-service test:unit",
9
+ "lint": "vue-cli-service lint",
10
+ "build:preview": "vue-cli-service build --mode preview",
11
+ "lint:nofix": "vue-cli-service lint --no-fix"
12
+ },
13
+ "dependencies": {
14
+ "@amap/amap-jsapi-loader": "^1.0.1",
15
+ "@antv/g2plot": "^2.4.20",
16
+ "lodash.get": "^4.4.2",
17
+ "js-base64": "^3.7.2",
18
+ "jsencrypt": "^3.2.1",
19
+ "vue-json-viewer": "^2.2.22",
20
+ "xlsx": "0.18.5",
21
+ "file-saver": "^2.0.5",
22
+ "@vue/babel-preset-jsx": "^1.4.0",
23
+ "@antv/data-set": "^0.11.8",
24
+ "animate.css": "^4.1.1",
25
+ "ant-design-vue": "^1.7.8",
26
+ "axios": "^0.27.2",
27
+ "clipboard": "^2.0.11",
28
+ "core-js": "^3.23.5",
29
+ "date-fns": "^2.28.0",
30
+ "default-passive-events": "^2.0.0",
31
+ "enquire.js": "^2.1.6",
32
+ "highlight.js": "^10.7.3",
33
+ "js-cookie": "^2.2.1",
34
+ "mockjs": "^1.1.0",
35
+ "nprogress": "^0.2.0",
36
+ "viser-vue": "^2.4.8",
37
+ "vue": "2.6.14",
38
+ "vue-i18n": "^8.27.2",
39
+ "vue-router": "^3.5.4",
40
+ "vuedraggable": "^2.24.3",
41
+ "vuex": "^3.6.2"
42
+ },
43
+ "devDependencies": {
44
+ "script-loader": "^0.7.2",
45
+ "@ant-design/colors": "^6.0.0",
46
+ "@babel/core": "^7.18.10",
47
+ "@vue/cli-plugin-babel": "^4.5.19",
48
+ "@vue/cli-plugin-eslint": "^4.5.19",
49
+ "@vue/cli-service": "^4.5.19",
50
+ "@vue/eslint-config-standard": "^4.0.0",
51
+ "@vuepress/plugin-back-to-top": "^1.9.7",
52
+ "babel-eslint": "^10.1.0",
53
+ "babel-plugin-transform-remove-console": "^6.9.4",
54
+ "babel-polyfill": "^6.26.0",
55
+ "compression-webpack-plugin": "^4.0.1",
56
+ "deepmerge": "^4.2.2",
57
+ "eslint": "^6.8.0",
58
+ "eslint-plugin-import": "^2.26.0",
59
+ "eslint-plugin-node": "^11.1.0",
60
+ "eslint-plugin-vue": "^6.2.2",
61
+ "eslint-plugin-promise": "^4.3.1",
62
+ "eslint-plugin-standard": "^4.1.0",
63
+ "fast-deep-equal": "^3.1.3",
64
+ "less-loader": "^6.2.0",
65
+ "style-resources-loader": "^1.5.0",
66
+ "vue-cli-plugin-style-resources-loader": "^0.1.5",
67
+ "vue-template-compiler": "2.6.14",
68
+ "vuepress": "^1.9.7",
69
+ "webpack": "^4.46.0",
70
+ "webpack-theme-color-replacer": "1.4.1",
71
+ "whatwg-fetch": "^3.6.2"
72
+ },
73
+ "browserslist": [
74
+ "> 1%",
75
+ "last 2 versions",
76
+ "not ie <= 10"
77
+ ]
78
+ }
@@ -160,7 +160,7 @@
160
160
  <template v-if="selectDataShow">
161
161
  <a-divider style="font-size: 14px;margin-top: 0">数据源相关</a-divider>
162
162
  <a-form-model-item label="数据源类型" prop="selectType">
163
- <a-select v-model="item.selectType" placeholder="请选择数据源类型" @change="this.item.selectKey = undefined">
163
+ <a-select v-model="item.selectType" placeholder="请选择数据源类型" @change="item.selectKey = undefined">
164
164
  <a-select-option v-for="selectDataTypeItem in selectDataType.filter(h=>!h.noMatch.includes(item.formType))" :key="selectDataTypeItem.key">{{ selectDataTypeItem.label }}</a-select-option>
165
165
  <a-popover
166
166
  slot="suffixIcon"
@@ -111,7 +111,72 @@
111
111
  </a-select>
112
112
  </a-form-model-item>
113
113
  </x-form-col>
114
- <!-- TODO 多选框 -->
114
+ <!-- 多选框 -->
115
+ <x-form-col
116
+ v-else-if="attr.type === 'checkbox'"
117
+ :xl="xl"
118
+ :xxl="xxl">
119
+ <a-form-model-item
120
+ :ref="attr.model"
121
+ :label="attr.name"
122
+ :prop="attr.model">
123
+ <a-select
124
+ v-if="!attr.lazyLoad || attr.lazyLoad === 'false'"
125
+ v-model="form[attr.model]"
126
+ :disabled="disabled"
127
+ :filter-option="filterOption"
128
+ :getPopupContainer=" triggerNode => { return triggerNode.parentNode } "
129
+ :placeholder="attr.placeholder ? attr.placeholder : '请选择'"
130
+ mode="multiple"
131
+ show-search
132
+ allowClear
133
+ >
134
+ <template v-if="attr.keys">
135
+ <a-select-option
136
+ v-for="(item,index) in attr.keys"
137
+ :key="index"
138
+ :value="item.value">
139
+ {{ item.label }}
140
+ </a-select-option>
141
+ </template>
142
+ <template v-else>
143
+ <template v-if="attr.keyName.indexOf('logic@') !== -1">
144
+ <a-select-option
145
+ v-for="(item,index) in option"
146
+ :key="index"
147
+ :value="item.value">{{ item.label }}
148
+ </a-select-option>
149
+ </template>
150
+ <template v-else>
151
+ <a-select-option
152
+ v-for="item in $appdata.getDictionaryList(attr.keyName)"
153
+ :key="item.value"
154
+ :value="item.value">{{ item.text }}
155
+ </a-select-option>
156
+ </template>
157
+ </template>
158
+ </a-select>
159
+ <a-select
160
+ v-else
161
+ v-model="form[attr.model]"
162
+ :disabled="disabled"
163
+ :filter-option="filterOption"
164
+ :getPopupContainer=" triggerNode => { return triggerNode.parentNode } "
165
+ :placeholder="attr.placeholder ? attr.placeholder : '搜索' + attr.name"
166
+ mode="multiple"
167
+ show-search
168
+ allowClear
169
+ @search="fetchFunction"
170
+ >
171
+ <a-spin v-if="searching" slot="notFoundContent" size="small" />
172
+ <a-select-option
173
+ v-for="(item,index) in option"
174
+ :key="index"
175
+ :value="item.value">{{ item.label }}
176
+ </a-select-option>
177
+ </a-select>
178
+ </a-form-model-item>
179
+ </x-form-col>
115
180
  <!-- TODO 单选框 -->
116
181
  <!-- 日期范围选择器 -->
117
182
  <x-form-col
@@ -4,12 +4,12 @@ module.exports = {
4
4
  {
5
5
  label: '渲染查询表单项',
6
6
  value: 'queryForm',
7
- noMatch: ['file', 'image', 'textarea', 'personSetting']
7
+ noMatch: ['file', 'image', 'textarea', 'personSetting', 'checkbox']
8
8
  },
9
9
  {
10
10
  label: '渲染表格列',
11
11
  value: 'table',
12
- noMatch: ['file', 'image', 'personSetting']
12
+ noMatch: ['file', 'image', 'personSetting', 'checkbox']
13
13
  },
14
14
  {
15
15
  label: '渲染新增/修改表单项',
@@ -19,12 +19,12 @@ module.exports = {
19
19
  {
20
20
  label: 'SQL生成查询项',
21
21
  value: 'sqlQueryItem',
22
- noMatch: ['file', 'personSetting']
22
+ noMatch: ['file', 'personSetting', 'checkbox']
23
23
  },
24
24
  {
25
25
  label: 'SQL生成查询表达式',
26
26
  value: 'sqlQueryCondition',
27
- noMatch: ['file', 'image', 'textarea', 'personSetting']
27
+ noMatch: ['file', 'image', 'textarea', 'personSetting', 'checkbox']
28
28
  }
29
29
  ],
30
30
  // 表单类型
@@ -1,475 +1,450 @@
1
- <template>
2
- <div>
3
- <!-- 显示成功页抽屉 -->
4
- <a-modal
5
- v-model="successVisible"
6
- :footer="null"
7
- destroy-on-close
8
- title="工单状态"
9
- width="70%"
10
- @cancel="onSuccessCancel">
11
- <submit-ticket-success v-if="serialNumber" :serialNumber="serialNumber" />
12
- </a-modal>
13
- <!-- 两个使用手册弹框 -->
14
- <a-modal
15
- :visible="sunClientManualVisible"
16
- title="向日葵使用指南"
17
- width="1000px"
18
- @cancel="sunClientManualVisible = false"
19
- @ok="sunClientManualVisible = false"
20
- >
21
- <h1>一、安装</h1>
22
- <hr/>
23
- <div style="padding-left: 100px;padding-top: 20px">
24
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/1.png" style="width: 800px">
25
- <br/>
26
- <br/>
27
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
28
- <br/>
29
- <br/>
30
- </div>
31
- <h1>二、运行</h1>
32
- <hr/>
33
- <div style="padding-left: 100px;padding-top: 20px">
34
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开向日葵软件</p>
35
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/2.png" style="width: 800px">
36
- <br/>
37
- <br/>
38
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行向日葵</p>
39
- <br/>
40
- <br/>
41
- </div>
42
- <h1>三、截图</h1>
43
- <hr/>
44
- <div style="padding-left: 100px;padding-top: 20px">
45
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使验证码正常显示</p>
46
- <br/>
47
- <br/>
48
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/3.png" style="width: 800px">
49
- <br/>
50
- <br/>
51
- <br/>
52
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
53
- 使用qq,微信,或者任何截图软件。截取屏幕中 “本机识别码” 和 “本机验证码”。
54
- 确保该值清晰可辨别
55
- </p>
56
- <br/>
57
- <br/>
58
- <img alt="pic" src="@vue2-client/assets/img/SunClientManual/4.png" style="width: 800px">
59
- <br/>
60
- <br/>
61
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
62
- 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
63
- 这样我们的工作人员就可以远程协助您,排查、解决问题
64
- </p>
65
- <br/>
66
- <br/>
67
- </div>
68
- </a-modal>
69
- <a-modal
70
- :visible="toDeskManualVisible"
71
- title="ToDesk使用指南"
72
- width="1000px"
73
- @cancel="toDeskManualVisible = false"
74
- @ok="toDeskManualVisible = false"
75
- >
76
- <h1>一、安装</h1>
77
- <hr/>
78
- <div style="padding-left: 100px;padding-top: 20px">
79
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/1.png" style="width: 800px">
80
- <br/>
81
- <br/>
82
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
83
- <br/>
84
- <br/>
85
- </div>
86
- <h1>二、运行</h1>
87
- <hr/>
88
- <div style="padding-left: 100px;padding-top: 20px">
89
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开ToDesk软件</p>
90
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/2.png" style="width: 800px">
91
- <br/>
92
- <br/>
93
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行ToDesk</p>
94
- <br/>
95
- <br/>
96
- </div>
97
- <h1>三、截图</h1>
98
- <hr/>
99
- <div style="padding-left: 100px;padding-top: 20px">
100
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使临时密码正常显示</p>
101
- <br/>
102
- <br/>
103
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/3.png" style="width: 800px">
104
- <br/>
105
- <br/>
106
- <br/>
107
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
108
- 使用qq,微信,或者任何截图软件。截取屏幕中 “设备代码” 和 “临时密码”。
109
- 确保该值清晰可辨别
110
- </p>
111
- <br/>
112
- <br/>
113
- <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/4.png" style="width: 800px">
114
- <br/>
115
- <br/>
116
- <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
117
- 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
118
- 这样我们的工作人员就可以远程协助您,排查、解决问题
119
- </p>
120
- <br/>
121
- <br/>
122
- </div>
123
- </a-modal>
124
- <a-modal
125
- :visible="infoFormVisible"
126
- title="填写联系方式"
127
- @cancel="infoFormVisible = false"
128
- @ok="onInfoFormSubmit">
129
- <a-form-model
130
- ref="infoFormRef"
131
- :label-col="{ span: 5 }"
132
- :model="infoForm"
133
- :wrapper-col="{ span: 18 }">
134
- <a-form-model-item :rules="{ required: true, message: '请输入联系方式' }" label="联系方式" prop="phone">
135
- <a-input v-model="infoForm.phone" placeholder="请输入联系方式查询历史工单" />
136
- </a-form-model-item>
137
- </a-form-model>
138
- </a-modal>
139
- <a-card>
140
- <div style="text-align: right">
141
- <p>欢迎您!{{ currUser.ename }}</p>
142
- </div>
143
- <div class="submitTicketTitle">
144
- <span>售后问题反馈平台</span>
145
- </div>
146
- <a-tabs :activeKey="tabActiveKey" @change="changeTab">
147
- <a-tab-pane key="workSubmit" tab="工单提交">
148
- <!-- 表格主体 -->
149
- <a-row v-if="tabActiveKey === 'workSubmit'">
150
- <a-col :span="18">
151
- <a-form :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
152
- <!-- 客户名称输入 -->
153
- <a-form-item v-if="!currUser.ename" label="客户名称">
154
- <a-input v-model="customerName" placeholder="请输入客户名称(总公司名+分公司名)"/>
155
- <strong v-show="showCustomerNameAlert" style="color: red">客户名称不能为空!</strong>
156
- </a-form-item>
157
- <!-- 联系人 -->
158
- <a-form-item label="联系人">
159
- <a-input v-model="form.contact"></a-input>
160
- <strong v-show="showContactAlert" style="color: red">请填写联系人!</strong>
161
- </a-form-item>
162
- <!-- 联系方式 -->
163
- <a-form-item label="联系方式">
164
- <a-input v-model="form.phone"></a-input>
165
- <strong v-show="showPhoneAlert" style="color: red">联系方式填写有误!</strong>
166
- </a-form-item>
167
- <!-- 问题描述框 -->
168
- <a-form-item label="问题详情描述">
169
- <a-textarea v-model="form.desc" allow-clear placeholder="请用一句话描述您的问题,必要时请注明客户编号,表号,系统功能项等信息"/>
170
- <strong v-show="showDescAlert" style="color: red">问题详情描述不能为空!</strong>
171
- </a-form-item>
172
- <!-- 图片上传 -->
173
- <a-form-item :wrapper-col="{ span: 12 }" label="问题截图">
174
- <div class="clearfix">
175
- <upload v-if="uploadVisible" :model="imageUploadModel" @setFiles="setImages" />
176
- <a-modal
177
- :footer="null"
178
- :visible="previewVisible"
179
- @cancel="handleCancel"
180
- >
181
- <img :src="previewImage" alt="图片上传" style="width: 100%"/>
182
- </a-modal>
183
- </div>
184
- <strong v-show="!imageList.length" style="color: red">请上传问题截图!</strong>
185
- </a-form-item>
186
- <!-- 附件上传 -->
187
- <a-form-item :wrapper-col="{ span: 12 }" label="附件">
188
- <div class="clearfix">
189
- <upload v-if="uploadVisible" :model="fileUploadModel" @setFiles="setFiles" />
190
- </div>
191
- </a-form-item>
192
- <!-- 表单底部按钮 -->
193
- <a-form-item :wrapper-col="{ span: 12, offset: 5 }">
194
- <a-button :disabled="showPhoneAlert || !validCustomerName || showContactAlert || showDescAlert || !imageList.length" style="margin-right: 20px" type="primary" @click="onSubmit">
195
- 提交
196
- </a-button>
197
- </a-form-item>
198
- </a-form>
199
- </a-col>
200
- <a-col :span="6">
201
- <a-card title="远程方式快捷下载">
202
- <a-space direction="vertical">
203
- <a-row :gutter="16">
204
- <a-col
205
- :lg="24"
206
- :md="24"
207
- :sm="24"
208
- :xl="12"
209
- :xs="24"
210
- :xxl="12"
211
- style="text-align: center">
212
- <img alt="pic" src="@vue2-client/assets/img/SunClientDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toSunClientClick"/>
213
- <p style="padding-top:10px;text-align: center"><a @click="sunClientManualVisible = true">向日葵使用说明</a></p>
214
- </a-col>
215
- <a-col
216
- :lg="24"
217
- :md="24"
218
- :sm="24"
219
- :xl="12"
220
- :xs="24"
221
- :xxl="12"
222
- style="text-align: center">
223
- <img alt="pic" src="@vue2-client/assets/img/ToDeskDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toDeskClick">
224
- <p style="padding-top:10px;text-align: center"><a @click="toDeskManualVisible = true">ToDesk使用说明</a></p>
225
- </a-col>
226
- </a-row>
227
- <a-row :gutter="16" style="text-align: center">
228
- <hr/>
229
- <p style="color: red;font-weight: bolder;padding-top: 10px">如需远程协助,请下载向日葵</p>
230
- <p style="color: red;font-weight: bolder">向日葵安装使用指南,请点击上方“向日葵使用说明”查看</p>
231
- </a-row>
232
- </a-space>
233
- </a-card>
234
- </a-col>
235
- </a-row>
236
- </a-tab-pane>
237
- <a-tab-pane key="workHistory" tab="历史工单">
238
- <!-- 查询表单 -->
239
- <x-form-table
240
- v-if="tabActiveKey === 'workHistory'"
241
- :fixed-query-form="fixedQueryForm"
242
- :queryParamsName="queryParamsName"
243
- title="已提交工单"
244
- @action="toDetail">
245
- <a-button slot="button" type="primary" @click="infoFormVisible = true">填写联系方式</a-button>
246
- </x-form-table>
247
- </a-tab-pane>
248
- </a-tabs>
249
- </a-card>
250
- </div>
251
- </template>
252
-
253
- <script>
254
- import { TicketDetailsViewApi, post } from '@vue2-client/services/api'
255
- import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
256
- import submitTicketSuccess from './submitTicketSuccess'
257
- import Upload from '@vue2-client/base-client/components/common/Upload'
258
-
259
- export default {
260
- name: 'submitTicket',
261
- components: {
262
- XFormTable,
263
- submitTicketSuccess,
264
- Upload
265
- },
266
- data () {
267
- return {
268
- // 查询配置文件名
269
- queryParamsName: 'TicketQueryForCustomer',
270
- // 控制成功页面显示
271
- successVisible: false,
272
- // 控制预览显示
273
- previewVisible: false,
274
- // 图片真实地址
275
- previewImage: '',
276
- // 图片列表
277
- imageList: [],
278
- // 附件列表
279
- fileList: [],
280
- // 表单数据
281
- form: {
282
- name: '',
283
- desc: undefined,
284
- contact: '',
285
- phone: ''
286
- },
287
- // 工单序列号
288
- serialNumber: '',
289
- // 类别未填写警告信息控制
290
- showContactAlert: true,
291
- showPhoneAlert: true,
292
- showDescAlert: true,
293
- showCustomerNameAlert: true,
294
- // 向日葵使用指南可见性
295
- sunClientManualVisible: false,
296
- // 向日葵使用指南可见性
297
- toDeskManualVisible: false,
298
- // 为工单查询指定条件
299
- fixedQueryForm: {},
300
- // 用户信息
301
- currUser: {
302
- ename: ''
303
- },
304
- tabActiveKey: 'workSubmit',
305
- imageUploadModel,
306
- fileUploadModel,
307
- // 客户名称
308
- customerName: undefined,
309
- // 未传入客户名称手动输入联系方式
310
- infoFormVisible: false,
311
- infoForm: {
312
- phone: ''
313
- },
314
- uploadVisible: true
315
- }
316
- },
317
- computed: {
318
- // 检查客户名称是否为空
319
- validCustomerName () {
320
- if (this.currUser.ename || this.customerName) {
321
- return true
322
- }
323
- return false
324
- }
325
- },
326
- created () {
327
- document.title = '售后问题反馈平台'
328
- let customerName = this.$route.query.orgName
329
- this.form.contact = this.$route.query.contact
330
- // 分割客户名称
331
- if (customerName) {
332
- const partArr = customerName.split('.')
333
- if (partArr.length === 5) {
334
- customerName = `${partArr[1]}.${partArr[4]}`
335
- }
336
- }
337
- this.currUser.ename = customerName
338
- this.fixedQueryForm['t_uploader'] = this.currUser.ename
339
- },
340
- methods: {
341
- toDetail (record, id) {
342
- this.serialNumber = id + ''
343
- this.successVisible = true
344
- },
345
- getBase64 (file) {
346
- return new Promise((resolve, reject) => {
347
- const reader = new FileReader()
348
- reader.readAsDataURL(file)
349
- reader.onload = () => resolve(reader.result)
350
- reader.onerror = error => reject(error)
351
- })
352
- },
353
- setImages (imageIds) {
354
- this.imageList = imageIds
355
- },
356
- setFiles (fileIds) {
357
- this.fileList = fileIds
358
- },
359
- handleCancel () {
360
- this.previewVisible = false
361
- },
362
- // 处理预览图像
363
- async handlePreview (file) {
364
- if (!file.url && !file.preview) {
365
- file.preview = await this.getBase64(file.originFileObj)
366
- }
367
- this.previewImage = file.url || file.preview
368
- this.previewVisible = true
369
- },
370
- // 提交按钮逻辑
371
- onSubmit () {
372
- let customerName = this.currUser.ename
373
- if (!customerName) {
374
- customerName = this.customerName
375
- }
376
- const form = {
377
- customerName,
378
- contact: this.form.contact,
379
- phone: this.form.phone,
380
- problemDetail: this.form.desc,
381
- Images: this.imageList,
382
- FilesId: this.fileList
383
- }
384
- if (form.customerName.length > 100) {
385
- this.$message.error('客户名称长度超出限制')
386
- return
387
- }
388
- if (form.problemDetail.length > 300) {
389
- this.$message.error('问题详情长度超出限制')
390
- return
391
- }
392
- if (form.problemDetail.indexOf('\'') !== -1) {
393
- this.$message.error('问题详情不能包含特殊符号')
394
- return
395
- }
396
- post(TicketDetailsViewApi.createTicket, { form }).then((res) => {
397
- this.serialNumber = res
398
- this.successVisible = true
399
- this.$message.success('创建成功')
400
- this.customerName = ''
401
- this.form.contact = ''
402
- this.form.phone = ''
403
- this.form.desc = ''
404
- this.imageList = []
405
- this.fileList = []
406
- this.uploadVisible = false
407
- if (!this.currUser.ename) {
408
- this.fixedQueryForm.t_uploader_phone = form.phone
409
- this.infoForm.phone = form.phone
410
- }
411
- })
412
- },
413
- onSuccessCancel () {
414
- this.uploadVisible = true
415
- },
416
- // 点击向日葵链接
417
- toSunClientClick () {
418
- window.open('https://sunlogin.oray.com/download')
419
- },
420
- // 点击ToDesk链接
421
- toDeskClick () {
422
- window.open('https://www.todesk.com/download.html')
423
- },
424
- // 切换标签页
425
- changeTab (id) {
426
- if (id === 'workHistory' && !this.fixedQueryForm.t_uploader && !this.fixedQueryForm.t_uploader_phone) {
427
- this.infoFormVisible = true
428
- return
429
- }
430
- this.tabActiveKey = id
431
- },
432
- onInfoFormSubmit () {
433
- this.$refs.infoFormRef.validate(valid => {
434
- if (valid) {
435
- this.fixedQueryForm = {
436
- t_uploader_phone: this.infoForm.phone
437
- }
438
- this.tabActiveKey = 'workHistory'
439
- this.infoFormVisible = false
440
- }
441
- })
442
- }
443
- },
444
- watch: {
445
- // 监控类别的改变,当类别改变,校验通过
446
- 'form.contact' (newVal) {
447
- this.showContactAlert = newVal.trim().length === 0
448
- },
449
- 'form.phone' (newVal) {
450
- const numReg = new RegExp(/^[0-9]+$/)
451
- this.showPhoneAlert = !numReg.test(newVal)
452
- },
453
- 'form.desc' (newVal) {
454
- this.showDescAlert = newVal.trim().length === 0
455
- },
456
- 'customerName' (newVal) {
457
- this.showCustomerNameAlert = !newVal
458
- }
459
- }
460
- }
461
- const imageUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":5,"type":"image","accept":[".jpg,.jpeg,.ico,.gif,svg,.webp,.png,.bmp,.pjpeg,"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"图片","resUploadMode":"server","model":"Images"}')
462
- const fileUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":3,"type":"file","accept":["*"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"附件","resUploadMode":"server","model":"FilesId"}')
463
- </script>
464
-
465
- <style scoped>
466
- .radio-item{
467
- margin-right: 140px;
468
- }
469
- .submitTicketTitle{
470
- font-size: 40px;
471
- vertical-align: middle;
472
- text-align: center;
473
- margin-bottom: 40px;
474
- }
475
- </style>
1
+ <template>
2
+ <div>
3
+ <!-- 显示成功页抽屉 -->
4
+ <a-modal
5
+ v-model="successVisible"
6
+ :footer="null"
7
+ destroy-on-close
8
+ title="工单状态"
9
+ width="70%"
10
+ @cancel="onSuccessCancel">
11
+ <submit-ticket-success v-if="serialNumber" :serialNumber="serialNumber" />
12
+ </a-modal>
13
+ <!-- 两个使用手册弹框 -->
14
+ <a-modal
15
+ :visible="sunClientManualVisible"
16
+ title="向日葵使用指南"
17
+ width="1000px"
18
+ @cancel="sunClientManualVisible = false"
19
+ @ok="sunClientManualVisible = false"
20
+ >
21
+ <h1>一、安装</h1>
22
+ <hr/>
23
+ <div style="padding-left: 100px;padding-top: 20px">
24
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/1.png" style="width: 800px">
25
+ <br/>
26
+ <br/>
27
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
28
+ <br/>
29
+ <br/>
30
+ </div>
31
+ <h1>二、运行</h1>
32
+ <hr/>
33
+ <div style="padding-left: 100px;padding-top: 20px">
34
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开向日葵软件</p>
35
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/2.png" style="width: 800px">
36
+ <br/>
37
+ <br/>
38
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行向日葵</p>
39
+ <br/>
40
+ <br/>
41
+ </div>
42
+ <h1>三、截图</h1>
43
+ <hr/>
44
+ <div style="padding-left: 100px;padding-top: 20px">
45
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使验证码正常显示</p>
46
+ <br/>
47
+ <br/>
48
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/3.png" style="width: 800px">
49
+ <br/>
50
+ <br/>
51
+ <br/>
52
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
53
+ 使用qq,微信,或者任何截图软件。截取屏幕中 “本机识别码” 和 “本机验证码”。
54
+ 确保该值清晰可辨别
55
+ </p>
56
+ <br/>
57
+ <br/>
58
+ <img alt="pic" src="@vue2-client/assets/img/SunClientManual/4.png" style="width: 800px">
59
+ <br/>
60
+ <br/>
61
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
62
+ 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
63
+ 这样我们的工作人员就可以远程协助您,排查、解决问题
64
+ </p>
65
+ <br/>
66
+ <br/>
67
+ </div>
68
+ </a-modal>
69
+ <a-modal
70
+ :visible="toDeskManualVisible"
71
+ title="ToDesk使用指南"
72
+ width="1000px"
73
+ @cancel="toDeskManualVisible = false"
74
+ @ok="toDeskManualVisible = false"
75
+ >
76
+ <h1>一、安装</h1>
77
+ <hr/>
78
+ <div style="padding-left: 100px;padding-top: 20px">
79
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/1.png" style="width: 800px">
80
+ <br/>
81
+ <br/>
82
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">运行下载好的安装包,按需要手动选择安装路径后,一路点下一步完成安装</p>
83
+ <br/>
84
+ <br/>
85
+ </div>
86
+ <h1>二、运行</h1>
87
+ <hr/>
88
+ <div style="padding-left: 100px;padding-top: 20px">
89
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">在桌面或开始菜单中打开ToDesk软件</p>
90
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/2.png" style="width: 800px">
91
+ <br/>
92
+ <br/>
93
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">显示此页面时,您已成功运行ToDesk</p>
94
+ <br/>
95
+ <br/>
96
+ </div>
97
+ <h1>三、截图</h1>
98
+ <hr/>
99
+ <div style="padding-left: 100px;padding-top: 20px">
100
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">点击软件界面中眼睛样子的按钮,使临时密码正常显示</p>
101
+ <br/>
102
+ <br/>
103
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/3.png" style="width: 800px">
104
+ <br/>
105
+ <br/>
106
+ <br/>
107
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
108
+ 使用qq,微信,或者任何截图软件。截取屏幕中 “设备代码” 和 “临时密码”。
109
+ 确保该值清晰可辨别
110
+ </p>
111
+ <br/>
112
+ <br/>
113
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskManual/4.png" style="width: 800px">
114
+ <br/>
115
+ <br/>
116
+ <p style="line-height: 30px;font-size: 1.5em;text-indent: 2em">
117
+ 将您截好的图片,通过表单提交页面,下方 “+” (加号)的按钮,提交给我们。
118
+ 这样我们的工作人员就可以远程协助您,排查、解决问题
119
+ </p>
120
+ <br/>
121
+ <br/>
122
+ </div>
123
+ </a-modal>
124
+ <a-modal
125
+ :visible="infoFormVisible"
126
+ title="填写联系方式"
127
+ @cancel="infoFormVisible = false"
128
+ @ok="onInfoFormSubmit">
129
+ <a-form-model
130
+ ref="infoFormRef"
131
+ :label-col="{ span: 5 }"
132
+ :model="infoForm"
133
+ :wrapper-col="{ span: 18 }">
134
+ <a-form-model-item :rules="{ required: true, message: '请输入联系方式' }" label="联系方式" prop="phone">
135
+ <a-input v-model="infoForm.phone" placeholder="请输入联系方式查询历史工单" />
136
+ </a-form-model-item>
137
+ </a-form-model>
138
+ </a-modal>
139
+ <a-card>
140
+ <div style="text-align: right">
141
+ <p>欢迎您!{{ currUser.orgName }}</p>
142
+ </div>
143
+ <div class="submitTicketTitle">
144
+ <span>售后问题反馈平台</span>
145
+ </div>
146
+ <a-tabs :activeKey="tabActiveKey" @change="changeTab">
147
+ <a-tab-pane key="workSubmit" tab="工单提交">
148
+ <!-- 表格主体 -->
149
+ <a-row v-if="tabActiveKey === 'workSubmit'">
150
+ <a-col :span="18">
151
+ <a-form :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
152
+ <!-- 客户名称输入 -->
153
+ <a-form-item v-if="!currUser.orgName" label="公司名称">
154
+ <a-input v-model="form.name" placeholder="请输入公司名称(总公司名+分公司名)"/>
155
+ <strong v-show="showCustomerNameAlert" style="color: red">公司名称不能为空!</strong>
156
+ </a-form-item>
157
+ <!-- 联系人 -->
158
+ <a-form-item v-if="!currUser.contact" label="联系人">
159
+ <a-input v-model="form.contact" placeholder="请输入联系人姓名"></a-input>
160
+ <strong v-show="showContactAlert" style="color: red">请填写联系人!</strong>
161
+ </a-form-item>
162
+ <!-- 联系方式 -->
163
+ <a-form-item v-if="!currUser.phone" label="联系方式">
164
+ <a-input v-model="form.phone" placeholder="请输入联系方式"></a-input>
165
+ <strong v-show="showPhoneAlert" style="color: red">请填写联系方式!</strong>
166
+ </a-form-item>
167
+ <!-- 问题描述框 -->
168
+ <a-form-item label="问题详情描述">
169
+ <a-textarea v-model="form.desc" allow-clear placeholder="请用一句话描述您的问题,必要时请注明客户编号,表号,系统功能项等信息"/>
170
+ <strong v-show="showDescAlert" style="color: red">问题详情描述不能为空!</strong>
171
+ </a-form-item>
172
+ <!-- 图片上传 -->
173
+ <a-form-item :wrapper-col="{ span: 12 }" label="问题截图">
174
+ <div class="clearfix">
175
+ <upload v-if="uploadVisible" :model="imageUploadModel" @setFiles="setImages" />
176
+ <a-modal
177
+ :footer="null"
178
+ :visible="previewVisible"
179
+ @cancel="handleCancel"
180
+ >
181
+ <img :src="previewImage" alt="图片上传" style="width: 100%"/>
182
+ </a-modal>
183
+ </div>
184
+ <strong v-show="!imageList.length" style="color: red">请上传问题截图!</strong>
185
+ </a-form-item>
186
+ <!-- 附件上传 -->
187
+ <a-form-item :wrapper-col="{ span: 12 }" label="附件">
188
+ <div class="clearfix">
189
+ <upload v-if="uploadVisible" :model="fileUploadModel" @setFiles="setFiles" />
190
+ </div>
191
+ </a-form-item>
192
+ <!-- 表单底部按钮 -->
193
+ <a-form-item :wrapper-col="{ span: 12, offset: 5 }">
194
+ <a-button :disabled="showPhoneAlert || showCustomerNameAlert || showContactAlert || showDescAlert || !imageList.length" style="margin-right: 20px" type="primary" @click="onSubmit">
195
+ 提交
196
+ </a-button>
197
+ </a-form-item>
198
+ </a-form>
199
+ </a-col>
200
+ <a-col :span="6">
201
+ <a-card title="远程方式快捷下载">
202
+ <a-space direction="vertical">
203
+ <a-row :gutter="16">
204
+ <a-col
205
+ :lg="24"
206
+ :md="24"
207
+ :sm="24"
208
+ :xl="12"
209
+ :xs="24"
210
+ :xxl="12"
211
+ style="text-align: center">
212
+ <img alt="pic" src="@vue2-client/assets/img/SunClientDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toSunClientClick"/>
213
+ <p style="padding-top:10px;text-align: center"><a @click="sunClientManualVisible = true">向日葵使用说明</a></p>
214
+ </a-col>
215
+ <a-col
216
+ :lg="24"
217
+ :md="24"
218
+ :sm="24"
219
+ :xl="12"
220
+ :xs="24"
221
+ :xxl="12"
222
+ style="text-align: center">
223
+ <img alt="pic" src="@vue2-client/assets/img/ToDeskDownload.png" style="width: 128px;height:128px;cursor: pointer" @click="toDeskClick">
224
+ <p style="padding-top:10px;text-align: center"><a @click="toDeskManualVisible = true">ToDesk使用说明</a></p>
225
+ </a-col>
226
+ </a-row>
227
+ <a-row :gutter="16" style="text-align: center">
228
+ <hr/>
229
+ <p style="color: red;font-weight: bolder;padding-top: 10px">如需远程协助,请下载向日葵</p>
230
+ <p style="color: red;font-weight: bolder">向日葵安装使用指南,请点击上方“向日葵使用说明”查看</p>
231
+ </a-row>
232
+ </a-space>
233
+ </a-card>
234
+ </a-col>
235
+ </a-row>
236
+ </a-tab-pane>
237
+ <a-tab-pane key="workHistory" tab="历史工单">
238
+ <!-- 查询表单 -->
239
+ <x-form-table
240
+ v-if="tabActiveKey === 'workHistory'"
241
+ :fixed-query-form="fixedQueryForm"
242
+ :queryParamsName="queryParamsName"
243
+ title="已提交工单"
244
+ @action="toDetail">
245
+ <a-button slot="button" type="primary" @click="infoFormVisible = true">填写联系方式</a-button>
246
+ </x-form-table>
247
+ </a-tab-pane>
248
+ </a-tabs>
249
+ </a-card>
250
+ </div>
251
+ </template>
252
+
253
+ <script>
254
+ import { TicketDetailsViewApi, post } from '@vue2-client/services/api'
255
+ import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
256
+ import submitTicketSuccess from './submitTicketSuccess'
257
+ import Upload from '@vue2-client/base-client/components/common/Upload'
258
+
259
+ export default {
260
+ name: 'submitTicket',
261
+ components: {
262
+ XFormTable,
263
+ submitTicketSuccess,
264
+ Upload
265
+ },
266
+ data () {
267
+ return {
268
+ // 查询配置文件名
269
+ queryParamsName: 'TicketQueryForCustomer',
270
+ // 控制成功页面显示
271
+ successVisible: false,
272
+ // 控制预览显示
273
+ previewVisible: false,
274
+ // 图片真实地址
275
+ previewImage: '',
276
+ // 图片列表
277
+ imageList: [],
278
+ // 附件列表
279
+ fileList: [],
280
+ // 表单数据
281
+ form: {
282
+ name: '',
283
+ desc: undefined,
284
+ contact: '',
285
+ phone: ''
286
+ },
287
+ // 工单序列号
288
+ serialNumber: '',
289
+ // 类别未填写警告信息控制
290
+ showContactAlert: true,
291
+ showPhoneAlert: true,
292
+ showDescAlert: true,
293
+ showCustomerNameAlert: true,
294
+ // 向日葵使用指南可见性
295
+ sunClientManualVisible: false,
296
+ // 向日葵使用指南可见性
297
+ toDeskManualVisible: false,
298
+ // 为工单查询指定条件
299
+ fixedQueryForm: {},
300
+ // 用户信息
301
+ currUser: {
302
+ orgName: '',
303
+ contact: '',
304
+ phone: ''
305
+ },
306
+ tabActiveKey: 'workSubmit',
307
+ imageUploadModel,
308
+ fileUploadModel,
309
+ // 未传入客户名称手动输入联系方式
310
+ infoFormVisible: false,
311
+ infoForm: {
312
+ phone: ''
313
+ },
314
+ uploadVisible: true
315
+ }
316
+ },
317
+ created () {
318
+ document.title = '售后问题反馈平台'
319
+ this.currUser.orgName = this.$route.query.orgName
320
+ this.currUser.contact = this.$route.query.contact
321
+ this.currUser.phone = this.$route.query.phone
322
+ this.form.name = this.$route.query.orgName
323
+ this.form.contact = this.$route.query.contact
324
+ this.form.phone = this.$route.query.phone
325
+ this.fixedQueryForm['t_uploader'] = this.currUser.orgName
326
+ },
327
+ methods: {
328
+ toDetail (record, id) {
329
+ this.serialNumber = id + ''
330
+ this.successVisible = true
331
+ },
332
+ getBase64 (file) {
333
+ return new Promise((resolve, reject) => {
334
+ const reader = new FileReader()
335
+ reader.readAsDataURL(file)
336
+ reader.onload = () => resolve(reader.result)
337
+ reader.onerror = error => reject(error)
338
+ })
339
+ },
340
+ setImages (imageIds) {
341
+ this.imageList = imageIds
342
+ },
343
+ setFiles (fileIds) {
344
+ this.fileList = fileIds
345
+ },
346
+ handleCancel () {
347
+ this.previewVisible = false
348
+ },
349
+ // 处理预览图像
350
+ async handlePreview (file) {
351
+ if (!file.url && !file.preview) {
352
+ file.preview = await this.getBase64(file.originFileObj)
353
+ }
354
+ this.previewImage = file.url || file.preview
355
+ this.previewVisible = true
356
+ },
357
+ // 提交按钮逻辑
358
+ onSubmit () {
359
+ const form = {
360
+ customerName: this.form.name,
361
+ contact: this.form.contact,
362
+ phone: this.form.phone,
363
+ problemDetail: this.form.desc,
364
+ Images: this.imageList,
365
+ FilesId: this.fileList
366
+ }
367
+ if (form.problemDetail.length > 300) {
368
+ this.$message.error('问题详情长度超出限制')
369
+ return
370
+ }
371
+ if (form.problemDetail.indexOf('\'') !== -1) {
372
+ this.$message.error('问题详情不能包含特殊符号')
373
+ return
374
+ }
375
+ post(TicketDetailsViewApi.createTicket, { form }).then((res) => {
376
+ this.serialNumber = res
377
+ this.successVisible = true
378
+ this.$message.success('创建成功')
379
+ this.form.desc = ''
380
+ this.imageList = []
381
+ this.fileList = []
382
+ this.uploadVisible = false
383
+ if (!this.currUser.orgName) {
384
+ this.fixedQueryForm.t_uploader_phone = form.phone
385
+ this.infoForm.phone = form.phone
386
+ }
387
+ })
388
+ },
389
+ onSuccessCancel () {
390
+ this.uploadVisible = true
391
+ },
392
+ // 点击向日葵链接
393
+ toSunClientClick () {
394
+ window.open('https://sunlogin.oray.com/download')
395
+ },
396
+ // 点击ToDesk链接
397
+ toDeskClick () {
398
+ window.open('https://www.todesk.com/download.html')
399
+ },
400
+ // 切换标签页
401
+ changeTab (id) {
402
+ if (id === 'workHistory' && !this.fixedQueryForm.t_uploader && !this.fixedQueryForm.t_uploader_phone) {
403
+ this.infoFormVisible = true
404
+ return
405
+ }
406
+ this.tabActiveKey = id
407
+ },
408
+ onInfoFormSubmit () {
409
+ this.$refs.infoFormRef.validate(valid => {
410
+ if (valid) {
411
+ this.fixedQueryForm = {
412
+ t_uploader_phone: this.infoForm.phone
413
+ }
414
+ this.tabActiveKey = 'workHistory'
415
+ this.infoFormVisible = false
416
+ }
417
+ })
418
+ }
419
+ },
420
+ watch: {
421
+ // 监控类别的改变,当类别改变,校验通过
422
+ 'form.contact' (newVal) {
423
+ this.showContactAlert = !newVal || newVal.trim().length === 0
424
+ },
425
+ 'form.phone' (newVal) {
426
+ this.showPhoneAlert = !newVal || newVal.trim().length === 0
427
+ },
428
+ 'form.desc' (newVal) {
429
+ this.showDescAlert = newVal.trim().length === 0
430
+ },
431
+ 'form.name' (newVal) {
432
+ this.showCustomerNameAlert = !newVal || newVal.trim().length === 0
433
+ }
434
+ }
435
+ }
436
+ const imageUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":5,"type":"image","accept":[".jpg,.jpeg,.ico,.gif,svg,.webp,.png,.bmp,.pjpeg,"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"图片","resUploadMode":"server","model":"Images"}')
437
+ const fileUploadModel = JSON.parse('{"addOrEdit":"all","resUploadStock":1,"pathKey":"cs","rule":{"type":"string","required":"false"},"isOnlyAddOrEdit":true,"acceptCount":3,"type":"file","accept":["*"],"stockAlias":"webmeter","fileRootPath":"D:\\\\nginx-resource\\\\resource\\\\","name":"附件","resUploadMode":"server","model":"FilesId"}')
438
+ </script>
439
+
440
+ <style scoped>
441
+ .radio-item{
442
+ margin-right: 140px;
443
+ }
444
+ .submitTicketTitle{
445
+ font-size: 40px;
446
+ vertical-align: middle;
447
+ text-align: center;
448
+ margin-bottom: 40px;
449
+ }
450
+ </style>