|
@@ -1,79 +1,78 @@
|
|
|
<template>
|
|
|
<div class="bg-white dark:!bg-[#060818]">
|
|
|
<el-tabs type="border-card" class="bg-gray-100 dark:bg-[#060818]">
|
|
|
- <el-tab-pane label="公司信息" class="custom-tab-pane">
|
|
|
+ <el-tab-pane :label="$t('companyDetails')" class="custom-tab-pane">
|
|
|
<el-form :model="companyForm" :rules="stockRules" ref="companyFormRef" label-width="140px">
|
|
|
<el-row>
|
|
|
- <el-col :span="6">
|
|
|
- <el-form-item label="当前套餐:" prop="company_package_id">
|
|
|
+ <el-col :span="24" :md="6">
|
|
|
+ <el-form-item :label="$t('currentPack')+':'" prop="company_package_id">
|
|
|
<el-select v-model="companyForm.company_package_id" clearable placeholder="请选择套餐">
|
|
|
<el-option v-for="item in packageList" :key="item.id" :label="item.name" :value="item.id" />
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <!-- user_num -->
|
|
|
- <el-col :span="5">
|
|
|
- <el-form-item label="套餐到期时间:" prop="name">
|
|
|
+ <el-col :span="24" :md="5">
|
|
|
+ <el-form-item :label="$t('end_use_time')+':'" prop="name">
|
|
|
{{ companyForm.end_use_time }}
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="5">
|
|
|
- <el-form-item label="可绑定账户数:" prop="name">
|
|
|
+ <el-col :span="24" :md="5">
|
|
|
+ <el-form-item :label="$t('user_num')+':'" prop="name">
|
|
|
{{ companyForm.user_num }}
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="公司名称:" prop="name">
|
|
|
- <el-input v-model="companyForm.name" :minlength="2" :maxlength="20" clearable placeholder="请输入公司名称"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('companyName')+':'" prop="name">
|
|
|
+ <el-input v-model="companyForm.name" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入公司名称"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="统一社会信用代码:" prop="credit_code">
|
|
|
- <el-input v-model="companyForm.credit_code" :minlength="2" :maxlength="20" clearable placeholder="请输入统一社会信用代码"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('credit_code')+':'" prop="credit_code">
|
|
|
+ <el-input v-model="companyForm.credit_code" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入统一社会信用代码"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="行业:" prop="industry">
|
|
|
- <el-input v-model="companyForm.industry" :minlength="2" :maxlength="20" clearable placeholder="请输入行业"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('industry')+':'" prop="industry">
|
|
|
+ <el-input v-model="companyForm.industry" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入行业"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="联系人:" prop="user_name">
|
|
|
- <el-input v-model="companyForm.user_name" :minlength="2" :maxlength="20" clearable placeholder="请输入联系人"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('company_user_name')+':'" prop="user_name">
|
|
|
+ <el-input v-model="companyForm.user_name" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入联系人"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="联系人电话:" prop="phone">
|
|
|
- <el-input v-model="companyForm.phone" :minlength="2" :maxlength="20" clearable placeholder="请输入联系人电话"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('companyPhone')+':'" prop="phone">
|
|
|
+ <el-input v-model="companyForm.phone" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入联系人电话"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="邮箱:" prop="email">
|
|
|
- <el-input v-model="companyForm.email" :minlength="2" :maxlength="20" clearable placeholder="请输入邮箱"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('companyEmail')+':'" prop="email">
|
|
|
+ <el-input v-model="companyForm.email" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入邮箱"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="邮编:" prop="postal_code">
|
|
|
- <el-input v-model="companyForm.postal_code" :minlength="2" :maxlength="20" clearable placeholder="请输入邮箱"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('postalCode')+':'" prop="postal_code">
|
|
|
+ <el-input v-model="companyForm.postal_code" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入邮箱"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
-
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="官网:" prop="website">
|
|
|
- <el-input v-model="companyForm.website" :minlength="2" :maxlength="20" clearable placeholder="请输入官网地址"></el-input>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('website')+':'" prop="website">
|
|
|
+ <el-input v-model="companyForm.website" :minlength="2" :maxlength="20" disabled clearable placeholder="请输入官网地址"></el-input>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="地址:" prop="">
|
|
|
- <el-cascader class="w-full" size="default" :options="options" clearable v-model="selectedOptions"> </el-cascader>
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('companyAddress')+':'" prop="">
|
|
|
+ <el-cascader class="w-full" size="default" :options="options" disabled clearable v-model="selectedOptions"></el-cascader>
|
|
|
<span>
|
|
|
- <el-input class="!w-full mt-3" v-model="companyForm.address" placeholder="请输入"></el-input>
|
|
|
+ <el-input class="!w-full mt-3" v-model="companyForm.address" disabled placeholder="请输入"></el-input>
|
|
|
</span>
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-form-item label="营业执照:" prop="license">
|
|
|
+ <el-col :span="24" :md="10">
|
|
|
+ <el-form-item :label="$t('companyLicense')+':'" prop="license">
|
|
|
<el-upload
|
|
|
+ disabled
|
|
|
class="avatar-uploader"
|
|
|
:action="uploadUrl"
|
|
|
:show-file-list="false"
|
|
@@ -87,42 +86,33 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
- <div class="flex justify-center"><el-button type="primary" @click="submitWarehouseForm">保 存</el-button></div>
|
|
|
+ <div class="flex justify-center"><el-button type="primary" @click="submitWarehouseForm">{{$t('save')}}</el-button></div>
|
|
|
</el-tab-pane>
|
|
|
- <el-tab-pane label="个人信息" class="custom-tab-pane">
|
|
|
- <el-form :model="infoForm" :rules="stockRules" ref="infoFormRef" label-width="140px">
|
|
|
+ <el-tab-pane :label="$t('info')" class="custom-tab-pane">
|
|
|
+ <el-form :model="infoForm" :rules="stockRules" ref="infoFormRef" label-width="100px">
|
|
|
<el-row>
|
|
|
- <el-col :span="16">
|
|
|
- <el-form-item label="名称:" prop="nickname">
|
|
|
+ <el-col :span="24" :md="12" :lg="8">
|
|
|
+ <el-form-item :label="$t('nickname')+':'" prop="nickname">
|
|
|
{{ infoForm.nickname }}
|
|
|
- <!-- <el-input v-model="infoForm.nickname" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入公司名称"></el-input> -->
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="16">
|
|
|
- <el-form-item label="登录昵称:" prop="username">
|
|
|
+ <el-col :span="24" :md="12" :lg="8">
|
|
|
+ <el-form-item :label="$t('loginName')+':'" prop="username">
|
|
|
{{ infoForm.username }}
|
|
|
- <!-- <el-input v-model="infoForm.username" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入统一社会信用代码"></el-input> -->
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="16">
|
|
|
- <el-form-item label="手机号:" prop="phone">
|
|
|
+ <el-col :span="24" :md="12" :lg="8">
|
|
|
+ <el-form-item :label="$t('phone')+':'" prop="phone">
|
|
|
{{ infoForm.phone }}
|
|
|
- <!-- <el-input v-model="infoForm.phone" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入联系人电话"></el-input> -->
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <el-col :span="16">
|
|
|
- <el-form-item label="邮箱:" prop="email">
|
|
|
+ <el-col :span="24" :md="12" :lg="8">
|
|
|
+ <el-form-item :label="$t('companyEmail')+':'" prop="email">
|
|
|
{{ infoForm.email }}
|
|
|
- <!-- <el-input v-model="infoForm.email" :minlength="2" disabled :maxlength="20" clearable placeholder="请输入邮箱"></el-input> -->
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
- <!-- <el-col :span="16">
|
|
|
- <el-form-item label="部门:" prop="dept_id">
|
|
|
- {{ infoForm.dept_id }}
|
|
|
- </el-form-item>
|
|
|
- </el-col> -->
|
|
|
- <el-col :span="16">
|
|
|
- <el-form-item label="头像:" prop="face">
|
|
|
+ <el-col :span="24" :md="12" :lg="8">
|
|
|
+ <el-form-item :label="$t('profile')+':'" prop="face">
|
|
|
<el-upload
|
|
|
class="avatar-uploader"
|
|
|
:action="uploadUrl"
|
|
@@ -137,14 +127,25 @@
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-form>
|
|
|
- <div class="flex justify-center"><el-button type="primary" @click="submitInfo">保 存</el-button></div>
|
|
|
+
|
|
|
+ <div class="flex justify-center">
|
|
|
+ <el-button type="primary" @click="paySubmit">支付测试</el-button>
|
|
|
+ <el-button type="primary" @click="bindWeChat">{{$t('bindWeChat')}}</el-button
|
|
|
+ ><!-- v-if="infoForm.openid && infoForm.openid==''" -->
|
|
|
+ <el-button type="primary" @click="submitInfo">{{$t('save')}}</el-button>
|
|
|
+ </div>
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
+ <el-dialog :title="$t('bindWeChat')" v-model="dialogVisibleWeChat" width="30%" center @close="addHandleCancle">
|
|
|
+ <div class="flex justify-center">
|
|
|
+ <qrcode-vue :value="qrCodeValue" :size="200" level="H"></qrcode-vue>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
-import { ref, onMounted } from 'vue';
|
|
|
+import { ref, onMounted, nextTick } from 'vue';
|
|
|
import * as API_Company from '@/api/company';
|
|
|
import * as API_Package from '@/api/package';
|
|
|
import * as API_Auth from '@/api/auth';
|
|
@@ -153,6 +154,12 @@ import { ElMessageBox, FormInstance, ElMessage } from 'element-plus';
|
|
|
import type { UploadProps } from 'element-plus';
|
|
|
import { useStore } from 'vuex';
|
|
|
import { submit } from '@/api/goodsInventoryLoss';
|
|
|
+import axios from 'axios';
|
|
|
+import QrcodeVue from 'qrcode.vue';
|
|
|
+import { useI18n } from 'vue-i18n';
|
|
|
+
|
|
|
+const { t } = useI18n();
|
|
|
+/* import QRCode from 'qrcodejs2'; */
|
|
|
const store = useStore();
|
|
|
const tableData = ref<any>({});
|
|
|
|
|
@@ -174,7 +181,6 @@ const selectedOptions = ref<any[]>([]);
|
|
|
const loading = ref(false);
|
|
|
|
|
|
const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
|
|
|
- console.log(response, uploadFile);
|
|
|
companyForm.value.license = response.url; //URL.createObjectURL(uploadFile.raw!);
|
|
|
};
|
|
|
|
|
@@ -185,6 +191,98 @@ const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
|
|
|
}
|
|
|
return true;
|
|
|
};
|
|
|
+/* 支付 */
|
|
|
+let ip = ref<any>(''); // 添加 ip 属性
|
|
|
+const payForm = ref<any>({
|
|
|
+ id: store.state.user.user.company_vo.id,
|
|
|
+ pay_type: 'wx',
|
|
|
+ ip: ip.value,
|
|
|
+ user_id: store.state.user.user.uid,
|
|
|
+});
|
|
|
+const paySubmit = () => {
|
|
|
+ API_Auth.getPayUrl(payForm.value).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ callWeChatPay(res);
|
|
|
+ });
|
|
|
+};
|
|
|
+declare const WeixinJSBridge: {
|
|
|
+ invoke(api: string, config: any, callback: (res: any) => void): void;
|
|
|
+};
|
|
|
+// 调用微信支付
|
|
|
+const callWeChatPay = (payParams: any) => {
|
|
|
+ // 确保WeixinJSBridge对象可用
|
|
|
+ if (typeof WeixinJSBridge == 'undefined') {
|
|
|
+ const onBridgeReadyWrapper = () => onBridgeReady(payParams); // 创建一个包装函数
|
|
|
+ if (document.addEventListener) {
|
|
|
+ document.addEventListener('WeixinJSBridgeReady', onBridgeReadyWrapper, false);
|
|
|
+ } else if ((document as any).attachEvent) {
|
|
|
+ (document as any).attachEvent('WeixinJSBridgeReady', onBridgeReadyWrapper);
|
|
|
+ (document as any).attachEvent('onWeixinJSBridgeReady', onBridgeReadyWrapper);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ onBridgeReady(payParams);
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+// 微信支付桥接准备就绪
|
|
|
+const onBridgeReady = (payParams: any) => {
|
|
|
+ WeixinJSBridge.invoke(
|
|
|
+ 'getBrandWCPayRequest',
|
|
|
+ {
|
|
|
+ appId: payParams.appId,
|
|
|
+ timeStamp: payParams.timeStamp,
|
|
|
+ nonceStr: payParams.nonceStr,
|
|
|
+ package: payParams.package,
|
|
|
+ signType: payParams.signType,
|
|
|
+ paySign: payParams.paySign,
|
|
|
+ },
|
|
|
+ (res: any) => {
|
|
|
+ if (res.err_msg == 'get_brand_wcpay_request:ok') {
|
|
|
+ // 支付成功
|
|
|
+ ElMessage.success(t('pay_success'));
|
|
|
+ // 可以在这里添加支付成功后的逻辑,比如刷新订单状态
|
|
|
+ } else if (res.err_msg == 'get_brand_wcpay_request:cancel') {
|
|
|
+ // 支付取消
|
|
|
+ ElMessage.info(t('pay_info'));
|
|
|
+ } else {
|
|
|
+ // 支付失败
|
|
|
+ ElMessage.error(t('pay_error'));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ );
|
|
|
+};
|
|
|
+
|
|
|
+/* 打开绑定微信 */
|
|
|
+const dialogVisibleWeChat = ref(false);
|
|
|
+const qrCodeValue = ref('');
|
|
|
+const addHandleCancle = () => {
|
|
|
+ dialogVisibleWeChat.value = false;
|
|
|
+};
|
|
|
+
|
|
|
+/* 获取当前ip */
|
|
|
+
|
|
|
+const getIPAddress = async () => {
|
|
|
+ try {
|
|
|
+ const response = await axios.get('https://api.ipify.org?format=json');
|
|
|
+ ip.value = response.data.ip;
|
|
|
+ } catch (error) {
|
|
|
+ console.error('Error fetching IP address:', error);
|
|
|
+ ip.value = 'Unable to fetch IP';
|
|
|
+ }
|
|
|
+};
|
|
|
+/* 绑定微信 */
|
|
|
+const bindWeChat = () => {
|
|
|
+ API_Auth.getOpenIdCode(store.state.user.user.uid, { ip: ip.value })
|
|
|
+ .then((res) => {
|
|
|
+ dialogVisibleWeChat.value = true;
|
|
|
+ qrCodeValue.value = res;
|
|
|
+ })
|
|
|
+ .catch((error) => {
|
|
|
+ console.error('Error getting OpenID code:', error);
|
|
|
+ ElMessage.error(t('bindWeChatError'));
|
|
|
+ });
|
|
|
+};
|
|
|
+
|
|
|
/* 个人信息详情 */
|
|
|
const handleInfoSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
|
|
|
infoForm.value.face = response.url; //URL.createObjectURL(uploadFile.raw!);
|
|
@@ -214,11 +312,11 @@ const submitWarehouseForm = () => {
|
|
|
const params = { ...companyForm.value };
|
|
|
params.province = selectedOptions.value.join(',');
|
|
|
API_Company.editCompany(companyForm.value.id, params).then(() => {
|
|
|
- ElMessage.success('修改成功!');
|
|
|
+ ElMessage.success(t('edit_success')+'!');
|
|
|
GET_CompanyList();
|
|
|
});
|
|
|
} else {
|
|
|
- ElMessage.error('表单填写有误,请核对!');
|
|
|
+ ElMessage.error(t('form_erroe')+'!');
|
|
|
/* store.dispatch('showMessage', { message: '表单填写有误,请核对!', type: 'error' }); */
|
|
|
return false;
|
|
|
}
|
|
@@ -227,7 +325,7 @@ const submitWarehouseForm = () => {
|
|
|
|
|
|
const GET_CompanyList = () => {
|
|
|
loading.value = true;
|
|
|
- API_Company.getOne('1811346086001057794')
|
|
|
+ API_Company.getOne(store.state.user.user.company_vo.id)
|
|
|
.then((response) => {
|
|
|
loading.value = false;
|
|
|
selectedOptions.value = response.province.split(',');
|
|
@@ -239,7 +337,6 @@ const GET_CompanyList = () => {
|
|
|
return el;
|
|
|
}); */
|
|
|
companyForm.value = response;
|
|
|
- console.log(companyForm.value);
|
|
|
})
|
|
|
.catch(() => {
|
|
|
loading.value = false;
|
|
@@ -260,19 +357,20 @@ const GET_Info = () => {
|
|
|
API_Auth.getAdministratorDetail(store.state.user.user.uid).then((res) => {
|
|
|
infoForm.value = res;
|
|
|
imgUrl.value = res.face;
|
|
|
+ console.log(res);
|
|
|
});
|
|
|
};
|
|
|
const submitInfo = () => {
|
|
|
if (infoForm.value.face == undefined) {
|
|
|
- return ElMessage.error('请上传头像!');
|
|
|
+ return ElMessage.error(t('uploadPro')+'!');
|
|
|
} else if (infoForm.value.face == imgUrl.value) {
|
|
|
- return ElMessage.error('请上传新的头像!');
|
|
|
+ return ElMessage.error(t('uploadNewPro')+'!');
|
|
|
}
|
|
|
API_Auth.editAdministrator(store.state.user.user.uid, { face: infoForm.value.face }).then((res) => {
|
|
|
- ElMessage.success('修改成功!');
|
|
|
+ ElMessage.success(t('edit_success')+'!');
|
|
|
GET_Info();
|
|
|
- store.dispatch('updateUserAction', res)
|
|
|
-/* location.reload(); */
|
|
|
+ store.dispatch('updateUserAction', res);
|
|
|
+ /* location.reload(); */
|
|
|
});
|
|
|
};
|
|
|
|
|
@@ -280,6 +378,7 @@ onMounted(() => {
|
|
|
GET_CompanyList();
|
|
|
GET_PackageList();
|
|
|
GET_Info();
|
|
|
+ getIPAddress();
|
|
|
});
|
|
|
</script>
|
|
|
|