Commit 28d6f871 by liuliufashi

push

parent 43f55f51
......@@ -124,17 +124,23 @@ export const onfindWX = async(uid:any)=>{
method:'post',
});
}
export const onSelectGoods = async(uid:any)=>{
export const onSelectGoods = async(data:any)=>{
return await request({
url: `/goods/select?uid=${uid}`,
url: `/goods/select?uid=${data.uid}&page=${data.page}&size=${data.size}&strtus=${data.strtus}`,
method:'post',
});
}
export const onFindbyLikeName = async(params:any)=>{
return await request({
url: `/goods/findbylikename?uid=${params.uid}&name=${params.name}&page=${params.page}&size=${params.size}`,
method:'post',
});
}
export const onfindby = async(params:any)=>{
return await request({
url: `/goods/findgoodspays?uid=${params.uid}&name=${params.name}&status=${params.status}`,
url: `/goods/findgoodspays?uid=${params.uid}&name=${params.name}&status=${params.status}&page=${params.page}&size=${params.size}`,
method:'post',
});
}
......
......@@ -57,7 +57,7 @@ const routes: Array<RouteRecordRaw> = [
path: '/home/payinfo',
name: '订单详情',
meta:{
icon:'icon-fencengpeizhi'
icon:'icon-gouwuchekong'
},
component: ()=>import('@/views/pay-info/index.vue')
},
......
......@@ -57,7 +57,7 @@
</div>
</a-form-item>
<a-form-item name="price" :wrapper-col="{ offset: 0, span: 2 }" label="商品售价"
:rules="[{ required: true, message: '请输入输入价格' }]" labelAlign="left" :label-col="{ span: 2 }">
labelAlign="left" :label-col="{ span: 2 }">
<div>
<a-radio-group v-model:value="value" @change="onSelectPlain">
<a-radio value="0">免费</a-radio>
......@@ -288,7 +288,9 @@ const onEdithandleChange = (info: any) => {
}
};
const onSelectPlain = (e: any) => {
formState.price = "1"
if(e.target.value == '0'){
formState.price = "1"
}
value.value = e.target.value;
};
......
......@@ -54,7 +54,7 @@
<a-form-item label="选择商品:" labelAlign="left" :wrapper-col="{ offset: 0, span: 8 }" name="sub" :rules="rulesRef.sub"
:label-col="{ span: 2 }">
<div style="width:100%;display: flex;align-items: center;">
<a-select v-model:value="formState.sub" mode="multiple" style="width: 100%" placeholder="请选择商品" @change="handleChanges">
<a-select v-model:value="formState.sub" mode="multiple" style="width: 100%" placeholder="请选择商品" @focus="handleChanges" @search="handleChanges" @select="onSelect" @popupScroll="popupScroll">
<a-select-option v-for="item in optionss" :itemKey="item" :value="item.goodsid" :label="item.goodsid">
{{item.subject}}
</a-select-option>
......@@ -66,7 +66,7 @@
</div>
</a-form-item>
<a-form-item name="price" labelAlign="left" :wrapper-col="{ offset: 0, span: 2 }" label="商品售价"
:rules="[{ required: true, message: '请输入输入价格' }]" :label-col="{ span: 2 }">
:label-col="{ span: 2 }">
<div>
<a-radio-group v-model:value="value" @change="onSelectPlain">
<a-radio value="0">免费</a-radio>
......@@ -103,7 +103,7 @@ import { message, UploadProps, Upload } from "ant-design-vue";
import { Form } from 'ant-design-vue';
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';
import { onCreateGoods, onSelectGoods } from '@/api/index'
import { onCreateGoods, onFindbyLikeName } from '@/api/index'
import { getUid } from "@/utils/userInfo";
const useForm = Form.useForm;
const upImage = ref<any>(null)
......@@ -233,30 +233,14 @@ const rulesRef = reactive({
message: '请输入商品简介!',
},
],
body: [
{
required: true,
message: '请输入商品详情!',
},
],
picurl: [
{
validateOnRuleChange: true,
message: '请上传商品示图!',
},
],
markingprice: [
{
required: true,
message: '请输入划线价格',
},
],
price: [
{
required: true,
message: '请输入售卖价格',
},
],
sub: [
{
required: true,
......@@ -293,36 +277,55 @@ const handleChange = (info: any) => {
fileList.value = resFileList;
};
const onSelectPlain = (e: any) => {
formState.price = "0"
if(e.target.value == '0'){
formState.price = "1"
}
// free 0
value.value = e.target.value;
};
const handleChanges = (value: string) => {
console.log(`selected ${value}`);
const handleChanges = async(value: string) => {
const uid = getUid();
const params = {
name: '',
size:10,
page:1,
uid,
};
const data = await onFindbyLikeName(params);
optionss.value = data.data.goods
};
const onSelect =(value:any, option:any)=>{
console.log(value,option,'option');
console.log(formState.sub,'formState');
}
const beforeUpload: UploadProps['beforeUpload'] = file => {
if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) {
message.error(`${file.name}不是png/jpef/jpg格式`);
return Upload.LIST_IGNORE;
}
};
const popupScroll =()=>{
console.log(1);
}
const onSubmit = () => {
validate()
.then(async () => {
const fromData:any = toRaw(formState)
const uid = getUid()
const prarms = {
body: fromData.body,
remember: fromData.remember,
shortname: fromData.shortname,
subject: fromData.subject,
uid,
parent: 1,
markingprice:fromData.markingprice*100,
price:fromData.price*100,
picurl:fromData.picurl
body: fromData.body,
remember: fromData.remember,
shortname: fromData.shortname,
subject: fromData.subject,
uid,
parent: 1,
markingprice:fromData.markingprice*100,
price:fromData.price*100,
picurl:fromData.picurl,
sub:fromData.sub
}
const data: any = await onCreateGoods(JSON.stringify(prarms))
if (data.state === 1) {
......@@ -372,42 +375,38 @@ watch(isEditfileList, (newVal:any) => {
formState.body = str
}
})
onMounted(async () => {
const uid = getUid()
const data = await onSelectGoods(uid)
optionss.value = data.data
return options
})
defineExpose({
optionss,
plainOptions,
value,
crossedPrice,
sellingPrice,
textarea,
optionsEdit,
formState,
upImage,
onFinish,
onFinishFailed,
previewTitle,
options,
content,
previewVisible,
previewImage,
fileList,
onFinish,
onFinishFailed,
handleCancel,
handlePreview,
previewTitle,
options,
content,
handleChange,
plainOptions,
value,
onSelectPlain,
crossedPrice,
sellingPrice,
onSubmit,
handleChanges,
optionss,
beforeUpload,
textarea,
optionsEdit,
textChange,
onEditorFocus,
onEditorBlur,
onEditorChange
onEditorChange,
popupScroll
});
</script>
......
......@@ -3,12 +3,12 @@
<div class="good-search" v-if="!isShowGoods">
<div>
<a-radio-group v-model:value="status">
<a-radio-button value="0" class="status" @click="onSearch">全部</a-radio-button>
<a-radio-button value="3" class="status" @click="onSearch">全部</a-radio-button>
<a-radio-button value="1" class="status" @click="onSearch">正常</a-radio-button>
<a-radio-button value="2" class="status" @click="onSearch">已下架</a-radio-button>
</a-radio-group>
<a-input-search v-model:value="value" placeholder="请输入商品名称" style="width: 200px; margin-left: 10px"
@search="onSearch" />
@search="onSearchName" />
</div>
<div class="good-cad">
<a-button type="primary" class="mr10" @click="onGoods(0)">新建商品</a-button>
......@@ -16,7 +16,7 @@
</div>
</div>
<div class="goods-list" v-if="!isShowGoods">
<a-table :columns="columns" :data-source="list">
<a-table :columns="columns" :data-source="list" :pagination="pagination" @change="tableChange">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'tags'">
<a-button type="primary" @click="onEdit(record)">编辑</a-button>
......@@ -26,7 +26,7 @@
</a-popconfirm>
</template>
<template v-if="column.key === 'price'">
<div>{{record.price/100}}</div>
<div>{{ record.price / 100 }}</div>
</template>
</template>
</a-table>
......@@ -47,25 +47,25 @@
<GoodsBagSubs :props="{ propsData }" v-else @onBack="onBack">
</GoodsBagSubs>
</div>
<a-modal v-model:visible="visible" title="编辑" :confirm-loading="confirmLoading" :width="1000" @ok="handleOk" :maskClosable="false"
@Cancel="handleCancel" @handleChange="handleChange">
<a-modal v-model:visible="visible" title="编辑" :confirm-loading="confirmLoading" :width="1000" @ok="handleOk"
:maskClosable="false" @Cancel="handleCancel" @handleChange="handleChange">
<a-form :model="modelRef" name="basic" :label-col="{ span: 2 }" :wrapper-col="{ span: 8 }" autocomplete="off">
<a-form-item label="商品名称" name="subject" :rules="[{ required: true, message: '请输入商品名称!' }]" :maxlength="200"
:label-col="{ span: 2 }">
<a-input v-model:value="modelRef.subject" maxlength="30"/>
<a-input v-model:value="modelRef.subject" maxlength="30" />
</a-form-item>
<a-form-item label="商品简介" name="shortname" :rules="[{ required: true, message: '请输入商品简介!' }]" :maxlength="200"
:label-col="{ span: 2 }">
<a-input v-model:value="modelRef.shortname" maxlength="50"/>
<a-input v-model:value="modelRef.shortname" maxlength="50" />
</a-form-item>
<a-form-item label=" 商品示图" name="picurl" :wrapper-col="{ offset: 0, span: 8 }" class="Up" labelAlign="left"
:label-col="{ span: 2 }">
<div class="clearfix">
<div style="display: flex;">
<a-upload v-model:file-list="fileList" :maxCount="1" action="http://43.142.42.187:8899/file/upload" list-type="picture-card"
@preview="handlePreview" @change="handleChange">
<a-upload v-model:file-list="fileList" :maxCount="1" action="http://43.142.42.187:8899/file/upload"
list-type="picture-card" @preview="handlePreview" @change="handleChange">
<div v-if="fileList.length < 8">
<plus-outlined />
<div style="margin-top: 8px">Upload</div>
......@@ -80,20 +80,20 @@
</div>
</a-form-item>
<a-form-item label="商品详情" name="body" labelAlign="left" :label-col="{ span: 2 }">
<div style="position: relative;" >
<div style="display: none;">
<a-upload class="clearfix-up-1" action="http://43.142.42.187:8899/file/upload" list-type="picture-card" :maxCount="1"
@preview="onHandlePreview" @change="onEdithandleChange" :before-upload="onBeforeUpload">
<div style="position: relative;">
<div style="display: none;">
<a-upload class="clearfix-up-1" action="http://43.142.42.187:8899/file/upload" list-type="picture-card"
:maxCount="1" @preview="onHandlePreview" @change="onEdithandleChange" :before-upload="onBeforeUpload">
<div ref="upImage" style="width:30px;height:30px;border: none;"><i class="iconfont icon-tupian"
style="font-size:28px;"></i> </div>
</a-upload>
</div>
</a-upload>
</div>
<QuillEditor style="height:200px" ref="myQuillEditor" :options="options" :content="modelRef.body"
content-type="html" @update:content="textChange" @focus="onEditorFocus($event)"
@blur="onEditorBlur($event)" @change="onEditorChange($event)" >
</QuillEditor>
@blur="onEditorBlur($event)" @change="onEditorChange($event)">
</QuillEditor>
</div>
<div class="editor-text">
<p>1、商品描述需符合《中华人民共和国广告法》</p>
......@@ -102,20 +102,6 @@
</p>
</div>
</a-form-item>
<a-form-item label="选择商品" :wrapper-col="{ offset: 0, span: 8 }" name="sub" :label-col="{ span: 2 }"
v-if="modelRef.parent == 0">
<div style="width:100%;display: flex;align-items: center;">
<a-select v-model:value="modelRef.sub" mode="multiple" style="width: 100%" placeholder="请选择商品">
<a-select-option v-for="item in optionss" :itemKey="item" :value="item.goodsid" :label="item.goodsid">
{{ item.subject }}
</a-select-option>
</a-select>
<a-button type="primary" style="margin-left:20px;">
添加
</a-button>
<div class="please">请添加至少两个商品</div>
</div>
</a-form-item>
<a-form-item name="price" :wrapper-col="{ offset: 0, span: 4 }" label="商品售价"
:rules="[{ required: true, message: '请输入输入价格' }]" labelAlign="left" :label-col="{ span: 2 }">
<div>
......@@ -126,23 +112,21 @@
</div>
</a-form-item>
<a-form-item :wrapper-col="{ offset: 2, span: 7 }" v-if="modelRef.free!== '0'">
<a-form-item :wrapper-col="{ offset: 2, span: 7 }" v-if="modelRef.free !== '0'">
<div style="display:flex;">
<div style="margin-right:20px">划线价</div>
<a-input-number style="width: 200px" :min="0" string-mode
<a-input-number style="width: 200px" :min="0" string-mode
:formatter="value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')"
:parser="value => value.replace(/\$\s?|(,*)/g, '')"
v-model:value="modelRef.markingprice" />
:parser="value => value.replace(/\$\s?|(,*)/g, '')" v-model:value="modelRef.markingprice" />
</div>
</a-form-item>
<a-form-item name="price" :wrapper-col="{ offset: 2, span: 7 }"
:rules="[{ required: true, message: '请输入商品价格!' }]" v-if="modelRef.free!== '0'" >
:rules="[{ required: true, message: '请输入商品价格!' }]" v-if="modelRef.free !== '0'">
<div style="display:flex;">
<div style="margin-right:20px">售卖价</div>
<a-input-number style="width: 200px" :min="0" string-mode
<a-input-number style="width: 200px" :min="0" string-mode
:formatter="value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')"
:parser="value => value.replace(/\$\s?|(,*)/g, '')"
v-model:value="modelRef.price" />
:parser="value => value.replace(/\$\s?|(,*)/g, '')" v-model:value="modelRef.price" />
</div>
</a-form-item>
</a-form>
......@@ -150,14 +134,14 @@
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, defineExpose, onMounted,watch, toRaw } from "vue";
import { ref, reactive, defineExpose, onMounted, watch, toRaw } from "vue";
import { LeftOutlined } from "@ant-design/icons-vue";
import GoodsBags from "./components/goods/index.vue";
import GoodsBagSubs from "./components/goodsubs/index.vue";
import { onSelectGoods, onfindby, onUpdateGoods } from "@/api/index";
import { onSelectGoods, onUpdateGoods,onFindbyLikeName } from "@/api/index";
import { getUid } from "@/utils/userInfo";
import { Form, message, Upload, UploadProps } from 'ant-design-vue';
import { Quill, QuillEditor } from '@vueup/vue-quill'
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css';
const useForm = Form.useForm;
......@@ -206,6 +190,14 @@ const columns = [
dataIndex: "tags",
},
];
const pagination = ref({
current_page:1,
total:0,
defaultPageSize:10,
showSizeChanger:true,
pageSizeOptions: ['5', '10', '15', '20'],
onShowSizeChange:(current:any, pageSize:any)=>{pageSize = pageSize;}
})
interface props {
isCad: Number;
}
......@@ -223,9 +215,9 @@ let options = reactive({
],
handlers: {
image: function (value: any) {
if(value){
upImage.value.click()
}
if (value) {
upImage.value.click()
}
},
},
},
......@@ -250,19 +242,17 @@ const propsData = reactive<props>({
let isEditfileList = ref<any>([
]);
const fileList = ref<any>([
{
uid: '-1',
name: 'image.png',
status: 'done',
url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
},
{
uid: '-1',
name: 'image.png',
status: 'done',
url: 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png',
},
]);
const isShowGoods = ref<Boolean>(false);
const modalText = ref<string>("Content of the modal");
const visible = ref<boolean>(false);
const confirmLoading = ref<boolean>(false);
const showModal = () => {
visible.value = true;
};
......@@ -277,14 +267,14 @@ const handleOk = async () => {
shortname: modelRef.value.shortname,
picurl: fileList.value[0].url,
body: modelRef.value.body,
price: modelRef.value.price*100,
markingprice: modelRef.value.markingprice*100,
price: modelRef.value.price * 100,
markingprice: modelRef.value.markingprice * 100,
status: modelRef.value.status,
parent: modelRef.value.parent,
free: modelRef.value.sellingmodel,
sub: [0]
}
const data:any = await onUpdateGoods(prarms);
const data: any = await onUpdateGoods(prarms);
if (data.state === 1) {
visible.value = false;
modelRef.value = {}
......@@ -295,14 +285,47 @@ const handleCancel = () => {
modelRef.value = {}
visible.value = false;
}
const onSearch = async () => {
const onSearch = async (e:any) => {
status.value = e.target.value
const uid = getUid();
const prarms: any = {
size: 10,
page: 1,
strtus: e.target.value,
uid,
}
const data = await onSelectGoods(prarms);
list.value = data.data;
};
const tableChange=async(e:any)=>{
let queryData = {
current_page:e.current,//当前页数
per_page:e.pageSize//每页显示条数
};
const uid = getUid();
const prarms: any = {
size: queryData.current_page,
page: queryData.per_page,
strtus:status.value,
uid,
}
const data = await onSelectGoods(prarms);
list.value = data.data;
}
const onSearchName = async (e:any) => {
const uid = getUid();
const params = {
status: status.value,
name: value.value,
uid: getUid(),
size:10,
page:1,
uid,
};
const data = await onfindby(params);
list.value = data.data;
console.log(params,'params');
const data = await onFindbyLikeName(params);
list.value = data.data.goods;
};
const onGoods = (e: Number) => {
propsData.isCad = e;
......@@ -310,30 +333,28 @@ const onGoods = (e: Number) => {
};
const onBack = async (e: Number) => {
isShowGoods.value = !isShowGoods.value;
const uid = getUid();
const data = await onSelectGoods(uid);
list.value = data.data;
await onSearch({target:{value:'3'}})
};
const onEdit = (e: any) => {
visible.value = !visible.value;
modelRef.value.parent = e.parent
modelRef.value.goodsid = e.goodsid
modelRef.value.picurl = e.picurl
modelRef.value.sellamount = e.sellamount
modelRef.value.sellcount = e.sellcount
modelRef.value.shortname = e.shortname
modelRef.value.status = e.status
modelRef.value.subject = e.subject
modelRef.value.tenantid = e.tenantid
modelRef.value.userid = e.userid
modelRef.value.body = e.body
modelRef.value.sellingmodel = e.price? '1':'0'
modelRef.value.price = e.price/100
modelRef.value.markingprice = e.markingprice/100
modelRef.value.parent = e.parent
modelRef.value.goodsid = e.goodsid
modelRef.value.picurl = e.picurl
modelRef.value.sellamount = e.sellamount
modelRef.value.sellcount = e.sellcount
modelRef.value.shortname = e.shortname
modelRef.value.status = e.status
modelRef.value.subject = e.subject
modelRef.value.tenantid = e.tenantid
modelRef.value.userid = e.userid
modelRef.value.body = e.body
modelRef.value.sellingmodel = e.price ? '1' : '0'
modelRef.value.price = e.price / 100
modelRef.value.markingprice = e.markingprice / 100
modelRef.value.free = e.free
fileList.value[0].url = e.picurl
fileList.value[0].url = e.picurl
};
const { validate } = useForm(
const { validate } = useForm(
modelRef,
);
const onSelectPlain = (e: any) => {
......@@ -358,11 +379,16 @@ const onDel = async (e: any) => {
const data = await onUpdateGoods(e);
await init();
};
const init = async () => {
const uid = getUid();
const data = await onSelectGoods(uid);
const datas = await onSelectGoods(uid)
optionss.value = datas.data
const prarms: any = {
size: 10,
page: 1,
strtus: 0,
uid,
}
const data = await onSelectGoods(prarms);
list.value = data.data;
};
const textChange = (e: any) => {
......@@ -411,7 +437,7 @@ const handlePreview = async (file: any) => {
previewImage.value = file.url || file.preview;
previewVisible.value = true;
previewTitle.value =
file.name || file.url.substring(file.url.lastIndexOf("/") + 1);
file.name || file.url.substring(file.url.lastIndexOf("/") + 1);
};
const beforeUpload: UploadProps['beforeUpload'] = file => {
if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) {
......@@ -429,10 +455,8 @@ const handleChange = (info: any) => {
// 2. read from response and show file link
resFileList = resFileList.map((file) => {
if (file.response) {
console.log(fileList,'fileList');
console.log(fileList, 'fileList');
}
return file;
});
......@@ -465,6 +489,8 @@ defineExpose({
previewVisible,
textarea,
upImage,
pagination,
tableChange,
textChange,
onEditorFocus,
beforeUpload,
......
......@@ -25,7 +25,7 @@
@click="goNewPage(item)"
>
<div style="display: flex; align-items: center" >
<i :class="getText(item)" style="font-size:30px;"> </i>
<i :class="getText(item)" style="font-size:24px; padding: 5px;"> </i>
<span class="nav-text" >{{ item.name }}</span>
</div>
</a-menu-item>
......
......@@ -53,7 +53,8 @@
style="
margin-left: 20px;
width: 350px;
height: 50px;
margin-top: 10px;
height: 35px;
border: blueviolet;
"
:loading="loading"
......
......@@ -6,19 +6,16 @@
<a-form-item label="选择商品" name="subject" :rules="rulesRef.subject" :label-col="{ span: 2 }"
labelAlign="left">
<div style="width:100%;display: flex;align-items: center;">
<a-select
v-model:value="formState.subject"
style="width: 100%"
:options="optionss.map((item:any,index:number) => ({ value: item.goodsid, label: item.subject,index:index }))"
@change="onSelectss"
>
</a-select>
<a-select v-model:value="formState.subject" :default-active-first-option="false" mode="multiple" style="width: 100%" placeholder="请选择商品" @focus="onSubSearch" @search="onSubSearch" @select="onSelectss" @popupScroll="popupScroll">
<a-select-option v-for="item,index in optionss" :itemKey="item" :value="item.goodsid" :label="index" >
{{item.subject}}
</a-select-option>
</a-select>
</div>
</a-form-item>
<a-form-item label="项目描述" name="shortname" :label-col="{ span: 2 }" labelAlign="left"
:rules="rulesRef.shortname">
<a-input v-model:value="formState.shortname" placeholder="请输入商品描述" />
<a-input v-model:value="formState.shortname" placeholder="请输入商品描述" :disabled="true" />
</a-form-item>
<a-form-item label="支付金额" name="price" :label-col="{ span: 2 }" labelAlign="left">
<a-radio-group v-model:value="formState.paymentmodel" name="radioGroup" class="pay">
......@@ -96,12 +93,12 @@
</div>
</template>
<script lang="ts" setup>
import { reactive, ref, defineEmits, defineExpose, toRaw, onMounted, watch,toRefs } from "vue";
import { reactive, ref, defineEmits, defineExpose, toRaw, watch,toRefs } from "vue";
import dayjs, { Dayjs } from 'dayjs';
import locale from 'ant-design-vue/es/date-picker/locale/zh_CN';
import { message} from "ant-design-vue";
import { Form } from 'ant-design-vue';
import { onSelectGoods,onCreateGoodsPay,onfindWX,onfindAli } from '@/api/index'
import { onCreateGoodsPay,onfindWX,onfindAli,onFindbyLikeName } from '@/api/index'
import { getUid } from "@/utils/userInfo";
import moment from 'moment';
const useForm = Form.useForm;
......@@ -116,10 +113,21 @@ interface FormState {
fullphone:boolean,
remark:string,
}
let formState = ref<FormState>({
subject: [],
shortname: '',
payment: '',
paymentmodel: '0',
checked:false,
starttime:'',
expireendtime:'',
fullphone:false,
remark:''
});
const visible = ref<boolean>(false);
const list = ref<any>([])
const optionss = ref<any>([])
let goodspayditch = ref([])
let goodspayditch = ref<any>([])
const props = defineProps();
const dateFormat = 'YYYY/MM/DD';
const endvalue = ref<Dayjs>(dayjs('10:00', 'HH:mm'));
......@@ -131,20 +139,13 @@ const optionsWithDisabled = [
];
const checkboxValue = ref<any>([])
const onSelectss =(value:any, option:any)=>{
formState.subject = option
formState.value = {
...option.itemKey
}
formState.value.paymentmodel = formState.value.paymentmodel+''
}
const emit = defineEmits(['onBack']);
const formState = reactive<FormState>({
subject: [],
shortname: '',
payment: '',
paymentmodel: '0',
checked:false,
starttime:'',
expireendtime:'',
fullphone:false,
remark:''
});
let price = ref(0)
let priceSet = ref(0)
const modalvalue = ref<any>('0')
......@@ -173,20 +174,20 @@ const onSubmit = () => {
validate()
.then(async (res) => {
const uid =getUid()
const expireendtime = (moment(toRaw(formState).expireendtime.$d).format('YYYY-MM-DD'))+(moment(endvalue.value.$d).format('THH:mm:[00][Z]'))
goodspayditch.value.map((item:any)=>{return item.goodsid = toRaw(formState).subject.value})
const expireendtime = (moment(toRaw(formState.value).expireendtime.$d).format('YYYY-MM-DD'))+(moment(endvalue.value.$d).format('THH:mm:[00][Z]'))
goodspayditch.value.map((item:any)=>{return item.goodsid = toRaw(formState.value).goodsid})
const prarms = {
subject:toRaw(formState).subject.label,
shortname:toRaw(formState).shortname,
paymentmodel:toRaw(formState).paymentmodel,
fullphone:toRaw(formState).paymentmodel?0:1,
subject:toRaw(formState.value).subject,
shortname:toRaw(formState.value).shortname,
paymentmodel:toRaw(formState.value).paymentmodel,
fullphone:toRaw(formState.value).paymentmodel?1:0,
expireendtime:expireendtime,
starttime: moment(new Date()).format('YYYY-MM-DDTHH:mm:[00][Z]'),
goodsid: toRaw(formState).subject.value,
goodsid: toRaw(formState.value).goodsid,
goodspayditch:goodspayditch.value,
payment:formState.paymentmodel == '1'?price.value*100:priceSet.value*100,
payment:formState.value.paymentmodel == '1'?price.value*100:priceSet.value*100,
uid,
remark:toRaw(formState).remark
remark:toRaw(formState.value).remark
}
const data:any = await onCreateGoodsPay(prarms)
if(data.state === 1){
......@@ -221,7 +222,22 @@ const onSet = async(index:string)=>{
list.value = data.data;
showModal()
}
const popupScroll = ()=>{
console.log(1);
}
const onSubSearch = async(value:any)=>{
const uid = getUid();
const params = {
name: '',
page:1,
size:10,
uid,
};
const data = await onFindbyLikeName(params);
optionss.value = data.data.goods
}
const onSelectCheckboxValue = async(e:any,index:any)=>{
index = index+1
const uid =getUid()
let data:any ={}
......@@ -245,21 +261,15 @@ const hideModal = () => {
goodspayditch.value[radioValue.paytype-1] = {
appointpay: radioValue.id,
goodsid: radioValue.id,
goodspayid: formState.subject.value,
goodspayid: formState.value.goodsid,
optpay: radioValue.paytype,
payname: radioValue.name,
name: radioValue.name,
random: '1',
status: radioValue.status
}
listValue.value[radioValue.paytype-1] = radioValue
visible.value = false;
};
onMounted(async () => {
const uid = getUid()
const data = await onSelectGoods(uid)
optionss.value = data.data
return optionss
})
watch(formState,(newVal:any) => {
if(newVal.paymentmodel =='0'){
price.value = optionss.value[newVal.subject.index].price/100
......@@ -267,23 +277,25 @@ watch(formState,(newVal:any) => {
})
defineExpose({
optionss,
value1: ref<Dayjs>(),
onSelect,
endvalue,
price,
priceSet,
dateFormat,
visible,
list,
modalvalue,
optionss,
value1: ref<Dayjs>(),
formState,
onSelect,
disabledDate,
endvalue,
...toRefs(checkboxValue),
onChangeRadioName,
onSet,
visible,
showModal,
hideModal,
list,
modalvalue,
onSelectCheckboxValue,
popupScroll,
emit
});
......
......@@ -10,7 +10,7 @@
</div>
</div>
<div style="margin-top: 10px;" v-if="isShow">
<a-table :dataSource="list" :columns="columns">
<a-table :dataSource="list" :columns="columns" :pagination="pagination" @change="tableChange">
<template #bodyCell="{ column, record }">
<div v-if="column.key == 'picurl'">
<div style="display:flex;align-items: center;">
......@@ -57,24 +57,26 @@
</div>
<CreatePay @onBack="onBack"></CreatePay>
</div>
<a-modal v-model:visible="visible" title="编辑" @ok="handleOk" :width="1000">
<a-modal v-model:visible="visible" title="编辑" @ok="handleOk" :width="1000" >
<a-form :model="formState" name="basic" :label-col="{ span: 8 }" :wrapper-col="{ span: 16 }"
autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
autocomplete="off" >
<a-form-item label="选择商品" name="subject" :label-col="{ span: 2 }" labelAlign="left">
<div style="width:100%;display: flex;align-items: center;">
<a-select v-model:value="formState.subject" style="width: 120px"
:options="listArray.map((item:any, index:number) => ({ value: item.goodsid, label: item.subject,index:index }))" @change="onSelect">
</a-select>
<a-select v-model:value="formState.subject" :default-active-first-option="false" mode="multiple" style="width: 100%" placeholder="请选择商品" @focus="onSubSearch" @search="onSubSearch" @select="onSelect" @popupScroll="popupScroll">
<a-select-option v-for="item,index in listArray" :itemKey="item" :value="item.goodsid" :label="index" >
<span>{{item.subject}}</span>
</a-select-option>
</a-select>
</div>
</a-form-item>
<a-form-item label="项目描述" name="shortname" :label-col="{ span: 2 }" labelAlign="left">
<a-input v-model:value="formState.shortname" placeholder="请输入商品描述" />
</a-form-item>
<a-form-item label="支付金额" name="price" :label-col="{ span: 2 }" labelAlign="left">
<a-radio-group v-model:value="formState.payment" name="radioGroup" class="pay">
<a-radio-group v-model:value="formState.paymentmodel" name="radioGroup" class="pay">
<div style="display: flex;height: 35px;">
<a-radio value="0" style="width:150px;">商品默认金额</a-radio>
<a-input-number style="width:200px;height: 35px;" v-model:value="formState.markingprice" :formatter="value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')"
<a-input-number style="width:200px;height: 35px;" :value="formState.markingprice" :formatter="value => `${value}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')"
:parser="value => value.replace(/\$\s?|(,*)/g, '')" :disabled="true"/>
<div style="width:50px;"></div>
</div>
......@@ -88,16 +90,9 @@
</a-form-item>
<a-form-item label="支付前填写手机号" name="price" :label-col="{ span: 3 }" labelAlign="left">
<div style="display: flex;">
<a-switch :checked="formState.fullphone === '0'" />
<a-switch v-model:checked="formState.fullphone" />
</div>
</a-form-item>
<!-- <a-form-item label="开始时间" name="price" :label-col="{ span: 2 }" labelAlign="left">
<div style="display:flex">
<a-date-picker v-model:value="value2" :format="dateFormat"
:disabledDate="disabledDate" />
<a-time-picker style="margin-left: 20px;" v-model:value="value3" format="HH:mm" />
</div>
</a-form-item> -->
<a-form-item label="结束时间" name="price" :label-col="{ span: 2 }" labelAlign="left">
<div style="display:flex">
<a-date-picker v-model:value="value4" :format="dateFormat"
......@@ -116,26 +111,21 @@
</template>
<script lang="ts" setup>
import { ref, defineExpose, onMounted, } from 'vue';
import { ref, defineExpose, onMounted,reactive } from 'vue';
import { SelectProps,message } from 'ant-design-vue';
import { getUid } from '@/utils/userInfo'
import moment from 'moment';
import { onUpdateGoodsPay, onfindby, onSelectGoods,onfindWX,onfindAli,onDelectgoodpay} from '@/api/index'
import { onUpdateGoodsPay, onfindby,onfindWX,onfindAli,onDelectgoodpay,onFindbyLikeName} from '@/api/index'
import CreatePay from './components/createpay/index.vue'
import dayjs, { Dayjs } from 'dayjs';
import useClipboard from 'vue-clipboard3'
import { LeftOutlined} from "@ant-design/icons-vue";
const dateFormat = 'YYYY/MM/DD';
let listValue = ref<any>([])
const startvalue = ref<Dayjs>(dayjs('08:00', 'HH:mm'));
const endvalue = ref<Dayjs>(dayjs('10:00', 'HH:mm'));
const { toClipboard } = useClipboard()
const { toClipboard } = useClipboard()
const disabledDate = (current: any) => {
return current && current < moment().startOf("day")
}
const popupScroll = () => {
console.log('popupScroll');
};
const uid =getUid()
const value = ref<string>('');
const checkboxValue = ref<any>([])
......@@ -144,7 +134,15 @@ const options = [...Array(25)].map((_, i) => ({ value: (i + 10).toString(36) + (
let list = ref()
let listArray = ref<any>([])
let isShow = ref(true)
let formState = ref<any>({})
let formState = ref<any>({
})
const pagination = reactive({
total:0,
defaultPageSize:10,
showSizeChanger:true,
pageSizeOptions: ['5', '10', '15', '20'],
onShowSizeChange:(current:any, pageSize:any)=>pageSize = pageSize
})
const optionsWithDisabled = [
{ value: '微信', label: '1' },
{ label: '2', value: '支付宝' },
......@@ -201,15 +199,14 @@ const value5 = ref<any>()
const showModal = () => {
visible.value = true;
};
const handleOk =async(e: MouseEvent) => {
const uid =getUid()
const starttime = moment(new Date()).format('YYYY-MM-DDTHH:mm:[00][Z]')
const expireendtime = (moment(value4.value.$d).format('YYYY-MM-DD'))+(moment(value5.value.$d).format('THH:mm:[00][Z]'))
formState.value.fullphone = formState.value.fullphone?'1':'0'
const params={
...formState.value,
uid,
}
const data:any = await onUpdateGoodsPay(params)
if(data.state == 1){
......@@ -218,39 +215,40 @@ const handleOk =async(e: MouseEvent) => {
}
};
const onEdit = (e: any) => {
formState.value.subject =e.subject
formState.value.userid =e.userid
formState.value.remark =e.remark
formState.value.shortname =e.shortname
formState.value.status =e.status
formState.value.starttime =e.starttime
formState.value.goodspayditch =e.goodspayditch
formState.value.id =e.id
formState.value.payment =e.payment
formState.value.paymentmodel =e.paymentmodel
formState.value.fullphone =e.fullphone
formState.value.expiremillisecond =e.expiremillisecond
formState.value.fullphone =e.fullphone
formState.value.goodsid =e.goodsid
formState.value.expireendtime =e.expireendtime
formState.value.createtime =e.createtime
formState.value.expiremodel =e.expiremodel
formState.value= {
...e
}
value2.value = dayjs(moment(e.starttime).format(('YYYY/MM/DD')), dateFormat)
value3.value = dayjs(moment(e.starttime).format(('HH:mm')), 'HH:mm')
value4.value = dayjs(moment(e.expireendtime).format(('YYYY-MM-DD')), dateFormat)
value5.value = dayjs(moment(e.expireendtime).format(('HH:mm')), 'HH:mm')
formState.value.payment = e.payment/100
formState.value.payment = formState.value.payment/100
formState.value.paymentmodel = formState.value.paymentmodel+''
showModal()
}
const onSearch = async () => {
const params = {
status: "0",
page: 1,
size:10,
name: value.value,
uid: getUid()
}
const data = await onfindby(params)
list.value = data.data
};
const tableChange=async(e:any)=>{
let queryData = {
current_page:e.current,//当前页数
per_page:e.pageSize//每页显示条数
};
const params = {
size: queryData.current_page,
page: queryData.per_page,
uid: getUid()
}
const data = await onfindby(params)
list.value = data.data
}
const onBack = (e: Number) => {
isShow.value = !isShow.value;
onSearch()
......@@ -294,31 +292,39 @@ const onFinish = (values: any) => {
const onFinishFailed = (errorInfo: any) => {
console.log('Failed:', errorInfo);
};
const init = async () => {
const uid = getUid()
const data = await onSelectGoods(uid)
listArray.value = data.data
}
const onSelectCheckboxValue = (e: any, index: any) => {d
const onSelectCheckboxValue = (e: any, index: any) => {
checkboxValue.value[index] = e
}
const onSelect =(e:any,label:any,index:any)=>{
console.log(listArray.value[label.index]);
const onSelect =(e:any,opt:any)=>{
formState.value.subject = ''
const goodspayditch = formState.value.goodspayditch
const id = formState.value.id
formState.value ={
...listArray.value[label.index]
goodspayditch:goodspayditch,
...opt.itemKey,
id
}
formState.value.markingprice = listArray.value[label.index].price/100
formState.value.goodspayditch = goodspayditch
formState.value.markingprice = formState.value.markingprice/100
formState.value.paymentmodel= '0'
}
const onSubSearch = async(value:any)=>{
const uid = getUid();
const params = {
name: '',
size:10,
page:1,
uid,
};
const data = await onFindbyLikeName(params);
listArray.value = data.data.goods
}
const popupScroll = ()=>{
console.log(1);
}
onMounted(async () => {
onSearch()
init()
})
defineExpose({
size: ref<SelectProps['size']>('middle'),
......@@ -331,8 +337,6 @@ defineExpose({
checkboxValue,
optionsWithDisabled,
dateFormat,
startvalue,
endvalue,
listValue,
list,
value2,
......@@ -340,11 +344,13 @@ defineExpose({
value4,
value5,
uid,
pagination,
optionss,
columns,
popupScroll,
onSet,
onSearch,
columns,
onEdit,
optionss,
onCreatePay,
onBack,
onCopy,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment