Browse Source

大屏代码提交

user5 1 year ago
parent
commit
85e2646365

+ 38 - 0
src/api/sys/fileVideoService.js

@@ -0,0 +1,38 @@
+import request from "@/utils/httpRequest";
+
+export default {
+	upload: function (formData, config = {}) {
+		return request({
+			url: "/file/videoUpload?uploadPath=userdir",
+			method: "post",
+			config: config,
+			data: formData,
+			headers: { "Content-Type": "multipart/form-data" },
+		});
+	},
+
+	download: function (params) {
+		return request({
+			url: "/file/download",
+			method: "get",
+			params: params,
+		});
+	},
+
+	uploadFile: function (formData, config = {}) {
+		return request({
+			url: "/file/uploadFile?uploadPath=userdir",
+			method: "post",
+			config: config,
+			data: formData,
+			headers: { "Content-Type": "multipart/form-data" },
+		});
+	},
+	downloadFile: function (params) {
+		return request({
+			url: "/file/downloadFile",
+			method: "get",
+			params: params,
+		});
+	},
+};

+ 2 - 2
src/api/wdt/merchantDetails/MerchantDetailsService.js

@@ -29,11 +29,11 @@ export default {
 			params: { dataSources: dataSources },
 		});
 	},
-	screenSave: function (screenName) {
+	screenSave: function (screenName,filePath) {
 		return request({
 			url: "/wdt/merchantDetails/screenSave",
 			method: "post",
-			params: { screenName: screenName },
+			params: { screenName: screenName,filePath:filePath },
 		});
 	},
 	delete: function (ids) {

+ 244 - 0
src/components/upload/VideoFileUpload.vue

@@ -0,0 +1,244 @@
+<template>
+	<div class="file-upload">
+		<!--<el-progress style="margin-left: 5em"  v-if="progressFlag" :percentage="loadProgress"></el-progress>-->
+		<el-upload
+			:disabled="disabled"
+			:auto-upload="autoUpload"
+			:action="action"
+			:name="name"
+			:data="data"
+			:http-request="uploadFile"
+			v-model:file-list="defaultFileList"
+			:show-file-list="showFileList"
+			:drag="drag"
+			:accept="accept"
+			:multiple="multiple"
+			:limit="limit"
+			:before-upload="before"
+			:on-success="success"
+			:on-error="error"
+			:on-preview="handlePreview"
+			:on-exceed="handleExceed"
+			:on-progress="onUploadProgress"
+		>
+			<slot>
+				<el-button type="primary" :disabled="disabled"
+					>上传视频</el-button
+				>
+			</slot>
+			<template #tip>
+				<div v-if="tip" class="el-upload__tip">{{ tip }}</div>
+			</template>
+		</el-upload>
+		<el-progress v-if="progressFlag" :percentage="loadProgress"></el-progress>
+		<span style="display: none !important"
+			><el-input v-model="value"></el-input
+		></span>
+	</div>
+</template>
+
+<script>
+import config from "@/config/videoUpload";
+import request from '@/utils/httpRequest'
+
+export default {
+	props: {
+		modelValue: { type: String, default: "" },
+		tip: { type: String, default: "" },
+		action: { type: String, default: "" },
+		apiObj: { type: Object, default: () => {} },
+		name: { type: String, default: config.filename },
+		data: { type: Object, default: () => {} },
+		accept: { type: String, default: "" },
+		maxSize: { type: Number, default: config.maxSize },
+		limit: { type: Number, default: 0 },
+		autoUpload: { type: Boolean, default: true },
+		showFileList: { type: Boolean, default: true },
+		drag: { type: Boolean, default: false },
+		multiple: { type: Boolean, default: true },
+		disabled: { type: Boolean, default: false },
+		onSuccess: {
+			type: Function,
+			default: () => {
+				return true;
+			},
+		},
+	},
+	data() {
+		return {
+			progressFlag: false,
+			loadProgress: 0,
+			value: "",
+			defaultFileList: [],
+		};
+	},
+	watch: {
+		modelValue(val) {
+			if (val != this.toStr(this.defaultFileList)) {
+				this.defaultFileList = this.toArr(val);
+				this.value = val;
+			}
+		},
+		defaultFileList: {
+			handler(val) {
+				this.$emit("update:modelValue", this.toStr(val));
+				this.value = this.toStr(val);
+			},
+			deep: true,
+		},
+	},
+	methods: {
+		//默认值转换为数组
+		toArr(str) {
+			var _arr = [];
+			var arr = str.split(",");
+			arr.forEach((item) => {
+				if (item) {
+					var urlArr = item.split("&name=");
+					var fileName = urlArr[urlArr.length - 1];
+					_arr.push({
+						name: fileName,
+						url: item,
+					});
+				}
+			});
+			return _arr;
+		},
+		onUploadProgress(file, fileList) {
+			console.log(file)
+			//刚开始上传的时候,可以拿到ready状态,给个定时器,让进度条显示
+			if (file.status === 'ready') {
+				this.progressFlag = true //进度条显示
+				const interval = setInterval(() => {
+					if (this.loadProgress >= 100) {
+						clearInterval(interval)
+						return
+					}
+					this.loadProgress += 1 //进度条进度
+				}, 80)
+			}
+		},
+		//数组转换为原始值
+		toStr(arr) {
+			return arr.map((v) => v.url).join(",");
+		},
+		before(file) {
+			console.log(this.maxSize)
+			const maxSize = file.size / 1024 / 1024 < this.maxSize;
+			console.log(maxSize)
+			if (!maxSize) {
+				this.$message.warning(
+					`上传文件大小不能超过 ${this.maxSize}MB!`
+				);
+				return false;
+			}
+
+		},
+		success(res, file) {
+			var os = this.onSuccess(res, file);
+			if (os != undefined && os == false) {
+				return false;
+			}
+			var response = config.parseData(res);
+			file.url = response.src;
+		},
+		error(err) {
+			this.$notify.error({
+				title: "上传文件未成功",
+				message: err,
+			});
+		},
+		beforeRemove(uploadFile) {
+			return this.$confirm(`是否移除 ${uploadFile.name} ?`, "提示", {
+				type: "warning",
+			})
+				.then(() => {
+					return true;
+				})
+				.catch(() => {
+					return false;
+				});
+		},
+		handleExceed() {
+			this.$message.warning(
+				`当前设置最多上传 ${this.limit} 个文件,请移除后上传!`
+			);
+		},
+		handlePreview(uploadFile) {
+			window.open(uploadFile.url);
+		},
+		/*request(param) {
+			var apiObj = config.apiObj;
+			if (this.apiObj) {
+				apiObj = this.apiObj;
+			}
+			const data = new FormData();
+			data.append(param.filename, param.file);
+			for (const key in param.data) {
+				data.append(key, param.data[key]);
+			}
+			console.log(apiObj)
+			apiObj
+				.upload(data, {
+					onUploadProgress: (e) => {
+						console.log(e)
+						const complete = parseInt(
+							((e.loaded / e.total) * 100) | 0,
+							80
+						);
+						this.loadProgress = complete;
+						console.log(complete)
+						param.onProgress({ percent: complete });
+					},
+				})
+				.then((res) => {
+					param.onSuccess(res);
+					// eslint-disable-next-line no-unused-vars
+				})
+				.catch(() => {
+					// param.onError(err)
+				});
+		},*/
+		// 覆盖默认的上传行为,可以自定义上传的实现
+		async uploadFile(param) {
+			// param.file就是上传文件本身
+
+			const formData = new FormData()
+			formData.append('file', param.file)
+			formData.append('PHP_SESSION_UPLOAD_PROGRESS', 'file1')
+
+			// 发起请求
+			request({
+				method: 'post',
+				// 上传地址,因为我这里的request请求是自己封装过的,所以就只需要填写接口后面的地址即可
+				url: `${request.BASE_URL}/file/videoUpload`,
+				data: formData,
+				// 重点一:complete就是处理后的上传进度数值1-100
+				onUploadProgress: progressEvent => {
+					const complete = parseInt(
+						((progressEvent.loaded / progressEvent.total) * 100) | 0,
+						10
+					)
+					// 重点二:onProgress()方法需要以上方接收的形参来调用
+					// 这个方法有一个参数"percent",给他进度值 complete 即可
+					param.onProgress({ percent: complete })
+				}
+			}).then(res => {
+				param.onSuccess(res);
+			})
+		},
+	},
+};
+</script>
+
+<style scoped>
+.el-form-item.is-error .file-upload:deep(.el-upload-dragger) {
+	border-color: var(--el-color-danger);
+}
+.file-upload {
+	width: 100%;
+}
+.file-upload:deep(.el-upload-list__item) {
+	transition: none !important;
+}
+</style>

+ 15 - 0
src/config/videoUpload.js

@@ -0,0 +1,15 @@
+import fileVideoService from "@/api/sys/fileVideoService";
+
+//上传配置
+
+export default {
+	apiObj: fileVideoService, //上传请求API对象
+	filename: "file", //form请求时文件的key
+	successCode: 200, //请求完成代码
+	maxSize: 2048, //最大文件大小 默认2048MB
+	parseData: function (res) {
+		return {
+			src: res, //分析图片远程地址结构
+		};
+	},
+};

+ 1 - 1
src/views/wdt/merchantCompany/MerchantCompanyForm.vue

@@ -121,7 +121,7 @@
 			</el-col>-->
 
 			<el-col :span="12">
-				<el-form-item label="年销售额(元)" prop="annualSales"
+				<el-form-item label="年销售额(元)" prop="annualSales"
 							  :rules="[
                           {required: true, message:'年销售额不能为空', trigger:'blur'}
                  ]">

+ 1 - 1
src/views/wdt/merchantCompany/MerchantCompanyList.vue

@@ -130,7 +130,7 @@
 					<vxe-column min-width="100" title="公司类型" field="companyTypeStr" align="center"></vxe-column>
 					<vxe-column min-width="130" title="联系人姓名" field="linkmanName" align="center"></vxe-column>
 					<vxe-column min-width="180" title="联系人电话" field="linkmanPhone" align="center"></vxe-column>
-					<vxe-column min-width="100" title="年销售额(元)" field="annualSales" align="center"></vxe-column>
+					<vxe-column min-width="100" title="年销售额(元)" field="annualSales" align="center"></vxe-column>
 					<vxe-column min-width="100" title="入驻平台" field="settledPlatformStr" align="center"></vxe-column>
 					<vxe-column min-width="100" title="创建时间" field="createTime" align="center"></vxe-column>
 

+ 37 - 5
src/views/wdt/merchantDetails/MerchantDetailsInfo.vue

@@ -31,7 +31,7 @@
 								<el-input onkeyup="value=value.replace(/[^\d]/g,0)" v-model="generalForm.settledEnterpriseNumber"></el-input>
 							</el-form-item>
 
-							<el-form-item label="合作企业数" prop="cooperativeEnterpriseNumber"
+							<el-form-item label="农村合作社数" prop="cooperativeEnterpriseNumber"
 							>
 								<el-input onkeyup="value=value.replace(/[^\d]/g,0)" v-model="generalForm.cooperativeEnterpriseNumber"></el-input>
 							</el-form-item>
@@ -79,11 +79,11 @@
 						</el-form>
 					</el-tab-pane>
 
-					<el-tab-pane label="修改大屏名称">
+					<el-tab-pane label="修改大屏名称和视频">
 						<el-form
 							:model="screenForm"
 							ref="screenForm"
-							label-width="100px"
+							label-width="150px"
 						>
 							<el-form-item label="大屏名称" :rules="[
 									{ required: true, message: '必填项不能为空', trigger: 'blur', },
@@ -95,6 +95,28 @@
 								></el-input>
 							</el-form-item>
 
+							<el-divider border-style="dashed" />
+
+							<el-form-item
+								style="width: 500px;"
+								label="视频文件上传"
+								prop="path"
+								:rules="[
+								{
+									required: true,
+									message: '视频文件上传不能为空,或视频文件暂未上传完成',
+									trigger: 'blur',
+								},
+							]"
+							>
+
+								<VideoFileUpload
+									v-model="screenForm.path"
+									:limit="1"
+									tip="最多上传1个文件,单个文件不要超过2G,请上传视频格式文件"
+								></VideoFileUpload>
+							</el-form-item>
+
 							<el-form-item>
 								<el-button
 									type="primary"
@@ -113,6 +135,7 @@
 
 <script>
 	import colorTool from "@/utils/color";
+	import VideoFileUpload from '@/components/upload/VideoFileUpload'
 	import merchantDetailsService from "@/api/wdt/merchantDetails/MerchantDetailsService";
 	export default {
 		data() {
@@ -148,7 +171,8 @@
 					enterNumber: "",
 				},
 				screenForm: {
-					name: ""
+					name: "",
+					path: ""
 				},
 				tablePage: {
 					total: 0,
@@ -175,6 +199,11 @@
 				}else{
 					this.screenForm.name = ''
 				}
+				if(data.path){
+					this.screenForm.path = data.path
+				}else{
+					this.screenForm.path = ''
+				}
 				this.recover(this.generalForm, data);
 			});
 			this.refreshList();
@@ -193,6 +222,9 @@
 				this.$TOOL.data.set("APP_COLOR", val);
 			},
 		},
+		components:{
+			VideoFileUpload
+		},
 		methods: {
 			async submitGeneralForm() {
 				let valid = await this.$refs["generalForm"].validate();
@@ -208,7 +240,7 @@
 				let valid = await this.$refs["screenForm"].validate();
 				if (valid) {
 					const loading = this.$loading();
-					let data = await merchantDetailsService.screenSave(this.screenForm.name);
+					let data = await merchantDetailsService.screenSave(this.screenForm.name,this.screenForm.path);
 					loading.close();
 					this.$message.success(data);
 				}

+ 3 - 3
src/views/wdt/merchantProduct/MerchantProductForm.vue

@@ -33,7 +33,7 @@
 
 
           <el-col :span="24">
-            <el-form-item label="产品种类数量" prop="salesVolume"
+            <el-form-item label="种类数量" prop="salesVolume"
                           :rules="[
 
                  ]">
@@ -46,7 +46,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="产品销售额(元)" prop="saleroom"
+            <el-form-item label="销售额(元)" prop="saleroom"
                           :rules="[
 
                  ]">
@@ -59,7 +59,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="产品月销售额(元)" prop="monthlySalesVolume"
+            <el-form-item label="月销售额(元)" prop="monthlySalesVolume"
                           :rules="[
 
                  ]">

+ 2 - 2
src/views/wdt/merchantProduct/MerchantProductList.vue

@@ -63,8 +63,8 @@
 						</template>
 					</vxe-column>
 					<vxe-column width="120" title="种类数量" field="salesVolume" align="center"></vxe-column>
-					<vxe-column width="120" title="销售额(元)" field="saleroom" align="center"></vxe-column>
-					<vxe-column width="120" title="月销售额(元)" field="monthlySalesVolume" align="center"></vxe-column>
+					<vxe-column width="120" title="销售额(元)" field="saleroom" align="center"></vxe-column>
+					<vxe-column width="120" title="月销售额(元)" field="monthlySalesVolume" align="center"></vxe-column>
 					<vxe-column width="120" title="排序" field="sort" align="center"></vxe-column>
 					<vxe-column width="180" title="创建时间" field="createTime" align="center"></vxe-column>