精华内容
下载资源
问答
  • 家装流程

    2021-04-27 11:05:03
    以此文记录第一套房的装修流程。 1、买房注意事项 2、毛坯新房验收注意事项 3、装修公司选择Tip 4、

    前言

    以此文记录自己第一套房从购买到装修流程。所有流程都是未知,从零开始。过程很繁琐,但每个选择都得自己决定。

    繁琐,也必须认真面对,或许从开始、到经理过种种,这就是人生、就是平凡的活法吧。

    目录链接如下:

    1. 买房注意事项.
    2. 毛坯新房验收注意事项
    3. 半包装修流程
    4. 装修公司选择Tip
    5. 主材品牌选择(地砖美缝)
    6. 水电改造
    7. 家装电路回路设计

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 流程 录音—>上传录音文件 —>保存消息到本地数据库—> 发送消息—>发送完毕后修改消息发送状态 /** * 按住按钮说话逻辑处理 * @param event * @return */ @OnTouch (R.id.btn_voice) boolean ...

    这里写图片描述

    发送文本消息

    点击按钮 —> 构造文本消息对象—> 设置@的人员 —> base64编码—> 保存消息到本地数据库—> 发送消息—>发送完毕后修改消息发送状态
    点击发送按钮后,页面(ChatFragment.java)响应发送事件

    // 发送按钮点击事件
    ekBar.getBtnSend().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String text = ekBar.getEtChat().getText().toString();
            if (!TextUtils.isEmpty(text)) {
                onSendBtnClick(text);   //发送
                ekBar.getEtChat().setText("");
            }
        }
    });
    
    /**
     * 当点击了发送按钮,发送文本消息
     * @param sendText
     */
    private void onSendBtnClick(String sendText) {
        if (TextUtils.isEmpty(sendText) || TextUtils.isEmpty(sendText.trim())) {
            return;
        }
        long groupId = mGroupBean.getGroupId();
        long userId = AuthManager.getUid(getContext());
        String nickname = AuthManager.getName(getContext());
        String avatar = AuthManager.getAvatar(getContext());
        QXGroupTextMessage qxMessage = QXMessageCreator.createQXGroupTextMessage(groupId, userId, nickname, avatar, sendText, mGroupBean.getGroupType());
        //设置@了哪些人
        if(atUserInfoList != null){
            List<String> asList = new ArrayList<>();
            for(AtUserInfo userInfo : atUserInfoList){
                asList.add(userInfo.getUserId());
            }
            qxMessage.setAtList(asList);
        }
        sendQXGroupMessage(qxMessage);//发送消息
        ChatBean chatBean = new ChatBean(qxMessage);
        chatBean.setSendStatus(ChatBean.SEND_STATUS_PROCESS);
        dataList.add(chatBean);
        //Utils.hideSoftInput(mActivity);
    }
    
    private void sendQXGroupMessage(QXGroupMessage message) {
    try {
        QXIMClient.sendMessage(message);
        //给首页->企信界面发送事件,让其更新其界面
        MessageSendEvent messageSendEvent = new MessageSendEvent(MessageSendEvent.SEND_MESSAGE_PROCESS, projectId, message.toDisplayMessage());
        RxBus.get().post(messageSendEvent);
    } catch (Exception e) {
        e.printStackTrace();
        if (BuildConfig.LOG_DEBUG) {
            Log.w(TAG, "call sendMessage but send fail : " + e);
        }
    }
    }

    最后会调用如下代码发送消息,如下所示,先设置一个唯一的ID(clientMessageId),以便区分消息。将消息加入到发送消息的集合(processGroupMessageList)中,当消息发送成功\失败后,再从集合中移除。
    如果是文本消息,需要先进行base64编码。

    private void sendMessage(QXGroupMessage qxmsg, boolean isFirstSend){
        Log.v("sendMessage : "+qxmsg);
        if(qxmsg == null){
            return;
        }
        //如果clientMessageId等于空,代表是不是重发消息,是第一次发送消息
        if(qxmsg.getClientMessageId() == null || "".equals(qxmsg.getClientMessageId())){
            String uuid = UUID.randomUUID().toString();
            qxmsg.setClientMessageId(uuid);
            sendQXMessageToByStoreHandler(qxmsg, WHAT_MESSAGE_SEND);
        }else{
            qxmsg.setSendTime(System.currentTimeMillis());
        }
        if(isFirstSend){
            if(!processGroupMessageList.contains(qxmsg)){
                processGroupMessageList.add(qxmsg);
            }
        }
        //如果需要base64编码
        if(isNeedBase64Encode){
            if(qxmsg instanceof QXGroupTextMessage){//只有文本消息才需要base64编码
                QXGroupTextMessage groupTextMessage = (QXGroupTextMessage)qxmsg;
                String data = groupTextMessage.getData();
                String base64 = Base64.encodeToString(data.getBytes(), Base64.NO_WRAP);
                QXGroupTextMessage message= QXMessageCreator.createQXGroupTextMessage(groupTextMessage.getGroupId(), groupTextMessage.getUserId(), groupTextMessage.getName(), null, base64, groupTextMessage.getGroupType());
                message.setId(groupTextMessage.getId());
                message.setClientMessageId(groupTextMessage.getClientMessageId());
                message.setAtList(groupTextMessage.getAtList());
                sendMessage(message.toTransactString());
            }else{
                sendMessage(qxmsg.toTransactString());
            }
        }else{
            sendMessage(qxmsg.toTransactString());
        }
    }

    发送图片消息

    发送图片有两种方式,一种是从相册选择图片,另一种是拍照。

    选择图片 —> 压缩图片—> 上传图片—> 构造图片消息对象 —>保存消息到本地数据库—> 发送消息—>发送完毕后修改消息发送状态

    发送图片的逻辑是先将图片压缩,然后上传图片到服务器,然后发送图片消息,代码如下:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.v("requestCode " + requestCode + ", resultCode = " + resultCode);
        if (resultCode == RESULT_OK) {
            if (requestCode == CAMERA_REQUEST) {
                if (mCameraFile != null && mCameraFile.exists()) {
                    //拍照后回调
                    cameraPictureActivityResult(mCameraFile.getPath());
                }
            } else if (requestCode == IMAGE_REQUEST) {
                List<String> paths = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT);
                if (paths != null && paths.size() > 0) {
                    //从相处选择后回调
                    imagesSelectActivityResult(paths);
                }
            } else if (requestCode == LOCATION_REQUEST) {
                if (data != null) {
                    double lat = data.getDoubleExtra("latitude", 0.0);
                    double lot = data.getDoubleExtra("longitude", 0.0);
                    String address = data.getStringExtra("address");
                    String imagePath = data.getStringExtra("imagepath");
                    scrollToBottom();
                    locationActivityResult(lat, lot, address, imagePath);
                    Log.v("位置:" + address + ":" + lat + ":" + lot + ":" + imagePath);
                }
            } else if (requestCode == FilePickerConst.REQUEST_CODE_DOC) {
                if (data != null) {
                    ArrayList<String> documentPaths = data.getStringArrayListExtra(FilePickerConst.KEY_SELECTED_DOCS);
                    documentActivityResult(documentPaths);
                }
            }
        }
    }
    
    /**
         * 图片选择后添加图片路径
         * @param paths
         */
        private void imagesSelectActivityResult(List<String> paths) {
            Log.v(TAG, "imagesSelectActivityResult : " + paths);
            //Toaster.showShort(mContext, "imagesSelectActivityResult : " + paths);
            uploadSendImageMessage(paths);
        }
    
        /**
         * 上传并且发送图片消息(先压缩图片,然后上次压缩图片到服务器,拿到服务器返回的图片url,在发送这个url。其他设备获取到url后就可以显示图片了)
         * @param imagePaths(图片路径集合)
         */
        private void uploadSendImageMessage(List<String> imagePaths) {
            Log.v(TAG, "uploadSendImageMessage : " + imagePaths);
            //Toaster.showShort(mContext, "sendImageMessage : " + imagePaths);
            //step 1, 在界面上显示图片消息
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            List<ChatBean> uploadImageList = new ArrayList<>();
            for (String string : imagePaths) {
                QXGroupImageMessage message = new QXGroupImageMessage();
                message.setGroupId(mGroupBean.getGroupId());
                message.setSendTime(System.currentTimeMillis());
                message.setGroupName(mGroupBean.getGroupName());
                //message.setGroupType();
                message.setUserId(AuthManager.getUid(mContext));
                message.setName(AuthManager.getName(mContext));
                message.setAvatar(AuthManager.getAvatar(mContext));
                message.setLocalPath(string);
                BitmapFactory.decodeFile(string, options);
                message.setWidth(options.outWidth);
                message.setHeight(options.outHeight);
                ChatBean chatBean = new ChatBean(message);
                chatBean.setShowProcess(true);
                chatBean.setPosition(dataList.size());
                dataList.add(chatBean);
                uploadImageList.add(chatBean);
            }
            //step 2, 上传并发送图片消息
            sendImageMessage(uploadImageList);
        }
    

    发送语音消息

    流程 录音—>上传录音文件 —>保存消息到本地数据库—> 发送消息—>发送完毕后修改消息发送状态

    /**
     * 按住按钮说话逻辑处理
     * @param event
     * @return
     */
    @OnTouch(R.id.btn_voice)
    boolean onVoiceBtnTouch(MotionEvent event){
        Log.v(TAG, "call onVoiceBtnTouch " +event);
        int action = event.getAction();
        int x = (int) event.getX();
        int y = (int) event.getY();
        switch (action)
        {
            case MotionEvent.ACTION_DOWN:
                .......
                //发送语音消息
                final ChatBean chatBean = new ChatBean(message);
                chatBean.setSendStatus(ChatBean.SEND_STATUS_PROCESS);
                message.setLocalUrl(fileName);
                sendVoiceMessage(chatBean, true);
                .......
                break;
            case MotionEvent.ACTION_MOVE:
                ......
                break;
            case MotionEvent.ACTION_UP:
                ......
                break;
        }
        return false;
    }

    发送文件消息

    流程 选择文件 —> 上传文件—> 构造文件消息对象 —>保存消息到本地数据库—> 发送消息—>发送完毕后修改消息发送状态

    /**
         * 选择文档后的处理,发送文档消息(先上传文件到服务器,拿到url然后上传)
         * @param documentPaths
         */
        private void documentActivityResult(ArrayList<String> documentPaths) {
            if (BuildConfig.LOG_DEBUG) {
                Log.v(TAG, "documentActivityResult : " + documentPaths);
                //Toaster.showShort(mContext, "documentActivityResult : " + documentPaths);
            }
            //step 1, 在界面上显示文档消息
            File file = null;
            List<ChatBean> uploadDocList = new ArrayList<>();
            for (String string : documentPaths) {
                file = new File(string);
                QXGroupDocumentMessage message = new QXGroupDocumentMessage();
                message.setGroupId(mGroupBean.getGroupId());
                message.setSendTime(System.currentTimeMillis());
                message.setLocalPath(string);
                message.setGroupName(mGroupBean.getGroupName());
                //message.setGroupType();
                message.setUserId(AuthManager.getUid(mContext));
                message.setName(AuthManager.getName(mContext));
                message.setAvatar(AuthManager.getAvatar(mContext));
                message.setFileName(file.getName());
                try {
                    message.setSize(Utils.getFileSizes(file));
                } catch (Exception e) {
                    e.printStackTrace();
                }
                ChatBean chatBean = new ChatBean(message);
                chatBean.setShowProcess(true);
                chatBean.setPosition(dataList.size());
                dataList.add(chatBean);
                uploadDocList.add(chatBean);
            }
            mChatAdapter.notifyDataSetChanged();
            scrollToBottom();
            //step 2, 上传并发送文档消息
            sendDocumentMessage(uploadDocList);
        }

    发送位置消息

    流程 定位—> 构造位置消息 —>保存消息到本地数据库—> 发送消息—>发送完毕后修改消息发送状态

    /**
         * 地图地位后的方法处理,发送经纬度,地址信息
         * @param latitude
         * @param longitude
         * @param address
         * @param imagePath
         */
        private void locationActivityResult(double latitude, double longitude, String address, String imagePath) {
            if (BuildConfig.LOG_DEBUG) {
                Log.v(TAG, "locationActivityResult : " + latitude + ", " + longitude + "," + address);
            }
            //Toaster.showShort(mContext, "locationActivityResult : "+imagePath);
            //step 1,  发送定位消息
            long groupId = mGroupBean.getGroupId();
            long userId = AuthManager.getUid(getContext());
            String nickname = AuthManager.getName(getContext());
            String avatar = AuthManager.getAvatar(getContext());
            QXGroupLocationMessage qxMessage = QXMessageCreator.createQXGroupLocationMessage(
                    groupId, userId, nickname, avatar, latitude, longitude, address, mGroupBean.getGroupType());
            sendQXGroupMessage(qxMessage);
            //step 2, 更新界面
            ChatBean chatBean = new ChatBean(qxMessage);
            chatBean.setSendStatus(ChatBean.SEND_STATUS_PROCESS);
            dataList.add(chatBean);
            mChatAdapter.notifyDataSetChanged();
            scrollToBottom();
        }
    展开全文
  • 现在我们就一起来看下装修房子流程攻略,包你看完以后,再也不是家装小白了。 装修房子流程攻略1、前期设计 在房子的前期设计时,首先要对自己的房子进行一次详细的测量,这样可以让你买到准确的建材,也能在结算...

    装修房子可是一个大工程,特别是对于许多第一次装修房子的业主来说,对于装修更是一无所知,所以这个时候装修流程就很重要了。现在我们就一起来看下装修房子流程攻略,包你看完以后,再也不是家装小白了。
    装修房子流程攻略1、前期设计
    在房子的前期设计时,首先要对自己的房子进行一次详细的测量,这样可以让你买到准确的建材,也能在结算价格的时候,预防被坑。测量的时候主要测量房子的实际面积和墙面的尺寸(实际面积主要有贴砖的面积、墙面漆的面积、壁纸的面积以及地板的面积)在这里插入图片描述
    装修房子流程攻略2、主体拆改
    主体拆改是施工阶段最先上的一个项目,其中包括了拆墙面、铲墙皮、拆暖气的设配以及换塑钢窗等等,总的来说,就是先把工地上的框架大致的搭起来。
    装修房子流程攻略3、水电改造
    水电改造主要是对开发商在厨房预留的上水口以及油烟机插座的位置上,提出一些相关的建议。主要包括了油烟机的插座位置会不会影响到以后油烟机的安装;水表的位置是否合适日后的安装;上水口的位置能不能方便以后安装水槽。这些做完后,再把卫生间的防水给做了,因为一般厨房都是不需要做防水的在这里插入图片描述
    装修房子流程攻略4、刷墙面漆
    刷墙面漆可以说是装修房子中比较重要的步骤之一,其中墙面漆的材料选择是非常重要的,因为这会直接影响到我们日后的生活,所以墙面漆一定要选择达到了国家质量标准的环保品牌,这样房子装修好后住的也比较放心。在这里插入图片描述
    装修房子流程攻略5、地板安装
    安装地板顺利的话,一天的时间差不多就够了,在安装地板的时候,要注意这两个问题:
    (1)在准备安装地板之前,最好可以让厂家上门勘测一下你家的地面是否需要找平或者局部找平。
    (2)地板找平后,需要把地面清理干净,因为要保证地面的干燥,所以在清理的过程中不能用水。在这里插入图片描述
    装修房子流程攻略6、家具进场
    选购家具最好在水电改造完了以后再进行购买,这样要买什么尺寸的家具心里就有一个大致的数了,没必要在房子还没装修之前就把家具订好,这样后续反而还会增加麻烦。
    以上就是小编分享的关于装修房子流程攻略以及让你不再做家装小白的全部内容了。装修是非常繁琐,所以不能急,只要按照装修的步骤慢慢来,就不会出现太大的问题。

    展开全文
  • 企信需要实现的功能先梳理一下优悦家装企信的逻辑,主要要满足群聊和消息推送功能。群聊一个项目(Project)分为两个群,一个客服群,一个工作群。消息消息分为很多种,有工作提醒,装修提醒,薪资提醒等等。设计思路...

    企信需要实现的功能

    先梳理一下优悦家装企信的逻辑,主要要满足群聊和消息推送功能。

    群聊

    一个项目(Project)分为两个群,一个客服群,一个工作群。

    消息

    消息分为很多种,有工作提醒,装修提醒,薪资提醒等等。

    设计思路

    和服务器商议决定,采用websocket协议,传输json字符串,实现消息通信。
    每一种业务都对应一种业务ID,比如

    public static final int HEARTBEAT_CLIENT = 1;//心跳业务ID(客户端发送)
    public static final int HEARTBEAT_SERVER = 2;//心跳业务ID(服务器返回)
    
    public static final int USER_LOGIN = 1001; //用户登陆业务ID
    public static final int USER_LOGIN_SUCCEED = 1010;//登陆成功业务ID
    public static final int USER_LOGIN_ERROR = 1020;//登陆失败业务ID
    public static final int USER_LOGIN_IN_OTHER_PLACES = 1030;//该用户登陆在其他地方登陆
    ......
    

    WebSocket实现

    采用的开源的java-websocket实现,这个库封装好了websocket的连接,发送,接受消息的代码,使用简单!

    简单流程

    当APP启动时,打开websocket的连接,当用户登陆后,绑定用户。绑定用户成功后,就可以正常的发送的和接送消息。

    • 打开websocket的连接

      在MyApplication.java类

    QXConfig config = new QXConfig("com.keith.renovation", BuildConfig.SERVER_WS_URL);
    config.setClientName("APP_B");
    QXIMClient.init(this, config);

    上述代码,会启动一个service服务,最终调用java-websocket的连接方法,打开websocket连接。

    • 绑定用户
    QXIMClient.bind(token);

    调用上述代码会,发送登陆的消息给服务器,如果登陆成功,服务器会返回登陆成功的消息通知客服端,如果登陆失败,服务器会发送登陆失败的消息通知客户端。

    • 发送消息

      调用QXIMClient.java的sendMessage()发送消息,会将消息转换成json字符串,然后发送给服务器。如果发送成功,服务器会返回成功的消息通知客服端,如果发送失败,服务器会发送登陆失败的消息通知客户端。

    • 如何接受消息

      先通过QXIMClient.registerMessageReceiveListener注册listener,当有消息来之后,就可以在listener的onQXMessageReceive方法接收到,当你不需要接收消息的时候,记得unregister防止内存泄露,采用所谓的观察者模式!

    群消息

    • 普通文本消息(QXGroupTextMessage.java)

    • 图片消息(QXGroupImageMessage.java)

    • 位置消息(QXGroupLocationMessage.java)

    • 文档消息(QXGroupDocumentMessage.java)

    • 语音消息(QXGroupVoiceMessage.java)

    • 群成员变动消息(QXGroupMemberMessage.java)

    群消息的存储

    将消息统一存储到sqlite3中,对应的实体类(GroupMessageEntity.java)

        private int id;//主键ID
        private String messageId;//本地生成的ID
        private String sn;//服务器生成消息序列号
        private int businessId;//业务ID,区分是什么消息(文本?图片?位置?)
        private long groupId;//群ID
        private long userId;//发送者ID
        private long toUserId; //消息发送给谁
        private String groupType;//群类型(客服/同事)
        private String fromSource;//消息来源
        private boolean cancelFlag = false;//消息是否被撤销
        private int status = STATUS_GET;//消息状态(发送成功/发送失败/已接受/发送中)
        @Column(nullable = true)
        private String content;//发送消息的json字符串,这个很重要,通过它可以转化成消息类
        private String text;//文本消息发送消息的文本内容,(这个是为了通过关键字搜索内容)
        private long createTime;//发送/接收时间

    当发送/接受到群消息时,将消息存储到数据库,具体代码

    private void processGroupMessage(QXGroupMessage groupMessage){
        if(groupMessage == null){
            return;
        }
        //通知监听
        for(OnMessageReceiveListener listener: mMessageReceiveList){
            listener.onQXMessageReceive(groupMessage);
        }
        //保存消息到数据库
        sendQXMessageToByStoreHandler(groupMessage, WHAT_MESSAGE_RECV);
        sendQXMessageReceipt(groupMessage.getMsgId());
    }

    由于聊天界面(如下图所示)有显示项目群的最后收到的一条消息,所以还需要在项目信息(ProjectEntity.java)里面存储最后收到的一条群消息。
    这里写图片描述

    private String messageId;
    private String lastMessage;//最后收到的这条消息
    private long lastMessageFromGroupId;//最后一条消息来自的群ID
    private long lastMessageTime;//最后一条消息的发送的时间
    private int lastMessageStatus;//最后一条消息状态
    
    private int unreadWorkNum;//工作群未读的消息个数
    private int unreadCustomerNum;//客户群是未读的消息个数
    
    private long workGroupId;//工作群ID
    private long customerGroupId;//客服群ID

    当发送或者/接收到群消息时,就去更新项目信息中最后一条消息的相关信息,如下所示。

    mMessageStoreHandler = new Handler(mHandlerThread.getLooper()){
      @Override
      public void handleMessage(Message msg) {
          //TODO should process android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5):
          if(msg.obj instanceof QXCancelMessage){
              //收到撤销消息
              cancelMessage((QXCancelMessage) msg.obj, msg.what == WHAT_MESSAGE_RECV);
              return;
          }
          if(msg.obj instanceof QXGroupMessage){
              //收到群消息
              saveQXMessage((QXGroupMessage)msg.obj, msg.what == WHAT_MESSAGE_RECV);
          }else if(msg.obj instanceof QXReceiptSuccessMessage){
              //消息发送成功的回执消息
              QXReceiptSuccessMessage messageSuccessReceipt = (QXReceiptSuccessMessage)msg.obj;
              saveQXMessageSuccessReceipt(messageSuccessReceipt);
          }else if(msg.obj instanceof QXReceiptErrorMessage){
              //消息发送失败的回执消息
              QXReceiptErrorMessage messageSuccessReceipt = (QXReceiptErrorMessage)msg.obj;
              saveQXMessageErrorReceipt(messageSuccessReceipt);
          }else if(msg.obj instanceof QXProjectMessage){
              //收到项目消息
              modifyProjectStatus((QXProjectMessage) msg.obj);
          }
      }
    };

    消息推送部分

    行政工作提醒

    行政工作模块,分为通知、任务、日志、审批。如果想监听到工作消息,可以通过QXIMClient.registerOnExecutiveListener方法。

    应用模块里面的消息

    调用QXIMClient.registerOnQXWorkMessageListener方法,可以收到 实力龙发、促销活动、问题处理、企业公告 的消息。

    装修模块提醒

    调用QXIMClient.registerOnProjectMessageListener方法,可以收到 节点验收、客户洽谈、项目进度 的消息。

    界面部分

    聊天界面

    聊天界面时最复杂的界面(ChatActivity),所以只针对聊天界面作一个说明
    这里写图片描述

    如上图所示,界面分为三个部分,第一部分是title,第二部分是content,由fragment构成,第三部分是键盘(注意,为了方便处理,键盘部分在fragment中)
    第一部分不多说。第二部分,是一个listView。第三部分是利用github上的一个键盘,具体点击

    展开全文
  • 装修旺季又到来,不少...熟记墙面施工的流程,别让你家的墙变成麻子脸。  墙面施工流程——  1、基础处理  做完水电工程之后的墙面会有各种开凿的缝隙和痕迹。基础处理需要把这些缝隙填平。用水泥填满缝隙并抹
  • 绝对值得你参考的。 家装材料知识 家装工艺知识 家装空间装修 家装流程解读 家装合同知识 家装配套知识 家装风水常识 家装预算核算
  • 随着移动互联网的不断发展,手机超越电脑,成为信息交流的主要工具,企业电商及服务随之转移到手段端,对家装行业来说亦是如此。众多知名企业也通过互联网装修介入行业,比如“土巴兔、...传统的装修流程业主对这...
  • 比装网装饰工程计价软件是一款家装、公装工程计价软件,按“算量—套价—材料分析—主材选型—取费—报表”的标准化流程操作,界面美观,操作简易。 软件构件库系统拥有数百个
  •  家装业务员工作计划范文 一、想办法制订每日工作流程表没有工作目标和每天时间安排的人,总是很悠闲,而有了明确的目标,对自己每天时间安排得比较满的人,是没有空闲时间的,每一点时间都会过得很有意义很有价值...
  • 家装建材业务员工作计划例文 一、想办法制订每日工作流程表没有工作目标和每天时间安排的人,总是很悠闲,而有了明确的目标,对自己每天时间安排得比较合理的人,是没有多余时间的,每一点时间都会过得很有意义很有...
  • 家装行业涵盖范围很广,涉及流程很长,参与公司也众多。实体物品来看,家装行业涉及上游建材原料、下游各类半成品、成品等众多实体产品;整个环节涉及拆改、安装、到家具、家纺等链条,由原材料企业、品...
  • 家装建材作为传统的行业,一直以来都是非常有前景的,其需求量之大,市场空间不容小觑,但是随着2018年房地产市场的降温以及电商行业的兴起,市场上的竞争也日趋激烈,对于家装建材批发行业来说,遇到了前所未有的...
  • 装修流程1

    2012-09-17 19:43:49
    所以,如果把家装比喻成一场战役,那么家装的前期设计就是这场战役的“作战方案”,是家装的“灵魂环节”。再所以,死抗着在上篇《唐亮制造》中通篇讲述的都是前期设计需要注意的问题,在这里就不重复了。 ¬ 在...
  • 家装行业一直被称为“电商最难啃的骨头”,不仅服务周期长、流程复杂,而且交付标准不统一,非常倚重线下体验,想要完成全链路线上改造,是个非常庞大的工程。 不过,改变正在悄然发生。2020年天猫618期间,受疫情...
  • 之前一位同学说导师要求开发一款家装系统申报项目,但一直没有头绪,而我虽然技艺不精,在独自探索的过程中却也走了许多弯路,于是就把自己使用的技术与开发流程介绍一下,供初学者参考。我的AR、VR虚拟家装...
  • 篱笆家装宝典之二十——智能布线

    千次阅读 2011-05-26 23:39:00
    篱笆家装宝典之二十——智能布线 ...PDF下载地址:http://download.csdn.net/source/1726999心静装修:http://blog.csdn.net/magus_yang/category/826768.aspx20.1. 《智能布线之流程篇》http://video.li
  • 7.3 VRay阳光环境--欧式走廊渲染流程 7.3.1 取景的技巧 7.3.2 材质设置 7.3.3 渲染出图 7.4 本章小结 第8章 地中海风格室内表现 8.1 地中海风格室内照片简介 8.2 Poly建模以及制作要点 8.3 场景的...
  • iiMedia Reserach(艾媒咨询)预计2020年中国互联网家装市场规模超5000亿元,年复合增长率超过20%,目前,小公司、小作坊甚至个体户仍然是家装行业的主力军,且家装流程长,难以标准化,客户和装修企业痛点明显。...
  • 购房流程 - 新浪网

    千次阅读 2005-07-05 00:58:00
    sina.com.cn首页 | 新闻 | 体育 | 娱乐 | 游戏 | 邮箱 | 搜索 | ... 热门关键字:户型 按揭 公积金 产权 契税购房俱乐部精选购房流程全接触第一步 着手准备购房目的购房自我评估楼市分析购房区域房屋类型第二步 市场考
  • ASP成都圣殿装饰公司网站源码...栏目包含:关于我们、家装流程、设计案例、设计团队、特价活动、在建工地、委托设计、留言本等功能。 后台地址:admin 用户名和密码:admin 注:请使用IE浏览器或兼容模式进行后台操作。
  • 9月18日消息,互联网家装平台「 艾佳生活」已于上月获得 10 亿元 B 轮融资,本轮由 天图资本投资,投后估值超 10 亿美金,成为行业新晋独角兽,本轮资金将主要用于 IT 技术研发、高级人才招募和用户体验提升。...
  • ASP成都圣殿装饰公司网站源码,...栏目包含:关于我们、家装流程、设计案例、设计团队、特价活动、在建工地、委托设计、留言本等功能。后台地址:admin用户名和密码:admin注:请使用IE浏览器或兼容模式进行后台操作。
  • ASP成都圣殿装饰公司网站源码...栏目包含:关于我们、家装流程、设计案例、设计团队、特价活动、在建工地、委托设计、留言本等功能。 后台地址:admin 用户名和密码:admin 注:请使用IE浏览器或兼容模式进行后台操作。

空空如也

空空如也

1 2 3 4
收藏数 65
精华内容 26
关键字:

家装流程