Commit 79c04df0 by liuliufashi

update

parent ef86df04
...@@ -120,7 +120,7 @@ export const onCreateGoods = async(data:any)=>{ ...@@ -120,7 +120,7 @@ export const onCreateGoods = async(data:any)=>{
} }
export const onfindAli = async(uid:any)=>{ export const onfindAli = async(uid:any)=>{
return await request({ return await request({
url: `/pay/findalipay?uid=${uid}`, url: `/pay/findAli?uid=${uid}`,
method:'post', method:'post',
}); });
} }
...@@ -160,7 +160,7 @@ export const onFindbyLikeName = async(params:any)=>{ ...@@ -160,7 +160,7 @@ export const onFindbyLikeName = async(params:any)=>{
export const onfindby = async(params:any)=>{ export const onfindby = async(params:any)=>{
return await request({ return await request({
url: `/goods/findgoodspays?uid=${params.uid}&name=${params.name}&status=${params.status}&page=${params.page}&size=${params.size}`, url: `/goods/findgoodspays?uid=${params.uid}&page=${params.page}&size=${params.size}`,
method:'post', method:'post',
}); });
} }
...@@ -231,4 +231,14 @@ export const onDisableWx = async(data:any)=>{ ...@@ -231,4 +231,14 @@ export const onDisableWx = async(data:any)=>{
data data
}); });
} }
export const onFindBysub= async(data:any)=>{
return await request({
url: `/goods/findBysub?subject=${data.subject}&uid=${data.uid}&page=${data.page}&size=${data.size}`,
method:'post',
data
});
}
// /goods/findBysub
// /pay/DisableAli // /pay/DisableAli
\ No newline at end of file
...@@ -19,7 +19,7 @@ const routes: Array<RouteRecordRaw> = [ ...@@ -19,7 +19,7 @@ const routes: Array<RouteRecordRaw> = [
path: '/home', path: '/home',
name: 'Home', name: 'Home',
component: Home, component: Home,
redirect:'/home/paybind', redirect:'/home/goodscabinet',
children:[ children:[
{ {
path: '/home/paybind', path: '/home/paybind',
......
...@@ -19,7 +19,8 @@ instance.interceptors.request.use( ...@@ -19,7 +19,8 @@ instance.interceptors.request.use(
function (config: any) { function (config: any) {
// 这里判断localStorage里面是否存在token,如果有则在请求头里面设置 // 这里判断localStorage里面是否存在token,如果有则在请求头里面设置
if (token) { if (token) {
// config.headers.Authorization = token; config.headers.Authorization = token;
config.headers['token'] = token;
} }
return config; return config;
}, },
......
...@@ -15,19 +15,24 @@ ...@@ -15,19 +15,24 @@
<a-form-item label=" 商品示图" name="picurl" :rules="rulesRef.picurl" :wrapper-col="{ offset: 0, span: 8 }" class="Up" <a-form-item label=" 商品示图" name="picurl" :rules="rulesRef.picurl" :wrapper-col="{ offset: 0, span: 8 }" class="Up"
labelAlign="left" :label-col="{ span: 2 }"> labelAlign="left" :label-col="{ span: 2 }">
<div class="clearfix"> <div class="clearfix">
<a-upload class="clearfix-up" v-model:file-list="fileList" action="http://43.142.42.187:8899/file/upload" list-type="picture-card" <a-upload
:maxCount="1" @preview="handlePreview" @change="handleChange" :before-upload="beforeUpload"> v-model:file-list="fileList"
<div v-if="fileList.length < 8"> list-type="picture-card"
<plus-outlined /> :show-upload-list="false"
<div style="margin-top: 8px" >Upload</div> action="http://43.142.42.187:8899/file/upload"
:before-upload="beforeUpload"
@change="handleChange"
>
<img v-if="imageUrl" :src="imageUrl" alt="avatar" style="width: 102px;height: 102px;"/>
<div v-else>
<loading-outlined v-if="loading"></loading-outlined>
<plus-outlined v-else></plus-outlined>
<div class="ant-upload-text">Upload</div>
</div> </div>
</a-upload> </a-upload>
<a-modal :visible="previewVisible" :title="previewTitle" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
<div> <div>
<p class="warin"> <p class="warin">
建议图片比例为4:3,大小不超过20M,图片仅支持JPG、JPEG、PNG格式 建议图片比例为4:3,大小不超过2M,图片仅支持JPG、JPEG、PNG格式
</p> </p>
</div> </div>
</div> </div>
...@@ -36,7 +41,7 @@ ...@@ -36,7 +41,7 @@
<div style="position: relative;"> <div style="position: relative;">
<div style="display:none"> <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" <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"> @change="onEdithandleChange" :before-upload="onBeforeUpload">
<div ref="upImage" style="width:30px;height:30px;border: none;"><i class="iconfont icon-tupian" <div ref="upImage" style="width:30px;height:30px;border: none;"><i class="iconfont icon-tupian"
style="font-size:28px;"></i> </div> style="font-size:28px;"></i> </div>
</a-upload> </a-upload>
...@@ -99,7 +104,8 @@ import { getUid } from "@/utils/userInfo"; ...@@ -99,7 +104,8 @@ import { getUid } from "@/utils/userInfo";
const useForm = Form.useForm; const useForm = Form.useForm;
const upImage = ref<any>(null) const upImage = ref<any>(null)
const textarea = ref<any>('') const textarea = ref<any>('')
const loading = ref<boolean>(false);
const imageUrl = ref<string>('');
interface FormState { interface FormState {
subject: string, subject: string,
shortname: string; shortname: string;
...@@ -167,7 +173,7 @@ let content = ref(""); ...@@ -167,7 +173,7 @@ let content = ref("");
const myQuillEditor = ref<any>(null); const myQuillEditor = ref<any>(null);
const crossedPrice = ref<Number>(1); const crossedPrice = ref<Number>(1);
const sellingPrice = ref<Number>(1); const sellingPrice = ref<Number>(1);
const value = ref<number>(1); const value = ref<string>('1');
const previewVisible = ref(false); const previewVisible = ref(false);
const previewImage = ref(""); const previewImage = ref("");
const previewTitle = ref(""); const previewTitle = ref("");
...@@ -199,24 +205,6 @@ const handleCancel = () => { ...@@ -199,24 +205,6 @@ const handleCancel = () => {
previewVisible.value = false; previewVisible.value = false;
previewTitle.value = ""; previewTitle.value = "";
}; };
const handlePreview = async (file: any) => {
if (!file.url && !file.preview) {
file.preview = (await getBase64(file.originFileObj)) as string;
}
previewImage.value = file.url || file.preview;
previewVisible.value = true;
previewTitle.value =
file.name || file.url.substring(file.url.lastIndexOf("/") + 1);
};
const onHandlePreview = async (file: any) => {
if (!file.url && !file.preview) {
file.preview = (await getBase64(file.originFileObj)) as string;
}
previewImage.value = file.url || file.preview;
previewVisible.value = true;
previewTitle.value =
file.name || file.url.substring(file.url.lastIndexOf("/") + 1);
};
const formState = reactive<FormState>({ const formState = reactive<FormState>({
subject: '', subject: '',
shortname: "", shortname: "",
...@@ -256,6 +244,8 @@ const onFinishFailed = (errorInfo: any) => { ...@@ -256,6 +244,8 @@ const onFinishFailed = (errorInfo: any) => {
console.log("Failed:", errorInfo); console.log("Failed:", errorInfo);
}; };
const handleChange = (info: any) => { const handleChange = (info: any) => {
const size = info.file.size /1024
if(size <2000){
let resFileList = [...info.fileList]; let resFileList = [...info.fileList];
// 1. Limit the number of uploaded files // 1. Limit the number of uploaded files
...@@ -266,16 +256,21 @@ const handleChange = (info: any) => { ...@@ -266,16 +256,21 @@ const handleChange = (info: any) => {
resFileList = resFileList.map((file) => { resFileList = resFileList.map((file) => {
if (file.response) { if (file.response) {
// Component will show file.url as link // Component will show file.url as link
formState.picurl = file.response.data; imageUrl.value= file.response.data;
formState.picurl = imageUrl.value
} }
return file; return file;
}); });
fileList.value = resFileList; fileList.value = resFileList;
}else{
}
}; };
const onEdithandleChange = (info: any) => { const onEdithandleChange = (info: any) => {
const size = info.file.size /1024
if(size <2000){
let resFileList = [...info.fileList]; let resFileList = [...info.fileList];
resFileList = resFileList.slice(-2); resFileList = resFileList.slice(-2);
resFileList = resFileList.map((file) => { resFileList = resFileList.map((file) => {
...@@ -286,12 +281,15 @@ const onEdithandleChange = (info: any) => { ...@@ -286,12 +281,15 @@ const onEdithandleChange = (info: any) => {
if (!!resFileList) { if (!!resFileList) {
isEditfileList.value = resFileList; isEditfileList.value = resFileList;
} }
}else{
}
}; };
const onSelectPlain = (e: any) => { const onSelectPlain = (e: any) => {
if(e.target.value == '0'){ if(e.target.value == '0'){
formState.value.price = "1" formState.price = "0.01"
}else{ }else{
formState.value.price = "" formState.price = ""
} }
value.value = e.target.value; value.value = e.target.value;
...@@ -300,16 +298,27 @@ const onEditorChange = (e: any) => { ...@@ -300,16 +298,27 @@ const onEditorChange = (e: any) => {
console.log(e.html, 'e'); console.log(e.html, 'e');
} }
const beforeUpload: UploadProps['beforeUpload'] = file => { const beforeUpload: UploadProps['beforeUpload'] = file => {
const size = file.size /1024
if(size <2000){
if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) { if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) {
message.error(`${file.name}不是png/jpef/jpg格式`); message.error(`${file.name}不是png/jpef/jpg格式`);
return Upload.LIST_IGNORE; return Upload.LIST_IGNORE;
} }
}else{
message.info('图片最大为2M')
}
}; };
const onBeforeUpload: UploadProps['beforeUpload'] = file => { const onBeforeUpload: UploadProps['beforeUpload'] = file => {
const size = file.size /1024
if(size <2000){
if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) { if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) {
message.error(`${file.name}不是png/jpef/jpg格式`); message.error(`${file.name}不是png/jpef/jpg格式`);
return Upload.LIST_IGNORE; return Upload.LIST_IGNORE;
} }
}else{
message.info('图片最大为2M')
}
}; };
const onSubmit = () => { const onSubmit = () => {
...@@ -354,6 +363,8 @@ defineExpose({ ...@@ -354,6 +363,8 @@ defineExpose({
previewVisible, previewVisible,
previewImage, previewImage,
fileList, fileList,
loading,
imageUrl,
previewTitle, previewTitle,
options, options,
content, content,
...@@ -377,10 +388,8 @@ defineExpose({ ...@@ -377,10 +388,8 @@ defineExpose({
onSelectPlain, onSelectPlain,
handleChange, handleChange,
handleCancel, handleCancel,
handlePreview,
onFinish, onFinish,
onFinishFailed, onFinishFailed,
onHandlePreview,
onEdithandleChange, onEdithandleChange,
onBeforeUpload onBeforeUpload
}); });
......
...@@ -2,31 +2,35 @@ ...@@ -2,31 +2,35 @@
<div class="page"> <div class="page">
<!-- {{props.props.propsData.isCad}} --> <!-- {{props.props.propsData.isCad}} -->
<div class="title">商品包基础信息</div> <div class="title">商品包基础信息</div>
<a-form style="margin-top: 30px" :model="formState" name="basic" :label-col="{ span: 1 }" :wrapper-col="{ span: 8 }" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed"> <a-form style="margin-top: 30px" :model="formState" name="basic" :label-col="{ span: 1 }"
<a-form-item label="商品名称:" name="subject" :rules="rulesRef.subject" labelAlign="left" :label-col="{ span: 2 }"> :wrapper-col="{ span: 8 }" autocomplete="off" @finish="onFinish" @finishFailed="onFinishFailed">
<a-input v-model:value="formState.subject" maxlength="30" showCount/> <a-form-item label="商品名称:" name="subject" :rules="rulesRef.subject" labelAlign="left"
:label-col="{ span: 2 }">
<a-input v-model:value="formState.subject" maxlength="30" showCount />
</a-form-item> </a-form-item>
<a-form-item label="商品简介:" name="shortname" :rules="rulesRef.shortname" labelAlign="left" :label-col="{ span: 2 }"> <a-form-item label="商品简介:" name="shortname" :rules="rulesRef.shortname" labelAlign="left"
<a-input v-model:value="formState.shortname" maxlength="50" showCount/> :label-col="{ span: 2 }">
<a-input v-model:value="formState.shortname" maxlength="50" showCount />
</a-form-item> </a-form-item>
<a-form-item label="商品示图:" name="picurl" :rules="rulesRef.picurl" labelAlign="left" :wrapper-col="{ offset: 0, span: 8 }" <a-form-item label="商品示图:" name="picurl" :rules="rulesRef.picurl" labelAlign="left"
class="Up" :label-col="{ span: 2 }"> :wrapper-col="{ offset: 0, span: 8 }" class="Up" :label-col="{ span: 2 }">
<div class="clearfix"> <div class="clearfix">
<a-upload class="clearfix-up" v-model:file-list="fileList" action="http://43.142.42.187:8899/file/upload" :maxCount="1" <a-upload v-model:file-list="fileList" list-type="picture-card" :show-upload-list="false"
list-type="picture-card" @preview="handlePreview" @change="handleChange"> action="http://43.142.42.187:8899/file/upload" :before-upload="beforeUpload"
<div v-if="fileList.length < 8" :before-upload="beforeUpload"> @change="handleChange">
<plus-outlined /> <img v-if="imageUrl" :src="imageUrl" alt="avatar" style="width: 102px;height: 102px;" />
<div style="margin-top: 8px">Upload</div> <div v-else>
<loading-outlined v-if="loading"></loading-outlined>
<plus-outlined v-else></plus-outlined>
<div class="ant-upload-text">Upload</div>
</div> </div>
</a-upload> </a-upload>
<a-modal :visible="previewVisible" :title="previewTitle" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
<div> <div>
<p class="warin"> <p class="warin">
建议图片比例为4:3,大小不超过20M,图片仅支持JPG、JPEG、PNG格式 建议图片比例为4:3,大小不超过2M,图片仅支持JPG、JPEG、PNG格式
</p> </p>
</div> </div>
</div> </div>
...@@ -34,15 +38,16 @@ ...@@ -34,15 +38,16 @@
<a-form-item label="商品详情:" name="body" :label-col="{ span: 2 }" labelAlign="left"> <a-form-item label="商品详情:" name="body" :label-col="{ span: 2 }" labelAlign="left">
<div style="position: relative;"> <div style="position: relative;">
<div style="display: none;"> <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" <a-upload class="clearfix-up-1" action="http://43.142.42.187:8899/file/upload"
@preview="onHandlePreview" @change="onEdithandleChange" :before-upload="onBeforeUpload"> list-type="picture-card" :maxCount="1" @change="onEdithandleChange"
<div ref="upImage" style="width:30px;height:30px;border: none;background: none;"><i class="iconfont icon-tupian" :before-upload="onBeforeUpload">
style="font-size:28px;"></i> </div> <div ref="upImage" style="width:30px;height:30px;border: none;background: none;"><i
class="iconfont icon-tupian" style="font-size:28px;"></i> </div>
</a-upload> </a-upload>
</div> </div>
<QuillEditor style="height:200px" ref="myQuillEditor" :options="options" :content="formState.body" <QuillEditor style="height:200px" ref="myQuillEditor" :options="options" :content="formState.body"
content-type="html" @update:content="textChange" @focus="onEditorFocus($event)" @blur="onEditorBlur($event)" content-type="html" @update:content="textChange" @focus="onEditorFocus($event)"
@change="onEditorChange($event)" /> @blur="onEditorBlur($event)" @change="onEditorChange($event)" />
</div> </div>
<div class="editor-text"> <div class="editor-text">
<p>1、商品描述需符合《中华人民共和国广告法》</p> <p>1、商品描述需符合《中华人民共和国广告法》</p>
...@@ -51,12 +56,14 @@ ...@@ -51,12 +56,14 @@
</p> </p>
</div> </div>
</a-form-item> </a-form-item>
<a-form-item label="选择商品:" labelAlign="left" :wrapper-col="{ offset: 0, span: 8 }" name="sub" :rules="rulesRef.sub" <a-form-item label="选择商品:" labelAlign="left" :wrapper-col="{ offset: 0, span: 8 }" name="sub"
:label-col="{ span: 2 }"> :rules="rulesRef.sub" :label-col="{ span: 2 }">
<div style="width:100%;display: flex;align-items: center;"> <div style="width:100%;display: flex;align-items: center;">
<a-select v-model:value="formState.sub" mode="multiple" style="width: 100%" placeholder="请选择商品" @focus="handleChanges" @search="handleChanges" @select="onSelect" @popupScroll="popupScroll"> <a-select v-model:value="formState.sub" mode="multiple" style="width: 100%" placeholder="请选择商品"
<a-select-option v-for="item,index in optionss" :itemKey="item" :value="item.subject" :label="item.goodsid" :key="index"> @focus="handleChanges" @search="handleChanges" @select="onSelect" @popupScroll="popupScroll">
{{item.subject}} <a-select-option v-for="item, index in optionss" :itemKey="item" :value="item.subject"
:label="item.goodsid" :key="index">
{{ item.subject }}
</a-select-option> </a-select-option>
</a-select> </a-select>
<a-button type="primary" style="margin-left:20px;"> <a-button type="primary" style="margin-left:20px;">
...@@ -74,19 +81,17 @@ ...@@ -74,19 +81,17 @@
</a-radio-group> </a-radio-group>
</div> </div>
</a-form-item> </a-form-item>
<a-form-item :wrapper-col="{ offset: 2, span: 7 }" v-if="value == 1" > <a-form-item :wrapper-col="{ offset: 2, span: 7 }" v-if="value == 1">
<div style="display:flex;"> <div style="display:flex;">
<div style="margin-right:20px">划线价</div> <div style="margin-right:20px">划线价</div>
<a-input-number v-model:value="formState.markingprice" style="width: 200px" :min="0" <a-input-number v-model:value="formState.markingprice" style="width: 200px" :min="0" string-mode />
string-mode />
</div> </div>
</a-form-item> </a-form-item>
<a-form-item name="price" :wrapper-col="{ offset: 2, span: 7 }" v-if="value == 1" <a-form-item name="price" :wrapper-col="{ offset: 2, span: 7 }" v-if="value == 1"
:rules="[{ required: true, message: '请输入商品价格!' }]" :label-col="{ span: 2 }"> :rules="[{ required: true, message: '请输入商品价格!' }]" :label-col="{ span: 2 }">
<div style="display:flex;"> <div style="display:flex;">
<div style="margin-right:20px">售卖价</div> <div style="margin-right:20px">售卖价</div>
<a-input-number v-model:value="formState.price" style="width: 200px" :min="0" <a-input-number v-model:value="formState.price" style="width: 200px" :min="0" string-mode />
string-mode />
</div> </div>
</a-form-item> </a-form-item>
<p style="opacity: .67;font-size: 14px;text-align: left;margin-left: 70px;">预计十分钟后开始支付链接生效</p> <p style="opacity: .67;font-size: 14px;text-align: left;margin-left: 70px;">预计十分钟后开始支付链接生效</p>
...@@ -97,7 +102,7 @@ ...@@ -97,7 +102,7 @@
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref, defineEmits, defineExpose, toRaw, onMounted,watch} from "vue"; import { reactive, ref, defineEmits, defineExpose, toRaw, onMounted, watch } from "vue";
import { PlusOutlined } from "@ant-design/icons-vue"; import { PlusOutlined } from "@ant-design/icons-vue";
import { message, UploadProps, Upload } from "ant-design-vue"; import { message, UploadProps, Upload } from "ant-design-vue";
import { Form } from 'ant-design-vue'; import { Form } from 'ant-design-vue';
...@@ -107,6 +112,8 @@ import { onCreateGoods, onFindbyLikeName } from '@/api/index' ...@@ -107,6 +112,8 @@ import { onCreateGoods, onFindbyLikeName } from '@/api/index'
import { getUid } from "@/utils/userInfo"; import { getUid } from "@/utils/userInfo";
const useForm = Form.useForm; const useForm = Form.useForm;
const upImage = ref<any>(null) const upImage = ref<any>(null)
const loading = ref<boolean>(false);
const imageUrl = ref<string>('');
let isEditfileList = ref<UploadProps["fileList"]>([ let isEditfileList = ref<UploadProps["fileList"]>([
]); ]);
interface FormState { interface FormState {
...@@ -139,7 +146,7 @@ let content = ref(""); ...@@ -139,7 +146,7 @@ let content = ref("");
const myQuillEditor = ref<any>(null); const myQuillEditor = ref<any>(null);
const crossedPrice = ref<Number>(1); const crossedPrice = ref<Number>(1);
const sellingPrice = ref<Number>(1); const sellingPrice = ref<Number>(1);
const value = ref<number>(1); const value = ref<string>('1');
const previewVisible = ref(false); const previewVisible = ref(false);
const previewImage = ref(""); const previewImage = ref("");
const previewTitle = ref(""); const previewTitle = ref("");
...@@ -157,9 +164,9 @@ const fileList = ref<UploadProps["fileList"]>([ ...@@ -157,9 +164,9 @@ const fileList = ref<UploadProps["fileList"]>([
[{ color: [] }, { background: [] }], [{ color: [] }, { background: [] }],
[{ align: [] }], [{ align: [] }],
], ],
handlers:{ handlers: {
image:async function(e:any){ image: async function (e: any) {
if(e){ if (e) {
upImage.value.click() upImage.value.click()
} }
} }
...@@ -173,43 +180,35 @@ const fileList = ref<UploadProps["fileList"]>([ ...@@ -173,43 +180,35 @@ const fileList = ref<UploadProps["fileList"]>([
}, },
}); });
const textarea = ref<any>('') const textarea = ref<any>('')
const optionsEdit =ref<any>({ const optionsEdit = ref<any>({
debug: 'info', debug: 'info',
modules: { modules: {
toolbar: ['bold', 'italic', 'underline', 'strike','link', 'image'] toolbar: ['bold', 'italic', 'underline', 'strike', 'link', 'image']
}, },
placeholder: '请输入详情', placeholder: '请输入详情',
readOnly: false, readOnly: false,
theme: 'snow' theme: 'snow'
}) })
const textChange = (e:any) => { const textChange = (e: any) => {
textarea.value = e textarea.value = e
console.log(e, '98', textarea.value); console.log(e, '98', textarea.value);
} }
const onEditorFocus =(e:any)=>{ const onEditorFocus = (e: any) => {
} }
const onEditorBlur =(e:any)=>{ const onEditorBlur = (e: any) => {
} }
const onEditorChange =(e:any)=>{ const onEditorChange = (e: any) => {
console.log(e,'e'); console.log(e, 'e');
} }
const handleCancel = () => { const handleCancel = () => {
previewVisible.value = false; previewVisible.value = false;
previewTitle.value = ""; previewTitle.value = "";
}; };
const handlePreview = async (file: any) => {
if (!file.url && !file.preview) {
file.preview = (await getBase64(file.originFileObj)) as string;
}
previewImage.value = file.url || file.preview;
previewVisible.value = true;
previewTitle.value =
file.name || file.url.substring(file.url.lastIndexOf("/") + 1);
};
const formState = reactive<FormState>({ const formState = reactive<FormState>({
subject: '', subject: '',
shortname: "", shortname: "",
...@@ -259,6 +258,8 @@ const onFinishFailed = (errorInfo: any) => { ...@@ -259,6 +258,8 @@ const onFinishFailed = (errorInfo: any) => {
console.log("Failed:", errorInfo); console.log("Failed:", errorInfo);
}; };
const handleChange = (info: any) => { const handleChange = (info: any) => {
const size = info.file.size / 1024
if (size < 2000) {
let resFileList = [...info.fileList]; let resFileList = [...info.fileList];
// 1. Limit the number of uploaded files // 1. Limit the number of uploaded files
...@@ -269,61 +270,70 @@ const handleChange = (info: any) => { ...@@ -269,61 +270,70 @@ const handleChange = (info: any) => {
resFileList = resFileList.map((file) => { resFileList = resFileList.map((file) => {
if (file.response) { if (file.response) {
// Component will show file.url as link // Component will show file.url as link
formState.picurl = file.response.data; imageUrl.value = file.response.data;
formState.picurl = imageUrl.value;
} }
return file; return file;
}); });
fileList.value = resFileList; fileList.value = resFileList;
}else{
}
}; };
const onSelectPlain = (e: any) => { const onSelectPlain = (e: any) => {
if(e.target.value == '0'){ if (e.target.value == '0') {
formState.value.price = "1" formState.price = "0.01"
}else{ } else {
formState.value.price = "" formState.price = ""
} }
// free 0 // free 0
value.value = e.target.value; value.value = e.target.value;
}; };
const handleChanges = async(value: any) => { const handleChanges = async (value: any) => {
const uid = getUid(); const uid = getUid();
const params = { const params = {
name: value.target?'':value, name: value.target ? '' : value,
size:10, size: 10,
page:1, page: 1,
uid, uid,
}; };
const data = await onFindbyLikeName(params); const data = await onFindbyLikeName(params);
optionss.value = data.data.goods optionss.value = data.data.goods
}; };
const onSelect =(value:any, option:any)=>{ const onSelect = (value: any, option: any) => {
console.log(value,option,'option'); subs.value.push({ label: option.label, value: option.value })
console.log(formState.sub,'formState');
subs.value.push({label:option.label,value:option.value})
} }
const beforeUpload: UploadProps['beforeUpload'] = file => { const beforeUpload: UploadProps['beforeUpload'] = file => {
const size = file.size /1024
if(size <2000){
if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) { if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) {
message.error(`${file.name}不是png/jpef/jpg格式`); message.error(`${file.name}不是png/jpef/jpg格式`);
return Upload.LIST_IGNORE; return Upload.LIST_IGNORE;
} }
}else{
message.info('图片最大为2M')
}
}; };
const popupScroll =()=>{ const popupScroll = () => {
console.log(1); console.log(1);
} }
const onSubmit = () => { const onSubmit = () => {
validate() validate()
.then(async () => { .then(async () => {
const fromData:any = toRaw(formState) const fromData: any = toRaw(formState)
const uid = getUid() const uid = getUid()
const list = subs.value.filter((element:any,index:any) => { const list = subs.value.filter((element: any, index: any) => {
if(element.value == formState.sub[index]){ if (element.value == formState.sub[index]) {
return element.label return element.label
} }
}) })
console.log(list);
if (list.length > 1) {
const prarms = { const prarms = {
body: fromData.body, body: fromData.body,
remember: fromData.remember, remember: fromData.remember,
...@@ -331,10 +341,10 @@ const onSubmit = () => { ...@@ -331,10 +341,10 @@ const onSubmit = () => {
subject: fromData.subject, subject: fromData.subject,
uid, uid,
parent: 1, parent: 1,
markingprice:fromData.markingprice*100, markingprice: fromData.markingprice * 100,
price:fromData.price*100, price: fromData.price * 100,
picurl:fromData.picurl, picurl: fromData.picurl,
sub:list.map((item:any)=>{return item.label}) sub: list.map((item: any) => { return item.label })
} }
const data: any = await onCreateGoods(JSON.stringify(prarms)) const data: any = await onCreateGoods(JSON.stringify(prarms))
if (data.state === 1) { if (data.state === 1) {
...@@ -343,6 +353,9 @@ const onSubmit = () => { ...@@ -343,6 +353,9 @@ const onSubmit = () => {
message.success(data.message) message.success(data.message)
emit('onBack') emit('onBack')
} }
} else {
message.info('请至少选择两件商品')
}
}) })
.catch(err => { .catch(err => {
...@@ -350,16 +363,10 @@ const onSubmit = () => { ...@@ -350,16 +363,10 @@ const onSubmit = () => {
}); });
}; };
const onHandlePreview = async (file: any) => {
if (!file.url && !file.preview) {
file.preview = (await getBase64(file.originFileObj)) as string;
}
previewImage.value = file.url || file.preview;
previewVisible.value = true;
previewTitle.value =
file.name || file.url.substring(file.url.lastIndexOf("/") + 1);
};
const onEdithandleChange = (info: any) => { const onEdithandleChange = (info: any) => {
const size = info.file.size / 1024
if (size < 2000) {
let resFileList = [...info.fileList]; let resFileList = [...info.fileList];
resFileList = resFileList.slice(-2); resFileList = resFileList.slice(-2);
resFileList = resFileList.map((file) => { resFileList = resFileList.map((file) => {
...@@ -370,14 +377,22 @@ const onEdithandleChange = (info: any) => { ...@@ -370,14 +377,22 @@ const onEdithandleChange = (info: any) => {
if (!!resFileList) { if (!!resFileList) {
isEditfileList.value = resFileList; isEditfileList.value = resFileList;
} }
} else {
}
}; };
const onBeforeUpload: UploadProps['beforeUpload'] = file => { const onBeforeUpload: UploadProps['beforeUpload'] = file => {
const size = file.size /1024
if(size <2000){
if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) { if (!(file.type.includes('png') || file.type.includes('jpeg') || file.type.includes('jpg'))) {
message.error(`${file.name}不是png/jpef/jpg格式`); message.error(`${file.name}不是png/jpef/jpg格式`);
return Upload.LIST_IGNORE; return Upload.LIST_IGNORE;
} }
}else{
message.info('图片最大为2M')
}
}; };
watch(isEditfileList, (newVal:any) => { watch(isEditfileList, (newVal: any) => {
if (newVal[0]) { if (newVal[0]) {
const str = myQuillEditor.value.getHTML() + `<img src=${newVal[0].response.data}>` const str = myQuillEditor.value.getHTML() + `<img src=${newVal[0].response.data}>`
myQuillEditor.value.setHTML(str) myQuillEditor.value.setHTML(str)
...@@ -403,10 +418,11 @@ defineExpose({ ...@@ -403,10 +418,11 @@ defineExpose({
previewVisible, previewVisible,
previewImage, previewImage,
fileList, fileList,
imageUrl,
loading,
onFinish, onFinish,
onFinishFailed, onFinishFailed,
handleCancel, handleCancel,
handlePreview,
handleChange, handleChange,
onSelectPlain, onSelectPlain,
onSubmit, onSubmit,
...@@ -489,9 +505,10 @@ defineExpose({ ...@@ -489,9 +505,10 @@ defineExpose({
} }
</style> </style>
<style lang="less"> <style lang="less">
.page .ant-input-affix-wrapper > input.ant-input{ .page .ant-input-affix-wrapper>input.ant-input {
background-color: white; background-color: white;
} }
.clearfix-up-1 { .clearfix-up-1 {
display: flex; display: flex;
align-items: center; align-items: center;
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
> >
<a-menu-item <a-menu-item
v-for="item,index in list" v-for="item,index in list"
:key="item" :key="index"
@click="goNewPage(item,index)" @click="goNewPage(item,index)"
> >
<div style="display: flex; align-items: center" > <div style="display: flex; align-items: center" >
...@@ -85,8 +85,8 @@ interface FormUser { ...@@ -85,8 +85,8 @@ interface FormUser {
const router = useRouter(); const router = useRouter();
const store = useStore(); const store = useStore();
const indexItem = ref<any>('0') const indexItem = ref<Number>(0)
const selectedKeys = ref<string[]>(["1"]) const selectedKeys = ref<string[]>([0])
const list = ref<any>() const list = ref<any>()
const info = reactive<FormUser>(store.getters.getUserInfo); const info = reactive<FormUser>(store.getters.getUserInfo);
const goNewPage = (e: any,index:any) => { const goNewPage = (e: any,index:any) => {
...@@ -103,6 +103,7 @@ const handleMenuClick: MenuProps['onClick'] = async(e) => { ...@@ -103,6 +103,7 @@ const handleMenuClick: MenuProps['onClick'] = async(e) => {
console.log('click', e); console.log('click', e);
if(e.key == '1'){ if(e.key == '1'){
const data = await onLogOut() const data = await onLogOut()
localStorage.removeItem('uid')
router.replace({ router.replace({
path:'/login' path:'/login'
}) })
......
...@@ -73,7 +73,7 @@ ...@@ -73,7 +73,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { defineExpose, reactive, ref, toRaw } from "vue"; import { defineExpose, reactive, ref, toRaw,onMounted } from "vue";
import { onLogin } from "@/api/index"; import { onLogin } from "@/api/index";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
import { useStore } from "vuex"; import { useStore } from "vuex";
...@@ -87,7 +87,6 @@ interface FormState { ...@@ -87,7 +87,6 @@ interface FormState {
const checked = ref<boolean>(false); const checked = ref<boolean>(false);
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
const router = useRouter(); const router = useRouter();
const store = useStore();
const formState = reactive<FormState>({ const formState = reactive<FormState>({
username: "", username: "",
password: "", password: "",
...@@ -105,9 +104,9 @@ const onSubmit = async () => { ...@@ -105,9 +104,9 @@ const onSubmit = async () => {
name: toRaw(formState).username, name: toRaw(formState).username,
password: toRaw(formState).password, password: toRaw(formState).password,
}; };
if (checked.value) { if(checked.value) {
const data: any = await onLogin(JSON.stringify(user)); const data: any = await onLogin(JSON.stringify(user));
console.log(data,'data');
loading.value = true loading.value = true
if (data.message === "ok" && data.state === 1) { if (data.message === "ok" && data.state === 1) {
setUserInfo(user); setUserInfo(user);
...@@ -130,6 +129,15 @@ const onRegister = () => { ...@@ -130,6 +129,15 @@ const onRegister = () => {
const onAgreement = () => { const onAgreement = () => {
window.open("https://xs-legal.finezb.com/service.html", "_blank"); window.open("https://xs-legal.finezb.com/service.html", "_blank");
}; };
onMounted(()=>{
if(!!localStorage.getItem('uid')){
router.push({
path: "/home",
});
}else{
return
}
})
defineExpose({ defineExpose({
formState, formState,
checked, checked,
......
...@@ -234,17 +234,11 @@ const onSubmit = async () => { ...@@ -234,17 +234,11 @@ const onSubmit = async () => {
validate() validate()
.then(async () => { .then(async () => {
let data: any = {}; let data: any = {};
const prarms = {
paytype: query.value.paytype,
uid: getUid(),
...toRaw(modelRef),
};
if (status.value === 1) { if (status.value === 1) {
let prarms:any = { let prarms:any = {
} }
if(query.value.paytype == "1"){ if(query.value.paytype == "1"){
prarms = { prarms = {
amount: dataFrom.value.amount, amount: dataFrom.value.amount,
id: dataFrom.value.id, id: dataFrom.value.id,
...@@ -269,6 +263,7 @@ const onSubmit = async () => { ...@@ -269,6 +263,7 @@ const onSubmit = async () => {
...toRaw(modelRef), ...toRaw(modelRef),
}; };
} }
if (query.value.paytype == "1") { if (query.value.paytype == "1") {
data = await onUpdateWX(JSON.stringify(prarms)); data = await onUpdateWX(JSON.stringify(prarms));
} else if (query.value.paytype == "2") { } else if (query.value.paytype == "2") {
...@@ -282,6 +277,34 @@ const onSubmit = async () => { ...@@ -282,6 +277,34 @@ const onSubmit = async () => {
} }
await init(); await init();
} else { } else {
let prarms:any = {
}
if(query.value.paytype == "1"){
prarms = {
amount: dataFrom.value.amount,
id: dataFrom.value.id,
paystate: dataFrom.value.paystate,
paytype: dataFrom.value.paytype,
status: dataFrom.value.status,
weight: dataFrom.value.weight,
mchid: toRaw(modelRef).privatekey,
mchkey: toRaw(modelRef).alipaypublickey,
...toRaw(modelRef),
};
}else{
prarms = {
amount: dataFrom.value.amount,
id: dataFrom.value.id,
paystate: dataFrom.value.paystate,
paytype: dataFrom.value.paytype,
status: dataFrom.value.status,
weight: dataFrom.value.weight,
mchid: toRaw(modelRef).mchid,
mchkey: toRaw(modelRef).mchkey,
...toRaw(modelRef),
};
}
if (query.value.paytype == 1) { if (query.value.paytype == 1) {
data = await onWxPay(prarms); data = await onWxPay(prarms);
} else if (query.value.paytype == 2) { } else if (query.value.paytype == 2) {
...@@ -323,19 +346,22 @@ const onSetShowTable = async (data: any) => { ...@@ -323,19 +346,22 @@ const onSetShowTable = async (data: any) => {
status.value = 1; status.value = 1;
isShowTable.value = false; isShowTable.value = false;
if (query.value.paytype == 1) { if (query.value.paytype == 1) {
console.log(data,'data');
const { appid, name} = data; const { appid, name} = data;
const uid: any = getUid(); const uid: any = getUid();
modelRef.privatekey = modelRef.privatekey; modelRef.privatekey ='';
modelRef.alipaypublickey = modelRef.alipaypublickey; modelRef.alipaypublickey = '';
modelRef.appid = appid; modelRef.appid = appid;
modelRef.name = name; modelRef.name = name;
// modelRef.server_url =server_url // modelRef.server_url =server_url
modelRef.uid = uid; modelRef.uid = uid;
} else { } else {
const { alipaypublickey, privatekey, appid, payname } = data;
const { alipaypublickey, privatekey, appid, name } = data;
const uid: any = getUid(); const uid: any = getUid();
modelRef.alipaypublickey = ''; modelRef.alipaypublickey = '';
modelRef.privatekey = privatekey; modelRef.privatekey = '';
modelRef.appid = appid; modelRef.appid = appid;
modelRef.name = name; modelRef.name = name;
// modelRef.server_url =server_url // modelRef.server_url =server_url
......
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
</div> </div>
<div v-else-if="column.key === 'tags'"> <div v-else-if="column.key === 'tags'">
<a-button type="primary" @click="onOpenInfo(record, index, column)">查看</a-button> <a-button type="primary" @click="onOpenInfo(record, index, column)">查看</a-button>
</div> </div>
</template> </template>
</a-table> </a-table>
......
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
<a-radio-group v-model:value="modalvalue"> <a-radio-group v-model:value="modalvalue">
<div v-for="item in list" :itemkey="item.id"> <div v-for="item in list" :itemkey="item.id">
<a-radio v-if="item.paytype == 1" :value="item.id" :lable="item.id" @change="onChangeRadioName(item)">{{item.name}}</a-radio> <a-radio v-if="item.paytype == 1" :value="item.id" :lable="item.id" @change="onChangeRadioName(item)">{{item.name}}</a-radio>
<a-radio v-else-if="item.paytype == 2" :value="item.id" :lable="item.id" @change="onChangeRadioName(item)">{{item.payname}}</a-radio> <a-radio v-else-if="item.paytype == 2" :value="item.id" :lable="item.id" @change="onChangeRadioName(item)">{{item.name}}</a-radio>
</div> </div>
</a-radio-group> </a-radio-group>
</a-modal> </a-modal>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<div style="display: flex;align-items: center;justify-content: space-between;" v-if="isShow"> <div style="display: flex;align-items: center;justify-content: space-between;" v-if="isShow">
<div> <div>
<a-input-search v-model:value="value" placeholder="请输入商品名" style="width: 200px;margin-left: 20px;" <a-input-search v-model:value="value" placeholder="请输入商品名" style="width: 200px;margin-left: 20px;"
@search="onSearch" /> @search="onGetSearch" />
</div> </div>
<div> <div>
<a-button type="primary" block @click="onCreatePay">新建支付项</a-button> <a-button type="primary" block @click="onCreatePay">新建支付项</a-button>
...@@ -118,7 +118,7 @@ import { ref, defineExpose, onMounted,reactive } from 'vue'; ...@@ -118,7 +118,7 @@ import { ref, defineExpose, onMounted,reactive } from 'vue';
import { SelectProps,message } from 'ant-design-vue'; import { SelectProps,message } from 'ant-design-vue';
import { getUid } from '@/utils/userInfo' import { getUid } from '@/utils/userInfo'
import moment from 'moment'; import moment from 'moment';
import { onUpdateGoodsPay, onfindby,onfindWX,onfindAli,onDelectgoodpay,onFindbyLikeName} from '@/api/index' import { onUpdateGoodsPay, onfindby,onfindWX,onfindAli,onDelectgoodpay,onFindbyLikeName,onFindBysub} from '@/api/index'
import CreatePay from './components/createpay/index.vue' import CreatePay from './components/createpay/index.vue'
import dayjs, { Dayjs } from 'dayjs'; import dayjs, { Dayjs } from 'dayjs';
import useClipboard from 'vue-clipboard3' import useClipboard from 'vue-clipboard3'
...@@ -141,6 +141,7 @@ let formState = ref<any>({ ...@@ -141,6 +141,7 @@ let formState = ref<any>({
}) })
const pagination = reactive({ const pagination = reactive({
total:0, total:0,
page:1,
defaultPageSize:10, defaultPageSize:10,
showSizeChanger:true, showSizeChanger:true,
pageSizeOptions: ['5', '10', '15', '20'], pageSizeOptions: ['5', '10', '15', '20'],
...@@ -180,8 +181,8 @@ const columns = [ ...@@ -180,8 +181,8 @@ const columns = [
}, },
{ {
title: '备注', title: '备注',
dataIndex: 'shortname', dataIndex: 'remark',
key: 'shortname', key: 'remark',
}, },
{ {
title: '操作', title: '操作',
...@@ -218,6 +219,17 @@ const handleOk =async(e: MouseEvent) => { ...@@ -218,6 +219,17 @@ const handleOk =async(e: MouseEvent) => {
onSearch() onSearch()
} }
}; };
const onGetSearch= async() => {
const params = {
size:pagination.defaultPageSize,
page:pagination.page ,
uid:getUid(),
subject:value.value
}
const data =await onFindBysub(params)
list.value = data.data.goods
pagination.total = data.data.count
}
const onEdit = (e: any) => { const onEdit = (e: any) => {
formState.value= { formState.value= {
...e ...e
...@@ -232,8 +244,8 @@ const onEdit = (e: any) => { ...@@ -232,8 +244,8 @@ const onEdit = (e: any) => {
} }
const onSearch = async () => { const onSearch = async () => {
const params = { const params = {
page: 1, size:pagination.defaultPageSize,
size:10, page:pagination.page ,
name: value.value, name: value.value,
uid: getUid() uid: getUid()
} }
...@@ -360,6 +372,7 @@ defineExpose({ ...@@ -360,6 +372,7 @@ defineExpose({
popupScroll, popupScroll,
onSet, onSet,
onSearch, onSearch,
onGetSearch,
onEdit, onEdit,
onCreatePay, onCreatePay,
onBack, onBack,
......
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