123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- <template>
- <div class="address-management">
- <div class="header">
- <div class="num">已保存<span>{{addressList.length}}</span>/100条,最多还可以添加<span>{{100-addressList.length}}</span>条</div>
- <el-button class="btn" @click="showAddress(false)" size="small" type="primary" plain>添加</el-button>
- </div>
- <el-table :data="addressList" stripe style="width: 100%">
- <el-table-column prop="contact" label="姓名">
- </el-table-column>
- <el-table-column prop="phone" label="电话">
- </el-table-column>
- <el-table-column prop="address" label="地址">
- </el-table-column>
- <el-table-column label="操作" width="100">
- <template slot-scope="scope">
- <el-button type="text" size="small" @click="showAddress(true,scope.row)">编辑</el-button>
- <el-button @click="deleteAddress(scope.row)" type="text" size="small">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <!-- //新增编辑地址 -->
- <el-dialog :title="isEdit ? '编辑地址': '新增地址'" :visible.sync="centerDialogVisible" width="600px" center append-to-body>
- <el-form ref="form" :model="form" label-width="100px" label-position="left" size="small">
- <el-form-item label="位置" required>
- <el-input v-model="form.address" placeholder="请选择位置!" disabled>
- <img @click="showMap" slot="append" class="map" src="../../static/image/icon_map.png" />
- </el-input>
- </el-form-item>
- <el-form-item label="门牌号">
- <el-input v-model="form.street" placeholder="请填写楼层、单元、门牌号!"></el-input>
- </el-form-item>
- <el-form-item label="联系人姓名" required>
- <el-input v-model="form.contact" placeholder="请填写联系人姓名!"></el-input>
- </el-form-item>
- <el-form-item label="联系人电话" required>
- <el-input v-model="form.phone" placeholder="请填写联系人电话!"></el-input>
- </el-form-item>
- <el-form-item label="设为默认地址">
- <el-switch v-model="form.isDefault" :active-value="1" :inactive-value="0" active-color="#FC7200" inactive-color="#999"></el-switch>
- </el-form-item>
- </el-form>
- <span slot="footer" class="dialog-footer">
- <el-button size="small" @click="cancel">取 消</el-button>
- <el-button size="small" type="primary" @click="addAddress">确 定</el-button>
- </span>
- </el-dialog>
- <!-- 通过地图选择地理位置 -->
- <order-map @getAddressDetail="getAddressDetail" ref="orderMap"></order-map>
- </div>
- </template>
- <script>
- import orderMap from "./orderComponents/orderAMap.vue";
- import {
- getAddressList,
- deleteAddress,
- addAddress,
- updateAddress,
- getAddressDetail,
- defaultAddress,
- } from "../api/setting.js";
- export default {
- name: "addressManagement",
- data() {
- return {
- addressList: [],
- centerDialogVisible: false,
- isEdit: false,
- form: {
- id: "",
- address: "",
- cityCode: "",
- cityName: "",
- contact: "",
- districtName: "",
- isDefault: 0,
- lat: "",
- lng: "",
- phone: "",
- provinceName: "",
- street: "",
- },
- };
- },
- components: {
- orderMap,
- },
- // 监听属性 类似于data概念
- computed: {},
- // 监控data中的数据变化
- watch: {},
- // 生命周期 - 创建完成(可以访问当前this实例)
- created() {
- this.getAddressList();
- },
- mounted() {},
- // 方法集合
- methods: {
- cancel() {
- this.centerDialogVisible = false;
- this.getAddressList();
- },
- changeDefault() {
- defaultAddress({ addressId: this.form.id }).then((res) => {
- if (res.code === 200) {
- this.getAddressList();
- } else {
- this.$message({
- type: "error",
- message: res.msg,
- });
- }
- });
- },
- addAddress() {
- if (!this.form.address) {
- return this.$message({
- type: "error",
- message: "请选择地址的位置!",
- });
- }
- if (!this.form.contact.trim()) {
- return this.$message({
- type: "error",
- message: "请输入联系人姓名!",
- });
- }
- this.form.phone = this.form.phone.replace(/\s/g, "");
- if (!this.form.phone.trim()) {
- return this.$message({
- type: "error",
- message: "请输入联系人电话!",
- });
- }
- let reg2 = new RegExp(/^1[3456789]\d{9}$/);
- if (!reg2.test(this.form.phone)) {
- return this.$message({
- type: "error",
- message: "联系人电话格式不正确!",
- });
- }
- if (this.isEdit) {
- updateAddress(this.form).then((res) => {
- if (res.code === 200) {
- this.response();
- } else {
- this.$message({
- type: "success",
- message: res.msg,
- });
- }
- });
- } else {
- addAddress(this.form).then((res) => {
- if (res.code === 200) {
- this.response();
- } else {
- this.$message({
- type: "success",
- message: res.msg,
- });
- }
- });
- }
- },
- response() {
- this.$message({
- type: "success",
- message: `${this.isEdit ? "编辑" : "新增"}地址成功!`,
- });
- this.centerDialogVisible = false;
- this.getAddressList();
- },
- deleteAddress(row) {
- this.$confirm("此操作将删除该地址, 是否继续?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- center: true,
- type: "warning",
- }).then(() => {
- deleteAddress({ addressId: row.id }).then((res) => {
- if (res.code === 200) {
- this.$message({
- type: "success",
- message: "删除成功!",
- });
- this.getAddressList();
- } else {
- this.$message({
- type: "error",
- message: res.msg,
- });
- }
- });
- });
- },
- showMap() {
- this.$refs.orderMap.chooseLocation();
- },
- getAddressDetail(v, lng, lat) {
- this.form.address = v.address;
- this.form.provinceName = v.province;
- this.form.cityName = v.city;
- this.form.cityCode = v.citycode;
- this.form.districtName = v.district;
- this.form.lng = lng;
- this.form.lat = lat;
- },
- showAddress(flag, row) {
- this.isEdit = flag;
- if (flag) {
- this.form = row;
- } else {
- this.form = {
- id: "",
- address: "",
- cityCode: "",
- cityName: "",
- contact: "",
- districtName: "",
- isDefault: 0,
- lat: "",
- lng: "",
- phone: "",
- provinceName: "",
- street: "",
- };
- }
- this.centerDialogVisible = true;
- },
- getAddressList() {
- getAddressList().then((res) => {
- if (res.code === 200) {
- this.addressList = res.data.personal;
- } else {
- this.$message({
- type: "error",
- message: res.msg,
- });
- }
- });
- },
- },
- };
- </script>
- <style lang="scss" scoped type="text/css">
- .btn {
- background: #fc7200;
- color: #fff;
- border: #fc7200;
- }
- /deep/ .el-button--text {
- color: #fc7200;
- }
- .map {
- width: 20px;
- height: 20px;
- cursor: pointer;
- }
- .address-management {
- .header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 10px;
- .num {
- font-size: 14px;
- span {
- color: #fc7200;
- }
- }
- }
- }
- </style>
|