Просмотр исходного кода

Merge branch 'Version2' into onlineDev

codeMan 2 лет назад
Родитель
Сommit
c757c23fa4

+ 2 - 0
src/MAR/archivesMag/modules/workManage/add.vue

@@ -161,6 +161,7 @@ const fileChange = (res) => {
 
 const formRef = ref()
 let uploadEl = ref()
+let upload = ref()
 let loading = ref(false)
 const submit = async ()=>{
   try {
@@ -194,6 +195,7 @@ const submit = async ()=>{
           emit('onSuccess')
           bindData.value = {}
           uploadEl.value.refresh()
+          upload.value.refresh()
           formRef.value.resetFields()
           loading.value = false
         })

+ 80 - 0
src/MAR/eventsManage/detail/index.vue

@@ -0,0 +1,80 @@
+<template>
+  <div>
+    <detail-template 
+      :headData="mainAreaData" 
+      :title="mainData.name" 
+      :tabs="['设置奖项']" 
+      ownertable="sa_awardids"
+      :disable="utils.isDisabled(mainData.isonsale,[1])"
+      :delParam="{id:20240514101602,content:{sa_awardidsids:[router.currentRoute.value.query.id]}}"
+      >
+      <template #operation>
+        <Edit :rowData="mainData" v-if="utils.hasPermission('insert') && mainData.isonsale == 0" @onSuccess="mianData()"></Edit>
+        <CustomButton
+          btnName="上架"
+          idName="20240514101702"
+          keyName="sa_awardids"
+          :paramData="[{key:'isonsale',value:1}]"
+          :id="[router.currentRoute.value.query.id]"
+          type="primary"
+          message="确定上架当前活动吗?"
+          @onSuccess="mianData()"
+          v-if="mainData.isonsale == 0 && utils.hasPermission('open')"
+          size="middle"
+        />
+        <CustomButton
+          btnName="下架"
+          idName="20240514101702"
+          keyName="sa_awardids"
+          :paramData="[{key:'isonsale',value:0}]"
+          :id="[router.currentRoute.value.query.id]"
+          type="primary"
+          message="确定下架当前活动吗?"
+          @onSuccess="mianData()"
+          size="middle"
+          v-else-if="utils.hasPermission('noopen') && mainData.isonsale == 1"
+        />
+      </template>
+      <template #tab0>
+        <setOptions :rowData="mainData"></setOptions>
+      </template>
+    </detail-template>
+  </div>
+</template>
+
+<script setup>
+import Api from '@/api/api'
+import utils  from '@/utils/utils'
+import detailTemplate from '@/components/detailTemplate/index.vue'
+import normalTable from '@/template/normalTable/index.vue'
+import Edit from '../modules/Edit.vue'
+import setOptions from './modules/setOptions.vue'
+
+import { useRouter } from "vue-router";
+import {ref,defineProps,createVNode, defineComponent,onMounted, provide} from 'vue'
+const router = useRouter()
+const mainAreaData = ref([])
+const mainData = ref({})
+
+const mianData = async ()=>{
+  const res = await Api.requested({
+    "id": "20240514101502",
+    "content": {
+        "sa_awardid": router.currentRoute.value.query.id
+    }
+  })
+  mainData.value = res.data
+  console.log(mainData.value);
+  changeDataStructure(res.data)
+}
+
+const changeDataStructure = (data) => {
+  mainAreaData.value = utils.FormLayout('detailsHead',data)
+}
+
+onMounted (()=>{
+  mianData()
+})
+</script>
+<style>
+</style>

+ 173 - 0
src/MAR/eventsManage/detail/modules/Add.vue

@@ -0,0 +1,173 @@
+<template>
+  <div>
+    <a-button type="primary" @click="showDrawer">新建</a-button>
+    <a-drawer
+      v-model:open="visible"
+      class="custom-class"
+      title="新建奖项"
+      placement="right"
+      width="600"
+      :closable="false"
+      :maskClosable="!loading"
+    >
+      <a-form ref="formRef" :model="form" layout="vertical">
+        <a-row :gutter="16">
+          <a-col :span="24">
+            <a-form-item label="奖项名称" name="name" :rules="[{ required: true, message: '请输入奖项名称'}]">
+              <a-input v-model:value="form.name" placeholder="请输入奖项名称"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="中奖概率" name="percentage" :rules="[{ required: true,validator: checkNumber,trigger: 'blur' }]">
+              <a-input v-model:value="form.percentage" placeholder="请输入中奖概率"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="类型">
+              <a-radio-group v-model:value="form.type" @change="typeChange">
+                <a-radio value="现金">现金</a-radio>
+                <a-radio value="实物">实物</a-radio>
+              </a-radio-group>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24" v-if="form.type == '现金'">
+            <a-form-item label="金额(元)" name="price" :rules="[{ required: true,validator: checkNumber2,trigger: 'blur' },{pattern:/^([1-9][0-9]*)+(\.[0-9]{1,2})?$/,required: true, message: '请输入数字,最多两位小数',trigger:'blur'}]">
+              <a-input v-model:value="form.price" placeholder="请输入金额(元)"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="对外余量" name="outcount" :rules="[{ required: true, message: '请输入对外余量'},{ pattern:/^[0-9]*$/,message:'请输入正数字',trigger:'blur'}]">
+              <a-input v-model:value="form.outcount" placeholder="请输入对外余量"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="总量" name="totalcount" :rules="[{ required: true, message: '请输入总量'},{ pattern:/^[0-9]*$/,message:'请输入正数字',trigger:'blur'}]">
+              <a-input v-model:value="form.totalcount" placeholder="请输入总量"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="封面图" name="attinfos" :rules="[{ required: true,message:'请选择图片',trigger: 'blur' }]">
+              <Upload 
+                :bindData="bindData"
+                @fileChange="form.attinfos='1'"  
+                :multiple="false"
+                accept="image/*"
+                ref="upload"
+              ></Upload>
+              <p style="color:#b8b3b3">注:建议上传图片大小130x80像素,大小不超过2M,格式为JPG/PNG</p>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+      <template #extra>
+        <a-space>
+          <CustomButton type="primary" @click="submit" :loading="loading">保存</CustomButton>
+        </a-space>
+      </template>
+    </a-drawer>
+  </div>
+</template>
+
+<script setup>
+import dayjs from 'dayjs'
+import {ref,defineEmits, watch, inject} from 'vue'
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import Upload from '@/MAR/assetsStore/detail/fileUpload.vue'
+import { useAuthStore } from '@/stores/modules/auth'
+import { useRouter } from "vue-router";
+const router = useRouter()
+const emit = defineEmits(['onSuccess'])
+const visible = ref(false)
+const form = ref({
+  "sa_awardid": router.currentRoute.value.query.id,
+  "sa_awarditemsid": 0,
+  "sequence": 1,
+  "name": "",
+  "price": '',
+  "percentage": '',
+  "type": "实物",
+  "outcount": '',
+  "totalcount": '',
+  attinfos:''
+})
+let bindData = ref({})
+let loading = ref()
+
+const checkNumber = async (_rule, value) => {
+  console.log(value)
+  if (value === '' || value == null) {
+    return Promise.reject('请输入内容');
+  } else if(value <=0 || value > 100){
+    return Promise.reject('数值范围1-100');
+  } else {
+    return Promise.resolve();
+  }
+};
+const checkNumber2 = async (_rule, value) => {
+  console.log(value)
+  if (value === '' || value == null) {
+    return Promise.reject('请输入内容');
+  } else if(value <=0.3){
+    return Promise.reject('数值必须大于等于0.3');
+  } else {
+    return Promise.resolve();
+  }
+};
+
+const typeChange = () => {
+  if(form.value.type == '实物') {
+    form.value.price = ''
+  }
+}
+
+const showDrawer = async ()=>{
+  visible.value = true
+}
+
+const formRef = ref()
+let upload = ref()
+const submit = async ()=>{
+  try {
+    console.log(form.value)
+    loading.value = true
+    const values = await formRef.value.validateFields();
+    form.value.percentage = form.value.percentage/100
+    const res = await Api.requested({
+      "id":"20240514131202",
+      "content":form.value
+    })
+    bindData.value = {ownerid:res.data.sa_awarditemsid,ownertable:'sa_awarditems',usetype:'default'}
+    upload.value.toUpload(() => {
+      utils.message(res,'操作成功',() => {
+        visible.value = false
+        refresh()
+        upload.value.refresh()
+        emit('onSuccess')
+        loading.value = false
+      })
+    })
+    
+  } catch (errorInfo) {
+    console.log('Failed:', errorInfo);
+  }
+}
+const refresh = () => {
+  form.value = {
+    "sa_awardid": router.currentRoute.value.query.id,
+    "sa_awarditemsid": 0,
+    "sequence": 1,
+    "name": "",
+    "price": '',
+    "percentage": '',
+    "type": "实物",
+    "outcount": '',
+    "totalcount": ''
+  }
+}
+</script>
+<style scoped>
+.ant-picker {
+  width: 100%;
+}
+</style>

+ 179 - 0
src/MAR/eventsManage/detail/modules/Edit.vue

@@ -0,0 +1,179 @@
+<template>
+  <div>
+    <a-button type="link" @click="showDrawer">编辑</a-button>
+    <a-drawer
+      v-model:open="visible"
+      class="custom-class"
+      title="编辑奖项"
+      placement="right"
+      width="600"
+      :closable="false"
+      :maskClosable="!loading"
+    >
+      <a-form ref="formRef" :model="form" layout="vertical">
+        <a-row :gutter="16">
+          <a-col :span="24">
+            <a-form-item label="奖项名称" name="name" :rules="[{ required: true, message: '请输入奖项名称'}]">
+              <a-input v-model:value="form.name" placeholder="请输入奖项名称"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="中奖概率" name="percentage" :rules="[{ required: true,validator: checkNumber,trigger: 'blur' }]">
+              <a-input v-model:value="form.percentage" placeholder="请输入中奖概率"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="类型">
+              <a-radio-group v-model:value="form.type">
+                <a-radio value="现金">现金</a-radio>
+                <a-radio value="实物">实物</a-radio>
+              </a-radio-group>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24" v-if="form.type == '现金'">
+            <a-form-item label="金额(元)" name="price" :rules="[{ required: true,validator: checkNumber2,trigger: 'blur' },{pattern:/^([1-9][0-9]*)+(\.[0-9]{1,2})?$/,required: true, message: '请输入数字,最多两位小数',trigger:'blur'}]">
+              <a-input v-model:value="form.price" placeholder="请输入金额(元)"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="对外余量" name="outcount" :rules="[{ required: true, message: '请输入对外余量'},{ pattern:/^[0-9]*$/,message:'请输入正数字',trigger:'blur'}]">
+              <a-input v-model:value="form.outcount" placeholder="请输入对外余量"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="总量" name="totalcount" :rules="[{ required: true, message: '请输入总量'},{ pattern:/^[0-9]*$/,message:'请输入正数字',trigger:'blur'}]">
+              <a-input v-model:value="form.totalcount" placeholder="请输入总量"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="封面图" name="attinfos" :rules="[{ required: true,message:'请选择图片',trigger: 'blur' }]">
+              <Upload 
+                :bindData="bindData"
+                @fileChange="form.attinfos='1';loading=true"  
+                :multiple="false"
+                accept="image/*"
+                ref="upload"
+                @uploadSuccess="loading=false"
+              ></Upload>
+              <p style="color:#b8b3b3">注:建议上传图片大小130x80像素,大小不超过2M,格式为JPG/PNG</p>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+      <template #extra>
+        <a-space>
+          <CustomButton type="primary" @click="submit" :loading="loading">保存</CustomButton>
+        </a-space>
+      </template>
+    </a-drawer>
+  </div>
+</template>
+
+<script setup>
+import dayjs from 'dayjs'
+import {ref,defineEmits, watch, inject, nextTick} from 'vue'
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import Upload from '@/MAR/assetsStore/detail/fileUpload.vue'
+import { useAuthStore } from '@/stores/modules/auth'
+import { useRouter } from "vue-router";
+const router = useRouter()
+const emit = defineEmits(['onSuccess'])
+const props = defineProps(['rowData'])
+const visible = ref(false)
+const form = ref({
+  "sa_awardid": router.currentRoute.value.query.id,
+  "sa_awarditemsid": 0,
+  "sequence": 1,
+  "name": "",
+  "price": '',
+  "percentage": '',
+  "type": "实物",
+  "outcount": '',
+  "totalcount": '',
+  attinfos:''
+})
+let bindData = ref({})
+let loading = ref()
+
+const checkNumber = async (_rule, value) => {
+  console.log(value)
+  if (value === '' || value == null) {
+    return Promise.reject('请输入内容');
+  } else if(value <=0 || value > 100){
+    return Promise.reject('数值范围1-100');
+  } else {
+    return Promise.resolve();
+  }
+};
+const checkNumber2 = async (_rule, value) => {
+  console.log(value)
+  if (value === '' || value == null) {
+    return Promise.reject('请输入内容');
+  } else if(value <=0.3){
+    return Promise.reject('数值必须大于等于0.3');
+  } else {
+    return Promise.resolve();
+  }
+};
+
+const typeChange = () => {
+  if(form.value.type == '实物') {
+    form.value.price = ''
+  }
+}
+
+let upload = ref()
+const showDrawer = async ()=>{
+  form.value = Object.assign({},form.value,props.rowData)
+  form.value.attinfos = utils.fileList(form.value.attinfos)
+  form.value.percentage = form.value.percentage * 100
+  bindData.value = {ownerid:form.value.sa_awarditemsid,ownertable:'sa_awarditems',usetype:'default'}
+  visible.value = true
+  nextTick(() => {
+    upload.value.fileList = form.value.attinfos
+  })
+  console.log(form.value,props.rowData);
+}
+
+const formRef = ref()
+const submit = async ()=>{
+  try {
+    console.log(form.value)
+    loading.value = true
+    const values = await formRef.value.validateFields();
+    form.value.percentage = form.value.percentage/100
+    const res = await Api.requested({
+      "id":"20240514131202",
+      "content":form.value
+    })
+    utils.message(res,'操作成功',() => {
+      visible.value = false
+      refresh()
+      upload.value.refresh()
+      emit('onSuccess')
+      loading.value = false
+    })
+  } catch (errorInfo) {
+    console.log('Failed:', errorInfo);
+  }
+}
+const refresh = () => {
+  form.value = {
+    "sa_awardid": router.currentRoute.value.query.id,
+    "sa_awarditemsid": 0,
+    "sequence": 1,
+    "name": "",
+    "price": '',
+    "percentage": '',
+    "type": "实物",
+    "outcount": '',
+    "totalcount": ''
+  }
+}
+</script>
+<style scoped>
+.ant-picker {
+  width: 100%;
+}
+</style>

+ 142 - 0
src/MAR/eventsManage/detail/modules/setOptions.vue

@@ -0,0 +1,142 @@
+<template>
+  <div>
+    <div style="margin-bottom: 10px" class="inline-16">
+      <div class="inline-16">
+        <span class="select-title">类型:</span>
+        <a-select
+          ref="select"
+          v-model:value="param.content.where.status"
+          placeholder="选择状态"
+          style="width: 150px"
+          @change="$refs.table.listData()"
+        >
+          <a-select-option value="">全部</a-select-option>
+          <a-select-option value="现金">现金</a-select-option>
+          <a-select-option value="实物">实物</a-select-option>
+        </a-select>
+      </div>
+      <a-input style="width: 150px" class="inline-16" v-model:value="param.content.where.condition" @keyup.enter="search"  placeholder="请输入搜索内容" autocomplete="off"></a-input>
+      <Add class="inline-16" @onSuccess="$refs.table.listData()" :rowData="props.rowData" v-if="props.rowData && rowData.isonsale == 0 && utils.hasPermission('setoption')"></Add>
+      <SelectModel 
+        ref="selectOpton" 
+        :is-select="false"
+        rowKey="createuserid" 
+        :param="optionParam" 
+        :columns="utils.TBLayout('resultList')" title="中奖明细"
+        v-if="utils.hasPermission('setoption') && rowData.isonsale == 0"
+        :custom="true"
+      >
+        <template #titleLeft>
+          <div class="inline">
+            <span class="select-title">奖项:</span>
+            <a-select
+              ref="select"
+              v-model:value="optionParam.content.where.type"
+              placeholder="选择奖项"
+              style="width: 150px"
+              @change="$refs.selectOpton.list.listData()"
+            >
+              <a-select-option value="">全部</a-select-option>
+              <a-select-option :value="item.name" v-for="item in optionsList" :key="item.sa_awardid">{{ item.name }}</a-select-option>
+            </a-select>
+          </div>
+        </template>
+        <template #titleRight>
+          <div style="margin-right:10px"></div>
+          <exportExcel :param="optionParam" type="button" tableName="resultList"></exportExcel>
+        </template>
+        <template #custom="{data}">
+          <template v-if="data.column.dataIndex == 'price'">{{utils.formatAmount(data.record.price)}}</template>
+          <template v-else>{{ data.record[data.column.dataIndex] }}</template>
+        </template>
+        <template #slot1>
+          <a-button size="middle" type="primary" @click="$refs.selectOpton.modeVisible=true">中奖明细</a-button>
+        </template>
+      </SelectModel>
+    </div>
+    <normalTable @listData="handleData" rowKey="sa_awardid" :is-select="false" ref="table" size="small" :columns="utils.TBLayout('optionsTable')" :param="param">
+      <template #tb_cell="{data}">
+        <template v-if="data.column.dataIndex === 'price'">
+          <span>{{ utils.formatAmount(data.record.price) }}</span>
+        </template>
+        <template v-if="data.column.dataIndex === 'percentage'">
+          <span>{{ data.record.percentage*100 }}%</span>
+        </template>
+        <template v-else-if="data.column.dataIndex == 'operation'">
+          <Edit class="inline-16" @onSuccess="$refs.table.listData()" :rowData="data.record" v-if="props.rowData && rowData.isonsale == 0 && utils.hasPermission('setoption')"></Edit>
+          <customBtn
+            btnName="删除"
+            idName="20240514131302"
+            keyName="sa_awarditemsids"
+            :id="[data.record.sa_awarditemsid]"
+            type="link"
+            message="确定删除当前奖项吗?"
+            @onSuccess="$refs.table.listData()"
+            size="middle"
+            v-if="utils.hasPermission('setoption') && rowData.isonsale == 0"
+          />
+        </template>
+      </template>
+    </normalTable>
+  </div>
+</template>
+
+<script setup>
+import { EditOutlined } from '@ant-design/icons-vue';
+import normalTable from '@/template/normalTable/index.vue'
+import Add from './Add.vue'
+import Edit from './Edit.vue'
+import exportExcel from '@/components/tableExport/index.vue'
+import {ref, defineProps, defineEmits,watch, nextTick, onMounted} from 'vue'
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import { useAuthStore } from '@/stores/modules/auth'
+import { useRouter } from "vue-router";
+import customBtn from '@/components/customHandleBtn/index.vue'
+import SelectModel from '@/components/selectModel/index2.vue'
+
+let props = defineProps(['rowData'])
+const router = useRouter()
+
+let optionParam = ref({id:20240514133902,content:{sa_awardid:router.currentRoute.value.query.id,sa_awarditemsid:'',pageNumber:1,pageSize:20,where:{}}})
+let param = ref({
+  "id": "20240514131402",
+  "content": {
+    "sa_awardid":router.currentRoute.value.query.id,
+    "pageNumber": 1,
+    "pageSize": 20,
+    "where": {
+        "condition": "",
+        "type": ""
+    }
+}
+})
+let table = ref()
+
+const search = () => {
+  table.value.listData()
+}
+let optionsList = ref()
+onMounted( async () => {
+ let res = await Api.requested({
+  "id": "20240514131402",
+    "content": {
+      "sa_awardid":router.currentRoute.value.query.id,
+      "pageNumber": 1,
+      "pageSize": 99999,
+      "where": {
+          "condition": "",
+          "type": ""
+      }
+  }
+  })
+  optionsList.value = res.data
+  console.log(optionsList.value);
+})
+
+
+</script>
+
+<style scoped>
+
+</style>

+ 45 - 0
src/MAR/eventsManage/index.vue

@@ -0,0 +1,45 @@
+<template>
+  <listTemp ref="list" keyRouteName="name" :param="param" tableName="listTable" :searchType="searchType" :detailPage="{name:'eventDetail',idname:'sa_awardid'}">
+    <template #operation>
+      <Add @onSuccess="$refs.list.tableData()" v-if="utils.hasPermission('insert')"></Add>
+    </template>
+    <template #tb_cell="{data}">
+      <template v-if="data.column.dataIndex === 'isonsale'">
+        <span :style="{color:utils.statusAndColor(data.record.isonsale?'上架':'下架')}">{{ data.record.isonsale?'上架':'下架' }}</span>
+      </template>
+    </template>
+  </listTemp>
+
+  
+</template>
+<script setup>
+import listTemp from '@/components/listTemplate/index.vue';
+import { ref,onMounted, nextTick, provide } from 'vue'
+import { useRouter } from "vue-router";
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import Add from './modules/Add.vue'
+
+import { useAuthStore } from '@/stores/modules/auth'
+const router = useRouter()
+const list = ref()
+let searchType = ref([
+  {label:'类型',key:'isonsale',type:'select',dataSource:[{remarks:'全部',value:''},{remarks:'上架',value:'1'},{remarks:'下架',value:'0'}]},
+  {label:'搜索',key:'condition',type:'input'},
+])
+let param = ref({
+    "content": {
+        "pageNumber": 1,
+        "pageSize": 20,
+        "where": {
+            "condition": "",
+            "isonsale": ""
+        }
+    },
+    "id": 20240514101802,
+})
+
+</script>
+<style scoped>
+
+</style>

+ 102 - 0
src/MAR/eventsManage/modules/Add.vue

@@ -0,0 +1,102 @@
+<template>
+  <div>
+    <a-button type="primary" @click="showDrawer">新建</a-button>
+    <a-drawer
+      v-model:open="visible"
+      class="custom-class"
+      title="新建活动抽奖"
+      placement="right"
+      width="600"
+      :closable="false"
+    >
+      <a-form ref="formRef" :model="form" layout="vertical">
+        <a-row :gutter="16">
+          <a-col :span="24">
+            <a-form-item label="活动名称" name="name" :rules="[{ required: true, message: '请输入活动名称'}]">
+              <a-input v-model:value="form.name" placeholder="请输入活动名称"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="活动时间">
+              <a-range-picker v-model:value="form.dateRange" value-format="YYYY-MM-DD HH:mm:ss" :show-time="{
+                defaultValue: [dayjs('00:00:00', 'HH:mm:ss'), dayjs('23:59:59', 'HH:mm:ss')],
+              }" />
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="状态">
+              <a-radio-group v-model:value="form.isonsale">
+                <a-radio :value="0">新建</a-radio>
+                <a-radio :value="1">发布</a-radio>
+              </a-radio-group>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+      <template #extra>
+        <a-space>
+          <CustomButton type="primary" @click="submit">保存</CustomButton>
+        </a-space>
+      </template>
+    </a-drawer>
+  </div>
+</template>
+
+<script setup>
+import dayjs from 'dayjs'
+import {ref,defineEmits, watch, inject} from 'vue'
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import { useAuthStore } from '@/stores/modules/auth'
+const emit = defineEmits(['onSuccess'])
+const visible = ref(false)
+const form = ref({
+  "sa_awardid": 0,
+  "name": "抽奖",
+  "begdate": "",
+  "enddate": "",
+  "isonsale": 1,
+  "dateRange":[]
+})
+
+const showDrawer = async ()=>{
+  visible.value = true
+}
+
+const formRef = ref()
+const submit = async ()=>{
+  try {
+    console.log(form.value)
+    const values = await formRef.value.validateFields();
+    form.value.begdate = form.value.dateRange[0]
+    form.value.enddate = form.value.dateRange[1]
+    const res = await Api.requested({
+      "id":"20240514101402",
+      "content":form.value
+    })
+    utils.message(res,'操作成功',() => {
+      visible.value = false
+      refresh()
+      emit('onSuccess')
+      loading.value = false
+    })
+  } catch (errorInfo) {
+    console.log('Failed:', errorInfo);
+  }
+}
+
+const refresh = () => {
+  form.value = {
+    "sa_awardid": 0,
+    "name": "",
+    "begdate": "",
+    "enddate": "",
+    "isonsale": 1
+  }
+}
+</script>
+<style scoped>
+.ant-picker {
+  width: 100%;
+}
+</style>

+ 105 - 0
src/MAR/eventsManage/modules/Edit.vue

@@ -0,0 +1,105 @@
+<template>
+  <div>
+    <a-button type="primary" @click="showDrawer" style="display: inline-block;">编辑</a-button>
+    <a-drawer
+      v-model:open="visible"
+      class="custom-class"
+      title="编辑活动抽奖"
+      placement="right"
+      width="600"
+      :closable="false"
+    >
+      <a-form ref="formRef" :model="form" layout="vertical">
+        <a-row :gutter="16">
+          <a-col :span="24">
+            <a-form-item label="活动名称" name="name" :rules="[{ required: true, message: '请输入活动名称'}]">
+              <a-input v-model:value="form.name" placeholder="请输入活动名称"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="活动时间">
+              <a-range-picker v-model:value="form.dateRange" value-format="YYYY-MM-DD HH:mm:ss" :show-time="{
+                defaultValue: [dayjs('00:00:00', 'HH:mm:ss'), dayjs('23:59:59', 'HH:mm:ss')],
+              }" />
+            </a-form-item>
+          </a-col>
+          <!-- <a-col :span="24">
+            <a-form-item label="状态">
+              <a-radio-group v-model:value="form.isonsale">
+                <a-radio :value="0">新建</a-radio>
+                <a-radio :value="1">发布</a-radio>
+              </a-radio-group>
+            </a-form-item>
+          </a-col> -->
+        </a-row>
+      </a-form>
+      <template #extra>
+        <a-space>
+          <CustomButton type="primary" @click="submit">保存</CustomButton>
+        </a-space>
+      </template>
+    </a-drawer>
+  </div>
+</template>
+
+<script setup>
+import dayjs from 'dayjs'
+import {ref,defineEmits, watch, inject} from 'vue'
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import { useAuthStore } from '@/stores/modules/auth'
+const emit = defineEmits(['onSuccess'])
+const props = defineProps(['rowData'])
+const visible = ref(false)
+const form = ref({
+  "sa_awardid": 0,
+  "name": "",
+  "begdate": "",
+  "enddate": "",
+  "isonsale": 1,
+  "dateRange":[]
+})
+
+const showDrawer = async ()=>{
+  form.value = Object.assign({},form.value,props.rowData)
+  form.value.dateRange = [form.value.begdate,form.value.enddate]
+  visible.value = true
+}
+
+const formRef = ref()
+const submit = async ()=>{
+  try {
+    console.log(form.value)
+    const values = await formRef.value.validateFields();
+    form.value.begdate = form.value.dateRange[0]
+    form.value.enddate = form.value.dateRange[1]
+    const res = await Api.requested({
+      "id":"20240514101402",
+      "content":form.value
+    })
+    utils.message(res,'操作成功',() => {
+      visible.value = false
+      refresh()
+      emit('onSuccess')
+      loading.value = false
+    })
+  } catch (errorInfo) {
+    console.log('Failed:', errorInfo);
+  }
+}
+
+const refresh = () => {
+  form.value = {
+    "sa_awardid": 0,
+    "name": "",
+    "begdate": "",
+    "enddate": "",
+    "isonsale": 1
+  }
+}
+</script>
+<style scoped>
+.ant-picker {
+  width: 100%;
+}
+</style>

+ 102 - 0
src/MAR/fitmentManage/Edit.vue

@@ -0,0 +1,102 @@
+<template>
+  <div>
+    <a-button type="link" @click="showDrawer">编辑</a-button>
+    <a-drawer
+      v-model:open="visible"
+      class="custom-class"
+      title="编辑奖项"
+      placement="right"
+      width="600"
+      :closable="false"
+      :maskClosable="!loading"
+    >
+      <a-form ref="formRef" :model="form" layout="vertical">
+        <a-row :gutter="16">
+          <a-col :span="24">
+            <a-form-item label="最小单价(元)" name="min_price" :rules="[{pattern:/^([1-9][0-9]*)+(\.[0-9]{1,2})?$/,required: true, message: '请输入数字,最多两位小数',trigger:'blur'},{ validator: checkMin,trigger: 'blur'}]">
+              <a-input v-model:value="form.min_price" placeholder="请输入最小单价"></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-item label="最大单价(元)" name="max_price" :rules="[{pattern:/^([1-9][0-9]*)+(\.[0-9]{1,2})?$/,required: true, message: '请输入数字,最多两位小数',trigger:'blur'},{ validator: checkMax,trigger: 'blur'}]">
+              <a-input v-model:value="form.max_price" placeholder="请输入最小单价"></a-input>
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+      <template #extra>
+        <a-space>
+          <CustomButton type="primary" @click="submit" :loading="loading">保存</CustomButton>
+        </a-space>
+      </template>
+    </a-drawer>
+  </div>
+</template>
+
+<script setup>
+import dayjs from 'dayjs'
+import {ref,defineEmits, watch, inject, nextTick} from 'vue'
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import Upload from '@/MAR/assetsStore/detail/fileUpload.vue'
+import { useAuthStore } from '@/stores/modules/auth'
+import { useRouter } from "vue-router";
+const router = useRouter()
+const emit = defineEmits(['onSuccess'])
+const props = defineProps(['rowData'])
+const visible = ref(false)
+const form = ref({
+    "type": "",
+    "min_price": "",
+    "max_price": ""
+})
+const showDrawer = async ()=>{
+  form.value = Object.assign({}, form.value, props.rowData)
+  visible.value = true
+  console.log(form.value,props.rowData);
+}
+
+const checkMin = async (_rule, value) => {
+  if (+form.value.max_price < +value) {
+    return Promise.reject('最小单价不能大于最大单价')
+  }
+  else {
+    return Promise.resolve();
+  }
+}
+const checkMax = async (_rule, value) => {
+  console.log(value,form.value.min_price,form.value.min_price > value);
+  if (+form.value.min_price > +value) {
+    return Promise.reject('最大单价不能小于最小单价')
+  }
+  else {
+    return Promise.resolve();
+  }
+}
+
+const formRef = ref()
+const submit = async ()=>{
+  try {
+    const values = await formRef.value.validateFields();
+    const res = await Api.requested({
+      "id":"20240515110802",
+      "content": {
+        items:[
+          form.value
+        ]
+      }
+    })
+    utils.message(res,'操作成功',() => {
+      visible.value = false
+      emit('onSuccess')
+    })
+  } catch (errorInfo) {
+    console.log('Failed:', errorInfo);
+  }
+}
+</script>
+<style scoped>
+.ant-picker {
+  width: 100%;
+}
+</style>

+ 42 - 0
src/MAR/fitmentManage/index.vue

@@ -0,0 +1,42 @@
+<template>
+  <listTemp @handleData="handleData" ref="list" :param="param" tableName="fitmentList" :searchType="searchType">
+    <template #tb_cell="{data}">
+      <template v-if="data.column.dataIndex == 'price'">
+        {{ data.record.min_price }}-{{ data.record.max_price }}
+      </template>
+      <template v-if="data.column.dataIndex == 'operation'">
+        <Edit :rowData="data.record" v-if="utils.hasPermission('update')" @onSuccess="$refs.list.tableData()"></Edit>
+      </template>
+    </template>
+  </listTemp>
+
+  
+</template>
+<script setup>
+import listTemp from '@/components/listTemplate/index.vue';
+import { ref,onMounted, nextTick, provide } from 'vue'
+import { useRouter } from "vue-router";
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+import Edit from './Edit.vue'
+
+import { useAuthStore } from '@/stores/modules/auth'
+const router = useRouter()
+const list = ref()
+let searchType = ref([
+  {label:'搜索',key:'condition',type:'input'},
+])
+let param = ref({
+  "id": "20240515110902",
+  "content": {
+    "pageNumber": 1,
+    "pageSize": 20,
+    "where": {
+      "condition": "",
+    }
+  }
+})
+</script>
+<style scoped>
+
+</style>

+ 57 - 0
src/MAR/subscribe/index.vue

@@ -0,0 +1,57 @@
+<template>
+  <listTemp ref="list" :param="param" tableName="list" :searchType="searchType">
+    <template #operation>
+    </template>
+    <template #tb_cell="{data}">
+      <template v-if="data.column.dataIndex === 'address'">
+        {{ data.record.province+data.record.city+data.record.county+data.record.address }}
+      </template>
+    </template>
+  </listTemp>
+
+  
+</template>
+<script setup>
+import listTemp from '@/components/listTemplate/index.vue';
+import { ref,onMounted, nextTick, provide } from 'vue'
+import { useRouter } from "vue-router";
+import Api from '@/api/api'
+import utils from '@/utils/utils'
+
+import { useAuthStore } from '@/stores/modules/auth'
+const router = useRouter()
+const list = ref()
+let searchType = ref([
+  {label:'类型',key:'type',type:'select',dataSource:[{remarks:'全部',value:''},{remarks:'新建',value:'新建'},{remarks:'发布',value:'发布'}]},
+  {label:'预约时间',key:'dateRange',type:'datepickerRange',objKeys:['begindate_create','enddate_create']},
+  {label:'搜索',key:'condition',type:'input'},
+])
+let param = ref({
+  "id": 20240513151902,
+  "content": {
+    "pageNumber": 1,
+    "pageSize": 20,
+    "where": {
+        "condition": "",
+        "type": "",
+        "begindate_create": "",
+        "enddate_create": ""
+    }
+  },
+})
+
+let classList = ref([])
+const getClassList = async () => {
+  const res = await Api.optionstype('appointmenttype')
+  searchType.value[0].dataSource = res.data
+  searchType.value[0].dataSource.unshift({remarks:'全部',value:''})
+  classList.value = res.data
+  console.log(classList.value,'分类');
+}
+onMounted(() => {
+  getClassList()
+})
+</script>
+<style scoped>
+
+</style>

+ 2 - 1
src/components/selectModel/index2.vue

@@ -9,9 +9,10 @@
     :closable="false"
     @close="closeFun">
     <div style="margin-bottom: 10px;display: flex;align-items: center">
-      <a-button  class="inline-16" type="primary" @click="submit" v-if="$attrs['isSelect'] === undefined || $attrs['isSelect']">提交</a-button>
+      <a-button  class="inline-16" type="primary" @click="submit" v-if="$attrs['is-select'] === undefined || $attrs['is-select']">提交</a-button>
       <slot v-if="$refs.list" name="titleLeft" :data="{total:$refs.list.total}"></slot>
       <a-input style="width: 150px;margin-left: 10px;" v-model:value="condition" @keyup.enter="search"  placeholder="请输入搜索内容" autocomplete="off"></a-input>
+      <slot v-if="$refs.list" name="titleRight" :data="{total:$refs.list.total}"></slot>
     </div>
     <normalTable :scroll-y="height" v-bind="$attrs" ref="list" size="small" @listData="listData">
       <template #tb_cell="{data}">

+ 37 - 0
src/router/MAR.js

@@ -248,6 +248,43 @@ const Customized = [
       keepAlive:true
     },
     component: () => import(/* webpackChunkName: "about" */ '@/MAR/orderManage_sale/detail/index.vue'),
+  },{
+    path: '/subscribe',
+    name: 'subscribe',
+    meta: {
+      title: '预约名单',
+      name: 'subscribe',
+      keepAlive:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/MAR/subscribe/index.vue'),
+  },{
+    path: '/eventsManage',
+    name: 'eventsManage',
+    meta: {
+      title: '活动抽奖管理',
+      name: 'eventsManage',
+      keepAlive:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/MAR/eventsManage/index.vue'),
+  },
+  {
+    path: '/eventDetail',
+    name: 'eventDetail',
+    meta: {
+      title: '活动抽奖详情',
+      name: 'eventsManage',
+      keepAlive:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/MAR/eventsManage/detail/index.vue'),
+  },{
+    path: '/fitmentManage',
+    name: 'fitmentManage',
+    meta: {
+      title: '装修预算改价',
+      name: 'fitmentManage',
+      keepAlive:true
+    },
+    component: () => import(/* webpackChunkName: "about" */ '@/MAR/fitmentManage/index.vue'),
   },
 ]
 export default Customized;