whx 2 ヶ月 前
コミット
c97c312fd3
60 ファイル変更599 行追加465 行削除
  1. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/index.html
  2. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/1948.98ad7857.css
  3. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/5062.78375eb0.css
  4. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/2664.c45ff686.css
  5. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/9073.0ec15984.css
  6. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/app.457214b2.css
  7. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/app.4b10f312.css
  8. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1055.08579aff.js
  9. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/118.6ba54514.js
  10. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1296.c718e0ed.js
  11. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1522.fc19ee40.js
  12. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1764.d0f1d499.js
  13. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1869.6af51ca3.js
  14. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1948.646be242.js
  15. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2213.889dcb44.js
  16. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/224.0213acef.js
  17. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2293.d2273c66.js
  18. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2449.56be1d79.js
  19. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2657.8acc347f.js
  20. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2664.a5cf52c5.js
  21. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2911.635256a9.js
  22. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2925.726790ad.js
  23. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3195.8d3837a1.js
  24. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3419.9061ff65.js
  25. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3768.2429b1ab.js
  26. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/4844.bce8077c.js
  27. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5062.ab676531.js
  28. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5211.068d8432.js
  29. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5211.51fd76dd.js
  30. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5428.e31420cf.js
  31. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/555.077023f9.js
  32. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6077.aaba4a6f.js
  33. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6340.413aff44.js
  34. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6466.a1c26558.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6510.e7d69526.js
  36. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6636.5b189986.js
  37. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7218.fe3ce555.js
  38. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8083.ccf1830d.js
  39. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8083.dda6f40d.js
  40. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8375.3f029621.js
  41. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/838.7705ead7.js
  42. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8407.00873852.js
  43. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8407.f7c04360.js
  44. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8806.286bda9b.js
  45. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9073.e2daa9cb.js
  46. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9542.dac2b3bd.js
  47. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9607.13744f8a.js
  48. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9709.4cd96d60.js
  49. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9854.b3131da6.js
  50. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/app.8927b524.js
  51. 11 0
      virgo.wzfrontend/workark/src/api/system.js
  52. 364 357
      virgo.wzfrontend/workark/src/components/common/upload.vue
  53. 6 3
      virgo.wzfrontend/workark/src/components/website/createOrder.vue
  54. 19 5
      virgo.wzfrontend/workark/src/components/website/payOrder.vue
  55. 7 4
      virgo.wzfrontend/workark/src/components/work/serve/list/detail.vue
  56. 1 1
      virgo.wzfrontend/workark/src/components/work/system/serveSet/processForm.vue
  57. 36 1
      virgo.wzfrontend/workark/src/components/work/system/serveSet/processSet.vue
  58. 117 56
      virgo.wzfrontend/workark/src/components/work/system/serveSet/processSetItem.vue
  59. 1 1
      virgo.wzfrontend/workark/src/views/work/serve/list.vue
  60. 1 1
      virgo.wzfrontend/workark/src/views/work/system/serveSet.vue

ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/index.html


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/1948.98ad7857.css


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/5062.78375eb0.css


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/2664.c45ff686.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/6340.0ec15984.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/9073.0ec15984.css


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/app.457214b2.css


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/app.4b10f312.css


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/1055.08579aff.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/118.6ba54514.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1296.c718e0ed.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1522.fc19ee40.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1764.d0f1d499.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1869.6af51ca3.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1948.646be242.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2213.889dcb44.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/224.0213acef.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/2293.d2273c66.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2449.56be1d79.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2657.8acc347f.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2664.a5cf52c5.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2911.635256a9.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2925.726790ad.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/3195.8d3837a1.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/3419.9061ff65.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/3768.2429b1ab.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/4844.bce8077c.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/5062.ab676531.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/5211.068d8432.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/5211.51fd76dd.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/5428.e31420cf.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/555.077023f9.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/6077.aaba4a6f.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6340.413aff44.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6466.a1c26558.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/6510.e7d69526.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6636.5b189986.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/7218.fe3ce555.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/8083.ccf1830d.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8083.dda6f40d.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8375.3f029621.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/838.7705ead7.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8407.00873852.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/8407.f7c04360.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/8806.286bda9b.js


ファイルの差分が大きいため隠しています
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/9073.e2daa9cb.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9542.dac2b3bd.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9607.13744f8a.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9709.4cd96d60.js


ファイルの差分が大きいため隠しています
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9854.b3131da6.js


ファイルの差分が大きいため隠しています
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/app.8927b524.js


+ 11 - 0
virgo.wzfrontend/workark/src/api/system.js

@@ -244,4 +244,15 @@ export function deleteProcessData(id) {
 		url: `/api/workarkProce/${id}`,
 		method: 'delete'
 	})
+}
+/* 
+ * 修改过程状态
+ * 
+ * 
+ */
+export function updateProcessStatus(status, ids) {
+	return request({
+		url: `/api/workarkProce/updateStatus/${status}/${ids}`,
+		method: 'get'
+	})
 }

+ 364 - 357
virgo.wzfrontend/workark/src/components/common/upload.vue

@@ -1,359 +1,366 @@
-<template>
-	<div class="common-update">
-		<div v-if="type === 'preview'">
-			<div class="no-tips" v-if="fileList.length === 0">暂无附件</div>
-			<div class="common-perview-image" v-else>
-				<div class="common-update-image-box" v-for="(item,index) in fileList" :key="item.id">
-					<div class="el-image video-image" v-if="item.type === 'mp4'">
-						<div class="video-icon">
-							<i class="el-icon-video-play" @click="openVideo(item)"></i>
-						</div>
-						<img :src="videoPreviewList[item.id]" class="el-image__inner">
-					</div>
-					<el-image :src="item.url" :preview-src-list="[item.url]" v-else>
-						<div slot="error" class="image-slot">
-							<el-tooltip class="item" effect="dark" :content="item.name" placement="bottom">
-								<div class="image-text">
-									<span>{{item.type.toUpperCase()}}</span>
-									<div class="file-download">
-										<i class="el-icon-download" @click="download(item)"></i>
-									</div>
-								</div>
-							</el-tooltip>
-						</div>
-					</el-image>
-				</div>
-			</div>
-		</div>
-		<div v-else>
-			<div class="common-update-image">
-				<div class="common-update-image-box" v-for="(item,index) in fileList" :key="item.id">
-					<div class="el-image video-image" v-if="item.type === 'mp4'">
-						<div class="video-icon">
-							<i class="el-icon-video-play" @click="openVideo(item)"></i>
-						</div>
-						<img :src="videoPreviewList[item.id]" class="el-image__inner">
-					</div>
-					<el-image :src="item.url" :preview-src-list="[item.url]" v-else>
-						<div slot="error" class="image-slot">
-							<el-tooltip class="item" effect="dark" :content="item.name" placement="bottom">
-								<div class="image-text">{{item.type.toUpperCase()}}</div>
-							</el-tooltip>
-						</div>
-					</el-image>
-					<div class="common-update-close" @click="removeFile(index)">
-						<i class="el-icon-close"></i>
-					</div>
-				</div>
-				<el-upload :action="action" :headers="headers" :show-file-list="false" name="uploadFile"
-					:before-upload="beforeUpload" :on-success="successFile" :on-error="errorFile" :accept="accept"
-					v-if="fileList.length < maxLen" :on-progress="progress" :limit="maxLen" :on-exceed="handleExceed"
-					:multiple="maxLen === 1 ? false : true">
-					<div class="common-update-button">
-						<i class="iconfont huifont-xinzeng"></i>
-						<div class="common-update-button-label">{{text}}</div>
-					</div>
-				</el-upload>
-			</div>
-			<div class="update-image-tips"><span class="color-danger">*</span> 请上传小于10M的文件</div>
-		</div>
-		<el-dialog :close-on-click-modal="false" :title="video.name" custom-class="monitor-dialog"
-			:visible.sync="visible" width="900px" height="500px" :append-to-body="true">
-			<div class="video-box">
-				<video v-if="visible" width="900" height="445" controls>
-					<source :src="video.url" type="video/mp4" />
-				</video>
-			</div>
-		</el-dialog>
-	</div>
-</template>
-
-<script>
-	import config from '@/config';
-	import {
-		getToken
-	} from '@/uitls/auth';
-	export default {
-		props: {
-			list: {
-				type: Array,
-				default: () => {
-					return []
-				}
-			},
-			type: {
-				type: String,
-				default: 'preview'
-			},
-			maxLen: {
-				type: Number,
-				default: 5
-			},
-			text: {
-				type: String,
-				default: '上传图片'
-			},
-			accept: {
-				type: String,
-				default: '.png, .jpg, .jpeg'
-			},
-		},
-		data() {
-			return {
-				action: config.baseURL + '/file/filenode/-1', //上传地址
-				headers: {
-					token: ''
-				},
-				url: '',
-				srcList: [],
-				fileList: [],
-				videoPreviewList: {},
-				visible: false,
-				video: {}
-			};
-		},
-		mounted() {
-			this.headers.token = getToken();
-			this.fileList = JSON.parse(JSON.stringify(this.list));
-		},
-		methods: {
-			beforeUpload(file) {
-				//上传前
-				if ((parseInt(file.size) / 1024 / 1024) > 10) {
-					//判断上传的文件不大于30M
-					this.$message.warning('请上传小于10M的文件');
-					return false;
-				}
-			},
-			progress(e) {
-				let percent = e.percent >= 100 ? 99 : parseInt(e.percent)
-				this.$loading({
-					percent: (percent + '%')
-				});
-			},
-			successFile(response, file, fileList) {
-				//上传成功
-				if (!response.data) return this.errorFile();
-				this.$message.success('上传成功');
-				let data = response.data;
-				let typeList = data.name.split('.');
-				this.fileList.push({
-					id: data.id,
-					name: data.name,
-					url: data.node.url,
-					type: typeList[typeList.length - 1]
-				});
-				this.$loading.close();
-			},
-			errorFile() {
-				//上传失败
-				this.$message.error('上传失败');
-				this.$loading.close();
-			},
-			removeFile(index) {
-				this.$confirm('确定要删除该文件?', () => {
-					this.fileList.splice(index, 1);
-				});
-			},
-			download(item) {
-				window.location.href = config.baseURL + '/file/filenode/' + item.id;
-			},
-			openVideo(item) {
-				this.video = item;
-				this.visible = true;
-			},
-			handleExceed(files, fileList) {
-				this.$message.warning('最多上传' + this.maxLen + '个文件,当前已上传' + fileList.length + '个文件,请重新选择');
-			},
-			mp4Preview(item) {
-				const video = document.createElement('video') // 也可以自己创建video
-				video.src = item.url // url地址 url跟 视频流是一样的
-				video.crossOrigin = '*' // 解决跨域问题,也就是提示污染资源无法转换视频
-				video.currentTime = 1 // 第一帧
-				video.oncanplay = () => {
-					let canvas = document.createElement('canvas') // 获取 canvas 对象
-					const ctx = canvas.getContext('2d') // 绘制2d
-					canvas.width = video.clientWidth ? video.clientWidth : 320 // 获取视频宽度
-					canvas.height = video.clientHeight ? video.clientHeight : 320 //获取视频高度
-					// 利用canvas对象方法绘图
-					ctx.drawImage(video, 0, 0, canvas.width, canvas.height)
-					// 转换成base64形式
-					const videoFirstImgsrc = canvas.toDataURL('image/png') // 截取后的视频封面
-					this.videoPreviewList[item.id] = videoFirstImgsrc;
-					this.$forceUpdate();
-					video.remove()
-					canvas.remove();
-				}
-			}
-		},
-		watch: {
-			list(val) {
-				this.fileList = JSON.parse(JSON.stringify(val));
-			},
-			fileList() {
-				for (let i = 0; i < this.fileList.length; i++) {
-					if (this.fileList[i].type === 'mp4') {
-						this.mp4Preview(this.fileList[i])
-					}
-				}
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-	.el-dialog.monitor-dialog {
-		height: 500px;
-		margin-top: 20vh !important;
-	}
-
-	.common-update {
-		display: flex;
-		flex-wrap: wrap;
-
-		.update-image-tips {
-			font-size: 12px;
-			opacity: 0.7;
-		}
-
-		.video-image {
-			cursor: pointer;
-			position: relative;
-
-			&:hover {
-				.video-icon {
-					opacity: 1;
-				}
-			}
-
-			.video-icon {
-				position: absolute;
-				top: 0;
-				left: 0;
-				right: 0;
-				bottom: 0;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				background: rgba(0, 0, 0, 0.6);
-				opacity: 0;
-				transition: opacity 200ms;
-
-				i {
-					font-size: 24px;
-				}
-			}
-		}
-
-		.common-update-button {
-			width: 100px;
-			height: 100px;
-			border: 1px dashed $--border-color-base;
-			display: flex;
-			flex-direction: column;
-			justify-content: center;
-			margin: 4px 0;
-
-			.huifont-xinzeng {
-				line-height: 20px;
-				font-size: 20px;
-			}
-
-			.common-update-button-label {
-				font-size: 14px;
-				line-height: 20px;
+<template>
+	<div class="common-update">
+		<div v-if="type === 'preview'">
+			<div class="no-tips" v-if="fileList.length === 0">暂无附件</div>
+			<div class="common-perview-image" v-else>
+				<div class="common-update-image-box" v-for="(item,index) in fileList" :key="item.id">
+					<div class="el-image video-image" v-if="item.type === 'mp4'">
+						<div class="video-icon">
+							<i class="el-icon-video-play" @click="openVideo(item)"></i>
+						</div>
+						<img :src="videoPreviewList[item.id]" class="el-image__inner">
+					</div>
+					<el-image :src="item.url" :preview-src-list="[item.url]" v-else>
+						<div slot="error" class="image-slot">
+							<el-tooltip class="item" effect="dark" :content="item.name" placement="bottom">
+								<div class="image-text">
+									<span>{{item.type.toUpperCase()}}</span>
+									<div class="file-download">
+										<i class="el-icon-download" @click="download(item)"></i>
+									</div>
+								</div>
+							</el-tooltip>
+						</div>
+					</el-image>
+				</div>
+			</div>
+		</div>
+		<div v-else>
+			<div class="common-update-image">
+				<div class="common-update-image-box" v-for="(item,index) in fileList" :key="item.id">
+					<div class="el-image video-image" v-if="item.type === 'mp4'">
+						<div class="video-icon">
+							<i class="el-icon-video-play" @click="openVideo(item)"></i>
+						</div>
+						<img :src="videoPreviewList[item.id]" class="el-image__inner">
+					</div>
+					<el-image :src="item.url" :preview-src-list="[item.url]" v-else>
+						<div slot="error" class="image-slot">
+							<el-tooltip class="item" effect="dark" :content="item.name" placement="bottom">
+								<div class="image-text">{{item.type.toUpperCase()}}</div>
+							</el-tooltip>
+						</div>
+					</el-image>
+					<div class="common-update-close" @click="removeFile(index)">
+						<i class="el-icon-close"></i>
+					</div>
+				</div>
+				<el-upload :action="action" :headers="headers" :show-file-list="false" name="uploadFile"
+					:before-upload="beforeUpload" :on-success="successFile" :on-error="errorFile" :accept="accept"
+					v-if="fileList.length < maxLen" :on-progress="progress" :limit="maxLen" :on-exceed="handleExceed"
+					:multiple="maxLen === 1 ? false : true">
+					<div class="common-update-button">
+						<i class="iconfont huifont-xinzeng"></i>
+						<div class="common-update-button-label">{{text}}</div>
+					</div>
+				</el-upload>
+			</div>
+			<div class="update-image-tips" v-if="fileSize"><span class="color-danger">*</span> 请上传小于{{fileSize}}M的文件
+			</div>
+		</div>
+		<el-dialog :close-on-click-modal="false" :title="video.name" custom-class="monitor-dialog"
+			:visible.sync="visible" width="900px" height="500px" :append-to-body="true">
+			<div class="video-box">
+				<video v-if="visible" width="900" height="445" controls>
+					<source :src="video.url" type="video/mp4" />
+				</video>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import config from '@/config';
+	import {
+		getToken
+	} from '@/uitls/auth';
+	export default {
+		props: {
+			list: {
+				type: Array,
+				default: () => {
+					return []
+				}
+			},
+			type: {
+				type: String,
+				default: 'preview'
+			},
+			maxLen: {
+				type: Number,
+				default: 5
+			},
+			text: {
+				type: String,
+				default: '上传图片'
+			},
+			accept: {
+				type: String,
+				default: '.png, .jpg, .jpeg'
+			},
+			fileSize: {
+				type: Number,
+				default: 0
+			}
+		},
+		data() {
+			return {
+				action: config.baseURL + '/file/filenode/-1', //上传地址
+				headers: {
+					token: ''
+				},
+				url: '',
+				srcList: [],
+				fileList: [],
+				videoPreviewList: {},
+				visible: false,
+				video: {}
+			};
+		},
+		mounted() {
+			this.headers.token = getToken();
+			this.fileList = JSON.parse(JSON.stringify(this.list));
+		},
+		methods: {
+			beforeUpload(file) {
+				if (!this.fileSize) return true;
+				//上传前
+				if ((parseInt(file.size) / 1024 / 1024) > this.fileSize) {
+					this.$message.warning(`请上传小于${this.fileSize}M的文件`);
+					return false;
+				}
+				return true;
+			},
+			progress(e) {
+				let percent = e.percent >= 100 ? 99 : parseInt(e.percent)
+				this.$loading({
+					percent: (percent + '%')
+				});
+			},
+			successFile(response, file, fileList) {
+				//上传成功
+				if (!response.data) return this.errorFile();
+				this.$message.success('上传成功');
+				let data = response.data;
+				let typeList = data.name.split('.');
+				this.fileList.push({
+					id: data.id,
+					name: data.name,
+					url: data.node.url,
+					type: typeList[typeList.length - 1]
+				});
+				this.$loading.close();
+			},
+			errorFile() {
+				//上传失败
+				this.$message.error('上传失败');
+				this.$loading.close();
+			},
+			removeFile(index) {
+				this.$confirm('确定要删除该文件?', () => {
+					this.fileList.splice(index, 1);
+				});
+			},
+			download(item) {
+				window.location.href = config.baseURL + '/file/filenode/' + item.id;
+			},
+			openVideo(item) {
+				this.video = item;
+				this.visible = true;
+			},
+			handleExceed(files, fileList) {
+				this.$message.warning('最多上传' + this.maxLen + '个文件,当前已上传' + fileList.length + '个文件,请重新选择');
+			},
+			mp4Preview(item) {
+				const video = document.createElement('video') // 也可以自己创建video
+				video.src = item.url // url地址 url跟 视频流是一样的
+				video.crossOrigin = '*' // 解决跨域问题,也就是提示污染资源无法转换视频
+				video.currentTime = 1 // 第一帧
+				video.oncanplay = () => {
+					let canvas = document.createElement('canvas') // 获取 canvas 对象
+					const ctx = canvas.getContext('2d') // 绘制2d
+					canvas.width = video.clientWidth ? video.clientWidth : 320 // 获取视频宽度
+					canvas.height = video.clientHeight ? video.clientHeight : 320 //获取视频高度
+					// 利用canvas对象方法绘图
+					ctx.drawImage(video, 0, 0, canvas.width, canvas.height)
+					// 转换成base64形式
+					const videoFirstImgsrc = canvas.toDataURL('image/png') // 截取后的视频封面
+					this.videoPreviewList[item.id] = videoFirstImgsrc;
+					this.$forceUpdate();
+					video.remove()
+					canvas.remove();
+				}
+			}
+		},
+		watch: {
+			list(val) {
+				this.fileList = JSON.parse(JSON.stringify(val));
+			},
+			fileList() {
+				for (let i = 0; i < this.fileList.length; i++) {
+					if (this.fileList[i].type === 'mp4') {
+						this.mp4Preview(this.fileList[i])
+					}
+				}
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.el-dialog.monitor-dialog {
+		height: 500px;
+		margin-top: 20vh !important;
+	}
+
+	.common-update {
+		display: flex;
+		flex-wrap: wrap;
+
+		.update-image-tips {
+			font-size: 12px;
+			opacity: 0.7;
+		}
+
+		.video-image {
+			cursor: pointer;
+			position: relative;
+
+			&:hover {
+				.video-icon {
+					opacity: 1;
+				}
+			}
+
+			.video-icon {
+				position: absolute;
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				background: rgba(0, 0, 0, 0.6);
+				opacity: 0;
+				transition: opacity 200ms;
+
+				i {
+					font-size: 24px;
+				}
+			}
+		}
+
+		.common-update-button {
+			width: 100px;
+			height: 100px;
+			border: 1px dashed $--border-color-base;
+			display: flex;
+			flex-direction: column;
+			justify-content: center;
+			margin: 4px 0;
+
+			.huifont-xinzeng {
+				line-height: 20px;
+				font-size: 20px;
+			}
+
+			.common-update-button-label {
+				font-size: 14px;
+				line-height: 20px;
 				padding-top: 10px;
-			}
-		}
-
-		.common-perview-image {
-			display: flex;
-			flex-wrap: wrap;
-
-			.el-image {
-				width: 64px;
-				height: 64px;
-				border-radius: 2px;
-				background: transparent;
-			}
-		}
-
-		.image-slot {
-			width: 100%;
-			height: 100%;
-			border-radius: 4px;
-			background: #253642;
-			position: relative;
-
-			.file-download {
-				position: absolute;
-				display: none;
-				align-items: center;
-				justify-content: center;
-				font-size: 20px;
-				background: rgba(0, 0, 0, 0.8);
-				top: 0;
-				left: 0;
-				right: 0;
-				bottom: 0;
-				color: #fff;
-				cursor: pointer;
-			}
-
-			.image-text {
-				font-size: 20px;
-				width: 100%;
-				height: 100%;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				color: #fff;
-				font-weight: bold;
-
-				&:hover {
-					.file-download {
-						display: flex;
-					}
-				}
-			}
-
-		}
-
-		.common-update-image-box {
-			display: flex;
-			position: relative;
-			margin-right: 5px;
-		}
-
-		.common-update-image {
-			display: flex;
-			flex-wrap: wrap;
-
-			.common-update-image-box {
-				margin: 4px 8px 4px 0;
-			}
-
-			.el-image {
-				width: 100px;
-				height: 100px;
-				border-radius: 2px;
-				background: transparent;
-			}
-
-			.common-update-close {
-				position: absolute;
-				right: -7px;
-				top: -7px;
-				background: $--color-danger;
-				width: 14px;
-				height: 14px;
-				line-height: 14px;
-				text-align: center;
-				border-radius: 50%;
-				font-size: 10px;
-				cursor: pointer;
-				color: #fff;
-			}
-		}
-	}
+				color: $--color-text-secondary;
+			}
+		}
+
+		.common-perview-image {
+			display: flex;
+			flex-wrap: wrap;
+
+			.el-image {
+				width: 64px;
+				height: 64px;
+				border-radius: 2px;
+				background: transparent;
+			}
+		}
+
+		.image-slot {
+			width: 100%;
+			height: 100%;
+			border-radius: 4px;
+			background: #253642;
+			position: relative;
+
+			.file-download {
+				position: absolute;
+				display: none;
+				align-items: center;
+				justify-content: center;
+				font-size: 20px;
+				background: rgba(0, 0, 0, 0.8);
+				top: 0;
+				left: 0;
+				right: 0;
+				bottom: 0;
+				color: #fff;
+				cursor: pointer;
+			}
+
+			.image-text {
+				font-size: 20px;
+				width: 100%;
+				height: 100%;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				color: #fff;
+				font-weight: bold;
+
+				&:hover {
+					.file-download {
+						display: flex;
+					}
+				}
+			}
+
+		}
+
+		.common-update-image-box {
+			display: flex;
+			position: relative;
+			margin-right: 5px;
+		}
+
+		.common-update-image {
+			display: flex;
+			flex-wrap: wrap;
+
+			.common-update-image-box {
+				margin: 4px 8px 4px 0;
+			}
+
+			.el-image {
+				width: 100px;
+				height: 100px;
+				border-radius: 2px;
+				background: transparent;
+			}
+
+			.common-update-close {
+				position: absolute;
+				right: -7px;
+				top: -7px;
+				background: $--color-danger;
+				width: 14px;
+				height: 14px;
+				line-height: 14px;
+				text-align: center;
+				border-radius: 50%;
+				font-size: 10px;
+				cursor: pointer;
+				color: #fff;
+			}
+		}
+	}
 </style>

+ 6 - 3
virgo.wzfrontend/workark/src/components/website/createOrder.vue

@@ -20,7 +20,7 @@
 				</div>
 				<div class="order-box">
 					<div class="title" style="border: none;">优惠券</div>
-					<div class="content contents">
+					<div class="content contents" v-if="coupon.length>0">
 						<div :class="returnCouponClass(item) ?'coupon-card' :'coupon-card disabled'"
 							v-for="(item,index) in coupon" :key="index" @click="checkCoupon(item)">
 							<div
@@ -47,6 +47,9 @@
 							</div>
 						</div>
 					</div>
+					<div class="content contents" v-else>
+						<div style="text-align: center;width: 100%; margin-top: 15px; color: #6d6d6d;">暂无优惠券</div>
+					</div>
 				</div>
 			</div>
 			<div class="create-order-submit">
@@ -93,8 +96,8 @@
 		</div>
 		<el-dialog :close-on-click-modal="false" title="支付订单" :visible.sync="dialogVisible" width="600px"
 			:append-to-body="true">
-			<pay-order v-if="dialogVisible" :orderNo="order.orderNo">
-				<el-button size="small" @click="lookOrder">查看订单</el-button>
+			<pay-order v-if="dialogVisible" :orderNo="order.orderNo">
+				<el-button size="small" @click="lookOrder">查看订单</el-button>
 			</pay-order>
 		</el-dialog>
 	</div>

+ 19 - 5
virgo.wzfrontend/workark/src/components/website/payOrder.vue

@@ -3,9 +3,18 @@
 		<div class="pay-order-item"><span class="label">订单编号:</span><span>{{orderNo}}</span></div>
 		<div class="pay-order-item"><span class="label">支付方式:</span><span>微信支付</span></div>
 		<div v-if="state === 'NOTPAY'">
-			<div class="pay-img" v-if="payUrl">
-				<img :src="payUrl" alt="pay.png" />
-			</div>
+			<el-skeleton :loading="loading" animated>
+				<template slot="template">
+					<div class="pay-img">
+						<el-skeleton-item variant="image" style="width: 300px; height: 300px;"></el-skeleton-item>
+					</div>
+				</template>
+				<template>
+					<div class="pay-img" v-if="payUrl">
+						<img :src="payUrl" alt="pay.png" />
+					</div>
+				</template>
+			</el-skeleton>
 		</div>
 		<div v-else-if="state === 'SUCCESS'">
 			<el-result icon="success" title="支付成功">
@@ -28,7 +37,8 @@
 			return {
 				payUrl: '',
 				timer: null,
-				state: ''
+				state: 'NOTPAY',
+				loading: false
 			}
 		},
 		mounted() {
@@ -39,11 +49,13 @@
 		},
 		methods: {
 			init() {
+				this.loading = true;
 				createPayQR(this.orderNo).then(res => {
 					if (res.state) {
 						this.payUrl = res.data.base64;
 						this.findState();
 					}
+					this.loading = false;
 				})
 			},
 			findState() {
@@ -79,7 +91,9 @@
 		}
 
 		.pay-img {
-			text-align: center;
+			display: flex;
+			justify-content: center;
+			align-items: center;
 
 			img {
 				width: 300px;

+ 7 - 4
virgo.wzfrontend/workark/src/components/work/serve/list/detail.vue

@@ -47,7 +47,8 @@
 				<div class="hui-detail-box">
 					<div class="hui-detail-title">订单过程</div>
 					<div class="hui-detail-content" style="padding:0;">
-						<process-set v-if="part.id" :part="part" type="product" :key="reloadKey"></process-set>
+						<process-set ref="processSet" v-if="part.id" :part="part" type="product"
+							:key="reloadKey"></process-set>
 					</div>
 				</div>
 			</div>
@@ -143,6 +144,7 @@
 						break;
 					case 3:
 						this.$confirm('是否确定订单,确认订单后将不能再修改', () => {
+							this.$refs.processSet.initStatus();
 							changeOrderStatus({
 								orderNo: this.part.orderNo,
 								status: 1
@@ -180,7 +182,7 @@
 			},
 			updateOrderSuccessFunc(res, done) {
 				if (res.state) {
-					this.$message.success('修改成功');
+					this.$message.success('操作成功');
 					this.init();
 					this.$emit('callback', 'init');
 				}
@@ -194,9 +196,10 @@
 					this.activeList = [];
 					this.timeOut = setTimeout(() => {
 						this.$emit('callback', 'init');
+						this.init();
 						clearTimeout(this.timeOut);
-						this.timeOut = null
-					}, 3000)
+						this.timeOut = null;
+					}, 5000)
 				}
 			}
 		},

+ 1 - 1
virgo.wzfrontend/workark/src/components/work/system/serveSet/processForm.vue

@@ -87,7 +87,7 @@
 				let postData = JSON.parse(JSON.stringify(this.departmentForm));
 				if (postData.attachment === 0) {
 					delete postData.attachmentNumber;
-					delete postData.roleId;
+					postData.roleId = 1;
 				}
 				if (postData.sequence === 0) delete postData.sequence;
 

+ 36 - 1
virgo.wzfrontend/workark/src/components/work/system/serveSet/processSet.vue

@@ -1,7 +1,7 @@
 <template>
 	<div :class="'process-set '+type" v-loading="loading">
 		<process-set-item :list="list" :type="operationType"></process-set-item>
-		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="900px"
+		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="800px"
 			:append-to-body="true">
 			<process-form v-if="visible" @callback="callback" :isUpdate="isUpdate" :itemId="itemId" :type="type"
 				:partId="part.id">
@@ -18,6 +18,7 @@
 		deleteProcessSetData,
 		getProcessData,
 		deleteProcessData,
+		updateProcessStatus
 	} from '@/api/system'
 	import {
 		mapGetters
@@ -91,6 +92,31 @@
 					this.init();
 					this.$emit('callback', 'reloadKey');
 				}
+			},
+			//状态:0-未开始  1-进行中  2-进行中-提交   3-通过   4-不通过
+			initStatus() {
+				let arr = this.getFirstNode(this.list).map(node => node.id);
+				if (arr.length === 0) return;
+				updateProcessStatus(1, arr.join(',')).then(res => {
+					if (res.state) {
+						this.init();
+					}
+				})
+			},
+			getFirstNode(data) {
+				const result = [];
+				let current = data;
+				while (current && Array.isArray(current)) {
+					if (current.length === 0) break; // 空数组则终止
+					const firstElement = current[0];
+					result.push(firstElement);
+					// 检查是否包含子数组(根据 children 字段)
+					current = firstElement.children && Array.isArray(firstElement.children) ? firstElement.children : null;
+				}
+				return result;
+			},
+			getNextNode() {
+
 			}
 		},
 		computed: {
@@ -138,8 +164,17 @@
 			opacity: 0.8;
 		}
 
+		.operation-button {
+			border-top: 1px solid $--border-color-light;
+			text-align: right;
+			padding-top: 10px;
+			margin-top: 10px;
+		}
+
 		.process-item-title {
 			padding: 5px 0;
+			display: flex;
+			align-items: center;
 
 			.label {
 				font-weight: bold;

+ 117 - 56
virgo.wzfrontend/workark/src/components/work/system/serveSet/processSetItem.vue

@@ -1,57 +1,118 @@
-<template>
-	<div>
-		<div :class="returnItemClass(item)" v-for="(item,index) in list" :key="item.id">
-			<div class="process-set-state">
-				<div class="process-set-state-2">
-					<div class="process-set-state-1"></div>
-				</div>
-			</div>
-			<div class="line line-top" v-if="index >0"></div>
-			<div class="line line-bottom" v-if="index < list.length-1 || type === 'edit'"></div>
-			<div class="process-item-title">
-				<span class="label">{{index+1}}.{{item.name}}</span>
-				<i class="el-icon-edit-outline color-primary" v-if="type === 'edit'" @click="edit('update', item.id)"></i>
-				<i class="el-icon-delete color-danger" v-if="type === 'edit'" @click="edit('delete', item.id)"></i>
-			</div>
-			<div class="process-item-content" v-if="item.children">
-				<process-set-item :list="item.children" :type="type" :parentId="item.id">
-				</process-set-item>
-			</div>
-		</div>
-		<div class="process-set-insert" @click="edit('insert', parentId || -1)" v-if="type === 'edit'">新增</div>
-	</div>
-</template>
-
-<script>
-	const processSetItem = () => import('./processSetItem.vue');
-	export default {
-		props: ['list', 'type', 'parentId'],
-		mounted() {},
-		methods: {
-			returnItemClass(item) {
-				let str = '';
-				switch (item.state) {
-					case 1:
-						str = 'success'
-						break;
-					default:
-						str = 'info'
-						break;
-				}
-				return 'process-set-item ' + str;
-			},
-			edit(type, id) {
-				this.$store.dispatch('app/changeProcessSet', {
-					type,
-					id
-				});
-			}
-		},
-		components: {
-			processSetItem
-		}
-	}
-</script>
-
-<style>
+<template>
+	<div>
+		<div :class="returnItemClass(item)" v-for="(item,index) in list" :key="item.id">
+			<div class="process-set-state">
+				<div class="process-set-state-2">
+					<div class="process-set-state-1"></div>
+				</div>
+			</div>
+			<div class="line line-top" v-if="index > 0"></div>
+			<div class="line line-bottom" v-if="index < list.length-1 || type === 'edit'"></div>
+			<div class="process-item-title">
+				<span class="label">{{index+1}}.{{item.name}}</span>
+				<i class="el-icon-edit-outline color-primary" v-if="type === 'edit'"
+					@click="edit('update', item.id)"></i>
+				<i class="el-icon-delete color-danger" v-if="type === 'edit'" @click="edit('delete', item.id)"></i>
+			</div>
+			<div class="" v-if="item.attachment === 1 && item.status === 1">
+				<upload ref="upload" :list="!item.attachmentContent?[]:JSON.parse(item.attachmentContent)" type="edit"
+					text="上传文件" accept="*">
+				</upload>
+				<div class="operation-button">
+					<el-button size="mini" @click="submit(item)">保存草稿</el-button>
+					<el-button size="mini" type="primary" @click="submit(item, 2)">提交</el-button>
+				</div>
+			</div>
+			<div class="" v-else-if="item.attachment === 1 && item.status === 2">
+				<upload :list="!item.attachmentContent ? [] : JSON.parse(item.attachmentContent)">
+				</upload>
+				<div class="operation-button">
+					<el-button size="mini" type="primary" @click="updateStatus(item,3)">通过</el-button>
+					<el-button size="mini" type="danger" @click="updateStatus(item,4)">不通过</el-button>
+				</div>
+			</div>
+			<div class="" v-else-if="item.attachment === 1 && item.attachmentContent">
+				<upload :list="!item.attachmentContent?[]:JSON.parse(item.attachmentContent)">
+				</upload>
+			</div>
+			<div class="process-item-content" v-if="item.children">
+				<process-set-item :list="item.children" :type="type" :parentId="item.id">
+				</process-set-item>
+			</div>
+		</div>
+		<div class="process-set-insert" @click="edit('insert', parentId || -1)" v-if="type === 'edit'">新增</div>
+	</div>
+</template>
+
+<script>
+	const processSetItem = () => import('./processSetItem.vue');
+	const upload = () => import('@/components/common/upload');
+	import {
+		updateProcessData,
+		updateProcessStatus
+	} from '@/api/system'
+	export default {
+		props: ['list', 'type', 'parentId'],
+		data() {
+			return {}
+		},
+		mounted() {},
+		methods: {
+			returnItemClass(item) {
+				let str = '';
+				switch (item.status) {
+					case 1:
+					case 2:
+						str = 'waiting'
+						break;
+					case 3:
+						str = 'success'
+						break;
+					case 4:
+						str = 'error'
+						break;
+					default:
+						str = 'info'
+						break;
+				}
+				return 'process-set-item ' + str;
+			},
+			edit(type, id) {
+				this.$store.dispatch('app/changeProcessSet', {
+					type,
+					id
+				});
+			},
+			submit(item, status) {
+				if (!this.$refs.upload) return;
+				if (this.$refs.upload[0].fileList.length === 0) return this.$message.warning('至少上传一个文件');
+				let data = {
+					id: item.id
+				};
+				data['attachmentContent'] = JSON.stringify(this.$refs.upload[0].fileList);
+				if (status) updateProcessStatus(status, item.id);
+				updateProcessData(data).then(res => {
+					if (res.state) {
+						item['status'] = status;
+						this.$message.success('操作成功');
+					}
+				})
+			},
+			updateStatus(item, status) {
+				updateProcessStatus(status, item.id).then(res => {
+					if (res.state) {
+						this.$message.success('操作成功');
+						item['status'] = status;
+					}
+				})
+			}
+		},
+		components: {
+			processSetItem,
+			upload
+		}
+	}
+</script>
+
+<style>
 </style>

+ 1 - 1
virgo.wzfrontend/workark/src/views/work/serve/list.vue

@@ -25,7 +25,7 @@
 							</span>
 						</template>
 					</el-table-column>
-					<el-table-column label="支付状态">
+					<el-table-column label="订单状态">
 						<template slot-scope="scope">
 							<div class="hui-state" v-if="!scope.row.status">
 								<div class="hui-state-bage hui-state-info"></div>

+ 1 - 1
virgo.wzfrontend/workark/src/views/work/system/serveSet.vue

@@ -43,7 +43,7 @@
 				:visible.sync="visible" width="900px" :append-to-body="true">
 				<depart-form v-if="visible&&type==='form'" @callback="callback" :isUpdate="isUpdate" :part="part">
 				</depart-form>
-				<process-set v-if="visible&&type==='process'" @callback="callback"  :part="part" type="model" operationType="edit">
+				<process-set v-if="visible&&type==='process'"  :part="part" type="model" operationType="edit">
 				</process-set>
 			</el-dialog>
 		</div>