檢查fb yt連結格式

main
Wayne Hsu 3 years ago
parent dbd372816a
commit 8a7fac2d0f

11676
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -28,7 +28,7 @@
"register-service-worker": "^1.7.1", "register-service-worker": "^1.7.1",
"secure-ls": "^1.2.6", "secure-ls": "^1.2.6",
"vant": "^3.4.5", "vant": "^3.4.5",
"vue": "^3.0.0", "vue": "3.2.41",
"vue-advanced-cropper": "^2.8.1", "vue-advanced-cropper": "^2.8.1",
"vue-cropper": "^1.0.3", "vue-cropper": "^1.0.3",
"vue-router": "^4.0.0-0", "vue-router": "^4.0.0-0",
@ -41,7 +41,7 @@
"@vue/cli-plugin-router": "~4.5.15", "@vue/cli-plugin-router": "~4.5.15",
"@vue/cli-plugin-vuex": "~4.5.15", "@vue/cli-plugin-vuex": "~4.5.15",
"@vue/cli-service": "~4.5.15", "@vue/cli-service": "~4.5.15",
"@vue/compiler-sfc": "^3.0.0", "@vue/compiler-sfc": "3.2.41",
"babel-plugin-import": "^1.13.3", "babel-plugin-import": "^1.13.3",
"less": "^3.0.4", "less": "^3.0.4",
"less-loader": "^5.0.0" "less-loader": "^5.0.0"

@ -1,84 +1,205 @@
<template> <template>
<div class="member-container"> <div class="member-container">
<van-nav-bar title="個人資料修改" right-text="" @click-right="$router.push('/')" /> <van-nav-bar
title="個人資料修改"
right-text="關閉"
@click-right="$router.push('/')"
/>
<van-tabs :lazy-render="true" v-model:active="active"> <van-tabs :lazy-render="true" v-model:active="active">
<van-tab title="基本資料"> <van-tab title="基本資料"> </van-tab>
</van-tab> <van-tab title="公司資料"> </van-tab>
<van-tab title="公司資料"> <van-tab title="更多連結"> </van-tab>
</van-tab>
<van-tab title="更多連結">
</van-tab>
</van-tabs> </van-tabs>
<van-form @submit="onSubmit"> <van-form @submit="onSubmit">
<van-cell-group inset v-show="active === 0"> <van-cell-group inset v-show="active === 0">
<van-field v-model="form.real_name" label="姓名" name="pattern" placeholder="請輸入您的姓名" <van-field
:rules="[{ required: true, message: '姓名為必填' }]" /> v-model="form.real_name"
<van-field v-model="form.phone" label="手機" name="" type="tel" placeholder="Ex. 0900000001 不要有空格" label="姓名"
:rules="[{ required: true, message: '手機號必填' }, { pattern: /\d{10}/, message: '手機號格式錯誤' }]" /> name="pattern"
<van-field v-model="form.email" label="Email" name="" placeholder="請輸入您的Email" placeholder="請輸入您的姓名"
:rules="[{ required: true, message: 'Email必填' }, { pattern: /^([\w\.\-]){1,64}\@([\w\.\-]){1,64}/, message: 'Email格式錯誤' }]" /> :rules="[{ required: true, message: '姓名為必填' }]"
/>
<van-field
v-model="form.phone"
label="手機"
name=""
type="tel"
placeholder="Ex. 0900000001 不要有空格"
:rules="[
{ required: true, message: '手機號必填' },
{ pattern: /\d{10}/, message: '手機號格式錯誤' },
]"
/>
<van-field
v-model="form.email"
label="Email"
name=""
placeholder="請輸入您的Email"
:rules="[
{ required: true, message: 'Email必填' },
{
pattern: /^([\w\.\-]){1,64}\@([\w\.\-]){1,64}/,
message: 'Email格式錯誤',
},
]"
/>
<!-- <van-field v-model="form.url" label="網址" name="" placeholder="請輸入您的網址" <!-- <van-field v-model="form.url" label="網址" name="" placeholder="請輸入您的網址"
:rules="[{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' }]" /> --> :rules="[{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' }]" /> -->
<van-field v-model="form.line" label="Line" name="" placeholder="請輸入您的Line ID" /> <van-field
<van-field v-model="form.facebook" label="Facebook" name="" placeholder="請輸入您的臉書連結" /> v-model="form.line"
<van-field v-model="form.ig" label="IG" name="" placeholder="請輸入您的IG ID" /> label="Line"
<van-field v-model="form.youtube" label="YouTube" name="" placeholder="請輸入您的Youtube連結" /> name=""
<van-field v-model="form.mark" rows="3" autosize label="簡介" type="textarea" maxlength="100" placeholder="請輸入簡介" placeholder="請輸入您的Line ID"
show-word-limit /> />
<van-field
v-model="form.facebook"
label="Facebook"
name=""
placeholder="請輸入您的臉書連結"
:rules="[
{
validator: validatorUrl,
message: '臉書連結格式不正確,https://...',
},
]"
/>
<van-field
v-model="form.ig"
label="IG"
name=""
placeholder="請輸入您的IG ID"
/>
<van-field
v-model="form.youtube"
label="YouTube"
name=""
placeholder="請輸入您的Youtube連結"
:rules="[
{
validator: validatorUrl,
message: '連結格式不正確,https://...',
},
]"
/>
<van-field
v-model="form.mark"
rows="3"
autosize
label="簡介"
type="textarea"
maxlength="100"
placeholder="請輸入簡介"
show-word-limit
/>
<van-uploader :after-read="afterRead" :max-count="1" name="aveter"> <van-uploader :after-read="afterRead" :max-count="1" name="aveter">
<div class="upload-main"> <div class="upload-main">
<img class="upload-img" :src="form.avatar" alt=""> <img class="upload-img" :src="form.avatar" alt="" />
<p>上傳圖片</p> <p>上傳圖片</p>
</div> </div>
</van-uploader> </van-uploader>
</van-cell-group> </van-cell-group>
<main class="main-wrap address2-page mb-xxl" v-show="active === 1"> <main class="main-wrap address2-page mb-xxl" v-show="active === 1">
<div class="add-btn"> <div class="add-btn">
<van-button type="success" plain hairline block @click="handleAddUserCompany">+</van-button> <van-button
type="success"
plain
hairline
block
@click="handleAddUserCompany"
>+新增公司資料</van-button
>
</div> </div>
<div class="address-wrap"> <div class="address-wrap">
<div class="address-box" <div
:class="{active: uc.is_default}" class="address-box"
v-for="(uc,index) in userCompany" :class="{ active: uc.is_default }"
:key="uc.id" v-for="(uc, index) in userCompany"
@click="handleSetDefault(uc.id)"> :key="uc.id"
<div class="conten-box"> @click="handleSetDefault(uc.id)"
<div class="heading"> >
<div class="heading-left"> <div class="conten-box">
<span class="title title-color font-md">{{ uc.uc_name }}</span> <div class="heading">
<span class="badges-round font-white bg-theme-theme font-xs" v-if="uc.is_default"></span> <div class="heading-left">
</div> <span class="title title-color font-md">{{
<div class="heading-right"> uc.uc_name
<i class="icon-pencil" @click.stop="handleEdit(uc.id)"></i> }}</span>
<i class="icon-trash" style="color: red;" @click.stop="handleDelete(uc.id)"></i> <span
class="badges-round font-white bg-theme-theme font-xs"
v-if="uc.is_default"
>預設</span
>
</div>
<div class="heading-right">
<i class="icon-pencil" @click.stop="handleEdit(uc.id)"></i>
<i
class="icon-trash"
style="color: red"
@click.stop="handleDelete(uc.id)"
></i>
</div>
</div> </div>
<h3 class="title-color font-sm">{{ uc.uc_title }}</h3>
<h3 class="title-color font-sm">{{ uc.uc_tel }}</h3>
<p class="content-color font-sm">{{ uc.uc_address }}</p>
</div> </div>
<h3 class="title-color font-sm">{{ uc.uc_title }}</h3> <!-- <img src="/src/assets/images/map/map.jpg" alt="map" /> -->
<h3 class="title-color font-sm">{{ uc.uc_tel }}</h3>
<p class="content-color font-sm">{{ uc.uc_address }}</p>
</div> </div>
<!-- <img src="/src/assets/images/map/map.jpg" alt="map" /> -->
</div>
</div> </div>
</main> </main>
<van-cell-group inset v-show="active === 2" v-for="(v, idx) in form.addon" :key="idx"> <van-cell-group
inset
v-show="active === 2"
v-for="(v, idx) in form.addon"
:key="idx"
>
<div class="act-btn"> <div class="act-btn">
<van-button type="primary" icon="arrow-up" plain hairline @click="onMoveBtn(0, idx)">上移</van-button> <van-button
<van-button type="primary" icon="arrow-down" plain hairline @click="onMoveBtn(1, idx)">下移</van-button> type="primary"
<van-button type="danger" icon="delete-o" plain hairline @click="onDelBtn(idx)"></van-button> icon="arrow-up"
plain
hairline
@click="onMoveBtn(0, idx)"
>上移</van-button
>
<van-button
type="primary"
icon="arrow-down"
plain
hairline
@click="onMoveBtn(1, idx)"
>下移</van-button
>
<van-button
type="danger"
icon="delete-o"
plain
hairline
@click="onDelBtn(idx)"
>刪除</van-button
>
</div> </div>
<!-- <div class="field"> <!-- <div class="field">
<div class="label">圖示</div> <div class="label">圖示</div>
<div class="content"><i class="iconfont icon-home"></i><span style="padding: 0 10px" @click="showChangeIcon=true"></span></div> <div class="content"><i class="iconfont icon-home"></i><span style="padding: 0 10px" @click="showChangeIcon=true"></span></div>
</div> --> </div> -->
<van-field label="名稱" name="" v-model="form.addon[idx].name" placeholder="按鈕名稱" /> <van-field
<van-field label="連結" name="" v-model="form.addon[idx].link" placeholder="按鈕連結" /> label="名稱"
name=""
v-model="form.addon[idx].name"
placeholder="按鈕名稱"
/>
<van-field
label="連結"
name=""
v-model="form.addon[idx].link"
placeholder="按鈕連結"
/>
</van-cell-group> </van-cell-group>
<div class="add-btn" v-show="active === 2" @click="onAddBtn"> <div class="add-btn" v-show="active === 2" @click="onAddBtn">
<van-button type="success" plain hairline block>+新增按鈕</van-button> <van-button type="success" plain hairline block>+新增按鈕</van-button>
</div> </div>
<div style="margin: 16px;"> <div style="margin: 16px">
<van-button round block type="primary" native-type="submit"> <van-button round block type="primary" native-type="submit">
送出 送出
</van-button> </van-button>
@ -107,21 +228,30 @@
<div class="icon-item"> <div class="icon-item">
<i class="iconfont icon-home" style="font-size: 40px"></i> <i class="iconfont icon-home" style="font-size: 40px"></i>
</div> </div>
<div class="icon-item"> <div class="icon-item"></div>
</div>
</div> </div>
</van-popup> </van-popup>
<Footer /> <Footer />
<van-overlay :show="crop.show" @click="crop.show = false" /> <van-overlay :show="crop.show" @click="crop.show = false" />
<div class="cropper-section" v-if="crop.show"> <div class="cropper-section" v-if="crop.show">
<div class="crop-area"> <div class="crop-area">
<cropper class="cropper" ref="myCrop" :src="crop.img" :stencil-props="{ <cropper
aspectRatio: 1 / 1 class="cropper"
}" :auto-zoom="true" /> ref="myCrop"
:src="crop.img"
:stencil-props="{
aspectRatio: 1 / 1,
}"
:auto-zoom="true"
/>
</div> </div>
<div class="crop-btn"> <div class="crop-btn">
<van-button type="primary" size="small" plain @click="onClose"></van-button> <van-button type="primary" size="small" plain @click="onClose"
<van-button type="success" size="small" plain @click="onCrop"></van-button> >取消</van-button
>
<van-button type="success" size="small" plain @click="onCrop"
>剪裁</van-button
>
</div> </div>
</div> </div>
</div> </div>
@ -133,14 +263,45 @@
<van-form @submit="onUCSumbit" ref="addrForm"> <van-form @submit="onUCSumbit" ref="addrForm">
<div class="offcanvas-body small"> <div class="offcanvas-body small">
<van-cell-group inset> <van-cell-group inset>
<van-field v-model="ucForm.uc_name" label="公司名稱" placeholder="請輸入您的公司名稱" <van-field
:rules="[{ required: true, message: '公司名稱必填' }]" /> v-model="ucForm.uc_name"
<van-field v-model="ucForm.uc_title" label="職稱" placeholder="請輸入您的職稱" /> label="公司名稱"
<van-field v-model="ucForm.uc_tel" label="公司電話" type="tel" placeholder="請輸入您的市話" placeholder="請輸入您的公司名稱"
:rules="[{ validator: validatorTel, message: '市話格式不正確,Ex. 02xxxx or 02-xxxx' }]" /> :rules="[{ required: true, message: '公司名稱必填' }]"
<van-field v-model="ucForm.uc_address" label="公司住址" placeholder="請輸入您的地址" /> />
<van-field v-model="ucForm.uc_url" label="公司網址" placeholder="請輸入您的網址" <van-field
:rules="[{ validator: validatorUrl, message: '網址格式不正確,Ex. http://' }]" /> v-model="ucForm.uc_title"
label="職稱"
placeholder="請輸入您的職稱"
/>
<van-field
v-model="ucForm.uc_tel"
label="公司電話"
type="tel"
placeholder="請輸入您的市話"
:rules="[
{
validator: validatorTel,
message: '市話格式不正確,Ex. 02xxxx or 02-xxxx',
},
]"
/>
<van-field
v-model="ucForm.uc_address"
label="公司住址"
placeholder="請輸入您的地址"
/>
<van-field
v-model="ucForm.uc_url"
label="公司網址"
placeholder="請輸入您的網址"
:rules="[
{
validator: validatorUrl,
message: '網址格式不正確,Ex. http://',
},
]"
/>
<van-field name="is_default" label="是否為預設"> <van-field name="is_default" label="是否為預設">
<template #input> <template #input>
<van-switch v-model="ucForm.is_default" /> <van-switch v-model="ucForm.is_default" />
@ -148,7 +309,7 @@
</van-field> </van-field>
</van-cell-group> </van-cell-group>
</div> </div>
<div style="margin: 16px;"> <div style="margin: 16px">
<van-button round block type="primary" native-type="submit"> <van-button round block type="primary" native-type="submit">
新增 新增
</van-button> </van-button>
@ -156,312 +317,278 @@
</van-form> </van-form>
</van-popup> </van-popup>
<!-- Add New Address Off Canvas End --> <!-- Add New Address Off Canvas End -->
</template> </template>
<script> <script setup>
import _ from 'lodash' import _ from "lodash";
import axios from 'axios' import axios from "axios";
import Cookies from 'js-cookie' import Cookies from "js-cookie";
import { ref, nextTick } from 'vue' import { ref, nextTick } from "vue";
import { Cropper } from 'vue-advanced-cropper'; import { Cropper } from "vue-advanced-cropper";
import 'vue-advanced-cropper/dist/style.css'; import "vue-advanced-cropper/dist/style.css";
import Footer from '@/components/Footer' import Footer from "@/components/Footer";
import { useStore } from 'vuex' import { useStore } from "vuex";
import { useRouter } from 'vue-router' import { useRouter } from "vue-router";
import { Toast } from 'vant' import { Toast } from "vant";
import { import {
getUserInfo, getUserInfo,
updateCard, updateCard,
getUserCompany, getUserCompany,
addUserCompany, addUserCompany,
updateUserCompany, updateUserCompany,
deleteUserCompany, deleteUserCompany,
setUCDefault setUCDefault,
} from '@/api/user' } from "@/api/user";
import { is } from '@babel/types'; import { is } from "@babel/types";
const URL = window.URL || window.webkitURL; const URL = window.URL || window.webkitURL;
export default { const store = useStore();
name: 'EditForm', const router = useRouter();
components: {
Footer,
Cropper
},
async setup() {
const store = useStore()
const router = useRouter()
const form = ref({ addon: [] })
const userCompany = ref([]) const form = ref({ addon: [] });
const ucForm = ref({ const userCompany = ref([]);
action: 'insert',
uc_name: '',
uc_title: '',
uc_tel: '',
uc_address: '',
uc_url: '',
})
const fileList = ref([]); const ucForm = ref({
action: "insert",
uc_name: "",
uc_title: "",
uc_tel: "",
uc_address: "",
uc_url: "",
});
const myCrop = ref(null) const fileList = ref([]);
const active = ref(0) const myCrop = ref(null);
const showChangeIcon = ref(false) const active = ref(0);
const showOffcanvas = ref(false) const showChangeIcon = ref(false);
const crop = ref({ const showOffcanvas = ref(false);
show: false,
img: null,
})
const validatorUrl = (val) => { const crop = ref({
if (val.length > 0) { show: false,
return /(https?:\/\/|line:\/\/|tel:|mailto:)\S+/.test(val) img: null,
} else { });
return true
}
};
const validatorTel = (val) => {
if (val.length > 0) {
return /(\d{2,3}-?|\(\d{2,3}\))\d{3,4}-?\d{4}/.test(val)
} else {
return true
}
};
const validatorUrl = (val) => {
if (val.length > 0) {
return /(https?:\/\/|line:\/\/|tel:|mailto:)\S+/.test(val);
} else {
return true;
}
};
// onMounted(async ()=>{ const validatorTel = (val) => {
let userRes = await getUserInfo() if (val.length > 0) {
if (userRes.code === 200) { return /(\d{2,3}-?|\(\d{2,3}\))\d{3,4}-?\d{4}/.test(val);
form.value = userRes.data } else {
} else { return true;
}
} };
// })
if (userRes.data.nfc_addon && (userRes.data.nfc_addon.length > 0)) {
form.value.addon = JSON.parse(userRes.data.nfc_addon)
}
const onCrop = () => {
const { canvas } = myCrop.value.getResult();
if (canvas) {
const imgFile = new FormData();
canvas.toBlob(async (blob) => {
let ufile = new File([blob], "image.jpg");
imgFile.append("user_id", form.value.user_id)
imgFile.append("fileType", "IMAGE")
imgFile.append('file', ufile)
crop.value.show = false
Toast.loading({
duration: 0,
message: '圖片上傳中...',
forbidClick: true,
});
let res = await axios.post(
`${process.env.VUE_APP_API_URL}/user/uploadAvatar`,
imgFile,
{
}
)
if (res.data.code == 200) {
form.value.avatar = res.data.data
Toast.success('上傳成功');
} else {
Toast.fail('上傳失敗');
}
}, 'image/jpeg');
}
return // onMounted(async ()=>{
} let userRes = await getUserInfo();
if (userRes.code === 200) {
form.value = userRes.data;
} else {
}
// })
if (userRes.data.nfc_addon && userRes.data.nfc_addon.length > 0) {
form.value.addon = JSON.parse(userRes.data.nfc_addon);
}
const onClose = () => { const onCrop = () => {
crop.value.show = false const { canvas } = myCrop.value.getResult();
} if (canvas) {
const imgFile = new FormData();
canvas.toBlob(async (blob) => {
let ufile = new File([blob], "image.jpg");
imgFile.append("user_id", form.value.user_id);
imgFile.append("fileType", "IMAGE");
imgFile.append("file", ufile);
const afterRead = async (file, name) => { crop.value.show = false;
crop.value.show = true
const ofile = file.file Toast.loading({
crop.value.img = URL.createObjectURL(ofile); duration: 0,
// crop.value.img = ofile message: "圖片上傳中...",
return forbidClick: true,
}; });
// let res = await axios.post(
let userCompRes = await getUserCompany() `${process.env.VUE_APP_API_URL}/user/uploadAvatar`,
if (userCompRes.code === 200) { imgFile,
userCompany.value = userCompRes.data {}
} );
console.log(userCompany.value)
// if (res.data.code == 200) {
const onAddBtn = () => { form.value.avatar = res.data.data;
if (form.value.addon) { Toast.success("上傳成功");
form.value.addon.push({ icon: '', name: '', link: '' })
} else { } else {
form.value.addon = [{ icon: '', name: '', link: '' }] Toast.fail("上傳失敗");
} }
} }, "image/jpeg");
}
const onDelBtn = (index) => { return;
form.value.addon.splice(index, 1) };
}
const onMoveBtn = (type, index) => { const onClose = () => {
if (type === 0) { crop.value.show = false;
if (index !== 0) { };
[form.value.addon[index], form.value.addon[index - 1]] = [form.value.addon[index - 1], form.value.addon[index]]
}
} else {
if (index + 1 !== form.value.addon.length) {
[form.value.addon[index + 1], form.value.addon[index]] = [form.value.addon[index], form.value.addon[index + 1]]
}
}
} const afterRead = async (file, name) => {
crop.value.show = true;
const handleAddUserCompany = () => { const ofile = file.file;
ucForm.value = {action: 'insert'} crop.value.img = URL.createObjectURL(ofile);
console.log(userCompany.value.length,userCompany.value) // crop.value.img = ofile
if(userCompany.value.length ==0){ return;
ucForm.value.is_default = true };
}
showOffcanvas.value = true
}
const handleSetDefault = async (id) => { //
let res = await setUCDefault(id) let userCompRes = await getUserCompany();
if(res.code === 200){ if (userCompRes.code === 200) {
userCompany.value = res.data userCompany.value = userCompRes.data;
}else{ }
Toast('操作失敗') console.log(userCompany.value);
}
//
const onAddBtn = () => {
if (form.value.addon) {
form.value.addon.push({ icon: "", name: "", link: "" });
} else {
form.value.addon = [{ icon: "", name: "", link: "" }];
}
};
const onDelBtn = (index) => {
form.value.addon.splice(index, 1);
};
const onMoveBtn = (type, index) => {
if (type === 0) {
if (index !== 0) {
[form.value.addon[index], form.value.addon[index - 1]] = [
form.value.addon[index - 1],
form.value.addon[index],
];
} }
} else {
const onUCSumbit = async () => { if (index + 1 !== form.value.addon.length) {
if(ucForm.value.action ==='insert'){ [form.value.addon[index + 1], form.value.addon[index]] = [
if(userCompany.length === 0){ form.value.addon[index],
ucForm.value.is_default = true form.value.addon[index + 1],
} ];
let res = await addUserCompany(ucForm.value)
if(res.code === 200){
ucForm.value={
uc_name: '',
uc_title: '',
uc_tel: '',
uc_address: '',
uc_url: ''
}
showOffcanvas.value = false
userCompany.value = res.data
}else{
Toast('操作失敗')
}
}else{
let res = await updateUserCompany(ucForm.value)
if(res.code === 200){
ucForm.value={
uc_name: '',
uc_title: '',
uc_tel: '',
uc_address: '',
uc_url: ''
}
showOffcanvas.value = false
userCompany.value = res.data
}else{
Toast('操作失敗')
}
}
} }
}
};
const handleDelete = async (id)=>{ const handleAddUserCompany = () => {
let res = await deleteUserCompany(id) ucForm.value = { action: "insert" };
if(res.code === 200){ console.log(userCompany.value.length, userCompany.value);
userCompany.value = res.data if (userCompany.value.length == 0) {
}else{ ucForm.value.is_default = true;
Toast('操作失敗') }
} showOffcanvas.value = true;
} };
const handleSetDefault = async (id) => {
let res = await setUCDefault(id);
if (res.code === 200) {
userCompany.value = res.data;
} else {
Toast("操作失敗");
}
};
const handleEdit = async (id)=>{ const onUCSumbit = async () => {
showOffcanvas.value = true if (ucForm.value.action === "insert") {
let t_data = {action:'update',...userCompany.value.find(item => item.id == id)} if (userCompany.length === 0) {
if(t_data.is_default==1){ ucForm.value.is_default = true;
t_data.is_default=true
}else{
t_data.is_default=false
}
ucForm.value = t_data
} }
let res = await addUserCompany(ucForm.value);
const onSubmit = async () => {
Toast.loading({ if (res.code === 200) {
duration: 0, ucForm.value = {
message: '資料更新中...', uc_name: "",
forbidClick: true, uc_title: "",
}); uc_tel: "",
uc_address: "",
let res = await updateCard(form.value) uc_url: "",
if (res.code === 200) { };
Toast.success('更新成功') showOffcanvas.value = false;
store.commit('user/setUserInfo', form.value) userCompany.value = res.data;
router.push('/') } else {
} else { Toast("操作失敗");
Toast.fail('更新失敗') }
} } else {
}; let res = await updateUserCompany(ucForm.value);
return { if (res.code === 200) {
form, ucForm.value = {
fileList, uc_name: "",
crop, uc_title: "",
myCrop, uc_tel: "",
active, uc_address: "",
userCompany, uc_url: "",
ucForm, };
showChangeIcon, showOffcanvas.value = false;
showOffcanvas, userCompany.value = res.data;
onAddBtn, } else {
onDelBtn, Toast("操作失敗");
onMoveBtn,
validatorUrl,
validatorTel,
onCrop,
onClose,
afterRead,
onSubmit,
onUCSumbit,
handleEdit,
handleDelete,
handleSetDefault,
handleAddUserCompany
} }
} }
} };
const handleDelete = async (id) => {
let res = await deleteUserCompany(id);
if (res.code === 200) {
userCompany.value = res.data;
} else {
Toast("操作失敗");
}
};
const handleEdit = async (id) => {
showOffcanvas.value = true;
let t_data = {
action: "update",
...userCompany.value.find((item) => item.id == id),
};
if (t_data.is_default == 1) {
t_data.is_default = true;
} else {
t_data.is_default = false;
}
ucForm.value = t_data;
};
const onSubmit = async () => {
Toast.loading({
duration: 0,
message: "資料更新中...",
forbidClick: true,
});
let res = await updateCard(form.value);
if (res.code === 200) {
Toast.success("更新成功");
store.commit("user/setUserInfo", form.value);
router.push("/");
} else {
Toast.fail("更新失敗");
}
};
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
@ -481,7 +608,7 @@ export default {
.cropper { .cropper {
height: 300px; height: 300px;
// width: 300px; // width: 300px;
background: #DDD; background: #ddd;
} }
.cropper-section { .cropper-section {
@ -493,7 +620,7 @@ export default {
height: 350px; height: 350px;
width: 100%; width: 100%;
max-width: 500px; max-width: 500px;
background: #DDD; background: #ddd;
z-index: 8888; z-index: 8888;
.crop-area { .crop-area {
@ -506,7 +633,6 @@ export default {
background-color: #666; background-color: #666;
text-align: center; text-align: center;
} }
} }
.act-btn { .act-btn {
@ -544,17 +670,17 @@ export default {
} }
} }
.conten-box{ .conten-box {
width: 100%; width: 100%;
.heading{ .heading {
.heading-left{ .heading-left {
width: 100%; width: 100%;
.title{ .title {
font-weight: 700; font-weight: 700;
margin-right: 10px; margin-right: 10px;
} }
} }
.heading-right{ .heading-right {
width: 70px; width: 70px;
} }
} }

15948
yarn.lock

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save