Переглянути джерело

Merge branch 'linwenxin_dev' into pengyouhao_dev

pengyh 1 рік тому
батько
коміт
b130adca0a
35 змінених файлів з 2533 додано та 46 видалено
  1. 27 0
      src/api/dataCount.js
  2. 33 0
      src/api/setActivity.js
  3. 38 0
      src/api/workOrderPool.js
  4. 3 8
      src/components/template/editTable.js
  5. 763 0
      src/views/auxiliaryFittings/home/index.vue
  6. 1 1
      src/views/auxiliaryFittings/projectAttachmentManage/index.vue
  7. 1 1
      src/views/auxiliaryFittings/projectAuxiliaryManage/index.vue
  8. 1 1
      src/views/auxiliaryFittings/purchasingManagement/mixins/form_tpl.js
  9. 1 1
      src/views/auxiliaryFittings/salesManagement/attachmentNewReturn/index.vue
  10. 1 1
      src/views/auxiliaryFittings/salesManagement/attachmentOldReturn/index.vue
  11. 1 1
      src/views/auxiliaryFittings/salesManagement/attachmentSalesOrder/index.vue
  12. 1 1
      src/views/auxiliaryFittings/salesManagement/auxiliaryAdjustPriceOrder/index.vue
  13. 1 1
      src/views/auxiliaryFittings/salesManagement/auxiliarySalesOrder/index.vue
  14. 1 1
      src/views/auxiliaryFittings/salesManagement/auxiliarySalesReturnOrder/index.vue
  15. 1 1
      src/views/auxiliaryFittings/salesManagement/components/attachmentNewReturnDetail.vue
  16. 1 1
      src/views/auxiliaryFittings/salesManagement/components/attachmentOldReturnDetail.vue
  17. 7 7
      src/views/auxiliaryFittings/salesManagement/components/attachmentSalesOrderDetail.vue
  18. 1 1
      src/views/auxiliaryFittings/salesManagement/components/auxiliaryAdjustPriceOrderDetail.vue
  19. 7 7
      src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesOrderDetail.vue
  20. 1 1
      src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesReturnOrderDetail.vue
  21. 1 1
      src/views/auxiliaryFittings/salesManagement/oldPartsReturnFactory/index.vue
  22. 1 1
      src/views/engineeringAuxiliaryParts/projectCollectionManagement/pages/collect.vue
  23. 1 1
      src/views/engineeringMaintenance/applicationWithoutFee/index.vue
  24. 238 0
      src/views/engineeringMaintenance/home/index.vue
  25. 211 0
      src/views/mallManagement/setActivity/answer.vue
  26. 521 0
      src/views/mallManagement/setActivity/index.vue
  27. 8 1
      src/views/setting/organizationManagement/settledManagement/index.vue
  28. 9 1
      src/views/setting/organizationManagement/tenantDetails/index.vue
  29. 341 0
      src/views/valueAddedService/home/index.vue
  30. 2 2
      src/views/valueAddedService/orderSettleManag/pages/collect.vue
  31. 2 2
      src/views/valueAddedService/orderSettleManag/pages/offline.vue
  32. 7 2
      src/views/workOrder/workOrderPool/detail.vue
  33. 219 0
      src/views/workOrder/workOrderPool/detailModule/PartsApplication/formModule.vue
  34. 72 0
      src/views/workOrder/workOrderPool/detailModule/PartsApplication/index.vue
  35. 9 0
      src/views/workOrder/workOrderPool/index.vue

+ 27 - 0
src/api/dataCount.js

@@ -0,0 +1,27 @@
+import request, { postBlob, getBlob, handleImport } from '@/utils/request'
+
+export function dataCountMaterialCount(params) {
+  return request({
+    url: '/dataCount/materialCount',
+    method: 'get',
+    params
+  })
+}
+
+
+export function dataCountRepairProject(params) {
+  return request({
+    url: '/dataCount/repairProject',
+    method: 'get',
+    params
+  })
+}
+
+
+export function dataCountIncreCount(params) {
+  return request({
+    url: '/dataCount/increCount',
+    method: 'get',
+    params
+  })
+}

+ 33 - 0
src/api/setActivity.js

@@ -0,0 +1,33 @@
+import request, { postBlob, getBlob, handleImport } from '@/utils/request'
+
+export function promotionQuestionnaireList(data) {
+  return request({
+    url: `/promotion/questionnaire/list?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function promotionQuestionnaireExport(data, name) {
+  return postBlob({
+    url: '/promotion/questionnaire/export',
+    data,
+    name
+  })
+}
+
+export function promotionQuestionnaireAdd(data) {
+  return request({
+    url: `/promotion/questionnaire/add`,
+    method: 'post',
+    data
+  })
+}
+
+export function promotionQuestionnaireDetail(params) {
+  return request({
+    url: '/promotion/questionnaire/detail',
+    method: 'post',
+    params
+  })
+}

+ 38 - 0
src/api/workOrderPool.js

@@ -247,3 +247,41 @@ export function orderBaseActive(params) {
     params
   })
 }
+
+export function orderPartsApplyCancel(params) {
+  return request({
+    url: `/order/parts/apply/cancel`,
+    method: 'post',
+    params
+  })
+}
+export function orderPartsApplyEnd(params) {
+  return request({
+    url: `/order/parts/apply/end`,
+    method: 'post',
+    params
+  })
+}
+export function orderPartsApplyRecord(params) {
+  return request({
+    url: `/order/parts/apply/record`,
+    method: 'post',
+    params
+  })
+}
+export function orderPartsApplyItemDel(params) {
+  return request({
+    url: `/order/parts/apply/item/del`,
+    method: 'post',
+    params
+  })
+}
+
+export function orderPartsApplyItemModify(data) {
+  return request({
+    url: `/order/parts/apply/item/modify`,
+    method: 'post',
+    data
+  })
+}
+

+ 3 - 8
src/components/template/editTable.js

@@ -71,15 +71,10 @@ export default {
                 }
               }}>{attributes?.editText || '编辑'}</el-button>}
               {setShowElement(attributes?.isDel, { row, column, index }) && <el-button type="text" onClick={async () => {
-                if (this.isEditTableIndex > -1) {
-                  if (this.isEditTableIndex === index) {
-                    this.isEditTableIndex = -1
-                  } else if (this.isEditTableIndex > index) {
-                    this.isEditTableIndex -= 1
-                  }
-                }
                 if (funs.delete) {
-                  funs.delete({ row, column, index })
+                  funs.delete({ row, column, index }, function(){
+                    tableData.splice(index, 1)
+                  })
                 } else {
                   tableData.splice(index, 1)
                 }

+ 763 - 0
src/views/auxiliaryFittings/home/index.vue

@@ -0,0 +1,763 @@
+<template>
+	<div class="dashboard_container">
+		<div class="refresh" @click="refreshData">
+			<span style="color: #1d82ff;">刷新数据</span>
+			<i class="el-icon-refresh-left" style="color: #1d82ff;"></i>
+		</div>
+		<div class="flex">
+			<div class="mode" @click="gotopage('auxiliaryPriceManagement','','')">
+				<div class="title">辅材列表配置统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allmGoodsNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onMGoodsNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offMGoodsNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode"  @click="gotopage('auxiliaryChargeManagement','','')">
+				<div class="title">辅材收费标准配置统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allmChargeGoodsNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onmChargeGoodsNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offmChargeGoodsNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" @click="gotopage('attachmentProfile','','')">
+				<div class="title">配件资料配置统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allpGoodsNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onPGoodsNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offPGoodsNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode" @click="gotopage('supplier','','')">
+				<div class="title">供应商维护统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allVendNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onVendNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offVendNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">辅材采购入库单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('auxiliaryMaterialsStorage','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.savePurchaseNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliaryMaterialsStorage','已审核数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okPurchaseNum}}</div>
+							<div class="title">已审核数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliaryMaterialsStorage','审核失败数量','FAIL')">
+						<div class="text">
+							<div class="num">{{collectData.failPurchaseNum}}</div>
+							<div class="title">审核失败数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">辅材采购退货单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('returnAuxiliaryMaterials','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.savePurchaseRetNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('returnAuxiliaryMaterials','已审核数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okPurchaseRetNum}}</div>
+							<div class="title">已审核数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('returnAuxiliaryMaterials','审核失败数量','FAIL')">
+						<div class="text">
+							<div class="num">{{collectData.failPurchaseRetNum}}</div>
+							<div class="title">审核失败数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode" >
+				<div class="title">辅材调价单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('auxiliaryAdjustPriceOrder','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.savePriceUpdNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliaryAdjustPriceOrder','已保存数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okPriceUpdNum}}</div>
+							<div class="title">已审核数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" style="min-width: 66.33%;">
+				<div class="title">辅材销售订单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('auxiliarySalesOrder','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.saveSalesNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesOrder','已经提交数量','SUBMIT')">
+						<div class="text">
+							<div class="num">{{collectData.submitSalesNum}}</div>
+							<div class="title">已经提交数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesOrder','已支付未提货','PAY_NOT_TAKE')">
+						<div class="text">
+							<div class="num">{{collectData.payNoTakeSalesNum}}</div>
+							<div class="title">已支付未提货</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesOrder','已支付已提货','PAY_TAKE')">
+						<div class="text">
+							<div class="num">{{collectData.paytakeSalesNum}}</div>
+							<div class="title">已支付已提货</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesOrder','取消订单数量','CANCEL')">
+						<div class="text">
+							<div class="num">{{collectData.cancelSalesNum}}</div>
+							<div class="title">取消订单数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode" >
+				<div class="title">辅材销售退货单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('auxiliarySalesReturnOrder','取消订单数量','CANCEL')">
+						<div class="text">
+							<div class="num">{{collectData.saveSalesRetNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesReturnOrder','已提交数量','SUBMIT')">
+						<div class="text">
+							<div class="num">{{collectData.submitSalesRetNum}}</div>
+							<div class="title">已提交数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesReturnOrder','待审核数量','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.waitSalesRetNum}}</div>
+							<div class="title">待审核数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('auxiliarySalesReturnOrder','审核通过数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okSalesRetNum}}</div>
+							<div class="title">审核通过数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">配件采购入库单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('partsStorage','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.savePurchasePNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('partsStorage','已审核数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okPurchasePNum}}</div>
+							<div class="title">已审核数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('partsStorage','审核失败数量','FAIL')">
+						<div class="text">
+							<div class="num">{{collectData.failPurchasePNum}}</div>
+							<div class="title">审核失败数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">配件采购退货单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('partsReturn','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.savePurchaseRetPNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('partsReturn','已审核数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okPurchaseRetPNum}}</div>
+							<div class="title">已审核数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('partsReturn','审核失败数量','FAIL')">
+						<div class="text">
+							<div class="num">{{collectData.failPurchaseRetPNum}}</div>
+							<div class="title">审核失败数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode" style="min-width: 66.33%;">
+				<div class="title">配件销售订单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('attachmentSalesOrder','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.saveSalesPNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('attachmentSalesOrder','已提交数量','SUBMIT')">
+						<div class="text">
+							<div class="num">{{collectData.submitSalesPgNum}}</div>
+							<div class="title">已提交数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('attachmentSalesOrder','已支付未提交','PAY_NOT_TAKE')">
+						<div class="text">
+							<div class="num">{{collectData.payNoTakeSalesPgNum}}</div>
+							<div class="title">已支付未提交</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('attachmentSalesOrder','已支付已提交','PAY_TAKE')">
+						<div class="text">
+							<div class="num">{{collectData.payTakeSalesPgNum}}</div>
+							<div class="title">已支付已提交</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('attachmentSalesOrder','取消订单数量','CANCEL')">
+						<div class="text">
+							<div class="num">{{collectData.cancelSalesPgNum}}</div>
+							<div class="title">取消订单数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">配件新件返还统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('attachmentNewReturn','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.saveNewNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('attachmentNewReturn','已提交数量','SUBMIT')">
+						<div class="text">
+							<div class="num">{{collectData.submitNewNum}}</div>
+							<div class="title">已提交数量</div>
+						</div>
+					</div>
+					<!-- <div class="tab" @click="gotopage('attachmentNewReturn','待审核数量','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.aaaaa}}</div>
+							<div class="title">待审核数量</div>
+						</div>
+					</div> -->
+					<div class="tab" @click="gotopage('attachmentNewReturn','审核通过数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okNewNum}}</div>
+							<div class="title">审核通过数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode" >
+				<div class="title">配件旧件返还统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('attachmentOldReturn','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.saveOldNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('attachmentOldReturn','已提交数量','SUBMIT')">
+						<div class="text">
+							<div class="num">{{collectData.submitOldNum}}</div>
+							<div class="title">已提交数量</div>
+						</div>
+					</div>
+					<!-- <div class="tab" @click="gotopage('attachmentOldReturn','待审核数量','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.aaaaa}}</div>
+							<div class="title">待审核数量</div>
+						</div>
+					</div> -->
+					<div class="tab" @click="gotopage('attachmentOldReturn','审核通过数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okOldNum}}</div>
+							<div class="title">审核通过数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">配件旧件返还单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('oldPartsReturnFactory','已保存数量','SAVE')">
+						<div class="text">
+							<div class="num">{{collectData.saveOldFactoryNum}}</div>
+							<div class="title">已保存数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('oldPartsReturnFactory','已提交数量','SUBMIT')">
+						<div class="text">
+							<div class="num">{{collectData.submitOldFactoryNum}}</div>
+							<div class="title">已提交数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('oldPartsReturnFactory','审核通过数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okOldFactoryNum}}</div>
+							<div class="title">审核通过数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('oldPartsReturnFactory','审核失败数量','FAIL')">
+						<div class="text">
+							<div class="num">{{collectData.failOldFactoryNum}}</div>
+							<div class="title">审核失败数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode"  @click="gotopage('settleAccountWeixinPay','','')">
+				<div class="title">微信支付结算统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.waitWechatNum}}</div>
+							<div class="title">待结算</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.waitingWechatNum}}</div>
+							<div class="title">可提现</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.ingWechatNum}}</div>
+							<div class="title">提现中</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.overWechatNum}}</div>
+							<div class="title">已提现</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode"  @click="gotopage('settleAccountOfflinePay','','')">
+				<div class="title">线下支付结算统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.waitWechatLineNum}}</div>
+							<div class="title">待结算</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.overWechatLineNum}}</div>
+							<div class="title">已完成</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">工程配件收款统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('projectAttachmentManage','未付款','NO')">
+						<div class="text">
+							<div class="num">{{collectData.noSalesManagerPNum}}</div>
+							<div class="title">未付款</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectAttachmentManage','部分付款','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.waitSalesManagerPNum}}</div>
+							<div class="title">部分付款</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectAttachmentManage','已完成','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okSalesManagerPNum}}</div>
+							<div class="title">已完成</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">工程辅材收款统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('projectAuxiliaryManage','未付款','NO')">
+						<div class="text">
+							<div class="num">{{collectData.noSalesManagerNum}}</div>
+							<div class="title">未付款</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectAuxiliaryManage','部分付款','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.waitSalesManagerNum}}</div>
+							<div class="title">部分付款</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectAuxiliaryManage','已完成','OK')">
+						<div class="text">
+							<div class="num">{{collectData.okSalesManagerNum}}</div>
+							<div class="title">已完成</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode"  @click="gotopage('auxiliaryHandworkFee','','')" style="max-width:33%">
+				<div class="title">辅材手工费统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.waitManualNum}}</div>
+							<div class="title">待结算</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.okManual}}</div>
+							<div class="title">已完成</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode"  style="max-width:33%">
+				<div class="title">销售提现统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('salesWithdraw','待发放','0')">
+						<div class="text">
+							<div class="num">{{collectData.waitWithdrawalNum}}</div>
+							<div class="title">待发放</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('salesWithdraw','已发放','1')">
+						<div class="text">
+							<div class="num">{{collectData.okWithdrawalNum}}</div>
+							<div class="title">已发放</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode"  @click="gotopage('auxiliaryMaterialBasicInfo','','')">
+				<div class="title">工程辅材配件开单-辅材维护统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allAloneNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onAloneNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offAloneNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode"  @click="gotopage('partsListInfo','','')">
+				<div class="title">工程辅材配件开单-配件维护统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allAlonePNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onAlonePNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offAlonePNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" >
+				<div class="title">工程辅材配件开单-收款统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('projectCollectionManagement','待审核','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.waitPayManagerNum}}</div>
+							<div class="title">待审核</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectCollectionManagement','待收款','WAIT_PAY')">
+						<div class="text">
+							<div class="num">{{collectData.waitPAYPayManagerNum}}</div>
+							<div class="title">待收款</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectCollectionManagement','部分收款','PART_PAY')">
+						<div class="text">
+							<div class="num">{{collectData.partpayPayManagerNum}}</div>
+							<div class="title">部分收款</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('projectCollectionManagement','收款完成','PAY')">
+						<div class="text">
+							<div class="num">{{collectData.payPayManagerNum}}</div>
+							<div class="title">收款完成</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+  import {dataCountMaterialCount} from "@/api/dataCount.js"
+	export default {
+		data() {
+			return{
+				collectData: {}
+			}
+		},
+		created() {
+      this.refreshData()
+		},
+		methods: {
+      refreshData(){
+        dataCountMaterialCount().then(res=>{
+          this.collectData = res.data
+        })
+      },
+      gotopage(name,pageName,pageCode){
+        if(pageCode){
+          this.$router.push({
+            name: name,
+            params: {
+              pageName: pageName,
+              pageType: '-',
+              pageCode: pageCode,
+            },
+          })
+        }else{
+          this.$router.push({
+            name: name
+          })
+        }
+      }
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.dashboard_container {
+		background: #f5f5f5;
+		padding: 20px;
+		min-height: calc(100vh - 86px);
+		box-sizing: border-box;
+
+		.refresh {
+			text-align: right;
+			margin-bottom: 10px;
+
+			span {
+				cursor: pointer;
+			}
+
+			i {
+				font-weight: bold;
+				margin-left: 4px;
+				cursor: pointer;
+			}
+		}
+
+		.flex {
+			display: flex;
+      margin-bottom: 10px;
+		}
+
+		.flex_asb {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		.mode {
+			flex: 1;
+			padding: 10px;
+			margin-right: 10px;
+			background-color: #ffffff;
+			border-radius: 10px;
+
+			.title {
+				font-weight: bold;
+			}
+
+			.head {
+        padding-top: 12px!important;
+        margin: 0 !important;
+        margin-bottom: 0 !important;
+			}
+
+			.opacity {
+				opacity: 0;
+			}
+
+			.tab {
+				display: flex;
+				align-items: center;
+				flex: 1;
+				cursor: pointer;
+
+				.text {
+					margin: 0 10px;
+
+					.title {
+						color: #999999;
+						font-size: 12px;
+						margin-top: 8px;
+					}
+
+					.num {
+						font-size: 22px;
+						font-weight: bold;
+					}
+				}
+
+				.img {
+					width: 46px;
+					height: 46px;
+					margin-left: 20px;
+				}
+			}
+
+			.child {
+				border-right: 1px solid #dddddd;
+
+				.text {
+					.title {
+						margin-top: 8px;
+						margin-bottom: 0;
+					}
+				}
+			}
+
+			.child:last-child {
+				border-right: none;
+			}
+		}
+
+		.mode:last-child {
+			margin-right: 0;
+		}
+
+		.container_bottom {
+			width: 100%;
+			height: 350px;
+			padding: 10px;
+			background-color: #ffffff;
+			margin-top: 10px;
+			border-radius: 10px;
+		}
+	}
+</style>

+ 1 - 1
src/views/auxiliaryFittings/projectAttachmentManage/index.vue

@@ -49,7 +49,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			status: 'NO',
+			status: this?.$route?.params?.pageCode || '',
 			isShowTab: true
 		}
 	},

+ 1 - 1
src/views/auxiliaryFittings/projectAuxiliaryManage/index.vue

@@ -49,7 +49,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			status: 'NO',
+			status: this?.$route?.params?.pageCode || '',
 			isShowTab: true
 		}
 	},

+ 1 - 1
src/views/auxiliaryFittings/purchasingManagement/mixins/form_tpl.js

@@ -115,7 +115,7 @@ export default {
         {
           name: '状态',
           key: 'flag',
-          value: '',
+          value: this?.$route?.params?.pageCode||'',
           conditions: [
             {
               label: `全部`,

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/attachmentNewReturn/index.vue

@@ -51,7 +51,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			flag: '',
+			flag: this?.$route?.params?.pageCode || '',
 			isShowTab: true,
 			orderEnginBaseId: ''
 		}

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/attachmentOldReturn/index.vue

@@ -51,7 +51,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			flag: '',
+			flag: this?.$route?.params?.pageCode || '',
 			isShowTab: true
 		}
 	},

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/attachmentSalesOrder/index.vue

@@ -70,7 +70,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			flag: '',
+			flag: this?.$route?.params?.pageCode || '',
 			websitList: [],
 			isShowTab: true,
 			orderEnginBaseId: '',

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/auxiliaryAdjustPriceOrder/index.vue

@@ -49,7 +49,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			flag: '',
+			flag: this?.$route?.params?.pageCode || '',
 			isShowTab: true
 		}
 	},

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/auxiliarySalesOrder/index.vue

@@ -70,7 +70,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			flag: '',
+			flag: this?.$route?.params?.pageCode || '',
 			websitList: [],
 			isShowTab: true,
 			orderEnginBaseId: '',

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/auxiliarySalesReturnOrder/index.vue

@@ -51,7 +51,7 @@ export default {
 			formDialogTitles: ["新增", "编辑", "详情"],
 			formDialog: false,
 			id: '',
-			retState: '',
+			retState: this?.$route?.params?.pageCode || '',
 			isShowTab: true,
 			orderEnginBaseId: ''
 		}

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/components/attachmentNewReturnDetail.vue

@@ -365,7 +365,7 @@
 					<el-table-column prop="totalAmount" align="center" label="订单金额"></el-table-column>
 					<el-table-column prop="" align="center" label="订单来源">
 						<template slot-scope="scope">
-							{{scope.row.source == 'ONLINE'?'在线订单':'自建订单'}}
+							{{scope.row.orderSource == 'ONLINE'?'在线订单':'自建订单'}}
 						</template>
 					</el-table-column>
 					<el-table-column prop="payType" align="center" label="支付方式">

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/components/attachmentOldReturnDetail.vue

@@ -437,7 +437,7 @@
 					<el-table-column prop="totalAmount" align="center" label="订单金额"></el-table-column>
 					<el-table-column prop="" align="center" label="订单来源">
 						<template slot-scope="scope">
-							{{scope.row.source == 'ONLINE'?'在线订单':'自建订单'}}
+							{{scope.row.orderSource == 'ONLINE'?'在线订单':'自建订单'}}
 						</template>
 					</el-table-column>
 					<el-table-column prop="payType" align="center" label="支付方式">

+ 7 - 7
src/views/auxiliaryFittings/salesManagement/components/attachmentSalesOrderDetail.vue

@@ -96,8 +96,8 @@
 							</el-form-item>
 						</el-col>
 						<el-col :span="8">
-							<el-form-item label="订单来源" prop="source" :required="true">
-								<el-select v-model="formData.source" :disabled="true" placeholder="请选择" style="width: 100%;">
+							<el-form-item label="订单来源" prop="orderSource" :required="true">
+								<el-select v-model="formData.orderSource" :disabled="true" placeholder="请选择" style="width: 100%;">
 								    <el-option
 								      v-for="item in [{name: '在线订单',id: 'ONLINE'},{name: '自建订单',id: 'SELF'}]"
 								      :key="item.id"
@@ -394,7 +394,7 @@
 					workerId: '',
 					identity: '',
 					workerMobile: '',
-					source: 'SELF',
+					orderSource: 'SELF',
 					payType: '',
 					totalAmount: '',
 					remark: '',
@@ -433,7 +433,7 @@
 					worker: [
 						{ required: true, message: '请选择师傅', trigger: 'change' }
 					],
-					source: [
+					orderSource: [
 						{ required: true, message: '请选择订单来源', trigger: 'change' }
 					],
 					payType: [
@@ -627,7 +627,7 @@
 						edit({
 							salesId: this.formData.salesId,
 							goodsType: 'P',
-							source: this.formData.source,
+							orderSource: this.formData.orderSource,
 							payType: this.formData.payType,
 							remark: this.formData.remark,
 							websitId: this.formData.websitId,
@@ -715,7 +715,7 @@
 						if(this.formType == 0){
 							add({
 								goodsType: 'P',
-								source: this.formData.source,
+								orderSource: this.formData.orderSource,
 								payType: this.formData.payType,
 								remark: this.formData.remark,
 								websitId: this.formData.websitId,
@@ -738,7 +738,7 @@
 							edit({
 								salesId: this.formData.salesId,
 								goodsType: 'P',
-								source: this.formData.source,
+								orderSource: this.formData.orderSource,
 								payType: this.formData.payType,
 								remark: this.formData.remark,
 								websitId: this.formData.websitId,

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/components/auxiliaryAdjustPriceOrderDetail.vue

@@ -238,7 +238,7 @@ export default {
       rules: {
         websitId: [{ required: true, message: '请选择网点', trigger: 'change' }],
         worker: [{ required: true, message: '请选择师傅', trigger: 'change' }],
-        source: [{ required: true, message: '请选择订单来源', trigger: 'change' }],
+        orderSource: [{ required: true, message: '请选择订单来源', trigger: 'change' }],
         payType: [{ required: true, message: '请选择订单来源', trigger: 'change' }],
         idcard: [
           { required: true, message: '请输入师傅身份证', trigger: 'blur' },

+ 7 - 7
src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesOrderDetail.vue

@@ -96,8 +96,8 @@
 							</el-form-item>
 						</el-col>
 						<el-col :span="8">
-							<el-form-item label="订单来源" prop="source" :required="true">
-								<el-select v-model="formData.source" :disabled="true" placeholder="请选择" style="width: 100%;">
+							<el-form-item label="订单来源" prop="orderSource" :required="true">
+								<el-select v-model="formData.orderSource" :disabled="true" placeholder="请选择" style="width: 100%;">
 								    <el-option
 									  v-for="item in [{name: '在线订单',id: 'ONLINE'},{name: '自建订单',id: 'SELF'}]"
 								      :key="item.id"
@@ -419,7 +419,7 @@
 					workerId: '',
 					identity: '',
 					workerMobile: '',
-					source: 'SELF',
+					orderSource: 'SELF',
 					payType: '',
 					remark: '',
 					totalAmount: '',
@@ -459,7 +459,7 @@
 					worker: [
 						{ required: true, message: '请选择师傅', trigger: 'change' }
 					],
-					source: [
+					orderSource: [
 						{ required: true, message: '请选择订单来源', trigger: 'change' }
 					],
 					payType: [
@@ -702,7 +702,7 @@
 						edit({
 							salesId: this.formData.salesId,
 							goodsType: 'M',
-							source: this.formData.source,
+							orderSource: this.formData.orderSource,
 							payType: this.formData.payType,
 							remark: this.formData.remark,
 							websitId: this.formData.websitId,
@@ -793,7 +793,7 @@
 						if(this.formType == 0){
 							add({
 								goodsType: 'M',
-								source: this.formData.source,
+								orderSource: this.formData.orderSource,
 								payType: this.formData.payType,
 								remark: this.formData.remark,
 								websitId: this.formData.websitId,
@@ -816,7 +816,7 @@
 							edit({
 								salesId: this.formData.salesId,
 								goodsType: 'M',
-								source: this.formData.source,
+								orderSource: this.formData.orderSource,
 								payType: this.formData.payType,
 								remark: this.formData.remark,
 								websitId: this.formData.websitId,

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/components/auxiliarySalesReturnOrderDetail.vue

@@ -389,7 +389,7 @@
 					<el-table-column prop="totalAmount" align="center" label="订单金额"></el-table-column>
 					<el-table-column prop="" align="center" label="订单来源">
 						<template slot-scope="scope">
-							{{scope.row.source == 'ONLINE'?'在线订单':'自建订单'}}
+							{{scope.row.orderSource == 'ONLINE'?'在线订单':'自建订单'}}
 						</template>
 					</el-table-column>
 					<el-table-column prop="payType" align="center" label="支付方式">

+ 1 - 1
src/views/auxiliaryFittings/salesManagement/oldPartsReturnFactory/index.vue

@@ -125,7 +125,7 @@ export default {
         "workerWebsitName": ""
       },
       isShowTab: true,
-      flag: ""
+      flag: this?.$route?.params?.pageCode || '',
     }
   },
   computed: {

+ 1 - 1
src/views/engineeringAuxiliaryParts/projectCollectionManagement/pages/collect.vue

@@ -49,7 +49,7 @@ export default {
       },
       formData: {},
       detailParams: [],
-      examineStatus: '',
+      examineStatus: this?.$route?.params?.pageCode || '',
       createFormBool: false,
       id: null
     }

+ 1 - 1
src/views/engineeringMaintenance/applicationWithoutFee/index.vue

@@ -61,7 +61,7 @@ export default {
         {
           name: '状态',
           key: 'examineStatus',
-          value: '',
+          value: this?.$route?.params?.pageCode||'',
           conditions: [
             { label: "全部", value: "" },
             { label: "待审核", value: "WAIT" },

+ 238 - 0
src/views/engineeringMaintenance/home/index.vue

@@ -0,0 +1,238 @@
+<template>
+	<div class="dashboard_container">
+		<div class="refresh" @click="refreshData">
+			<span style="color: #1d82ff;">刷新数据</span>
+			<i class="el-icon-refresh-left" style="color: #1d82ff;"></i>
+		</div>
+		<div class="flex">
+			<div class="mode" style="min-width:23%"  @click="gotopage('basicData','','')">
+				<div class="title">项目维护统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allProjectNum}}</div>
+							<div class="title">总维护数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onProjectNum}}</div>
+							<div class="title">有效项目数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.endProjectNum}}</div>
+							<div class="title">已过期项目数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode"  style="min-width:53%">
+				<div class="title">不含费用申请单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('applicationWithoutFee','待审核数量','WAIT')">
+						<div class="text">
+							<div class="num">{{collectData.noPriceWaitNum}}</div>
+							<div class="title">待审核数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('applicationWithoutFee','审核通过数量','OK')">
+						<div class="text">
+							<div class="num">{{collectData.noPriceOKNum}}</div>
+							<div class="title">审核通过数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('applicationWithoutFee','审核驳回数量','FAIL')">
+						<div class="text">
+							<div class="num">{{collectData.noPriceFailNum}}</div>
+							<div class="title">审核驳回数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('applicationWithoutFee','已取消数量','NO')">
+						<div class="text">
+							<div class="num">{{collectData.noPriceNoNum}}</div>
+							<div class="title">已取消数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('applicationWithoutFee','已支付数量','PAID')">
+						<div class="text">
+							<div class="num">{{collectData.noPriceNoPaidNum}}</div>
+							<div class="title">已支付数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('applicationWithoutFee','未支付数量','NO_PAID')">
+						<div class="text">
+							<div class="num">{{collectData.noPricePaidNum}}</div>
+							<div class="title">未支付数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode"  style="min-width:14%" @click="gotopage('allInclusiveExpense','','')">
+				<div class="title">全包费用统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.priceOrderNum}}</div>
+							<div class="title">全包费用工程数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+  import {dataCountRepairProject} from "@/api/dataCount.js"
+	export default {
+		data() {
+			return{
+				collectData: {
+          waitGatherCount: 0,
+          waitGatherAmount: 0
+        }
+			}
+		},
+		created() {
+      this.refreshData()
+		},
+		methods: {
+      refreshData(){
+        dataCountRepairProject().then(res=>{
+          this.collectData = res.data
+          console.log(res,"999")
+        })
+      },
+      gotopage(name,pageName,pageCode){
+        if(pageCode){
+          this.$router.push({
+            name: name,
+            params: {
+              pageName: pageName,
+              pageType: '-',
+              pageCode: pageCode,
+            },
+          })
+        }else{
+          this.$router.push({
+            name: name
+          })
+        }
+      }
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.dashboard_container {
+		background: #f5f5f5;
+		padding: 20px;
+		min-height: calc(100vh - 86px);
+		box-sizing: border-box;
+
+		.refresh {
+			text-align: right;
+			margin-bottom: 10px;
+
+			span {
+				cursor: pointer;
+			}
+
+			i {
+				font-weight: bold;
+				margin-left: 4px;
+				cursor: pointer;
+			}
+		}
+
+		.flex {
+			display: flex;
+      margin-bottom: 10px;
+		}
+
+		.flex_asb {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		.mode {
+			flex: 1;
+			padding: 10px;
+			margin-right: 10px;
+			background-color: #ffffff;
+			border-radius: 10px;
+
+			.title {
+				font-weight: bold;
+			}
+
+			.head {
+        padding-top: 12px!important;
+        margin: 0 !important;
+        margin-bottom: 0 !important;
+			}
+
+			.opacity {
+				opacity: 0;
+			}
+
+			.tab {
+				display: flex;
+				align-items: center;
+				flex: 1;
+				cursor: pointer;
+
+				.text {
+					margin: 0 10px;
+
+					.title {
+						color: #999999;
+						font-size: 12px;
+						margin-top: 8px;
+					}
+
+					.num {
+						font-size: 22px;
+						font-weight: bold;
+					}
+				}
+
+				.img {
+					width: 46px;
+					height: 46px;
+					margin-left: 20px;
+				}
+			}
+
+			.child {
+				border-right: 1px solid #dddddd;
+
+				.text {
+					.title {
+						margin-top: 8px;
+						margin-bottom: 0;
+					}
+				}
+			}
+
+			.child:last-child {
+				border-right: none;
+			}
+		}
+
+		.mode:last-child {
+			margin-right: 0;
+		}
+
+		.container_bottom {
+			width: 100%;
+			height: 350px;
+			padding: 10px;
+			background-color: #ffffff;
+			margin-top: 10px;
+			border-radius: 10px;
+		}
+	}
+</style>

+ 211 - 0
src/views/mallManagement/setActivity/answer.vue

@@ -0,0 +1,211 @@
+<template>
+  <el-dialog title="新增活动内容" width="800px" :modal="true" :visible.sync="showBool" :before-close="formCancel">
+    <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
+      <zj-form-module title="" label-width="100px" :showHade="false" :form-data="formData"
+        :form-items="formItems">
+      </zj-form-module>
+    </zj-form-container>
+    <div slot="footer" class="dialog-footer">
+      <el-button size="mini" @click="formCancel">取 消</el-button>
+      <el-button size="mini" @click="formConfirm">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import ImageUpload from '@/components/file-upload'
+export default {
+  props:{
+    defaultData:{
+      type: Object,
+      default: ()=>({}),
+    },
+  },
+  components: {
+    ImageUpload
+  },
+  data() {
+    return {
+      showBool:true,
+      formData: Object.assign({
+        question: "",
+        type: 1,
+        isRequire: true,
+        answer: [],
+      }, this.defaultData),
+    }
+  },
+  computed: {
+    formItems() {
+      return [{
+        md: 24,
+        name: 'slot-component',
+        formItemAttributes: {
+          label: '',
+          prop: '',
+        },
+        render: (h, { props, onInput }) => {
+          return <div/>
+        }
+      },{
+        md: 24,
+        isShow: true,
+        name: 'el-input',
+        attributes: { placeholder: '请输入' },
+        formItemAttributes: {
+          label: '名称',
+          prop: 'question',
+          rules: [{ required: true, message: '请输入', trigger: 'blur' }]
+        },
+      },
+      {
+        md: 24,
+        isShow: true,
+        name: 'el-radio',
+        options: [{ label: "单选题", value: 1 }, { label: "多选题", value: 2 }, { label: "填写", value: 3 }],
+        attributes: { filterable: true, placeholder: '请选择', disabled: this.formData.id ? true : false },
+        formItemAttributes: {
+          label: '类型',
+          prop: 'type',
+          rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+        },
+        events: {
+          change: (newVal) => {
+            if (!!~[1,2].indexOf(newVal)) {
+              this.formData.answer = []
+            } else {
+              setTimeout(() => {
+                this.formData.answer = [
+                  {
+                    option_name: "",
+                    option_value: "",
+                    option_files: [],
+                    option_limit: '',
+                  }
+                ]
+              }, 250);
+            }
+          }
+        }
+      },
+      {
+        md: 24,
+        isShow: true,
+        name: 'el-radio',
+        options: [{ label: "是", value: true }, { label: "否", value: false }],
+        attributes: { filterable: true, placeholder: '请选择', disabled: this.formData.id ? true : false },
+        formItemAttributes: {
+          label: '是否必填',
+          prop: 'isRequire',
+          rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+        }
+      },
+      ...(()=>{
+        if(!!~[1, 2].indexOf(this.formData.type)){
+          return [{
+            md: 24,
+            name: 'slot-component',
+            attributes: { placeholder: '请输入' },
+            formItemAttributes: {
+              label: '试题选项',
+              prop: 'answer',
+              rules: [{ required: true, message: '请添加选项', trigger: 'blur' }]
+            },
+            render: (h, { props, onInput }) => {
+              var { value } = props
+              return (
+                <div>
+                  <div>
+                    <el-button size="mini" onClick={() => {
+                      this.formData.answer.push({
+                        option_name: "",
+                        option_value: "",
+                        option_files: [],
+                        option_limit: '',
+                      })
+                    }} type="primary">添加</el-button>
+                  </div>
+                  {this.formData.answer.map((item, index) => {
+                    item.option_name = `选项${index + 1}`
+                    return (
+                      <div>
+                        <div style="display: flex;justify-content: space-between;">
+                          <span style="font-weight: bold;">{this.formData.answer[index].option_name}</span>
+                          <span style="color: red;" onClick={() => {
+                            this.formData.answer.splice(index, 1)
+                          }}>删除</span>
+                        </div>
+                        <div class="redbordererr">
+                          <el-form-item
+                            label=""
+                            lebel-width="0px"
+                            prop={`answer.${index}.option_value`}
+                            rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
+                          >
+                            <el-input type="textarea" rows={2} placeholder="请输入内容" value={this.formData.answer[index].option_value} onInput={(val) => { this.formData.answer[index].option_value = val }}></el-input>
+                          </el-form-item>
+                        </div>
+                        <div style="margin-top:5px">
+                          <ImageUpload fileList={this.formData.answer[index].option_files} uid={`questionFiles_ImageUpload_${index}`} limit={1} isUpdate={false} />
+                        </div>
+                        <br />
+                      </div>
+                    )
+                  })}
+                </div>
+              )
+            }
+          }]
+        }
+        return [{
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '限制字数',
+            prop: 'answer',
+            rules: []
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <div>
+                {this.formData.answer.map((item, index) => {
+                  return (
+                    <div>
+                      <div>
+                        <el-input type='number' placeholder="请输入限制长度" value={this.formData.answer[index].option_limit} onInput={(val) => { this.formData.answer[index].option_limit = val }}></el-input>
+                      </div>
+                    </div>
+                  )
+                })}
+              </div>
+            )
+          }
+        }]
+      })()]
+    },
+  },
+  methods: {
+    formCancel() {
+      this.$emit("close", this.formData)
+    },
+    formConfirm() {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          this.$emit("confirm", this.formData)
+        }
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  ::v-deep .el-dialog__body{
+    padding: 30px 20px 0 20px !important
+  }
+  ::v-deep .dialog-footer{
+    padding: 0 !important
+  }
+</style>

+ 521 - 0
src/views/mallManagement/setActivity/index.vue

@@ -0,0 +1,521 @@
+<template>
+  <template-page ref="pageRef" :get-list="getList" :exportList="exportList" :table-attributes="tableAttributes"
+    :table-events="tableEvents" :options-evens-group="optionsEvensGroup"
+    :column-parsing="columnParsing" :operation="operation()">
+    <div class="cartographer">
+      <el-dialog :title="formData.id?'详情':'新增'" width="100%" :modal="false" :visible.sync="formDialog"
+        :before-close="formCancel">
+        <zj-form-container v-if="formDialog" ref="formRef" :form-data="formData" :styleSwitch="false">
+          <zj-form-module title="活动信息" label-width="120px" :form-data="formData"
+            :form-items="formItems">
+          </zj-form-module>
+          <zj-form-module title="活动填写内容" label-width="100px" :form-data="formData"
+            :form-items="formItems2">
+          </zj-form-module>
+        </zj-form-container>
+        <div slot="footer" class="dialog-footer">
+          <el-button size="mini" @click="formCancel">取 消</el-button>
+          <el-button v-if="!formData.id" size="mini" type="primary" @click="formConfirm">确 定</el-button>
+        </div>
+      </el-dialog>
+    </div>
+    <answer v-if="showQuestion" :defaultData="questionData" @close="questionClose" @confirm="questionConfirm"/>
+  </template-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import {promotionQuestionnaireList,promotionQuestionnaireExport,promotionQuestionnaireAdd,promotionQuestionnaireDetail} from "@/api/setActivity.js"
+import answer from "./answer.vue"
+import ImageUpload from '@/components/file-upload'
+import quillEditor from '@/components/v-quill-editor'
+import editTable from "@/components/template/editTable.js"
+export default {
+  components: { TemplatePage, answer, ImageUpload, quillEditor },
+  mixins: [import_mixin, operation_mixin, editTable],
+  data() {
+    return {
+      formDialog: false,
+      showQuestion: false,
+      questionData: {
+        rowIndex: -1
+      },
+      formData: {
+        "companyWechatId": "",
+        "companyWechatName": JSON.parse(localStorage.getItem('greemall_user')).companyName,
+        "startTime": "",
+        "endTime": "",
+        "name": "",
+        "submitLimit": '',
+        "submitLimitBool": 0,
+        "qrcode": "",
+        "title": "",
+        "content": "",
+        "banner": [],
+        "detailImgs": [],
+        "promotionQuestionnaireItems": [],
+        "promotionQuestionnaireUsers": [],
+      },
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false
+      },
+      // 表格事件
+      tableEvents: {},
+    }
+  },
+  computed:{
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth('add', {
+              click: this.addData
+            })
+          ]
+        ]
+      ]
+    },
+    formItems(){
+      return [
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: { disabled: true, placeholder: '请选择' },
+          formItemAttributes: { label: '所属商户', prop: 'companyWechatName' }
+        },
+        {
+          name: 'el-date-picker',
+          md: 6,
+          attributes: {
+            disabled: !!this.formData.id,
+            style: { width: '100%' },
+            placeholder: '请选择',
+            'value-format': 'yyyy-MM-dd HH:mm:ss',
+          },
+          formItemAttributes: {
+            label: '活动开始日期',
+            prop: 'startTime',
+            rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+          }
+        },
+        {
+          name: 'el-date-picker',
+          md: 6,
+          attributes: {
+            disabled: !!this.formData.id,
+            style: { width: '100%' },
+            placeholder: '请选择',
+            'value-format': 'yyyy-MM-dd HH:mm:ss',
+          },
+          formItemAttributes: {
+            label: '活动结束日期',
+            prop: 'endTime',
+            rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+          }
+        },
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: { disabled: !!this.formData.id, placeholder: '请选择' },
+          formItemAttributes: { 
+            label: '活动名称', 
+            prop: 'name',
+            rules: [{ required: true, message: '请填写', trigger: 'blur' }]
+          }
+        },
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: { disabled: !!this.formData.id, placeholder: '请选择' },
+          formItemAttributes: { 
+            label: '二维码主题', 
+            prop: 'title',
+            rules: [{ required: true, message: '请填写', trigger: 'blur' }]
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '提交次数',
+            prop: 'submitLimitBool',
+            rules: [{ required: true, message: '请选择', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            console.log(value)
+            return (
+              <div class="redbordererr" style="">
+                <el-form-item label="" label-width="0px" prop="submitLimit" rules={value ? [{ required: true, message: '请填写', trigger: 'blur' }] : []}>
+                  <el-radio-group disabled={!!this.formData.id} value={value} onInput={onInput}>
+                    <el-radio disabled={!!this.formData.id} label={0}>不限制</el-radio>
+                    <el-radio disabled={!!this.formData.id} label={1}>
+                        限制{value?[<el-input disabled={!!this.formData.id} style="margin: 0 10px;width:100px;" value={this.formData.submitLimit} onInput={(val)=>{this.formData.submitLimit = val}} type="number" placeholder="请输入内容"></el-input>,<span>次</span>]:null}
+                    </el-radio>
+                  </el-radio-group>
+                </el-form-item>
+              </div>
+            )
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '首页广告图',
+            prop: 'banner',
+            rules: [{ required: true, message: '请上传', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <ImageUpload isEdit={!this.formData.id} fileList={this.formData.banner} uid={`questionFiles_bananner`} limit={1} isUpdate={false} />
+            )
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '活动详情图',
+            prop: 'detailImgs',
+            rules: [{ required: true, message: '请上传', trigger: 'blur' }]
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <ImageUpload isEdit={!this.formData.id} fileList={this.formData.detailImgs} uid={`questionFiles_detaidetailImgsdetailImgs`} limit={100} isUpdate={false} />
+            )
+          }
+        },
+        {
+          md: 24,
+          name: 'slot-component',
+          attributes: { placeholder: '请输入' },
+          formItemAttributes: {
+            label: '活动说明',
+            prop: 'content',
+            rules: []
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <quillEditor disabled={!!this.formData.id} value={value} onInput={onInput}></quillEditor>
+            )
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 24,
+          formItemAttributes: { label: '提交记录', prop: 'promotionQuestionnaireUsers' },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return this.convertTableJson(value, [
+              {
+                columnAttributes: {
+                  label: '*姓名',
+                  prop: 'name',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '*电话',
+                  prop: 'mobile',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '*时间(分钟)',
+                  prop: 'min',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input type="number" value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '*备注',
+                  prop: 'remark',
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px" prop={`promotionQuestionnaireUsers.${index}.${column.columnAttributes.prop}`} rules={[{ required: true, message: '请填写', trigger: 'blur' }]}>
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+            ], {
+              isEdit: !this.formData.id,
+              isAdd: !this.formData.id,
+              isDel: !this.formData.id,
+            }, {
+              add: ()=>{
+                this.formData.promotionQuestionnaireUsers.push({
+                  "min": '',
+                  "mobile": "",
+                  "name": "",
+                  "promotionQuestionnaireId": "",
+                  "remark": ""
+                })
+                this.isEditTableIndex = this.formData.promotionQuestionnaireUsers.length - 1
+              },
+              delete: ({ row, column, index }, cb) => {
+                if (this.isEditTableIndex == index) {
+                  this.isEditTableIndex = -1
+                } else if (this.isEditTableIndex > index) {
+                  this.isEditTableIndex--
+                }
+                cb && cb()
+              },
+              verify: ({ row, column, index }, isEditTableIndex) => {
+                return new Promise(r => {
+                  if (isEditTableIndex > -1) {
+                    this.$refs.formRef.validateField([
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.min`,
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.mobile`,
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.name`,
+                      `promotionQuestionnaireUsers.${isEditTableIndex}.remark`,
+                    ], (v) => {
+                      if (v) {
+                        r(true)
+                      } else {
+                        r(false)
+                      }
+                    })
+                  } else {
+                    r(true)
+                  }
+                })
+              },
+            })
+          }
+        },
+      ]
+    },
+    formItems2(){
+      return [{
+        md: 24,
+        name: 'slot-component',
+        attributes: { placeholder: '请输入' },
+        formItemAttributes: {
+          label: '',
+          'label-width': '0px',
+          prop: 'promotionQuestionnaireItems',
+          rules: []
+        },
+        render: (h, { props, onInput }) => {
+          return (
+            <div>
+              <div>
+                {!this.formData.id?<el-button type="primary" onClick={()=>{ this.showQuestion = true }}>新增</el-button>:null}
+              </div>
+              <div>
+                <zj-table
+                  columns={[{
+                    columnAttributes: {
+                      label: '填写内容',
+                      prop: '',
+                    },
+                    render: (h, { row, column, index }) => {
+                      return (
+                        <div style="padding:6px;">
+                          <div style="font-weight:bold;">{row.isRequire?<span style="color:red">*</span> : null}{index+1}、{row.question}({['单选','多选','填写'][row.type-1]})</div>
+                          {[
+                          <div>
+                            {row.answer.map(item=><el-radio disabled label="">{item.option_value}</el-radio>)}
+                          </div>,
+                          <div>
+                            {row.answer.map(item=><el-checkbox disabled label="">{item.option_value}</el-checkbox>)}
+                          </div>,
+                          <div>
+                            <el-input disabled placeholder="请输入内容"></el-input>
+                          </div>
+                          ][row.type-1]}
+                        </div>
+                      )
+                    },
+                  },
+                  ...(()=>{
+                    if(!this.formData.id){
+                      return[{
+                        columnAttributes: {
+                          label: '操作',
+                          prop: '',
+                          width: '200px'
+                        },
+                        render: (h, { row, column, index }) => {
+                          return (
+                            <div style="padding-left:5px">
+                              <el-button size="mini" onClick={()=>{
+                                this.questionData = {
+                                  ...JSON.parse(JSON.stringify(row)),
+                                  rowIndex: index
+                                }
+                                this.$nextTick(()=>{
+                                  this.showQuestion = true
+                                })
+                              }}>编辑</el-button>
+                              <el-button size="mini" onClick={()=>{
+                                this.formData.promotionQuestionnaireItems.push({...JSON.parse(JSON.stringify(row))})
+                              }}>复制</el-button>
+                              <el-button size="mini" onClick={()=>{
+                                this.formData.promotionQuestionnaireItems.splice(index, 1)
+                              }}>删除</el-button>
+                            </div>
+                          )
+                        },
+                      }]
+                    }
+                    return []
+                  })()]}
+                  table-data={this.formData.promotionQuestionnaireItems}
+                />
+              </div>
+            </div>
+          )
+        }
+      }]
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList:promotionQuestionnaireList,
+    // 列表导出函数
+    exportList: promotionQuestionnaireExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    // 操作按钮
+    operation() {
+      return this.operationBtn({
+        detail: {
+          click: ({ row, index, column }) => {
+            promotionQuestionnaireDetail({
+              id: row.id
+            }).then(res=>{
+              this.formData = {
+                ...res.data,
+                submitLimitBool: res.data.submitLimit == -1 ? 0 : 1,
+                promotionQuestionnaireItems:res.data.promotionQuestionnaireItems.map(item=>{
+                  return {
+                    ...item,
+                    answer: JSON.parse(item?.answer||"[]")
+                  }
+                }),
+                banner:res.data?.banner?.split(",").map(url=>({url})),
+                detailImgs:res.data?.detailImgs?.split(",").map(url=>({url}))
+              }
+              this.$nextTick(()=>{
+                this.formDialog = true
+              })
+            })
+          }
+        },
+      })
+    },
+    // 新增
+    addData(){
+      this.formDialog = true
+    },
+    // 关闭弹窗
+    formCancel(){
+      this.formDialog = false
+      this.$data.formData = this.$options.data().formData
+    },
+    // 确定
+    formConfirm() {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          var data = {
+            ...this.formData,
+            banner:this.formData.banner.map(item=>item.url).join(","),
+            detailImgs:this.formData.detailImgs.map(item=>item.url).join(","),
+            promotionQuestionnaireItems:this.formData.promotionQuestionnaireItems.map(item=>{
+              return {
+                ...item,
+                answer: JSON.stringify(item.answer)
+              }
+            }),
+            submitLimit: !!this.formData.submitLimitBool ? this.formData.submitLimit : -1
+          }
+          promotionQuestionnaireAdd(data).then(res=>{
+            this.$message({
+							type: 'success',
+							message: `添加成功成功!`,
+						})
+						this.$refs.pageRef.refreshList()
+            this.formCancel()
+          })
+        }
+      })
+    },
+    // 关闭题目编辑
+    questionClose(){
+      this.showQuestion = false
+      this.questionData = {
+        rowIndex: -1
+      }
+    },
+    // 确定题目编辑
+    questionConfirm(data){
+      if(data.rowIndex==-1){
+        this.formData.promotionQuestionnaireItems.push({...data})
+      }else{
+        this.formData.promotionQuestionnaireItems.splice(data.rowIndex, 1, {...data})
+      }
+      this.questionClose()
+    }
+  }
+}
+</script>
+
+<style lang="scss">
+</style>

+ 8 - 1
src/views/setting/organizationManagement/settledManagement/index.vue

@@ -377,7 +377,12 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="抢单新单通知" prop="pubTemplateId7">
-                <el-input v-model="step3Form.pubTemplateId7" autocomplete="off" placeholder="请输入安维费用发放通知"></el-input>
+                <el-input v-model="step3Form.pubTemplateId7" autocomplete="off" placeholder="请输入抢单新单通知"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="配件到货通知" prop="pubTemplateId8">
+                <el-input v-model="step3Form.pubTemplateId8" autocomplete="off" placeholder="请输入配件到货通知"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -529,6 +534,7 @@ export default {
         pubTemplateId5:'',
         pubTemplateId6:'',
         pubTemplateId7:'',
+        pubTemplateId8:'',
       },
       step3FormRules: {
       },
@@ -699,6 +705,7 @@ export default {
             pubTemplateId5: this.step3Form.pubTemplateId5,
             pubTemplateId6: this.step3Form.pubTemplateId6,
             pubTemplateId7: this.step3Form.pubTemplateId7,
+            pubTemplateId8: this.step3Form.pubTemplateId8,
           }
           addAccount(params).then(res => {
             this.$successMsg('开通成功');

+ 9 - 1
src/views/setting/organizationManagement/tenantDetails/index.vue

@@ -313,7 +313,12 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="抢单新单通知" prop="pubTemplateId7">
-                <el-input :disabled="!~[2].indexOf(userType)" v-model="step3Form.pubTemplateId7" autocomplete="off" placeholder="请输入安维费用发放通知"></el-input>
+                <el-input :disabled="!~[2].indexOf(userType)" v-model="step3Form.pubTemplateId7" autocomplete="off" placeholder="请输入抢单新单通知"></el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="6">
+              <el-form-item label="配件到货通知" prop="pubTemplateId8">
+                <el-input :disabled="!~[2].indexOf(userType)" v-model="step3Form.pubTemplateId8" autocomplete="off" placeholder="请输入配件到货通知"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -566,6 +571,7 @@ export default {
         pubTemplateId5:'',
         pubTemplateId6:'',
         pubTemplateId7:'',
+        pubTemplateId8:'',
       },
       step3FormRules: {
        
@@ -669,6 +675,7 @@ export default {
         this.step3Form.pubTemplateId5 = res.data.pubTemplateId5;
         this.step3Form.pubTemplateId6 = res.data.pubTemplateId6;
         this.step3Form.pubTemplateId7 = res.data.pubTemplateId7;
+        this.step3Form.pubTemplateId8 = res.data.pubTemplateId8;
 
         this.companyWechatId = res.data.companyWechatId;
 
@@ -854,6 +861,7 @@ export default {
             pubTemplateId5: this.step3Form.pubTemplateId5,
             pubTemplateId6: this.step3Form.pubTemplateId6,
             pubTemplateId7: this.step3Form.pubTemplateId7,
+            pubTemplateId8: this.step3Form.pubTemplateId8,
             
             companyWechatId: this.companyWechatId
           }

+ 341 - 0
src/views/valueAddedService/home/index.vue

@@ -0,0 +1,341 @@
+<template>
+	<div class="dashboard_container">
+		<div class="refresh" @click="refreshData">
+			<span style="color: #1d82ff;">刷新数据</span>
+			<i class="el-icon-refresh-left" style="color: #1d82ff;"></i>
+		</div>
+		<div class="flex">
+			<div class="mode" style="max-width:33%" @click="gotopage('valueAddedConfig','','')">
+				<div class="title">增值服务配置</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.allIncreNum}}</div>
+							<div class="title">总配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.onIncreNum}}</div>
+							<div class="title">有效配置数量</div>
+						</div>
+					</div>
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.offIncreNum}}</div>
+							<div class="title">无效配置数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" style="max-width:14%" @click="gotopage('extendedWarrantyWork','','')">
+				<div class="title">理赔工单统计</div>
+				<div class="flex head">
+					<div class="tab">
+						<div class="text">
+							<div class="num">{{collectData.lpOrderNumber}}</div>
+							<div class="title">理赔工单数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="flex">
+			<div class="mode" >
+				<div class="title">线下订单统计</div>
+				<div class="flex head">
+					<div class="tab"  @click="gotopage('orderSettleManag','待审核数量','WAIT','SELF')">
+						<div class="text">
+							<div class="num">{{collectData.waitLineNum}}</div>
+							<div class="title">待审核数量</div>
+						</div>
+					</div>
+					<div class="tab"  @click="gotopage('orderSettleManag','审核通过数量','OK','SELF')">
+						<div class="text">
+							<div class="num">{{collectData.okLineOrderNum}}</div>
+							<div class="title">审核通过数量</div>
+						</div>
+					</div>
+					<div class="tab"  @click="gotopage('orderSettleManag','审核失败数量','FAIL','SELF')">
+						<div class="text">
+							<div class="num">{{collectData.failLineOrderNum}}</div>
+							<div class="title">审核失败数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+			<div class="mode" style="min-width:66.33%">
+				<div class="title">线上订单统计</div>
+				<div class="flex head">
+					<div class="tab" @click="gotopage('orderSettleManag','已支付数量','PAID','ONLINE')">
+						<div class="text">
+							<div class="num">{{collectData.paidOnLineOrderNum}}</div>
+							<div class="title">已支付数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('orderSettleManag','待支付数量','WAIT','ONLINE')">
+						<div class="text">
+							<div class="num">{{collectData.waitOnLineOrderNum}}</div>
+							<div class="title">待支付数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('orderSettleManag','已退款数量','REFUND','ONLINE')">
+						<div class="text">
+							<div class="num">{{collectData.refundOnLineOrderNum}}</div>
+							<div class="title">已退款数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('orderSettleManag','已过期数量','EXPIRE','ONLINE')">
+						<div class="text">
+							<div class="num">{{collectData.endOnLineOrderNum}}</div>
+							<div class="title">已过期数量</div>
+						</div>
+					</div>
+					<div class="tab" @click="gotopage('orderSettleManag','已取消数量','CANCEL','ONLINE')">
+						<div class="text">
+							<div class="num">{{collectData.cancelOnLineOrderNum}}</div>
+							<div class="title">已取消数量</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+    <div class="container_bottom">
+			<div class="chart">
+				<div class="flex_asb">
+					<div class="title">增值服务数据看板</div>
+          <el-date-picker
+            v-model="times"
+            @change="refreshData" 
+            value-format="yyyy-MM-dd HH:mm:ss"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期">
+          </el-date-picker>
+				</div>
+				<div ref="chart" style="width: 100%;height: 330px;"></div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {dataCountIncreCount} from "@/api/dataCount.js"
+	export default {
+		data() {
+			return{
+				collectData: {},
+        times: []
+			}
+		},
+		created() {
+      this.refreshData()
+		},
+		methods: {
+      refreshData(){
+        dataCountIncreCount({
+          startTime: this.times?.[0],
+          endTime: this.times?.[1]
+        }).then(res=>{
+          this.collectData = res.data
+          this.$echarts.init(this.$refs.chart).dispose()
+          this.$nextTick(()=>{
+            this.drawChat(res.data.lineList, res.data.onLineList, this.times)
+          })
+        })
+      },
+      gotopage(name,pageName,pageCode,type){
+        if(pageCode){
+          this.$router.push({
+            name: name,
+            params: {
+              pageName: pageName,
+              pageType: type || '-',
+              pageCode: pageCode,
+            },
+          })
+        }else{
+          this.$router.push({
+            name: name
+          })
+        }
+      },
+      drawChat(data1, data2, times = []) {
+				this.$echarts.init(this.$refs.chart).setOption({
+          grid: {
+            left: 30,   
+            right: 30,  
+            top: 30,    
+            bottom: 60, 
+          },
+          tooltip: {
+						trigger: 'axis'
+					},
+					legend: {
+						data: ['新增线下订单','新增线上订单']
+					},
+					xAxis: {
+						type: 'category',
+						boundaryGap: false,
+						data: this.getDaysBetweenDates(times?.[0],times?.[1])
+					},
+					yAxis: {
+						type: 'value'
+					},
+					series: [
+						{
+							name: '新增线下订单',
+							data: data1,
+							type: 'line',
+							smooth: true,
+						},
+						{
+							name: '新增线上订单',
+							data: data2,
+							type: 'line',
+							smooth: true,
+						}
+					]
+				})
+			},
+      getDaysBetweenDates(startDate, endDate) {
+        if(!startDate || !endDate){
+          // 获取今天的日期
+          var today = new Date();
+          // 创建一个数组来存储日期
+          var dateList = [];
+          // 循环获取十五天内的日期
+          for (var i = 0; i < 15; i++) {
+              // 将日期添加到数组中
+              dateList.push(new Date(today.getFullYear(), today.getMonth(), today.getDate() + i).toLocaleDateString());
+          }
+          return dateList
+        }
+        var dateArray = [];
+        var currentDate = new Date(startDate);
+        var jieshu = new Date(endDate);
+        // 循环获取开始时间和结束时间之间的日期
+        while (currentDate <= jieshu) {
+            // 将日期添加到数组中
+            dateArray.push(new Date(currentDate).toLocaleDateString());
+            // 将当前日期增加一天
+            currentDate.setDate(currentDate.getDate() + 1);
+        }
+        return dateArray;
+      }
+		}
+	}
+</script>
+
+<style scoped lang="scss">
+	.dashboard_container {
+		background: #f5f5f5;
+		padding: 20px;
+		min-height: calc(100vh - 86px);
+		box-sizing: border-box;
+
+		.refresh {
+			text-align: right;
+			margin-bottom: 10px;
+
+			span {
+				cursor: pointer;
+			}
+
+			i {
+				font-weight: bold;
+				margin-left: 4px;
+				cursor: pointer;
+			}
+		}
+
+		.flex {
+			display: flex;
+      margin-bottom: 10px;
+		}
+
+		.flex_asb {
+			display: flex;
+			justify-content: space-between;
+		}
+
+		.mode {
+			flex: 1;
+			padding: 10px;
+			margin-right: 10px;
+			background-color: #ffffff;
+			border-radius: 10px;
+
+			.title {
+				font-weight: bold;
+			}
+
+			.head {
+        padding-top: 12px!important;
+        margin: 0 !important;
+        margin-bottom: 0 !important;
+			}
+
+			.opacity {
+				opacity: 0;
+			}
+
+			.tab {
+				display: flex;
+				align-items: center;
+				flex: 1;
+				cursor: pointer;
+
+				.text {
+					margin: 0 10px;
+
+					.title {
+						color: #999999;
+						font-size: 12px;
+						margin-top: 8px;
+					}
+
+					.num {
+						font-size: 22px;
+						font-weight: bold;
+					}
+				}
+
+				.img {
+					width: 46px;
+					height: 46px;
+					margin-left: 20px;
+				}
+			}
+
+			.child {
+				border-right: 1px solid #dddddd;
+
+				.text {
+					.title {
+						margin-top: 8px;
+						margin-bottom: 0;
+					}
+				}
+			}
+
+			.child:last-child {
+				border-right: none;
+			}
+		}
+
+		.mode:last-child {
+			margin-right: 0;
+		}
+
+		.container_bottom {
+			width: 100%;
+			height: 350px;
+			padding: 10px;
+			background-color: #ffffff;
+			margin-top: 10px;
+			border-radius: 10px;
+		}
+	}
+</style>

+ 2 - 2
src/views/valueAddedService/orderSettleManag/pages/collect.vue

@@ -91,7 +91,7 @@ export default {
         {
           name: '支付状态',
           key: 'payStatus',
-          value: '',
+          value: this?.$route?.params?.pageCode || '',
           conditions: [
             {
               label: "全部",
@@ -117,7 +117,7 @@ export default {
     }
   },
   created() {
-    if (this.pageCode) {
+    if (this.pageCode && !~['PAID','WAIT','REFUND','EXPIRE','CANCEL'].indexOf(this.pageCode)) {
       this.defaultSearchData = [{ "param": "a.id", "compare": "=", "value": this.pageCode, label: "订单单号" }]
     }
   },

+ 2 - 2
src/views/valueAddedService/orderSettleManag/pages/offline.vue

@@ -185,7 +185,7 @@ export default {
         {
           name: '审批状态',
           key: 'flag',
-          value: '',
+          value: this?.$route?.params?.pageCode || '',
           conditions: [
             {
               label: "全部",
@@ -218,7 +218,7 @@ export default {
     }
   },
   created() {
-    if (this.pageCode) {
+    if (this.pageCode && !~['WAIT','OK','FAIL'].indexOf(this.pageCode)) {
       this.defaultSearchData = [{ "param": "a.id", "compare": "=", "value": this.pageCode, label: "订单单号" }]
     }
   },

+ 7 - 2
src/views/workOrder/workOrderPool/detail.vue

@@ -7,6 +7,7 @@
       <el-tab-pane :label="`支付费用`" name="payFee" key="payFee"></el-tab-pane>
       <el-tab-pane v-if="EvaluationShow" label="评价信息" name="Evaluation" key="Evaluation"> </el-tab-pane>
       <el-tab-pane v-if="SettleAccountsShow" label="费用结算" name="SettleAccounts" key="SettleAccounts"> </el-tab-pane>
+      <el-tab-pane v-if="PartsApplicationShow" label="配件申请" name="PartsApplication" key="PartsApplication"> </el-tab-pane>
     </el-tabs>
     <div class="view_div">
       <div :style="{
@@ -20,6 +21,7 @@
       <Payment v-if="activeName == 'payFee'" :id="id" ref="payFee" :workOrderType="workOrderType" />
       <Evaluation v-if="activeName == 'Evaluation' && EvaluationShow" :id="id" ref="Evaluation" />
       <SettleAccounts v-if="activeName == 'SettleAccounts' && SettleAccountsShow" :id="id" ref="SettleAccounts" />
+      <PartsApplication v-if="activeName == 'PartsApplication' && PartsApplicationShow" :id="id" ref="PartsApplication" />
     </div>
   </div>
 </template>
@@ -31,6 +33,7 @@ import CompletionDetails from './detailModule/CompletionDetails/index.vue'
 import Payment from './detailModule/Payment/index.vue'
 import Evaluation from './detailModule/Evaluation/index.vue'
 import SettleAccounts from './detailModule/SettleAccounts/index.vue'
+import PartsApplication from './detailModule/PartsApplication/index.vue'
 import { orderBaseDetail } from "@/api/workOrderPool.js"
 export default {
   components: {
@@ -39,7 +42,8 @@ export default {
     CompletionDetails,
     Payment,
     Evaluation,
-    SettleAccounts
+    SettleAccounts,
+    PartsApplication
   },
   props: {
     id: {
@@ -55,7 +59,8 @@ export default {
     return {
       activeName: this?.$route?.params?.pagePam || 'workOrderInfo',
       EvaluationShow: false,
-      SettleAccountsShow: false
+      SettleAccountsShow: false,
+      PartsApplicationShow: true,
     }
   },
   created() {

+ 219 - 0
src/views/workOrder/workOrderPool/detailModule/PartsApplication/formModule.vue

@@ -0,0 +1,219 @@
+<template>
+  <zj-form-module :title="'申请信息' + (index + 1)" :form-data="item" :form-items="formItems">
+    <div v-if="item.status == 'ING'" style="text-align:right;box-sizing:border-box;padding-bottom: 10px; padding-right: 10px;">
+      <el-button size="mini" plain @click="quxiao">取消申请</el-button>
+      <el-button size="mini" type="primary" plain @click="daohuo">到货反馈</el-button>
+    </div>
+  </zj-form-module>
+</template>
+
+<script>
+import editTable from "@/components/template/editTable.js"
+import { orderPartsApplyItemModify, orderPartsApplyCancel, orderPartsApplyEnd, orderPartsApplyItemDel } from "@/api/workOrderPool.js";
+export default {
+  props: {
+    id: {
+      type: [String, Number],
+      default: null,
+    },
+    item: {
+      type: Object,
+      default: ()=>({}),
+    },
+    index: {
+      type: [String, Number],
+      default: null,
+    },
+  },
+  mixins: [editTable],
+  data() {
+    return {
+    }
+  },
+  computed: {
+    formItems() {
+      return [
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '申请单号', prop: 'id' },
+        },
+        {
+          name: 'slot-component',
+          md: 6,
+          formItemAttributes: { label: '申请状态', prop: 'status' },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return <el-input disabled={true} value={({ING:"申请中",END:"到货反馈",CANCEL:"取消申请"})[value]} placeholder=""></el-input>
+          }
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '申请人', prop: 'createBy' },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '申请时间', prop: 'createTime' },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '取消人', prop: 'cancelBy' },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '取消时间', prop: 'cancelTime' },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '反馈人', prop: 'confirmBy' },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: { disabled: true, placeholder: '-' },
+          formItemAttributes: { label: '反馈时间', prop: 'confirmTime' },
+        },
+        {
+          name: 'el-input',
+          md: 24,
+          attributes: {
+            disabled: true,
+            type: 'textarea',
+            rows: 2,
+            placeholder: '-'
+          },
+          formItemAttributes: {
+            label: '备注',
+            prop: 'remark',
+          }
+        },
+        {
+          name: 'slot-component',
+          md: 24,
+          formItemAttributes: { label: '配件信息', prop: 'items' },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            console.log(value)
+            return this.convertTableJson(value, [
+              {
+                columnAttributes: {
+                  label: '配件名称',
+                  prop: 'name',
+                  propName: 'name'
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px">
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+              {
+                columnAttributes: {
+                  label: '数量',
+                  prop: 'qty',
+                  propName: 'qty'
+                },
+                editRender: (h, { row, column, index }) => {
+                  return (
+                    <div class="redbordererr">
+                      <el-form-item label="" label-width="0px">
+                        <el-input value={row[column.columnAttributes.prop]} onInput={val => { row[column.columnAttributes.prop] = val }} placeholder="请输入内容" type="number"></el-input>
+                      </el-form-item>
+                    </div>
+                  )
+                },
+                viewRender: (h, { row, column, index }) => {
+                  return <div style="padding-left:10px">{row[column.columnAttributes.prop]}</div>
+                }
+              },
+            ], {
+              isEdit: this.item.status == "ING",
+              isAdd: false,
+              isDel: false // this.item.status == "ING",
+            }, {
+              confirm:({ row, column, index })=>{
+                orderPartsApplyItemModify({...row}).then(res=>{
+                  this.isEditTableIndex = -1
+                  this.$message({
+                    type: 'success',
+                    message: '保存成功'
+                  })
+                })
+              },
+              delete:({ row, column, index },cb)=>{
+                orderPartsApplyItemDel({...row}).then(res=>{
+                  this.$message({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  cb && cb()
+                })
+              },
+            })
+          }
+        },
+      ]
+    },
+  },
+  methods: {
+    quxiao(){
+      this.$confirm('是否确认取消?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        orderPartsApplyCancel({
+          id:this.item.id
+        }).then(res=>{
+          this.$message({
+            type: 'success',
+            message: '取消成功'
+          })
+          this.$emit("shuaxin")
+        })
+      }).catch(() => {
+      });
+    },
+    daohuo(){
+      this.$confirm('是否确认反馈?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        orderPartsApplyEnd({
+          id:this.item.id
+        }).then(res=>{
+          this.$message({
+            type: 'success',
+            message: '反馈成功'
+          })
+          this.$emit("shuaxin")
+        })
+      }).catch(() => {
+      });
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 72 - 0
src/views/workOrder/workOrderPool/detailModule/PartsApplication/index.vue

@@ -0,0 +1,72 @@
+<template>
+  <zj-page-container>
+    <zj-page-fill class="neibuview">
+      <template v-if="payData.length">
+        <zj-form-container :formAttributes="{ 'label-position': 'top' }">
+          <template v-for="(item, index) in payData">
+            <formModule :item="payData[index]" :index="index" @shuaxin="shuaxin">
+            </formModule>
+          </template>
+        </zj-form-container>
+      </template>
+      <el-empty v-else description="暂时没有配件申请"></el-empty>
+    </zj-page-fill>
+  </zj-page-container>
+</template>
+
+<script>
+import { orderPartsApplyRecord } from "@/api/workOrderPool.js";
+import formModule from "./formModule.vue"
+export default {
+  components:{
+    formModule
+  },
+  props: {
+    id: {
+      type: [String, Number],
+      default: null,
+    },
+  },
+  data() {
+    return {
+      payData: []
+    }
+  },
+  watch: {
+    id: {
+      handler(newVal, oldVal) {
+        this.shuaxin()
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  computed: {
+  },
+  methods: {
+    shuaxin(){
+      orderPartsApplyRecord({
+        orderId: this.id
+      }).then(res => {
+        this.payData = res.data || []
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.neibuview {
+  box-sizing: border-box;
+  padding-left: 16px;
+
+  ::v-deep &>.zj-page-fill-scroll {
+    box-sizing: border-box;
+    padding-right: 16px;
+
+    &>div:nth-child(1) {
+      margin-top: 20px;
+    }
+  }
+}
+</style>

+ 9 - 0
src/views/workOrder/workOrderPool/index.vue

@@ -326,6 +326,15 @@ export default {
         }, {
           label: "已取消",
           value: "YQX"
+        }, {
+          label: "配件申请中",
+          value: "PJSQZ"
+        }, {
+          label: "配件已到货",
+          value: "PJYDH"
+        }, {
+          label: "配件已取消",
+          value: "PJYQX"
         }].map(item => {
           var data = res.data.find(val => val.orderStatus == item.value)
           if (data) {