lhl 2 месяцев назад
Родитель
Сommit
426b7e647d

+ 26 - 0
src/api/system/showTemplate.js

@@ -104,4 +104,30 @@ export function  SystemServiceTimeTypeDel(data = {}) {
     method: 'post',
     method: 'post',
     data : data
     data : data
   });
   });
+}
+///systemv1/code/list
+/**
+ * 激活码列表
+ * @param data
+ * @constructor
+ */
+export function  getCodeList(data = {}) {
+  return request({
+    url: '/systemv1/code/list',
+    method: 'post',
+    data : data
+  });
+}
+
+/**
+ * 添加激活码
+ * @param data
+ * @constructor
+ */
+export function  addCode(data = {}) {
+  return request({
+    url: '/systemv1/code/add',
+    method: 'post',
+    data : data
+  });
 }
 }

+ 333 - 0
src/components/system/showTemplate/code.vue

@@ -0,0 +1,333 @@
+<template>
+    <div>
+        <i-page-header :title="pageTitle"></i-page-header>
+        <Card :bordered="false" dis-hover class="ivu-mt">
+            <div style="padding: 20px 0;">
+				<!-- <el-select v-model="detial.is_hot" placeholder="是否热门" style="margin:0px 10px 10px 0px;width: 140px;">
+					<el-option label="选择是否热门" value=""></el-option>
+				    <el-option label="热门" value="1"></el-option>
+					<el-option label="常规" value="0"></el-option>
+				</el-select>
+				<el-select v-model="detial.is_recommend" placeholder="是否推荐" style="margin:0px 10px 10px 0px;width: 140px;">
+					<el-option label="选择是否推荐" value=""></el-option>
+				    <el-option label="推荐" value="1"></el-option>
+					<el-option label="常规" value="0"></el-option>
+				</el-select>
+				<Input placeholder="请输入标题"  style="width:140px;" class="mr10" v-model="detial.title"/>
+				<DatePicker style="width: 250px" format="yyyy-MM-dd HH:mm:ss" v-model="detial.time" type="datetimerange" placement="bottom-start" placeholder="更新时间范围" :options="options"></DatePicker>
+				<el-button type="primary" style="margin-left: 6px;" @click="tapSeach">查询</el-button> -->
+                <el-button type="danger" style="margin-top: 10px;" @click="tapAdd">添加激活码</el-button>
+            </div>
+			
+			<!-- <div class="muser-tab-continer">
+			    <a class="muser-tab-a" :class="detial.status==''   ? 'active':''" @click="statusChange('')">全部</a>
+			    <a class="muser-tab-a" :class="detial.status=='1'  ? 'active':''" @click="statusChange('1')">上线</a>
+			    <a class="muser-tab-a" :class="detial.status=='0'  ? 'active':''" @click="statusChange('0')">下架</a>
+			</div> -->
+            <el-table :data="detial.data" v-loading="detial.loading" :stripe="true" :border="true" >
+                <el-table-column prop="id"    label="ID"  width="80" align="center"></el-table-column>
+				<el-table-column prop="code"  label="激活码" width="200"></el-table-column>
+				<el-table-column prop="show_template_id"  label="模板ID" width="100"></el-table-column>
+				<el-table-column prop="use_uid"     label="领取用户UID" min-width="160" align="center"></el-table-column>
+				<el-table-column prop="times" label="剩余次数" width="150">
+					<template slot-scope="scope">
+						{{scope.row.use_times}}/{{scope.row.times}}
+					</template>
+				</el-table-column>
+				<el-table-column prop="status" label="状态" width="150">
+					<template slot-scope="scope">
+						<el-link :type="scope.row.status ==0 ? 'primary': (scope.row.status == 1 ?'success': 'danger')" :underline="false">{{scope.row.status ==0 ? '待使用': (scope.row.status == 1 ?'己使用': '己失效')}}</el-link>
+					</template>
+				</el-table-column>
+            </el-table>
+            <div class="acea-row row-right page">
+                <Page :total="detial.pageCount" show-elevator show-total @on-change="tapPage" :page-size="detial.pageSize"/>
+            </div>
+        </Card>
+		
+	<Modal v-model="dialogVisible" :title="title" @on-cancel="editClose" width="800">
+		<div>
+			<el-form ref="form" :model="form" label-width="120px">
+				<el-tabs v-model="formActiveName">
+				    <el-tab-pane label="基础信息" name="tab_base">
+						
+						<el-form-item label="模板ID" prop="show_template_id" :rules="[{ required: true, message: '请输入模板ID'}]">
+							<el-input placeholder="请输入模板ID" autocomplete="off" v-model="form.show_template_id" :disabled="(form.id && form.id>0)?true:false"></el-input>
+						</el-form-item>
+						<el-form-item label="数量" prop="num" :rules="[{ required: true, message: '请输入数量'}]">
+							<el-input placeholder="请输入数量" autocomplete="off" v-model="form.num"></el-input>
+						</el-form-item>
+					</el-tab-pane>
+				</el-tabs>
+			</el-form>
+			
+		</div>
+		<span slot="footer" class="dialog-footer">
+			<el-button @click="dialogVisible = false">取 消</el-button>
+			<el-button type="primary" @click="subAdmin">确 定</el-button>
+        </span>
+    </Modal>
+		
+    </div>
+</template>
+<script>
+    import {SystemShowTemplateList,SystemShowTemplateAdd,getCodeList,addCode} from "../../../api/system/showTemplate";
+	
+    import IPageHeader from "../../../layouts/system/page-header/index";
+	import UiUpload from "@/ui/upload/index";
+	import Setting from '@/setting';
+    export default {
+        name: "system_showTemplate_list",
+        components: {UiUpload,IPageHeader},
+        computed: {},
+        data() {
+            return {
+				pageTitle:'激活码',
+				upHeaders:{},
+				upUrl:"",
+				cateData:[],
+                detial: {
+					is_hot       : "",
+					is_recommend : "",
+					title        : "",
+					time         : "",
+					status       : "",
+					
+					data         : [],
+                    page        : 1,
+					loading     : true,
+                    pageSize    : 0,
+                    pageCount   : 0,
+                },
+				
+				options: {
+				    shortcuts: [
+				        {
+				            text: '今天',
+				            value() {
+				                const end = new Date();
+				                const start = new Date();
+				                start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate()));
+				                return [start, end];
+				            }
+				        },
+				        {
+				            text: '昨天',
+				            value() {
+				                const end = new Date();
+				                const start = new Date();
+				                start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 1)));
+				                end.setTime(end.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate())));
+				                return [start, end];
+				            }
+				        },
+				        {
+				            text: '最近7天',
+				            value() {
+				                const end = new Date();
+				                const start = new Date();
+				                start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 6)));
+				                return [start, end];
+				            }
+				        },
+				        {
+				            text: '最近30天',
+				            value() {
+				                const end = new Date();
+				                const start = new Date();
+				                start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), new Date().getDate() - 29)));
+				                return [start, end];
+				            }
+				        },
+				        {
+				            text: '本月',
+				            value() {
+				                const end = new Date();
+				                const start = new Date();
+				                start.setTime(start.setTime(new Date(new Date().getFullYear(), new Date().getMonth(), 1)));
+				                return [start, end];
+				            }
+				        },
+				        {
+				            text: '本年',
+				            value() {
+				                const end = new Date();
+				                const start = new Date();
+				                start.setTime(start.setTime(new Date(new Date().getFullYear(), 0, 1)));
+				                return [start, end];
+				            }
+				        }
+				    ]
+				},
+				dialogVisible:false,
+				title:"",
+				add_parms_name:"",
+				formActiveName:"tab_base",
+				form:{
+					show_template_id: '',
+					num: ''
+				},
+				defaultParms:[],
+            }
+        },
+        created() {
+            this.initView();
+        },
+        methods: {
+			/**
+			 * 添加
+			 */
+			tapAdd:function(sassid){
+				var that = this;
+			    this.dialogVisible = true;
+				that.add_parms_name="",
+				that.formActiveName="tab_base",
+			    this.$refs['form'].resetFields();
+			    this.form = this.$utils.resetFields(this.form, {
+				    show_template_id: '',
+					num: ''
+				});
+				
+			},
+            initView:function(){
+				var upHeaders = {};
+				this.upUrl = Setting.apiBaseURL + "/systemv1/upload/index";
+				const token = this.$utils.util.cookies.get('system_token');
+				if (token) {
+				    upHeaders['SYSTEM-ACC-TOKEN'] = token;
+				}
+				this.upHeaders = upHeaders;
+                this.getData();
+            },
+			removeParms:function(index){
+				this.$delete(this.form.data,index);
+			},
+			addParms:function(){
+				var name = this.add_parms_name;
+				if(this.add_parms_name){
+					this.form.data.push({
+						title:name,
+						content:"",
+					})
+					this.add_parms_name="";
+				}
+			},
+			statusChange:function(status){
+				this.detial.status = status;
+				this.detial.page = 1
+				this.getData()
+			},
+			/**
+			 * 上传文件
+			 * @param res
+			 */
+			onUpload:function (res) {
+			    if(res.code == -1) {
+			        Notice.error({ title : "系统提示", content:res.msg});
+			    } else {
+			        this.form.imgs.push(res.data.img);
+			    }
+			},
+			onUploadDescs:function(res){
+				if(res.code == -1) {
+				    Notice.error({ title : "系统提示", content:res.msg});
+				} else {
+				    this.form.descs.push(res.data.img);
+				}
+			},
+			tapEdit:function(row){
+				this.formActiveName="tab_base";
+				this.form = JSON.parse(JSON.stringify(row));
+				this.dialogVisible = true;
+				this.title = "编辑模板";
+			},
+			//关闭
+			editClose:function(){
+			    this.dialogVisible = false;
+			},
+			removeImgs:function(index){
+				this.$delete(this.form.imgs,index);
+			},
+			removeDescs:function(index){
+				this.$delete(this.form.descs,index);
+			},
+			/**
+			 * 修改数据
+			 */
+			subAdmin:function(e){
+			    this.$refs['form'].validate((valid) => {
+			        if (valid) {
+			            let loading = this.$loading("提交数据中...");
+			            var data = {};
+			            for(var i in this.form) {
+			                data[i] = this.form[i];
+			            }
+			            addCode(data)
+			                .then(res => {
+			                    loading.close();
+			                    if (res.code == 200) {
+			                        this.dialogVisible = false;
+			                        this.$Message.success("操作成功");
+			                        this.getData();
+			                    } else {
+			                        this.$alert(res.msg, '系统提示');
+			                    }
+			                })
+			                .catch(err => {
+			                    loading.close();
+			                    this.$alert("网络繁忙,加载失败,请稍等片刻在尝试!", '系统提示');
+			                });
+			        }
+			    });
+			},
+			
+			
+            //搜索栏目
+            tapSeach:function () {
+                this.detial.page = 1;
+                this.getData();
+            },
+            //分页
+            tapPage:function (page) {
+                this.detial.page = page;
+                this.getData();
+            },
+            getData: function () {
+                var data = {};
+				var that = this;
+                this.detial.loading = true;
+				data.page        = this.detial.page;
+				data.status      = this.detial.status;
+				data.is_hot      = this.detial.is_hot;
+				data.is_recommend = this.detial.is_recommend;
+				data.title       = this.detial.title;
+				data.time        = this.detial.time;
+                getCodeList(data).then(res => {
+                    this.detial.loading   = false;
+                    this.detial.data      = res.data.list;
+                    this.detial.pageSize  = res.data.pageSize;
+                    this.detial.pageCount = res.data.pageCount;
+						// if(that.defaultParms.length<=0 && res.data.defaultParms){
+						// 	that.defaultParms = res.data.defaultParms;
+						// }
+                }).catch(err => {
+                    this.detial.loading = false;
+                    this.$alert('网络繁忙,加载失败,请稍等片刻在尝试!', '系统提示');
+                });
+            },
+        }
+    }
+</script>
+<style scoped>
+iframe.videoIframe{border: 0px;padding: 0px;}
+.el-dialog__body{padding: 0px;}
+.el-dialog__body iframe body{padding: 0px;}
+
+	.muser-tab-continer{border:1px solid #EEEEEE}
+    a.muser-tab-a{display: inline-block;padding: 0px 28px;height:42px;line-height: 42px;border-bottom:3px solid transparent;font-size: 17px;color:#595959;}
+    a.muser-tab-a.active{border-bottom:3px solid #EA312B;color:#EA312B}
+	
+	.upimg-item{width: 82px;height: 82px;margin-right: 5px;overflow: hidden;float: left;margin-bottom: 5px;position: relative;}
+	.upimg-item img{width: 82px;cursor: pointer;}
+	.img-remove-btn{position: absolute;top: 0px;right: 0px;font-size: 24px;}
+</style>

+ 10 - 9
src/components/system/signing/createContract.vue

@@ -86,7 +86,7 @@
 									<div>{{ scope.row.verify == 1 ?'必填': '选填' }}</div>
 									<div>{{ scope.row.verify == 1 ?'必填': '选填' }}</div>
 								</template>
 								</template>
 							</el-table-column>
 							</el-table-column>
-							<!-- <el-table-column prop="left" label="x轴坐标" width="100">
+							<el-table-column prop="left" label="x轴坐标" width="100">
 								<template slot-scope="scope">
 								<template slot-scope="scope">
 									<el-input type="number" v-model="scope.row.left"></el-input>
 									<el-input type="number" v-model="scope.row.left"></el-input>
 								</template>
 								</template>
@@ -95,7 +95,7 @@
 								<template slot-scope="scope">
 								<template slot-scope="scope">
 									<el-input type="number" v-model="scope.row.top"></el-input>
 									<el-input type="number" v-model="scope.row.top"></el-input>
 								</template>
 								</template>
-							</el-table-column> -->
+							</el-table-column>
 							<el-table-column prop="val" label="演示值" width="180">
 							<el-table-column prop="val" label="演示值" width="180">
 								<template slot-scope="scope">
 								<template slot-scope="scope">
 									<el-input type="text" v-model="scope.row.val"></el-input>
 									<el-input type="text" v-model="scope.row.val"></el-input>
@@ -406,7 +406,7 @@
 					{
 					{
 						name: '地址',
 						name: '地址',
 						code: 'address',
 						code: 'address',
-						type: 'text',
+						type: 'address',
 						left: 200,
 						left: 200,
 						top: 140,
 						top: 140,
 						fontSize: 20,
 						fontSize: 20,
@@ -521,7 +521,7 @@
 						val: '',
 						val: '',
 						width: 500,
 						width: 500,
 						height: 400,
 						height: 400,
-						verify: 1
+						verify: 0
 					},
 					},
 				],
 				],
 				jsonBr: [{
 				jsonBr: [{
@@ -879,14 +879,15 @@
 				console.log(event, 'event');
 				console.log(event, 'event');
 			});
 			});
 			
 			
-			if(this.$route.query) {
+			if(this.$route.query && this.$route.query.id) {
+				console.log('zhe');
 				this.$set(this.menu,'id',this.$route.query.id)
 				this.$set(this.menu,'id',this.$route.query.id)
 				this.getDetail()
 				this.getDetail()
 			}else {
 			}else {
-				let data = JSON.parse(localStorage.getItem('menu'))
-				if (data.title || data.images.length > 0) {
-					this.menu = data
-				}
+				// let data = JSON.parse(localStorage.getItem('menu'))
+				// if (data.title || data.images.length > 0) {
+				// 	this.menu = data
+				// }
 			}
 			}
 			
 			
 		}
 		}

+ 48 - 22
src/components/system/signing/list.vue

@@ -33,20 +33,44 @@
 				<el-table-column prop="id" label="ID" width="80" align="center"></el-table-column>
 				<el-table-column prop="id" label="ID" width="80" align="center"></el-table-column>
 				<el-table-column prop="contract_no" label="合约编号" width="120" align="center"></el-table-column>
 				<el-table-column prop="contract_no" label="合约编号" width="120" align="center"></el-table-column>
 				<!-- contract_no -->
 				<!-- contract_no -->
-				<el-table-column prop="name" label="甲方" width="200">
+				<el-table-column prop="name" label="甲方" width="250">
 					<template slot-scope="scope">
 					<template slot-scope="scope">
-						<div>姓名:{{ scope.row.name }}</div>
-						<div>电话:{{ scope.row.phone }}</div>
-						<div>地址:{{ scope.row.address }}</div>
-						<div>身份证:{{ scope.row.card }}</div>
+						<div v-if="scope.row.content && scope.row.content.jsonAr">
+							<div v-for="item in scope.row.content.jsonAr" v-if="item.type == 'text' || item.type == 'number'">{{item.name}}: {{item.value}}</div>
+						</div>
+						<div v-else>
+							<div>姓名:{{ scope.row.name }}</div>
+							<div>电话:{{ scope.row.phone }}</div>
+							<div>地址:{{ scope.row.address }}</div>
+							<div>身份证:{{ scope.row.card }}</div>
+							<div>服务费:{{scope.row.price}}</div>
+							<div>定金:{{scope.row.deposit}}</div>
+							<div>尾款:{{scope.row.balance}}</div>
+						</div>
 					</template>
 					</template>
 				</el-table-column>
 				</el-table-column>
 				<el-table-column prop="to_name" label="乙方" width="200">
 				<el-table-column prop="to_name" label="乙方" width="200">
 					<template slot-scope="scope">
 					<template slot-scope="scope">
-						<div>姓名:{{ scope.row.to_name }}</div>
-						<div>电话:{{ scope.row.to_phone }}</div>
-						<div>地址:{{ scope.row.to_address }}</div>
-						<div>身份证:{{ scope.row.to_card }}</div>
+						<div v-if="scope.row.content && scope.row.content.jsonBr">
+							<div v-for="item in scope.row.content.jsonBr" v-if="item.type == 'text' || item.type == 'number'">{{item.name}}: {{item.value}}</div>
+						</div>
+						<div v-else>
+							<div>姓名:{{ scope.row.to_name }}</div>
+							<div>电话:{{ scope.row.to_phone }}</div>
+							<div>地址:{{ scope.row.to_address }}</div>
+							<div>身份证:{{ scope.row.to_card }}</div>
+						</div>
+						
+					</template>
+				</el-table-column>
+				<el-table-column prop="total" label="状态" width="100" align="left">
+					<template slot-scope="scope">
+						<div>
+							<el-tag type="primary" size="mini" v-if="scope.row.status == 1">进行中</el-tag>
+							<el-tag type="warning" size="mini" v-if="scope.row.status == 0">待签约</el-tag>
+							<el-tag type="success" size="mini" v-if="scope.row.status == 2">已完成</el-tag>
+							<el-tag type="info" size="mini" v-if="scope.row.status == -1">已取消</el-tag>
+						</div>
 					</template>
 					</template>
 				</el-table-column>
 				</el-table-column>
 				<el-table-column prop="start_time" label="开始时间" width="200">
 				<el-table-column prop="start_time" label="开始时间" width="200">
@@ -59,9 +83,9 @@
 						<div>{{scope.row.end_time | showTime}}</div>
 						<div>{{scope.row.end_time | showTime}}</div>
 					</template>
 					</template>
 				</el-table-column>
 				</el-table-column>
-				<el-table-column prop="price" label="服务费" width="200"></el-table-column>
+				<!-- <el-table-column prop="price" label="服务费" width="200"></el-table-column>
 				<el-table-column prop="deposit" label="定金" width="100"></el-table-column>
 				<el-table-column prop="deposit" label="定金" width="100"></el-table-column>
-				<el-table-column prop="balance" label="余款" width="150"></el-table-column>
+				<el-table-column prop="balance" label="余款" width="150"></el-table-column> -->
 				<!-- <el-table-column prop="give_score" label="赠送积分" width="100"></el-table-column> -->
 				<!-- <el-table-column prop="give_score" label="赠送积分" width="100"></el-table-column> -->
 				<!-- <el-table-column prop="describe" label="描述" width="200"></el-table-column> -->
 				<!-- <el-table-column prop="describe" label="描述" width="200"></el-table-column> -->
 				<el-table-column prop="uid_img" label="甲方签名" min-width="160" align="left">
 				<el-table-column prop="uid_img" label="甲方签名" min-width="160" align="left">
@@ -83,16 +107,7 @@
             <img v-for="(item,index) in scope.row.descs" :key="index" v-lazy="item" :src="item" v-image-preview style="width: 60px;cursor: pointer;margin-right: 5px;"/>
             <img v-for="(item,index) in scope.row.descs" :key="index" v-lazy="item" :src="item" v-image-preview style="width: 60px;cursor: pointer;margin-right: 5px;"/>
             </template>
             </template>
       </el-table-column> -->
       </el-table-column> -->
-				<el-table-column prop="total" label="状态" width="100" align="left">
-					<template slot-scope="scope">
-						<div>
-							<el-tag type="primary" size="mini" v-if="scope.row.status == 1">进行中</el-tag>
-							<el-tag type="warning" size="mini" v-if="scope.row.status == 0">待签约</el-tag>
-							<el-tag type="success" size="mini" v-if="scope.row.status == 2">已完成</el-tag>
-							<el-tag type="info" size="mini" v-if="scope.row.status == -1">已取消</el-tag>
-						</div>
-					</template>
-				</el-table-column>
+				
 				<el-table-column prop="mark" label="附加条款" width="150"></el-table-column>
 				<el-table-column prop="mark" label="附加条款" width="150"></el-table-column>
 				<el-table-column prop="handle" label="操作" width="150" align="center">
 				<el-table-column prop="handle" label="操作" width="150" align="center">
 					<template slot-scope="scope">
 					<template slot-scope="scope">
@@ -458,7 +473,18 @@
 
 
 				getSigningList(this.detial).then(res => {
 				getSigningList(this.detial).then(res => {
 					this.detial.loading = false;
 					this.detial.loading = false;
-					this.detial.data = res.data.list;
+					this.detial.data = res.data.list.map(item => {
+						if(item.content) {
+							try {
+								item.content = JSON.parse(JSON.parse(item.content))
+							} catch (error) {
+								//TODO handle the exception
+								item.content = JSON.parse(item.content)
+							}
+						}
+						console.log(item.content);
+						return item
+					});
 					this.detial.pageSize = res.data.pageSize;
 					this.detial.pageSize = res.data.pageSize;
 					this.detial.pageCount = res.data.pageCount;
 					this.detial.pageCount = res.data.pageCount;
 					// if(that.defaultParms.length<=0 && res.data.defaultParms){
 					// if(that.defaultParms.length<=0 && res.data.defaultParms){

+ 9 - 0
src/router/routes.js

@@ -193,6 +193,15 @@ const system = [{
 				},
 				},
 				component: () => import('@/components/system/showTemplate/serviceLabel')
 				component: () => import('@/components/system/showTemplate/serviceLabel')
 			},
 			},
+			{
+				path: '/system/showTemplate/code',
+				name: 'system_showTemplate_code',
+				meta: {
+					title: '激活码',
+					auth: true
+				},
+				component: () => import('@/components/system/showTemplate/code')
+			},
 			{
 			{
 				path: '/system/user/workType',
 				path: '/system/user/workType',
 				name: 'system_user_workType',
 				name: 'system_user_workType',