whx il y a 2 jours
Parent
commit
1a0af7eb99
44 fichiers modifiés avec 622 ajouts et 492 suppressions
  1. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/index.html
  2. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/4648.f0ab5e5c.css
  3. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/css/6295.765a69d3.css
  4. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/60.0ec15984.css
  5. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/6184.c8b3967c.css
  6. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/6902.10f5d20e.css
  7. 0 0
      virgo.wzfrontend/src/main/resources/static/workark/static/css/8160.ec3bd3b4.css
  8. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2266.9eaf09c8.js
  9. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2551.f46a14ee.js
  10. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2925.12d97e6d.js
  11. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/2925.19914735.js
  12. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3279.6eb99348.js
  13. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/3969.a95bc4c2.js
  14. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5306.63667a2b.js
  15. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5306.8b548264.js
  16. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/5642.810ca1fa.js
  17. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/592.60da43e6.js
  18. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/60.1d0c4b13.js
  19. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/60.7c158424.js
  20. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6077.0613d33f.js
  21. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/1230.8d326a90.js
  22. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6350.c80e1427.js
  23. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/6916.de5e8874.js
  24. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7207.04280a07.js
  25. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7207.d853155b.js
  26. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7259.5cc5d0cf.js
  27. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7501.d68a5a9b.js
  28. 1 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7519.b3d6a804.js
  29. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/7679.03118b13.js
  30. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/8487.d8d60fda.js
  31. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/868.84a46d9c.js
  32. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9039.8f8afe36.js
  33. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9334.ccf5cac0.js
  34. 0 1
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9640.397e579e.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/workark/static/js/9882.c60f22b0.js
  36. 2 2
      virgo.wzfrontend/src/main/resources/static/workark/static/js/app.0cdba671.js
  37. 5 7
      virgo.wzfrontend/workark/src/axios/index.js
  38. 89 0
      virgo.wzfrontend/workark/src/components/common/listFilter.vue
  39. 446 445
      virgo.wzfrontend/workark/src/components/website/createOrder.vue
  40. 16 3
      virgo.wzfrontend/workark/src/components/work/serve/list/detail.vue
  41. 24 11
      virgo.wzfrontend/workark/src/components/work/system/serveSet/processSet.vue
  42. 2 2
      virgo.wzfrontend/workark/src/layout/components/chat/customer/chatBox.vue
  43. 2 2
      virgo.wzfrontend/workark/src/layout/components/chat/customerServe/chatBox.vue
  44. 16 2
      virgo.wzfrontend/workark/src/views/work/serve/list.vue

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/index.html


virgo.wzfrontend/src/main/resources/static/workark/static/css/3420.f0ab5e5c.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/4648.f0ab5e5c.css


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/css/6295.765a69d3.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/9334.0ec15984.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/60.0ec15984.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/1230.c8b3967c.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/6184.c8b3967c.css


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/css/6902.10f5d20e.css


virgo.wzfrontend/src/main/resources/static/workark/static/css/7857.ec3bd3b4.css → virgo.wzfrontend/src/main/resources/static/workark/static/css/8160.ec3bd3b4.css


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2266.9eaf09c8.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2551.f46a14ee.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/2925.12d97e6d.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/2925.19914735.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/3279.6eb99348.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/3969.a95bc4c2.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/5306.63667a2b.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/5306.8b548264.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/5642.810ca1fa.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/592.60da43e6.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/60.1d0c4b13.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/60.7c158424.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6077.0613d33f.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/1230.8d326a90.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/6350.c80e1427.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/6916.de5e8874.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/7207.04280a07.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/7207.d853155b.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/7259.5cc5d0cf.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/7501.d68a5a9b.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/7519.b3d6a804.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/7679.03118b13.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/8487.d8d60fda.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/868.84a46d9c.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/9039.8f8afe36.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9334.ccf5cac0.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/workark/static/js/9640.397e579e.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/workark/static/js/9882.c60f22b0.js


Fichier diff supprimé car celui-ci est trop grand
+ 2 - 2
virgo.wzfrontend/src/main/resources/static/workark/static/js/app.0cdba671.js


+ 5 - 7
virgo.wzfrontend/workark/src/axios/index.js

@@ -6,6 +6,7 @@ import {
 import {
 	Message
 } from 'element-ui'
+import store from '@/store'
 const service = axios.create({
 	baseURL: baseConfig.baseURL,
 	timeout: 6000000, // 请求超时时间
@@ -15,9 +16,9 @@ const tip = (msg, type) => {
 	let types = type || 'warning';
 	if (msg == 'RET_INVALID_PASSWORD') {
 		msg = '账号密码有误'
-	}
-	if (msg == 'RET_INVALID_CODE') {
-		msg = '短信验证码有误'
+	}
+	if (msg == 'RET_INVALID_CODE') {
+		msg = '短信验证码有误'
 	}
 	Message({
 		message: msg,
@@ -30,11 +31,8 @@ service.interceptors.request.use(
 	config => {
 		let token = getToken();
 		config.headers['token'] = token;
-		if ((config.url === '/im/message/save')) {
-			config.headers['token'] = localStorage.getItem('systemChatToken');
-		}
 		if (config.url === '/im/upload/image') {
-			config.headers['token'] = localStorage.getItem('chatToken');
+			config.headers['token'] = store.getters.chatToken;
 			config.headers['Content-Type'] = 'multipart/form-data';
 		}
 		return config

+ 89 - 0
virgo.wzfrontend/workark/src/components/common/listFilter.vue

@@ -0,0 +1,89 @@
+<template>
+	<div class="hui-content-filter">
+		<div class="filter-box" v-if="type === 'serve'">
+			<div class="filter-item">
+				<el-input prefix-icon="el-icon-search" v-model="serve.orderNo" placeholder="请输入订单编号"></el-input>
+			</div>
+			<div class="filter-item">
+				<el-select v-model="serve.status" placeholder="请选择订单状态">
+					<el-option label="待确认" :value="0"></el-option>
+					<el-option label="进行中" :value="1"></el-option>
+					<el-option label="已交付" :value="2"></el-option>
+				</el-select>
+			</div>
+			<div class="filter-item">
+				<el-select v-model="serve.orderStatus" placeholder="请选择支付状态">
+					<el-option label="支付成功" value="支付成功"></el-option>
+					<el-option label="超时已关闭" value="超时已关闭"></el-option>
+					<el-option label="未支付" value="未支付"></el-option>
+				</el-select>
+			</div>
+		</div>
+		<div class="filter-btn">
+			<el-button type="primary" size="medium" @click="submit">查询</el-button>
+			<el-button size="medium" @click="resetForm">重置</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	export default {
+		props: ['type'],
+		data() {
+			return {
+				serve: {
+					orderNo: '',
+					status: '',
+					orderStatus: ''
+				},
+				serveData: {}
+			}
+		},
+		mounted() {
+			this[this.type + 'Data'] = JSON.parse(JSON.stringify(this[this.type]));
+		},
+		methods: {
+			resetForm() {
+				this[this.type] = JSON.parse(JSON.stringify(this[this.type + 'Data']));
+				this.$emit('filter', {});
+			},
+			resetField() {
+				this[this.type] = JSON.parse(JSON.stringify(this[this.type + 'Data']));
+			},
+			submit() {
+				let data = this.filterOption(this[this.type]);
+				this.$emit('filter', data);
+			},
+			filterOption(data) {
+				let obj = {};
+				for (let key in data) {
+					if (data[key] || data[key] == null || data[key] === 0) obj[key] = data[key]
+				}
+				return obj;
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.hui-content-filter {
+		display: flex;
+		margin-bottom: 15px;
+
+		.filter-box {
+			flex: 1;
+			width: 0;
+			display: flex;
+			flex-wrap: wrap;
+		}
+
+		.filter-item {
+			width: 240px;
+			margin-right: 12px;
+		}
+
+		.el-select {
+			width: 100%;
+		}
+	}
+</style>

+ 446 - 445
virgo.wzfrontend/workark/src/components/website/createOrder.vue

@@ -1,446 +1,447 @@
-<template>
-	<div class="create-order">
-		<div class="hui-flex" v-if="!isCreate">
-			<div class="hui-flex-box">
-				<div class="order-box">
-					<div class="title">订单详情</div>
-					<div class="content">
-						<el-table :data="tableData">
-							<el-table-column label="商品名称" prop="name"></el-table-column>
-							<el-table-column label="数量" width="100">
-								<template>x1</template>
-							</el-table-column>
-							<el-table-column label="价格" prop="price" width="100">
-								<template slot-scope="scope">
-									<span class="color-danger">{{scope.row.price}}</span>
-								</template>
-							</el-table-column>
-						</el-table>
-					</div>
-				</div>
-				<div class="order-box">
-					<div class="title" style="border: none;">优惠券</div>
-					<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
-								:class="couponChecked.findIndex(node=>node.id === item.id) > -1 ? 'coupon-card-box active' :'coupon-card-box'">
-								<div class="price">
-									<div v-if="item.type === 1">
-										<span class="symbol">¥</span>
-										<span>{{item.couponAmount}}</span>
-									</div>
-									<div v-else>
-										<span>{{item.discount*100}}</span>
-										<span class="symbol">折</span>
-									</div>
-								</div>
-								<div class="center-describe">
-									<div class="product">{{item.title}}</div>
-									<div class="sub-title">
-										<span>{{item.type === 1?`满${item.threshold}减${item.couponAmount}`:`满${item.threshold}可用,最高抵扣${item.mostConstraint}`}}</span>
-									</div>
-								</div>
-								<div class="icon-check">
-									<i class="el-icon-check"></i>
-								</div>
-							</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">
-				<div class="create-order-price">
-					<div v-if="isCount" class="color-danger">
-						正在计算...
-					</div>
-					<div v-else>
-						<div>
-							<span>应付费用:</span>
-							<span class="color-danger">¥</span>
-							<span class="color-danger">{{countPriceData.totalFee}}</span>
-						</div>
-						<div class="discount-num">
-							<span class="color-danger">减 ¥ <span>{{minus}}</span></span>
-						</div>
-					</div>
-				</div>
-				<el-button type="primary" size="medium" :disabled="isCount" @click="submit" :loading="loading">
-					创建订单
-				</el-button>
-			</div>
-		</div>
-		<div class="hui-flex" v-else>
-			<el-result icon="success" title="订单创建成功,请支付" :subTitle="`订单编号:${order.orderNo}`">
-				<template slot="extra">
-					<div class="extra-box">
-						<div class="pay-list">
-							<div class="pay-item active">
-								<i class="iconfont huifont-weixinzhifu"></i>
-								<span class="label">微信支付</span>
-								<div class="icon-check">
-									<i class="el-icon-check"></i>
-								</div>
-							</div>
-						</div>
-						<div class="pay-button">
-							<el-button size="small" @click="lookOrder">查看订单</el-button>
-							<el-button type="primary" size="small" @click="dialogVisible = true">立即支付</el-button>
-						</div>
-					</div>
-				</template>
-			</el-result>
-		</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>
-		</el-dialog>
-	</div>
-</template>
-
-<script>
-	import {
-		getServeById,
-		countPriceAPI,
-		createOrder
-	} from '@/api/serve'
-	import {
-		getCouponListByQuery
-	} from '@/api/discount'
-	import {
-		getServeDepartmentById
-	} from '@/api/system'
-	const payOrder = () => import('@/components/website/payOrder');
-	export default {
-		props: ['serveId'],
-		data() {
-			return {
-				tableData: [],
-				coupon: [],
-				couponChecked: [],
-				isCount: false,
-				countPriceData: {
-					productCoupon: [],
-					totalFee: 0
-				},
-				productData: {},
-				loading: false,
-				isCreate: false,
-				isStacking: false,
-				order: {},
-				dialogVisible: false
-			}
-		},
-		mounted() {
-			this.init();
-		},
-		computed: {
-			minus() {
-				let data = this.countPriceData.productCoupon || [];
-				let num = 0;
-				for (var i = 0; i < data.length; i++) {
-					num += data[i].minus
-				}
-				return num;
-			}
-		},
-		components: {
-			payOrder
-		},
-		methods: {
-			init() {
-				getServeById(this.serveId).then(res => {
-					if (res.state) {
-						let data = res.data;
-						this.productData = data;
-						this.tableData = [data];
-						this.countPrice();
-						getCouponListByQuery({
-							userId: this.$store.getters.user.userId,
-							productLevelId: data.productLevelId,
-							state: 1
-						}).then(node => {
-							if (node.state) {
-								this.coupon = node.data;
-							}
-						})
-					}
-				})
-			},
-			returnCouponClass(item) {
-				if (item.threshold > this.productData.price) return false; //大于满减。
-				if (this.couponChecked.findIndex(node => node.id === item.id) > -1) return true; //已选择的返回true
-				if (this.couponChecked.length === 0) return true; //未选择优惠券时都能选择。
-				if (this.isStacking && item.overlayUse === 0) return false; //叠加时不能选择不能叠加优惠券。
-				if (this.isStacking && item.overlayUse === 1) return true; //叠加时能选择叠加优惠券。
-			},
-			checkCoupon(item) {
-				if (!this.returnCouponClass(item)) return;
-				let index = this.couponChecked.findIndex(node => node.id === item.id);
-				if (index === -1) {
-					this.couponChecked.push(item);
-				} else {
-					this.couponChecked.splice(index, 1);
-				}
-				this.isStacking = this.couponChecked.length > 0 ? this.couponChecked[0].overlayUse === 1 : false; //是否可叠加
-				this.countPrice();
-			},
-			countPrice() {
-				this.isCount = true;
-				let couponIds = this.couponChecked.map(node => node.id).join(',') || -1;
-				countPriceAPI(this.productData.id, couponIds).then(res => {
-					if (res.state) {
-						this.countPriceData = res.data;
-					}
-					this.isCount = false;
-				})
-			},
-			submit() {
-				this.loading = true;
-				let couponIds = this.couponChecked.map(node => node.id).join(',') || -1;
-				createOrder(this.productData.id, this.$store.getters.organization.id, couponIds).then(res => {
-					this.loading = false;
-					if (res.state) {
-						this.order = res.data;
-						this.isCreate = true;
-						this.$message.success('操作成功');
-					}
-				})
-			},
-			lookOrder() {
-				getServeDepartmentById(this.productData.productLevelId).then(res => {
-					if (res.state) {
-						let orderPath = '/work/serve/list/' + res.data.sign;
-						this.$router.push(orderPath);
-					}
-				})
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-	.create-order {
-		width: 100%;
-		height: 100%;
-		background: $--background-color-base;
-		padding: 15px;
-
-		.pay-list {
-			display: flex;
-			margin-bottom: 20px;
-
-			.pay-item {
-				display: flex;
-				align-items: center;
-				border: 1px solid $--border-color-light;
-				padding: 5px 20px 5px 10px;
-				background: $--color-white;
-				position: relative;
-				overflow: hidden;
-
-				.el-icon-check {
-					font-size: 12px;
-				}
-
-				.icon-check {
-					color: #fff;
-					white-space: nowrap;
-					transform: rotate(45deg);
-					position: absolute;
-					top: -6px;
-					right: -15px;
-					background: #165dff;
-					width: 40px;
-					text-align: center;
-					height: 20px;
-					display: flex;
-					align-items: flex-end;
-					justify-content: center;
-
-				}
-
-				&.active {
-					border-color: $--color-primary;
-				}
-
-				.huifont-weixinzhifu {
-					color: #57b050;
-					font-size: 30px;
-					margin-right: 10px;
-				}
-
-				.label {
-					font-weight: bold;
-					cursor: pointer;
-				}
-			}
-
-			.pay-button {
-				.el-button:first-child {
-					margin-right: 20px;
-				}
-			}
-		}
-
-		.extra-box {
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-		}
-
-		.create-order-submit {
-			background: #fff;
-			display: flex;
-			align-items: center;
-			justify-content: end;
-			padding: 15px;
-
-			.create-order-price {
-				margin-right: 20px;
-			}
-
-			.discount-num {
-				font-size: 12px;
-			}
-		}
-
-		.coupon-card {
-			width: 50%;
-			margin-top: 10px;
-
-			&:nth-child(2n) {
-				padding-left: 5px;
-			}
-
-			&:nth-child(2n-1) {
-				padding-right: 5px;
-			}
-
-			&.disabled {
-				.coupon-card-box {
-					opacity: 0.6;
-					cursor: unset;
-
-					&:hover,
-					&.active {
-						border-color: $--border-color-lighter;
-
-						.icon-check {
-							display: none;
-						}
-					}
-				}
-			}
-
-			.coupon-card-box {
-				background: #fff;
-				padding: 15px;
-				align-items: center;
-				display: flex;
-				position: relative;
-				cursor: pointer;
-				border: 1px solid $--border-color-lighter;
-				overflow: hidden;
-
-				&:hover {
-					border-color: $--color-primary;
-				}
-
-				&.active {
-					border-color: $--color-primary;
-
-					.icon-check {
-						display: flex;
-					}
-				}
-			}
-
-			.price {
-				color: $--color-danger;
-				font-size: 24px;
-				font-weight: 500;
-				line-height: 24px;
-				text-align: center;
-				width: 100px;
-
-				.symbol {
-					margin: 0 3px;
-					font-size: $--font-size-base;
-				}
-			}
-
-			.center-describe {
-				display: inline-block;
-				margin-right: auto;
-				padding-left: 20px;
-				text-align: left;
-
-				.product {
-					color: $--color-text-primary;
-					font-size: $--font-size-large;
-					font-weight: 550;
-					line-height: 14px;
-					padding-bottom: 12px;
-				}
-			}
-
-			.icon-check {
-				color: #fff;
-				white-space: nowrap;
-				transform: rotate(45deg);
-				position: absolute;
-				top: -8px;
-				right: -15px;
-				background: #165dff;
-				width: 40px;
-				text-align: center;
-				height: 26px;
-				display: none;
-				align-items: flex-end;
-				justify-content: center;
-			}
-		}
-
-		.el-table__header {
-
-			th {
-				color: #606266;
-				background: #f4f4f5;
-			}
-
-			.cell {
-				font-weight: 700;
-			}
-		}
-
-		.order-box {
-			background: #fff;
-			margin-bottom: 15px;
-
-			.title {
-				font-weight: 600;
-				line-height: 22px;
-				padding: 12px 24px;
-				border-bottom: 1px solid $--border-color-light;
-			}
-
-			.content {
-				padding: 15px;
-			}
-
-			.contents {
-				background: $--background-color-base;
-				padding: 0;
-				display: flex;
-				flex-wrap: wrap;
-			}
-
-		}
-	}
+<template>
+	<div class="create-order">
+		<div class="hui-flex" v-if="!isCreate">
+			<div class="hui-flex-box">
+				<div class="order-box">
+					<div class="title">订单详情</div>
+					<div class="content">
+						<el-table :data="tableData">
+							<el-table-column label="商品名称" prop="name"></el-table-column>
+							<el-table-column label="数量" width="100">
+								<template>x1</template>
+							</el-table-column>
+							<el-table-column label="价格" prop="price" width="100">
+								<template slot-scope="scope">
+									<span class="color-danger">{{scope.row.price}}</span>
+								</template>
+							</el-table-column>
+						</el-table>
+					</div>
+				</div>
+				<div class="order-box">
+					<div class="title" style="border: none;">优惠券</div>
+					<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
+								:class="couponChecked.findIndex(node=>node.id === item.id) > -1 ? 'coupon-card-box active' :'coupon-card-box'">
+								<div class="price">
+									<div v-if="item.type === 1">
+										<span class="symbol">¥</span>
+										<span>{{item.couponAmount}}</span>
+									</div>
+									<div v-else>
+										<span>{{item.discount*100}}</span>
+										<span class="symbol">折</span>
+									</div>
+								</div>
+								<div class="center-describe">
+									<div class="product">{{item.title}}</div>
+									<div class="sub-title">
+										<span>{{item.type === 1?`满${item.threshold}减${item.couponAmount}`:`满${item.threshold}可用,最高抵扣${item.mostConstraint}`}}</span>
+									</div>
+								</div>
+								<div class="icon-check">
+									<i class="el-icon-check"></i>
+								</div>
+							</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">
+				<div class="create-order-price">
+					<div v-if="isCount" class="color-danger">
+						正在计算...
+					</div>
+					<div v-else>
+						<div>
+							<span>应付费用:</span>
+							<span class="color-danger">¥</span>
+							<span class="color-danger">{{countPriceData.totalFee}}</span>
+						</div>
+						<div class="discount-num">
+							<span class="color-danger">减 ¥ <span>{{minus}}</span></span>
+						</div>
+					</div>
+				</div>
+				<el-button type="primary" size="medium" :disabled="isCount" @click="submit" :loading="loading">
+					创建订单
+				</el-button>
+			</div>
+		</div>
+		<div class="hui-flex" v-else>
+			<el-result icon="success" title="订单创建成功,请支付" :subTitle="`订单编号:${order.orderNo}`">
+				<template slot="extra">
+					<div class="extra-box">
+						<div class="pay-list">
+							<div class="pay-item active">
+								<i class="iconfont huifont-weixinzhifu"></i>
+								<span class="label">微信支付</span>
+								<div class="icon-check">
+									<i class="el-icon-check"></i>
+								</div>
+							</div>
+						</div>
+						<div class="pay-button">
+							<el-button size="small" @click="lookOrder">查看订单</el-button>
+							<el-button type="primary" size="small" @click="dialogVisible = true">立即支付</el-button>
+						</div>
+					</div>
+				</template>
+			</el-result>
+		</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>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import {
+		getServeById,
+		countPriceAPI,
+		createOrder
+	} from '@/api/serve'
+	import {
+		getCouponListByQuery
+	} from '@/api/discount'
+	import {
+		getServeDepartmentById
+	} from '@/api/system'
+	const payOrder = () => import('@/components/website/payOrder');
+	export default {
+		props: ['serveId'],
+		data() {
+			return {
+				tableData: [],
+				coupon: [],
+				couponChecked: [],
+				isCount: false,
+				countPriceData: {
+					productCoupon: [],
+					totalFee: 0
+				},
+				productData: {},
+				loading: false,
+				isCreate: false,
+				isStacking: false,
+				order: {},
+				dialogVisible: false
+			}
+		},
+		mounted() {
+			this.init();
+		},
+		computed: {
+			minus() {
+				let data = this.countPriceData.productCoupon || [];
+				let num = 0;
+				for (var i = 0; i < data.length; i++) {
+					num += data[i].minus
+				}
+				return num;
+			}
+		},
+		components: {
+			payOrder
+		},
+		methods: {
+			init() {
+				getServeById(this.serveId).then(res => {
+					if (res.state) {
+						let data = res.data;
+						this.productData = data;
+						this.tableData = [data];
+						this.countPrice();
+						getCouponListByQuery({
+							userId: this.$store.getters.user.userId,
+							productLevelId: data.productLevelId,
+							state: 1
+						}).then(node => {
+							if (node.state) {
+								this.coupon = node.data;
+							}
+						})
+					}
+				})
+			},
+			returnCouponClass(item) {
+				if (item.threshold > this.productData.price) return false; //大于满减。
+				if (this.couponChecked.findIndex(node => node.id === item.id) > -1) return true; //已选择的返回true
+				if (item.threshold > this.countPriceData.totalFee) return false; //优惠大于满减。
+				if (this.couponChecked.length === 0) return true; //未选择优惠券时都能选择。
+				if (this.isStacking && item.overlayUse === 0) return false; //叠加时不能选择不能叠加优惠券。
+				if (this.isStacking && item.overlayUse === 1) return true; //叠加时能选择叠加优惠券。
+			},
+			checkCoupon(item) {
+				if (!this.returnCouponClass(item)) return;
+				let index = this.couponChecked.findIndex(node => node.id === item.id);
+				if (index === -1) {
+					this.couponChecked.push(item);
+				} else {
+					this.couponChecked.splice(index, 1);
+				}
+				this.isStacking = this.couponChecked.length > 0 ? this.couponChecked[0].overlayUse === 1 : false; //是否可叠加
+				this.countPrice();
+			},
+			countPrice() {
+				this.isCount = true;
+				let couponIds = this.couponChecked.map(node => node.id).join(',') || -1;
+				countPriceAPI(this.productData.id, couponIds).then(res => {
+					if (res.state) {
+						this.countPriceData = res.data;
+					}
+					this.isCount = false;
+				})
+			},
+			submit() {
+				this.loading = true;
+				let couponIds = this.couponChecked.map(node => node.id).join(',') || -1;
+				createOrder(this.productData.id, this.$store.getters.organization.id, couponIds).then(res => {
+					this.loading = false;
+					if (res.state) {
+						this.order = res.data;
+						this.isCreate = true;
+						this.$message.success('操作成功');
+					}
+				})
+			},
+			lookOrder() {
+				getServeDepartmentById(this.productData.productLevelId).then(res => {
+					if (res.state) {
+						let orderPath = '/work/serve/list/' + res.data.sign;
+						this.$router.push(orderPath);
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss">
+	.create-order {
+		width: 100%;
+		height: 100%;
+		background: $--background-color-base;
+		padding: 15px;
+
+		.pay-list {
+			display: flex;
+			margin-bottom: 20px;
+
+			.pay-item {
+				display: flex;
+				align-items: center;
+				border: 1px solid $--border-color-light;
+				padding: 5px 20px 5px 10px;
+				background: $--color-white;
+				position: relative;
+				overflow: hidden;
+
+				.el-icon-check {
+					font-size: 12px;
+				}
+
+				.icon-check {
+					color: #fff;
+					white-space: nowrap;
+					transform: rotate(45deg);
+					position: absolute;
+					top: -6px;
+					right: -15px;
+					background: #165dff;
+					width: 40px;
+					text-align: center;
+					height: 20px;
+					display: flex;
+					align-items: flex-end;
+					justify-content: center;
+
+				}
+
+				&.active {
+					border-color: $--color-primary;
+				}
+
+				.huifont-weixinzhifu {
+					color: #57b050;
+					font-size: 30px;
+					margin-right: 10px;
+				}
+
+				.label {
+					font-weight: bold;
+					cursor: pointer;
+				}
+			}
+
+			.pay-button {
+				.el-button:first-child {
+					margin-right: 20px;
+				}
+			}
+		}
+
+		.extra-box {
+			display: flex;
+			flex-direction: column;
+			align-items: center;
+		}
+
+		.create-order-submit {
+			background: #fff;
+			display: flex;
+			align-items: center;
+			justify-content: end;
+			padding: 15px;
+
+			.create-order-price {
+				margin-right: 20px;
+			}
+
+			.discount-num {
+				font-size: 12px;
+			}
+		}
+
+		.coupon-card {
+			width: 50%;
+			margin-top: 10px;
+
+			&:nth-child(2n) {
+				padding-left: 5px;
+			}
+
+			&:nth-child(2n-1) {
+				padding-right: 5px;
+			}
+
+			&.disabled {
+				.coupon-card-box {
+					opacity: 0.6;
+					cursor: unset;
+
+					&:hover,
+					&.active {
+						border-color: $--border-color-lighter;
+
+						.icon-check {
+							display: none;
+						}
+					}
+				}
+			}
+
+			.coupon-card-box {
+				background: #fff;
+				padding: 15px;
+				align-items: center;
+				display: flex;
+				position: relative;
+				cursor: pointer;
+				border: 1px solid $--border-color-lighter;
+				overflow: hidden;
+
+				&:hover {
+					border-color: $--color-primary;
+				}
+
+				&.active {
+					border-color: $--color-primary;
+
+					.icon-check {
+						display: flex;
+					}
+				}
+			}
+
+			.price {
+				color: $--color-danger;
+				font-size: 24px;
+				font-weight: 500;
+				line-height: 24px;
+				text-align: center;
+				width: 100px;
+
+				.symbol {
+					margin: 0 3px;
+					font-size: $--font-size-base;
+				}
+			}
+
+			.center-describe {
+				display: inline-block;
+				margin-right: auto;
+				padding-left: 20px;
+				text-align: left;
+
+				.product {
+					color: $--color-text-primary;
+					font-size: $--font-size-large;
+					font-weight: 550;
+					line-height: 14px;
+					padding-bottom: 12px;
+				}
+			}
+
+			.icon-check {
+				color: #fff;
+				white-space: nowrap;
+				transform: rotate(45deg);
+				position: absolute;
+				top: -8px;
+				right: -15px;
+				background: #165dff;
+				width: 40px;
+				text-align: center;
+				height: 26px;
+				display: none;
+				align-items: flex-end;
+				justify-content: center;
+			}
+		}
+
+		.el-table__header {
+
+			th {
+				color: #606266;
+				background: #f4f4f5;
+			}
+
+			.cell {
+				font-weight: 700;
+			}
+		}
+
+		.order-box {
+			background: #fff;
+			margin-bottom: 15px;
+
+			.title {
+				font-weight: 600;
+				line-height: 22px;
+				padding: 12px 24px;
+				border-bottom: 1px solid $--border-color-light;
+			}
+
+			.content {
+				padding: 15px;
+			}
+
+			.contents {
+				background: $--background-color-base;
+				padding: 0;
+				display: flex;
+				flex-wrap: wrap;
+			}
+
+		}
+	}
 </style>

+ 16 - 3
virgo.wzfrontend/workark/src/components/work/serve/list/detail.vue

@@ -13,6 +13,14 @@
 							<div class="hui-detail-label">订单编号</div>
 							<div class="hui-detail-value">{{part.orderNo}}</div>
 						</div>
+						<div class="hui-detail-item">
+							<div class="hui-detail-label">甲方</div>
+							<div class="hui-detail-value">{{part.organizationName}}</div>
+						</div>
+						<div class="hui-detail-item">
+							<div class="hui-detail-label">乙方</div>
+							<div class="hui-detail-value">{{part.payOrganizationName}}</div>
+						</div>
 						<div class="hui-detail-item">
 							<div class="hui-detail-label">商品名称</div>
 							<div class="hui-detail-value">{{part.title}}</div>
@@ -362,11 +370,16 @@
 					confirmButtonText: '确定',
 					cancelButtonText: '取消',
 					inputPlaceholder: '请输入金额',
+					inputValue: this.part.totalFee,
+					inputValidator: (value) => {
+						let match = /^(?:[0-9]\d*(?:\.\d{1,2})?|0\.(?:[1-9]\d?|\d[1-9]))$/;
+						if (!match.test(value)) return '请输入正确的金额';
+						if (!value) return '请输入大于0的金额';
+						return true;
+					},
 					beforeClose: (action, instance, done) => {
 						if (action === 'confirm') {
-							let match = /^(?:[0-9]\d*(?:\.\d{1,2})?|0\.(?:[1-9]\d?|\d[1-9]))$/;
 							let value = instance.inputValue;
-							if (!match.test(value)) return this.$message.warning('请输入正确的金额');
 							changeOrderPrice({
 								orderNo: this.part.orderNo,
 								totalFee: value
@@ -407,7 +420,7 @@
 				if (type === 'init') this.init();
 				if (type === 'payState') {
 					this.activeList = [];
-					this.$emit('callback', 'init');
+					this.$emit('callback', 'init');
 					this.init();
 				}
 				if (type === 'processSuccess') {

+ 24 - 11
virgo.wzfrontend/workark/src/components/work/system/serveSet/processSet.vue

@@ -16,17 +16,22 @@
 			</div>
 		</div>
 		<div class="set-process-box">
-			<process-set-item :list="nowTitle.children" :type="operationType" :roleType="roleType"
-				v-if="nowTitle.children.length > 0">
-			</process-set-item>
-			<div v-else>
-				<div v-if="(nowTitle.status === 1 || nowTitle.status === 4) && roleType === 2">
-					<el-button size="mini" type="primary" @click="updateStatus(nowTitle,3)">通过</el-button>
-				</div>
-				<div class="process-set-insert" @click="edits('insert', nowTitle ? nowTitle.id : -1, nowTitle)"
-					v-if="operationType === 'edit'">
-					新增
-				</div>
+			<div>
+				<span class="set-process-title">{{nowTitle.name}}</span>
+			</div>
+			<div class="set-process-box">
+				<process-set-item :list="nowTitle.children" :type="operationType" :roleType="roleType"
+					v-if="nowTitle.children.length > 0">
+				</process-set-item>
+				<div v-else>
+					<div v-if="(nowTitle.status === 1 || nowTitle.status === 4) && roleType === 2">
+						<el-button size="mini" type="primary" @click="updateStatus(nowTitle,3)">通过</el-button>
+					</div>
+					<div class="process-set-insert" @click="edits('insert', nowTitle ? nowTitle.id : -1, nowTitle)"
+						v-if="operationType === 'edit'">
+						新增
+					</div>
+				</div>
 			</div>
 		</div>
 		<el-dialog :close-on-click-modal="false" :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="800px"
@@ -273,6 +278,14 @@
 			padding-top: 15px;
 		}
 
+		.set-process-title {
+			padding: 5px 10px;
+			background: $--color-primary;
+			color: #fff;
+			border-radius: 4px;
+			margin-bottom: 15px;
+		}
+
 		.process-top {
 			display: flex;
 			white-space: nowrap;

+ 2 - 2
virgo.wzfrontend/workark/src/layout/components/chat/customer/chatBox.vue

@@ -173,10 +173,10 @@
 					toId: this.body.conversationId, //接收者用户ID字符串
 					conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
 					body: {
-						originalUrl: 'https://www.waywish.com/im' + data.url, //原图网络Url
+						originalUrl: 'https://www.workark.com/im' + data.url, //原图网络Url
 						originalWidth: img.width, //原图宽度
 						originalHeight: img.height, //原图高度
-						thumbnailUrl: 'https://www.waywish.com/im' + data.thumbnailUrl, //缩略图网络Url
+						thumbnailUrl: 'https://www.workark.com/im' + data.thumbnailUrl, //缩略图网络Url
 						thumbnailWidth: data.thumbnailWidth, //缩略图宽度
 						thumbnailHeight: data.thumbnailHeight, //缩略图高度
 					},

+ 2 - 2
virgo.wzfrontend/workark/src/layout/components/chat/customerServe/chatBox.vue

@@ -173,10 +173,10 @@
 					toId: this.body.conversationId, //接收者用户ID字符串
 					conversationType: YeIMUniSDKDefines.CONVERSATION_TYPE.PRIVATE, //会话类型:私聊
 					body: {
-						originalUrl: 'https://www.waywish.com/im' + data.url, //原图网络Url
+						originalUrl: 'https://www.workark.com/im' + data.url, //原图网络Url
 						originalWidth: img.width, //原图宽度
 						originalHeight: img.height, //原图高度
-						thumbnailUrl: 'https://www.waywish.com/im' + data.thumbnailUrl, //缩略图网络Url
+						thumbnailUrl: 'https://www.workark.com/im' + data.thumbnailUrl, //缩略图网络Url
 						thumbnailWidth: data.thumbnailWidth, //缩略图宽度
 						thumbnailHeight: data.thumbnailHeight, //缩略图高度
 					},

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

@@ -7,6 +7,7 @@
 			</div>
 		</div>
 		<div class="hui-flex-box hui-flex hui-table">
+			<list-filter type="serve" @filter="filterInit"></list-filter>
 			<div class="hui-flex-box">
 				<el-table :data="tableData" row-key="id" height="100%" v-loading="loading">
 					<el-table-column label="序号" width="50">
@@ -14,7 +15,13 @@
 							<div style="text-align: center;">{{scope.$index + 1}}</div>
 						</template>
 					</el-table-column>
-					<el-table-column label="订单编号" prop="orderNo"></el-table-column>
+					<el-table-column label="订单编号" prop="orderNo">
+						<template slot-scope="scope">
+							<span style="-webkit-user-select: text">
+								{{scope.row.orderNo}}
+							</span>
+						</template>
+					</el-table-column>
 					<el-table-column label="商品名称" prop="title"></el-table-column>
 					<el-table-column label="价格" prop="totalFee"></el-table-column>
 					<el-table-column label="创建时间" prop="createTime"></el-table-column>
@@ -111,6 +118,7 @@
 	const detail = () => import('@/components/work/serve/list/detail');
 	const edit = () => import('@/components/work/finace/invoice/apply/edit');
 	const invoiceDetail = () => import('@/components/work/finace/invoice/apply/detail');
+	const listFilter = () => import('@/components/common/listFilter');
 	export default {
 		data() {
 			return {
@@ -152,7 +160,8 @@
 		components: {
 			detail,
 			edit,
-			invoiceDetail
+			invoiceDetail,
+			listFilter
 		},
 		methods: {
 			init() {
@@ -172,6 +181,11 @@
 					this.loading = false;
 				})
 			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
 			changeTitle(item) {
 				if (this.nowTitle.id === item.id) return;
 				this.nowTitle = item;