This commit is contained in:
jiangrui 2024-09-20 17:15:30 +08:00
commit 9059a4e2c1
390 changed files with 45117 additions and 0 deletions

14
.editorconfig Normal file
View File

@ -0,0 +1,14 @@
# https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

7
.env.development Normal file
View File

@ -0,0 +1,7 @@
# just a flag
ENV = 'development'
# base api
# VUE_APP_BASE_API = '/dev-api'
VUE_APP_BASE_API ='http://ykdz.yundazhou.com:18080/api'

9
.env.production Normal file
View File

@ -0,0 +1,9 @@
# just a flag
ENV = 'production'
# base api
#VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_API = 'http://10.14.217.221:17001/'

8
.env.staging Normal file
View File

@ -0,0 +1,8 @@
NODE_ENV = production
# just a flag
ENV = 'staging'
# base api
VUE_APP_BASE_API = '/stage-api'

4
.eslintignore Normal file
View File

@ -0,0 +1,4 @@
build/*.js
src/assets
public
dist

199
.eslintrc.js Normal file
View File

@ -0,0 +1,199 @@
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint',
sourceType: 'module'
},
env: {
browser: true,
node: true,
es6: true,
},
extends: ['plugin:vue/recommended', 'eslint:recommended'],
// add your custom rules here
//it is base on https://github.com/vuejs/eslint-config-vue
rules: {
"vue/max-attributes-per-line": [2, {
"singleline": 10,
"multiline": {
"max": 1,
"allowFirstLine": false
}
}],
"vue/singleline-html-element-content-newline": "off",
"vue/multiline-html-element-content-newline":"off",
"vue/name-property-casing": ["error", "PascalCase"],
"vue/no-v-html": "off",
'accessor-pairs': 2,
'arrow-spacing': [2, {
'before': true,
'after': true
}],
'block-spacing': [2, 'always'],
'brace-style': [2, '1tbs', {
'allowSingleLine': true
}],
'camelcase': [0, {
'properties': 'always'
}],
'comma-dangle': [2, 'only-multiline'],
'comma-spacing': [2, {
'before': false,
'after': true
}],
'comma-style': [2, 'last'],
'constructor-super': 2,
'curly': [2, 'multi-line'],
'dot-location': [2, 'property'],
'eol-last': 2,
'eqeqeq': ["error", "always", {"null": "ignore"}],
'generator-star-spacing': [2, {
'before': true,
'after': true
}],
'handle-callback-err': [2, '^(err|error)$'],
// 'indent': [2, 2, {
// 'SwitchCase': 1
// }],
"vue/html-indent": "off",
'jsx-quotes': [2, 'prefer-single'],
'key-spacing': [2, {
'beforeColon': false,
'afterColon': true
}],
'keyword-spacing': [2, {
'before': true,
'after': true
}],
'new-cap': [2, {
'newIsCap': true,
'capIsNew': false
}],
'new-parens': 2,
'no-array-constructor': 2,
'no-caller': 2,
'no-console': 'off',
'no-class-assign': 2,
'no-cond-assign': 2,
'no-const-assign': 2,
'no-control-regex': 0,
'no-delete-var': 2,
'no-dupe-args': 2,
'no-dupe-class-members': 2,
'no-dupe-keys': 2,
'no-duplicate-case': 2,
'no-empty-character-class': 2,
'no-empty-pattern': 2,
'no-eval': 2,
'no-ex-assign': 2,
'no-extend-native': 2,
'no-extra-bind': 2,
'no-extra-boolean-cast': 2,
'no-extra-parens': [2, 'functions'],
'no-fallthrough': 2,
'no-floating-decimal': 2,
'no-func-assign': 2,
'no-implied-eval': 2,
'no-inner-declarations': [2, 'functions'],
'no-invalid-regexp': 2,
'no-irregular-whitespace': 2,
'no-iterator': 2,
'no-label-var': 2,
'no-labels': [2, {
'allowLoop': false,
'allowSwitch': false
}],
'no-lone-blocks': 2,
'no-mixed-spaces-and-tabs': 2,
'no-multi-spaces': 2,
'no-multi-str': 2,
'no-multiple-empty-lines': [2, {
'max': 1
}],
'no-native-reassign': 2,
'no-negated-in-lhs': 2,
'no-new-object': 2,
'no-new-require': 2,
'no-new-symbol': 2,
'no-new-wrappers': 2,
'no-obj-calls': 2,
'no-octal': 2,
'no-octal-escape': 2,
'no-path-concat': 2,
'no-proto': 2,
'no-redeclare': 2,
'no-regex-spaces': 2,
'no-return-assign': [2, 'except-parens'],
'no-self-assign': 2,
'no-self-compare': 2,
'no-sequences': 2,
'no-shadow-restricted-names': 2,
'no-spaced-func': 2,
'no-sparse-arrays': 2,
'no-this-before-super': 2,
'no-throw-literal': 2,
'no-trailing-spaces': 2,
'no-undef': 2,
'no-undef-init': 2,
'no-unexpected-multiline': 2,
'no-unmodified-loop-condition': 2,
'no-unneeded-ternary': [2, {
'defaultAssignment': false
}],
'no-unreachable': 2,
'no-unsafe-finally': 2,
'no-unused-vars': [2, {
'vars': 'all',
'args': 'none'
}],
'no-useless-call': 2,
'no-useless-computed-key': 2,
'no-useless-constructor': 2,
'no-useless-escape': 0,
'no-whitespace-before-property': 2,
'no-with': 2,
'one-var': [2, {
'initialized': 'never'
}],
'operator-linebreak': [2, 'after', {
'overrides': {
'?': 'before',
':': 'before'
}
}],
'padded-blocks': [2, 'never'],
'quotes': [2, 'single', {
'avoidEscape': true,
'allowTemplateLiterals': true
}],
'semi': [2, 'never'],
'semi-spacing': [2, {
'before': false,
'after': true
}],
'space-before-blocks': [2, 'always'],
'space-before-function-paren': [2, 'never'],
'space-in-parens': [2, 'never'],
'space-infix-ops': 2,
'space-unary-ops': [2, {
'words': true,
'nonwords': false
}],
'spaced-comment': [2, 'always', {
'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ',']
}],
'template-curly-spacing': [2, 'never'],
'use-isnan': 2,
'valid-typeof': 2,
'wrap-iife': [2, 'any'],
'yield-star-spacing': [2, 'both'],
'yoda': [2, 'never'],
'prefer-const': 2,
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
'object-curly-spacing': [2, 'always', {
objectsInObjects: false
}],
'array-bracket-spacing': [2, 'never']
}
}

26
.gitignore vendored Normal file
View File

@ -0,0 +1,26 @@
.DS_Store
node_modules/
dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/*.log
/web
/web.*/
/web-*-*
tests/**/coverage/
tests/e2e/reports
selenium-debug.log
# Editor directories and files
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.local
package-lock.json
yarn.lock

5
.travis.yml Normal file
View File

@ -0,0 +1,5 @@
language: node_js
node_js: 10
script: npm run test
notifications:
email: false

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017-present PanJiaChen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

1
README.md Normal file
View File

@ -0,0 +1 @@
# 视频标注管理系统

14
babel.config.js Normal file
View File

@ -0,0 +1,14 @@
module.exports = {
presets: [
// https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
'@vue/cli-plugin-babel/preset'
],
'env': {
'development': {
// babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
// This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
// https://panjiachen.github.io/vue-element-admin-site/guide/advanced/lazy-loading.html
'plugins': ['dynamic-import-node']
}
}
}

35
build/index.js Normal file
View File

@ -0,0 +1,35 @@
const { run } = require('runjs')
const chalk = require('chalk')
const config = require('../vue.config.js')
const rawArgv = process.argv.slice(2)
const args = rawArgv.join(' ')
if (process.env.npm_config_preview || rawArgv.includes('--preview')) {
const report = rawArgv.includes('--report')
run(`vue-cli-service build ${args}`)
const port = 9526
const publicPath = config.publicPath
var connect = require('connect')
var serveStatic = require('serve-static')
const app = connect()
app.use(
publicPath,
serveStatic('./dist', {
index: ['index.html', '/']
})
)
app.listen(port, function () {
console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`))
if (report) {
console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`))
}
})
} else {
run(`vue-cli-service build ${args}`)
}

9
jsconfig.json Normal file
View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"baseUrl": "./",
"paths": {
"@/*": ["src/*"]
}
},
"exclude": ["node_modules", "dist"]
}

116
package.json Normal file
View File

@ -0,0 +1,116 @@
{
"name": "vue-element-admin",
"version": "4.4.0",
"description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
"author": "Pan <panfree23@gmail.com>",
"scripts": {
"dev": "vue-cli-service serve",
"lint": "eslint --ext .js,.vue src",
"build:prod": "vue-cli-service build",
"build:dev": "vue-cli-service build --mode development",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"new": "plop",
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
"test:unit": "jest --clearCache && vue-cli-service test:unit",
"test:ci": "npm run lint && npm run test:unit"
},
"dependencies": {
"@tinymce/tinymce-vue": "^3.2.8",
"axios": "0.18.1",
"clipboard": "2.0.4",
"co": "^4.6.0",
"codemirror": "5.45.0",
"core-js": "3.6.5",
"driver.js": "0.9.5",
"dropzone": "5.5.1",
"echarts": "^4.2.1",
"element-ui": "2.13.2",
"file-saver": "2.0.1",
"fuse.js": "3.4.4",
"js-cookie": "2.2.0",
"js-sha1": "^0.6.0",
"jsonlint": "1.6.3",
"jszip": "3.2.1",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"number-precision": "^1.6.0",
"path-to-regexp": "2.4.0",
"screenfull": "4.2.0",
"script-loader": "0.7.2",
"sortablejs": "1.8.4",
"tui-editor": "1.3.3",
"vue": "2.6.10",
"vue-count-to": "1.0.13",
"vue-router": "3.0.2",
"vue-splitpane": "1.0.4",
"vuedraggable": "2.20.0",
"vuex": "3.1.0",
"xlsx": "0.14.1"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.4",
"@vue/cli-plugin-eslint": "4.4.4",
"@vue/cli-plugin-unit-jest": "4.4.4",
"@vue/cli-service": "4.4.4",
"@vue/test-utils": "1.0.0-beta.29",
"autoprefixer": "9.5.1",
"babel-eslint": "10.1.0",
"babel-jest": "23.6.0",
"babel-plugin-dynamic-import-node": "2.3.3",
"chalk": "2.4.2",
"chokidar": "2.1.5",
"connect": "3.6.6",
"eslint": "6.7.2",
"eslint-plugin-vue": "6.2.2",
"html-webpack-plugin": "3.2.0",
"husky": "1.3.1",
"lint-staged": "8.1.5",
"mockjs": "1.0.1-beta3",
"plop": "2.3.0",
"runjs": "4.3.2",
"sass": "1.26.2",
"sass-loader": "8.0.2",
"script-ext-html-webpack-plugin": "2.1.3",
"serve-static": "1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.0",
"vue-template-compiler": "2.6.10"
},
"browserslist": [
"> 1%",
"last 2 versions"
],
"bugs": {
"url": "https://github.com/PanJiaChen/vue-element-admin/issues"
},
"engines": {
"node": ">=8.9",
"npm": ">= 3.0.0"
},
"keywords": [
"vue",
"admin",
"dashboard",
"element-ui",
"boilerplate",
"admin-template",
"management-system"
],
"license": "MIT",
"lint-staged": {
"src/**/*.{js,vue}": [
"eslint --fix",
"git add"
]
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"repository": {
"type": "git",
"url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
}
}

5
postcss.config.js Normal file
View File

@ -0,0 +1,5 @@
module.exports = {
plugins: {
autoprefixer: {}
}
}

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

16
public/index.html Normal file
View File

@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<!-- <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> -->
<title><%= webpackConfig.name %></title>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

2
public/js/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

124
public/print.html Normal file
View File

@ -0,0 +1,124 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
body {
font-family: 仿宋;
width: 793.8px;
margin: 0 auto;
}
.fs16 {
font-size: 16px;
}
.fs32 {
font-size: 32px;
}
.blod {
font-weight: 600;
}
.text-right {
text-align: right;
}
.center {
text-align: center;
}
</style>
</head>
<body>
<p class="fs32 blod center">房票安置转换协议</p>
<!-- <strong
><span style="font-family: 仿宋; font-size: 32px"
>房票安置转换</span
></strong
><strong
><span style="font-family: 仿宋; font-size: 32px">协议</span></strong
> -->
<p class="fs16 text-right">
编号:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">甲方</span
><span style="font-family: 仿宋">:</span></span
><span style="font-family: 仿宋; font-size: 19px">内江</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">街道办事处</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">乙方</span
><span style="font-family: 仿宋">:姓名:</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;<span style="font-family: 仿宋">性别</span
><span style="font-family: 仿宋">:</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;<span style="font-family: 仿宋">身份证号码</span
><span style="font-family: 仿宋">:</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>身份证所载住址:内江</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">街道</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">社区</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋"
>方:内江高新区拆迁协调办公室</span
></span
>
</p>
<p>
<br />
</p>
</body>
</html>

879
public/print1.html Normal file
View File

@ -0,0 +1,879 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>房票安置转换协议</title>
<style>
table {
border-collapse: collapse;
}
td,
th {
border: 1px solid #000;
font-size: 14px;
padding: 8px;
}
</style>
<script src="./js/jquery.min.js"></script>
<script>
// var data = {
// v1: "市中",
// v2: "中央路",
// v3: "李四",
// v4: "男",
// v5: "510105199807190532",
// v6: "东兴",
// v7: "红牌路",
// v8: "平安公园小区",
// v9: "1组",
// v10: "10号",
// v11: "危房拆迁",
// v12: "2023",
// v13: "6",
// v14: "6",
// v15: "拆迁办",
// v16: "市中",
// v17: "拆迁办",
// v18: "拆迁办",
// v19: "500000", //v19/v20
// v20: "50",
// v21: "10000",
// v22: "500000",
// v23: "3",
// v24: "9000", //v23*3000
// v25: "50", //v20
// v26: "8190", //v20*0.91*180
// v27: "50",
// v28: "3750",
// v29: "2000",
// v30: "423000",
// v31: "肆拾贰万叁仟元整",
// v32: "5000",
// v33: "3500",
// v34: "30",
// v35: "15",
// v36: "15",
// v37: "500",
// v38: "7500",
// v39: "150000",
// v40: "拆迁办",
// v41: "张三",
// // v42: data['v1'],
// // v43: data['v2'],
// // v44: data['v6'],
// // v45: data['v7'],
// // v46: data['v8'],
// // v47: data['v9'],
// // v48: data['v3'],
// };
// data = {
// ...data,
// v42: data["v1"],
// v43: data["v2"],
// v44: data["v6"],
// v45: data["v7"],
// v46: data["v8"],
// v47: data["v9"],
// v48: data["v3"],
// };
// let tableData = [
// {
// name: "张三",
// gx: "父亲",
// idCard: "51010514455488751",
// hjszd: "内江市市中区",
// area: "50m²",
// },
// {
// name: "李四",
// gx: "母亲",
// idCard: "51010514455488752",
// hjszd: "内江市市北区",
// area: "50m²",
// },
// ];
// function init(data) {
// for (item in data) {
// $(`#${item}`).text(data[item]);
// }
// var str = "";
// console.log("##", tableData);
// tableData.map((item, index) => {
// str += ` <tr>
// <td>${item.name}</td>
// <td>${item.gx}</td>
// <td>${item.idCard}</td>
// <td>${item.hjszd}</td>
// ${index === 0 && `<td rowspan="4">${item.area}</td>`}
// </tr>`;
// });
// console.log(str);
// $("#tbody").append(str);
// }
function init() {
data = JSON.parse(localStorage.getItem("ticket"));
}
$(function () {
init(data);
});
</script>
</head>
<body>
<p style="text-align: center; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 32px"
>房票安置转换</span
></strong
><strong
><span style="font-family: 仿宋; font-size: 32px">协议</span></strong
>
</p>
<p style="text-align: right; line-height: 37px">
<span style="font-family: 仿宋; font-size: 16px"
><span style="font-family: 仿宋">编号</span
><span style="font-family: 仿宋"
>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">甲方</span
><span style="font-family: 仿宋">:</span></span
><span style="font-family: 仿宋; font-size: 19px">内江</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v1"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v2"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">街道办事处</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">乙方</span
><span style="font-family: 仿宋">:姓名:</span></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v3"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;<span style="font-family: 仿宋">性别</span
><span style="font-family: 仿宋">:</span></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v4"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;<span style="font-family: 仿宋">身份证号码</span
><span style="font-family: 仿宋">:</span></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v5"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>身份证所载住址:内江</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v6"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v7"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">街道</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v8"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">社区</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v9"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v10"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋"
>方:内江高新区拆迁协调办公室</span
></span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">乙方系</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v11"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>项目的房屋被安置对象,于</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v12"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v13"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v14"
>&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">日与内江市</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v15"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"
>签订了《统一建房拆迁安置协议》(以下简称</span
><span style="font-family: 仿宋">“原协议”)。内江市</span></span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v16"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>在原协议项下的全部权利和义务由甲方承继,并为尽快实现乙方的房屋安置,甲乙双方一致同意将原协议约定的统一建房安置方式变更为</span
><span style="font-family: 仿宋; font-size: 19px">房票安置</span
><span style="font-family: 仿宋; font-size: 19px"
>方式,即由乙方在内江市</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v17"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>确定的房源库中自主购买房地产开发商的商品房进行房屋安置。为此,双方经协商,就</span
><span style="font-family: 仿宋; font-size: 19px">房票安置</span
><span style="font-family: 仿宋; font-size: 19px">事宜达成本协议。</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>一、乙方家庭户籍人员情况及安置房屋户型和面积</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">乙方以户为单位作为</span
><span style="font-family: 仿宋; font-size: 19px">房票安置</span
><span style="font-family: 仿宋; font-size: 19px"
>的被安置对象,其家庭户籍人员如下:</span
>
</p>
<table style="width: 100%">
<thead>
<tr>
<th>姓名</th>
<th>关系</th>
<th>身份证</th>
<th>户籍所在地</th>
<th>原协议确定安置房屋户型和面积</th>
</tr>
</thead>
<tbody id="tbody">
<!-- <tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td rowspan="4">&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr> -->
</tbody>
</table>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>二、安置方式</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>原协议约定的统一建房安置方式现变更为</span
><span style="font-family: 仿宋; font-size: 19px">房票安置</span
><span style="font-family: 仿宋; font-size: 19px"
>方式,即甲方按照政策和原协议确定的安置乙方的房屋户型、面积及家庭户籍人数计付安置补偿款,并由乙方用安置补偿款在</span
><span
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v18"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>的房源库中自主选购房地产开发商的商品房,以实现房屋安置。</span
>
</p>
<p style="text-indent: 43px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>三、安置补偿款和支付方式</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>(一)安置补偿款</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>1.基本安置补偿款:乙方的基本安置补偿款按乙方安置房屋面积与政策规定的补偿单价计付,经计算为</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v19"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>元,计算公式为:安置面积</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v20"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v21"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">/㎡=</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v22"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋"></span></span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">2.</span
><span style="font-family: 仿宋; font-size: 19px">房票安置补贴</span
><span style="font-family: 仿宋; font-size: 19px">:被安置人数</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v23"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×3000元/人=</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v24"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元;</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>3.高层物业补贴:安置房屋面积</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v25"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×0.91元/㎡/月×180月=</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v26"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元;</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">4.</span
><span style="font-family: 仿宋; font-size: 19px"
>住宅专项维修资金补贴</span
><span style="font-family: 仿宋; font-size: 19px">:安置房屋面积</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v27"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×75元/㎡=</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v28"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元。</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">5.过渡费支付:</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v29"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>元。</span
></span
></span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">6.以上1-5项合计为</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v30"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写:</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v31"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">)。</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>(二)被安置对象超基本安置面积应缴纳的款项</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"
>根据政策和原协议,乙方安置房屋超出基本安置面积(</span
><span style="font-family: 仿宋"
>30㎡/人)之外的部分,乙方按</span
></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v32"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋"
>/㎡的优惠单价承担该超出部分房款的70%,据此计算,乙方应向甲方缴纳</span
></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v33"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>元,计算公式为:超基本安置面积(即安置房屋面积</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v34"
>&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">㎡-基本面积</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v35"
>&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">㎡)部分</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v36"
>&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v37"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">/㎡=</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v38"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋"></span></span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>上述(一)(二)两项经品迭后,乙方本协议项下最终实际获得的安置补偿款为</span
></strong
><strong
><span style=""
><span
style="
font-family: 仿宋;
font-size: 19px;
text-decoration: underline;
"
id="v39"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
></strong
><strong
><span style="font-family: 仿宋; font-size: 19px">元。</span></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>(三)支付方式</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>1.最终安置补偿款中的30%部分由甲方在乙方与房地产开发商签订商品房买卖合同后20个工作日内一次性支付。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>2.最终安置补偿款中的70%部分由甲方分期支付。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>四、商品房的选购及购房款的支付</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>1.乙方应在本协议签订生效后1个月内在</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v40"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">审核通过的</span
><span style="font-family: 仿宋; font-size: 19px">房票安置</span
><span style="font-family: 仿宋; font-size: 19px"
>房屋的房源库中选择商品房并签订商品房买卖合同。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>2.乙方以户为单位进行商品房选购安置,并指定家庭户籍成员中的</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v41"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>作为购房人(即商品房买卖合同购买人、房屋产权人和借款合同借款人)。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>3.为确保乙方依法得到房屋安置不因房屋拆迁影响居住条件乙方获得的安置补偿款须用于购买商品房且选购的商品房价款不因房源户型限制而低于安置补偿款的90%;如乙方选购的商品房价款超过安置补偿款的,超出部分由乙方自行筹集解决。</span
>
</p>
<p style="line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>五、其他事项</span
></strong
>
</p>
<p style="text-indent: 43px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>1.本协议签订后,乙方如果未按本协议约定期限选购商品房实现安置的,本协议自动终止,乙方的房屋安置按原协议执行。</span
>
</p>
<p style="text-indent: 43px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>2.乙方在签订本协议后,不得再次要求甲方变更安置方式。</span
>
</p>
<p style="text-indent: 43px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>3.甲方如果未按本协议约定向乙方支付安置补偿款,由此给乙方造成的损失由甲方全部承担。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>4.乙方购房价款在安置补偿款以内的,不承担契税;购房价款超过安置补偿款的部分,按相关政策规定缴纳契税。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>5.乙方购买商品房所产生的办证费用、维修资金、物业管理费等由乙方自行承担。</span
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>6.本协议签订后,原协议与本协议不一致的以本协议为准,未做变更的继续有效。</span
>
</p>
<p style="text-indent: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>7.甲、乙双方签订房票安置协议及相关事项由丙方监管。</span
>
</p>
<p style="text-indent: 43px; line-height: 37px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>六、协议的生效</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
>本协议经甲方盖章、乙方签字</span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="font-family: 仿宋; font-size: 19px">丙方盖章</span
><span style="font-family: 仿宋; font-size: 19px">后生效。</span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">本协议一式</span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="font-family: 仿宋; font-size: 19px">份,甲方持三份、乙</span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="font-family: 仿宋; font-size: 19px">持一份</span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="font-family: 仿宋; font-size: 19px">丙方持一份</span
><span style="font-family: 仿宋; font-size: 19px"></span>
</p>
<p style="text-indent: 37px; line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">(以下无正文)</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋">方:内江市</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v42"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v43"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>街道办事处(盖章)</span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">法定代表人(签名):</span>
&nbsp;</span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">分管领导:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">经办人:</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋">方:内江市</span></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v44"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v45"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">街道</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v46"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">社区</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v47"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">组户主</span
><span style=""
><span
style="font-family: 仿宋; font-size: 19px; text-decoration: underline"
id="v48"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">乙方代表(签名):</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">身份证号码:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span>
<span style="font-family: 仿宋"
>方:内江高新区拆迁协调办公室</span
></span
>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"></span
><span style="font-family: 仿宋; font-size: 19px">方代表(</span
><span style="font-family: 仿宋; font-size: 19px">盖章</span
><span style="font-family: 仿宋; font-size: 19px"></span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;&nbsp;&nbsp;</span>
</p>
<p style="line-height: 37px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">签约时间:</span>
&nbsp;&nbsp;&nbsp;<span style="font-family: 仿宋"></span>
&nbsp;&nbsp;&nbsp;<span style="font-family: 仿宋"></span>
&nbsp;&nbsp;&nbsp;<span style="font-family: 仿宋"></span></span
>
</p>
<p>
<span style="font-family: Calibri; font-size: 14px">&nbsp;</span>
</p>
<p>
<br />
</p>
</body>
</html>

700
public/print2.html Normal file
View File

@ -0,0 +1,700 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>安置补偿款监管使用协议</title>
</head>
<body>
<p style="text-align: center; line-height: 37px">
<strong
><span style="font-family: 宋体; font-size: 32px"
>安置补偿款监管使用协议</span
></strong
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>甲方(被安置对象、商品房购买人、借款人):</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">身份证号码:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">地址:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">电话:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">所属征收项目名称:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">房票安置转换</span
><span style="font-family: 仿宋; font-size: 19px">协议编号:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
><strong
><span style="font-family: 仿宋; font-size: 24px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></strong
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>乙方(商品房出卖人):</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">法定代表人:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">地址:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">电话:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p>&nbsp;</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">丙方(贷款银行):</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">地址:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">联系电话:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>丁方(资金监管方):</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">地址:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">电话:</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px">为确保甲方通过内江</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">区实施的</span
><span style="font-family: 仿宋"></span></span
><span style="font-family: 仿宋; font-size: 19px">房票安置</span
><span style="font-family: 仿宋; font-size: 19px"
>”工作以实现房屋安置,确保乙方取得出售给甲方的商品房购房款和丙方收回出借给甲方的按揭款,维护甲乙丙三方合法权益,甲方授权丁方监管其获得的安置补偿款,且甲乙丙三方均同意由丁方代甲方将本协议约定的甲方被监管安置补偿款资金(下称“甲方被监管资金”)用于向乙方支付购房款和向丙方偿付按揭款本息。为此,甲乙丙丁四方</span
><span style="font-family: 仿宋; font-size: 19px"
>经协商一致,签订本协议</span
><span style="font-family: 仿宋; font-size: 19px"></span>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第一条</span>
<span style="font-family: 仿宋"
>甲方选购商品房的价款总额与支付方式</span
></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>1.甲方选购的商品房的主要情况</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>甲方自愿选购乙方出售(楼盘名称)</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">的商品房,包括:(</span
><span style="font-family: 仿宋">1住宅房屋。房号</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">;建筑面积</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">㎡;</span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">2车位。车位号</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">;建筑面积</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">㎡。</span>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>甲方所购商品房的具体情况以及双方的权利义务等,由甲方与乙方另行签订的</span
><span style="font-family: 仿宋; font-size: 19px"
>商品房买卖合同约定,并以其为准。</span
>
</p>
<p style="line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 仿宋"
>2.甲方选购的商品房价款</span
></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>甲方选购乙方商品房的</span
><span style="font-family: 仿宋; font-size: 19px">总价款为</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元,其中:</span>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋"
>1住宅房屋价款为人民币 &nbsp;</span
></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(建筑面积</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×</span></span
><span style="font-family: 仿宋; font-size: 19px">建筑单价</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">/㎡);</span></span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">2车位价款为人民币</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(建筑面积</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">×</span></span
><span style="font-family: 仿宋; font-size: 19px">建筑单价</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">/㎡)。</span></span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
>3.商品房价款支付方式及时间</span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">1商品房总价款中的</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"
>元整),由甲方授权丁方在收到本协议项下的甲方安置补偿款后</span
><span style="font-family: 仿宋"
>20个工作日内代为向乙方支付</span
></span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋">2商品房总价款中的</span></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>元整),由甲方自行筹集资金,在签订商品房买卖合同前直接向乙方支付;</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋"></span
><span style="font-family: 仿宋"
>3除上述第12项的款项作为购房首付款商品房总价款中的剩余款项</span
></span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>元整)由甲方向丙方进行按揭贷款,甲方授权丁方按月将安置补偿款用于代甲方向丙方偿付按揭款本息。</span
>
</p>
<p style="text-indent: 40px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第二条</span>
<span style="font-family: 仿宋">甲方按揭贷款额度</span></span
></strong
>
</p>
<p style="text-indent: 40px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>丙方经甲方申请,同意向甲方发放购买乙方商品房所需的按揭贷款共计</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>元整),每月还款金额为</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px"
>元整)。具体借款期限、利率、发放方式、分期还款时间以及权利义务等由甲方与丙方签订的借款合同约定,并以其为准。</span
>
</p>
<p style="text-indent: 40px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第三条</span>
<span style="font-family: 仿宋">甲方被监管资金的额度</span></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>甲方授权丁方对甲方获得的全部安置补偿款进行监管,金额为:</span
>
</p>
<p style="line-height: 35px">
<span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元(大写</span
><span style="text-decoration: underline"
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
></span
><span style="font-family: 仿宋; font-size: 19px">元)。</span>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>(注:甲方办理商品房买卖涉及的各项税费及其他费用不属于甲方被监管资金的范围,由甲方自行向相关单位缴纳)</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第四条</span>
<span style="font-family: 仿宋">银行账户的开设</span></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>为确保本协议项下的各项资金安全和各方目的的实现,甲方、乙方和丁方均需在丙方开设银行账户,用以接收和划转资金。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第五条</span>
<span style="font-family: 仿宋">甲方被监管资金的划转</span></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>1.甲方授权丁方在各期安置补偿款进入甲方账户后的当日,即可将其全部转入丁方账户作为被监管资金。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>2.本协议项下的被监管资金丁方根据甲乙双方商品房买卖合同约定的付款期限和本协议第一条第3款第1项约定的额度首先将其用于代甲方向乙方支付购房款丙方根据丁方的通知办理前述资金的划转其后丁方根据甲丙双方借款合同约定的还款期限和本协议第一条第3款第2项约定的额度将其用于代甲方向丙方偿付按揭款本息。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第六条</span>
<span style="font-family: 仿宋">资金账户和资金监管要求</span></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>1.甲方、乙方、丁方在丙方开设的账户,在甲方与乙方的商品房买卖合同约定的义务或甲方与丙方的借款合同约定的义务未履行完毕之前,不得撤销。若任何一方因债务致使账户及其资金被国家机关冻结或划付,应承担给自己和其他各方造成的一切损失。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>2.丁方对被监管资金须专款专用,不得挪作他用。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>3.因甲方的原因致使丁无法代甲方向乙方或丙方支付购房款或偿付按揭款,乙方或丙方应向甲方主张权利,丁方不承担任何责任。</span
>
</p>
<p style="text-indent: 40px; line-height: 35px">
<strong
><span style="font-family: 仿宋; font-size: 19px"
><span style="font-family: 仿宋">第七条</span>
<span style="font-family: 仿宋">违约</span></span
></strong
><strong
><span style="font-family: 仿宋; font-size: 19px">责任</span></strong
><span style="font-family: 仿宋; font-size: 19px">&nbsp;</span>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>1.甲方在商品房买卖合同或借款合同义务未履行完毕前擅自撤销账户,或者账户未存入足额的支付购房款或偿付贷款本息的资金,或者账户及其资金被国家机关冻结或划付,致使乙方不能取得购房款或丙方不能收回按揭款本息的,应按商品房买卖合同或借款合同的约定承担违约金;如违约金不足以弥补给乙方造成的损失的,还应赔偿对方损失。</span
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>2.丁方在甲方被监管资金已按时足额转入其账户后未按时足额代为向乙方支付购房款或向丙方偿付按揭款本息,或者将甲方被监管资金挪作他用,除应继续履行代付或代还义务外,应</span
><span style="font-family: 仿宋; font-size: 19px"
>比照商品房买卖合同或借款合同的约定承担违约金;如违约金不足以弥补给乙方或丙方造成的损失的,还应赔偿该损失。</span
><span style="font-family: 仿宋; font-size: 19px"
>&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; font-size: 19px"
>3.任何一方违反本协议约定,除按约定支付违约金外,还应承担权利方为主张权利而产生的包括但不限于诉讼费、保全费、执行费、律师费、差旅费等。
&nbsp;&nbsp;</span
><span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span
style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">第八条</span>
<span style="font-family: 仿宋">争议的解决</span></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>1.本协议在履行过程中如果发生争议,各方应协商解决,协商不成的,向丁方所在地人民法院提起诉讼解决。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>2.本协议内容涉及资金监管、商品房买卖、借款等行为和关系,若协议履行中发生的争议仅涉及单一行为关系时,其诉讼当事人仅限于该行为关系的争议当事人,不得滥用权利将无关的其他协议主体列为诉讼当事人,否则,应承担给其他协议主体造成的损失(如律师费、误工费、差旅费等)。</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<strong
><span
style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">第九条</span>
<span style="font-family: 仿宋">附则</span></span
></strong
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>1.本协议未尽事宜,可签订</span
><span style="font-family: 仿宋; font-size: 19px">补充协议</span
><span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>。</span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 仿宋"
>2.本协议经甲乙丙丁四方盖章或签字后生效。</span
></span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>3.本协议一式四份,甲乙丙丁四方各执一份</span
><span style="font-family: 仿宋; font-size: 19px"></span
><span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>均具有同等法律效力。</span
>
</p>
<!-- <p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;</span
>
</p>
<p style="text-indent: 37px; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;</span
>
</p> -->
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;</span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">甲方(公章):</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>乙方(签字):</span
>
</span>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">授权代表:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>身份证件号码</span
><span style="font-family: 仿宋">: </span></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">联系地址:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>联系电话:</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">联系电话:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">丙方(公章):</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>丁方(盖章):</span
>
</span>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">授权代表:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>授权代理人</span
><span style="font-family: 仿宋">: </span></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">联系地址:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span
style="font-family: 仿宋"
>联系电话:</span
></span
>
</p>
<p style="line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">联系电话:</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
</p>
<p style="text-align: center; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;</span
>
</p>
<p style="text-align: center; line-height: 35px">
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span
>
</p>
<p>
<span style="font-family: 仿宋; color: rgb(51, 51, 51); font-size: 19px"
><span style="font-family: 仿宋">签订时间:</span> &nbsp;&nbsp;<span
style="font-family: 仿宋"
>年</span
>
&nbsp;&nbsp;<span style="font-family: 仿宋"></span> &nbsp;<span
style="font-family: 仿宋"
>日</span
>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp;&nbsp;</span
>
</p>
<p>
<br />
</p>
</body>
</html>

BIN
public/static/template.xlsx Normal file

Binary file not shown.

6
src/App.vue Normal file
View File

@ -0,0 +1,6 @@
<template>
<div id="app">
<router-view />
</div>
</template>

47
src/api/affiche.js Normal file
View File

@ -0,0 +1,47 @@
// 公告或新闻管理
import request from '@/utils/request'
// 新增
export function add(data) {
return request({
url: '/affiche/add',
method: 'post',
data: data
})
}
// 删除
export function del(data) {
return request({
url: '/affiche/delete',
method: 'delete',
params: data
})
}
// 详情
export function info(data) {
return request({
url: '/affiche/info',
method: 'post',
params: data
})
}
// 列表
export function list(data) {
return request({
url: '/affiche/list',
method: 'post',
data
})
}
// 修改
export function update(data) {
return request({
url: '/affiche/update',
method: 'post',
data
})
}

41
src/api/article.js Normal file
View File

@ -0,0 +1,41 @@
import request from '@/utils/request'
export function fetchList(query) {
return request({
url: '/vue-element-admin/article/list',
method: 'get',
params: query
})
}
export function fetchArticle(id) {
return request({
url: '/vue-element-admin/article/detail',
method: 'get',
params: { id }
})
}
export function fetchPv(pv) {
return request({
url: '/vue-element-admin/article/pv',
method: 'get',
params: { pv }
})
}
export function createArticle(data) {
return request({
url: '/vue-element-admin/article/create',
method: 'post',
data
})
}
export function updateArticle(data) {
return request({
url: '/vue-element-admin/article/update',
method: 'post',
data
})
}

10
src/api/authApply.js Normal file
View File

@ -0,0 +1,10 @@
import request from '@/utils/request'
// 用户机构认证申请列表
export function list(data) {
return request({
url: '/businessAuthenticationApply/list',
method: 'post',
data: data
})
}

28
src/api/building.js Normal file
View File

@ -0,0 +1,28 @@
// 楼盘管理
import request from "@/utils/request";
/**
* 楼盘列表
* @param {*} data
* @returns
*/
export function list(data) {
return request({
url: "/housingResources/propertiesForSale",
method: "post",
data: data,
});
}
/**
* 楼盘新增/修改
* @param {*} data
* @returns
*/
export function update(data) {
return request({
url: "/housingResources/propertiesForSale",
method: "put",
data: data,
});
}

11
src/api/consumer.js Normal file
View File

@ -0,0 +1,11 @@
// 用户管理
import request from '@/utils/request'
// 用户列表
export function list(data) {
return request({
url: '/consumer/list',
method: 'post',
data: data
})
}

18
src/api/contract.js Normal file
View File

@ -0,0 +1,18 @@
import request from "@/utils/request";
// 新增
export function list(data) {
return request({
url: "/contractRecord/getList",
method: "post",
data,
});
}
export function getDownloadUrl(data) {
return request({
url: "/contractRecord/getDownloadUrl",
method: "get",
params: data,
});
}

25
src/api/dashboard.js Normal file
View File

@ -0,0 +1,25 @@
import request from '@/utils/request'
export function served_increase(data) {
return request({
url: '/admin/served_increase',
method: 'post',
data
})
}
export function homeCount(data) {
return request({
url: '/admin/home',
method: 'post',
data
})
}
export function auditCount(data) {
return request({
url: '/admin/audit/statistics_index',
method: 'post',
data
})
}

27
src/api/feeRefund.js Normal file
View File

@ -0,0 +1,27 @@
// 费用返还
import request from '@/utils/request'
// 列表
export function list(data) {
return request({
url: '/business/businessFeeRefundList',
method: 'post',
data: data
})
}
// 添加
export function add(data) {
return request({
url: '/business/businessFeeRefundAdd',
method: 'post',
data: data
})
}
// 机构列表
export function businessList(data) {
return request({
url: '/business/businessList',
method: 'post',
data: data
})
}

20
src/api/feedback.js Normal file
View File

@ -0,0 +1,20 @@
// 反馈
import request from '@/utils/request'
// 列表
export function list(data) {
return request({
url: '/feedback/list',
method: 'post',
data: data
})
}
// 列表
export function update(data) {
return request({
url: '/feedback/update',
method: 'post',
data: data
})
}

11
src/api/finance.js Normal file
View File

@ -0,0 +1,11 @@
// 财务流水管理
import request from '@/utils/request'
// 订单列表
export function list(data) {
return request({
url: '/finance/orderList',
method: 'post',
data: data
})
}

64
src/api/housing.js Normal file
View File

@ -0,0 +1,64 @@
// 房源管理
import request from "@/utils/request";
/**
* 房源列表
* @param {*} data
* @returns
*/
export function list(data) {
return request({
url: "/housingResources/housingResources/list",
method: "post",
data: data,
});
}
/**
* 房源创建
* @param {*} data
* @returns
*/
export function add(data) {
return request({
url: "/housingResources/housingResources",
method: "post",
data: data,
});
}
/**
* 房源上下架
* @param {*} data
* @returns
*/
export function offShelf(data) {
return request({
url: "/housingResources/housingResources/offShelf",
method: "put",
data: data,
});
}
/**
* 房源修改
* @param {*} data
* @returns
*/
export function update(data) {
return request({
url: "/housingResources/housingResources/update",
method: "put",
data: data,
});
}
export function housingImport(data) {
return request({
url: "/housingResources/housingResourcesBatch",
method: "post",
data: data,
});
}

164
src/api/housingTicket.js Normal file
View File

@ -0,0 +1,164 @@
// 房源管理
import request from "@/utils/request";
/**
* 房源列表
* @param {*} data
* @returns
*/
export function list(data) {
return request({
url: "/housingTicket/housingResources/list",
method: "post",
data: data,
});
}
// export function deal(data) {
// return request({
// url: "/housingTicket/deal/phase1",
// method: "post",
// data: data,
// });
// }
export function deal(data) {
return request({
url: "/housingTicket/deal/phase1N",
method: "post",
data: data,
});
}
export function dealPhase2(data) {
return request({
url: "/housingTicket/deal/phase2",
method: "post",
data: data,
});
}
export function dealPhase3(data) {
return request({
url: "/housingTicket/deal/phase3",
method: "post",
data: data,
});
}
export function getPhase3Data(data) {
return request({
url: "/housingTicket/deal/phase3/getData",
method: "get",
params: data,
});
}
export function dealPhase4(data) {
return request({
url: "/housingTicket/deal/phase4",
method: "post",
data,
});
}
export function getPhase5Data(data) {
return request({
url: "/housingTicket/deal/phase5",
method: "get",
params: data,
});
}
export function dealPhase5(data) {
return request({
url: "/housingTicket/deal/phase5",
method: "post",
data,
});
}
export function dealPhase5F(data) {
return request({
url: "/housingTicket/deal/phase5F",
method: "post",
data,
});
}
export function getPhase6Data(data) {
return request({
url: "/housingTicket/deal/phase6/getData",
method: "post",
data,
});
}
export function dealPhase6(data) {
return request({
url: "/housingTicket/deal/phase6",
method: "post",
data,
});
}
export function dealPhase25(data) {
return request({
url: "/housingTicket/deal/phase25",
method: "post",
data,
});
}
export function dealPhase55(data) {
return request({
url: "/housingTicket/deal/phase55",
method: "post",
data,
});
}
export function disuse(id) {
return request({
url: `/housingTicket/deal/disuse?id=${id}`,
method: "get",
});
}
export function phase1GetTicketNumber(data) {
return request({
url: "/housingTicket/deal/phase1GetTicketNumber",
method: "post",
data,
});
}
export function phase5Export(data) {
return request({
url: "/housingTicket/phase5Export",
method: "post",
data,
});
}
export function phase32(data) {
return request({
url: "/housingTicket/deal/phase32",
method: "post",
data,
});
}
export function phase2GetData(params) {
return request({
url: "/housingTicket/deal/phase2GetData",
method: "get",
params,
});
}
export function phase321(params) {
return request({
url: "/housingTicket/deal/phase321",
method: "get",
params,
});
}

19
src/api/kfs.js Normal file
View File

@ -0,0 +1,19 @@
import request from "@/utils/request";
// 新增
export function serviceAgreementUrl(data) {
return request({
url: "/staff/serviceAgreementUrl",
method: "get",
params: data,
});
}
export function ticketNumberforUserList(data) {
console.log(data);
return request({
url: "/housingTicket/deal/phase1GetTicketNumberAndUserList",
method: "get",
params: data,
});
}

27
src/api/prePhase.js Normal file
View File

@ -0,0 +1,27 @@
import request from "@/utils/request";
export function list(data) {
return request({
url: "/housingTicketPre/prePhase1List",
method: "post",
data: data,
});
}
export function add(data) {
return request({
url: "/housingTicketPre/prePhase1N",
method: "post",
data: data,
});
}
export function prePhase2(data) {
return request({
url: "/housingTicketPre/prePhase2",
method: "post",
data: data,
});
}

23
src/api/project.js Normal file
View File

@ -0,0 +1,23 @@
// 房源管理
import request from "@/utils/request";
/**
* 房源列表
* @param {*} data
* @returns
*/
export function list(data) {
return request({
url: "/project",
method: "post",
data,
});
}
export function createAndUpdate(data) {
return request({
url: "/project",
method: "put",
data: data,
});
}

8
src/api/qiniu.js Normal file
View File

@ -0,0 +1,8 @@
import request from '@/utils/request'
export function getToken() {
return request({
url: '/admin/upload_token', // 假地址 自行替换
method: 'post'
})
}

27
src/api/question.js Normal file
View File

@ -0,0 +1,27 @@
// 常见问题
import request from '@/utils/request'
// 新增
export function add(data) {
return request({
url: '/questions/add',
method: 'post',
data: data
})
}
// 删除
export function del(data) {
return request({
url: '/questions/del',
method: 'delete',
params: data
})
}
// 列表
export function list(data) {
return request({
url: '/questions/list',
method: 'post',
data: data
})
}

47
src/api/release.js Normal file
View File

@ -0,0 +1,47 @@
// 用户管理
import request from '@/utils/request'
// 列表
export function list(data) {
return request({
url: '/release/list',
method: 'post',
data: data
})
}
// 新增
export function add(data) {
return request({
url: '/release/add',
method: 'post',
data: data
})
}
// 删除
export function del(data) {
return request({
url: '/release/delete',
method: 'delete',
params: data
})
}
// 修改
export function update(data) {
return request({
url: '/release/update',
method: 'put',
data: data
})
}
// 详情
export function info(data) {
return request({
url: '/release/info',
method: 'get',
params: data
})
}

17
src/api/remote-search.js Normal file
View File

@ -0,0 +1,17 @@
import request from '@/utils/request'
export function searchUser(name) {
return request({
url: '/vue-element-admin/search/user',
method: 'get',
params: { name }
})
}
export function transactionList(query) {
return request({
url: '/vue-element-admin/transaction/list',
method: 'get',
params: query
})
}

38
src/api/role.js Normal file
View File

@ -0,0 +1,38 @@
import request from '@/utils/request'
export function getRoutes() {
return request({
url: '/vue-element-admin/routes',
method: 'get'
})
}
export function getRoles() {
return request({
url: '/vue-element-admin/roles',
method: 'get'
})
}
export function addRole(data) {
return request({
url: '/vue-element-admin/role',
method: 'post',
data
})
}
export function updateRole(id, data) {
return request({
url: `/vue-element-admin/role/${id}`,
method: 'put',
data
})
}
export function deleteRole(id) {
return request({
url: `/vue-element-admin/role/${id}`,
method: 'delete'
})
}

119
src/api/spdwzl.js Normal file
View File

@ -0,0 +1,119 @@
// 视频点位治理
import request from "@/utils/request";
/**
* 列表
* @param {*} data
* @returns
*/
export function list(data) {
return request({
url: "/spdwzl/list",
method: "post",
data: data,
});
}
/**
* 视频点位-列表
* @param {*} data
* @returns
*/
export function spList(data) {
return request({
url: "/spdwzl/spList",
method: "post",
data: data,
});
}
/**
* 分组管理-增改
* @param {*} data
* @returns
*/
export function groupAdminUpdate(data) {
return request({
url: "/spdwzl/groupAdminUpdate",
method: "post",
data: data,
});
}
/**
* 视频点位-配置分组
* @param {*} data
* @returns
*/
export function spGroupSet(data) {
return request({
url: "/spdwzl/spGroupSet",
method: "post",
data: data,
});
}
/**
* 视频点位-重置标注数据
* @param {*} data
* @returns
*/
export function remarkReset() {
return request({
url: "/spdwzl/remarkReset",
method: "post",
// data: data,
});
}
/**
* 分组管理-列表无分页
* @param {*} params
* @returns
*/
export function groupList() {
return request({
url: "/spdwzl/groupList",
method: "get",
// params,
});
}
/**
* 获取分组信息
* @param {*} params
* @returns
*/
export function getGroupInfo(params) {
return request({
url: "/spdwzl/getGroupInfo",
method: "get",
params,
});
}
/**
* 根据监控编号获取url播放地址
* @param {*} params
* @returns
*/
export function getUrl(params) {
return request({
url: "/spdwzl/getUrl",
method: "get",
params,
});
}
/**
* 标注
* @param {*} data
* @returns
*/
export function marking(data) {
return request({
url: "/spdwzl/marking",
method: "post",
data: data,
});
}

92
src/api/staff.js Normal file
View File

@ -0,0 +1,92 @@
// 账号管理
import request from '@/utils/request'
// 新增账号
export function add(data) {
return request({
url: '/staff/add',
method: 'post',
data: data
})
}
// 删除
export function deleteInfo(data) {
return request({
url: '/staff/delete',
method: 'delete',
params: data
})
}
// 获取可添加账号类型
export function getAddType(data) {
return request({
url: '/staff/getAddType',
method: 'get',
params: data
})
}
// 详情
export function info(data) {
return request({
url: '/staff',
method: 'get',
params: data
})
}
// 根据用户id获取详情
export function infoById(data) {
return request({
url: '/staff/infoById',
method: 'get',
params: data
})
}
// 账号列表
export function list(data) {
return request({
url: '/staff/list',
method: 'post',
data: data
})
}
// 重置密码
export function reset(data) {
return request({
url: '/staff/reset',
method: 'put',
data: data
})
}
// 修改
export function update(data) {
return request({
url: '/staff',
method: 'put',
data: data
})
}
// 强制登录
export function forceLogin(data) {
return request({
url: '/commonLogin/login',
method: 'post',
data: data
})
}
// 强制登录
export function forceLoginInfo(data) {
return request({
url: '/staff/forceLoginInfo',
method: 'get',
params: data
})
}

86
src/api/ticket.js Normal file
View File

@ -0,0 +1,86 @@
// 房票管理
import request from "@/utils/request";
/**
* 房票列表
* @param {*} data
* @returns
*/
export function list(data) {
return request({
url: "/housingTicket/list",
method: "post",
data: data,
});
}
/**
* 房票创建
* @param {*} data
* @returns
*/
export function add(data) {
return request({
url: "/housingTicket/create",
method: "post",
data: data,
});
}
export function numberAdd(data) {
return request({
url: "/housingTicket/numberAdd",
method: "post",
data: data,
});
}
export function getLastNumber() {
return request({
url: "/housingTicket/getLastNumber",
method: "get",
// data: data,
});
}
export function info(data) {
return request({
url: "/housingTicket/info",
method: "get",
params:data
// data: data,
});
}
export function getStatistics(data) {
return request({
url: "/repaymentRecordPlan",
method: "get",
params:data
// data: data,
});
}
export function getNormalData(data) {
return request({
url: "/repaymentRecordPlan/normalData",
method: "get",
params:data
// data: data,
});
}
/**
* 用户导出
* @param {*} data
* @returns
*/
export function listExport(data) {
return request({
url: "/housingTicket/listExport",
method: "post",
data: data,
});
}

12
src/api/upload.js Normal file
View File

@ -0,0 +1,12 @@
import request from '@/utils/request'
// 新增
export function uploadFile(data) {
let formData = new FormData()
formData.append('file',data.file)
return request({
url: '/commonLogin/upload',
method: 'post',
data: formData
})
}

42
src/api/user.js Normal file
View File

@ -0,0 +1,42 @@
import request from '@/utils/request'
export function login(data) {
console.log(data);
return request({
url: '/commonLogin/login',
method: 'post',
data
})
}
export function getInfo() {
return request({
url: '/staff',
method: 'get',
})
}
export function list(data) {
return request({
url: '/staff/list',
method: 'post',
data
})
}
export function editPassword(data) {
return request({
url: '/admin/admin/editPassword',
method: 'post',
data
})
}
export function logout() {
return request({
url: '/vue-element-admin/user/logout',
method: 'post'
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 866 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

BIN
src/assets/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

View File

@ -0,0 +1,145 @@
<template>
<el-cascader ref="address-cascader" v-model="data" :props="props" :options="dataOptions" :multiple="multiple" :placeholder="placeholder" :clearable="clearable" :style="{'min-width': (level +1) * 75 + 'px'}" @change="cascaderChange" />
</template>
<script>
import { getSysArea } from '@/api/basic'
export default {
name: 'AddressCascader',
props: {
value: {
type: Array,
default: () => [],
},
level: {
type: Number,
default: 2,
},
multiple: {
type: Boolean,
default: false,
},
placeholder: {
type: String,
default: '请选择'
},
clearable: {
type: Boolean,
default: false
},
},
data() {
return {
data: [],
props: {
lazy: true,
multiple: this.multiple,
lazyLoad: new Function(),
value: 'id',
label: 'name',
checkStrictly: true
},
dataOptions: []
}
},
watch: {
value: {
deep: true,
handler() {
this.initValue()
}
}
},
created() {
this.initValue()
this.initLazyLoad()
},
methods: {
initValue() {
// console.log(this.level)
this.data = this.value || []
if (this.level && this.multiple) this.initDataOptions()
},
async initDataOptions() {
const that = this
const { data, props } = this
// console.log(data)
if (!data || !data.length) return
if (props.multiple) {
if (data.findIndex(add => add === undefined) !== -1) return
const dataOptions = await this.getAddress(0)
const pros = data.map((item) => {
return item.reduce(async(prev, current, index) => {
const prevData = await prev
const addressItem = prevData.find((it) => current === it.id)
let children = addressItem.children
if (!children && index < that.level) {
children = await this.getAddress(current)
if (index >= that.level - 1) {
children = children.map(ars => {
ars.leaf = true
return ars
})
}
addressItem.children = children
}
return children
}, dataOptions)
})
await Promise.all(pros)
this.$set(this, 'dataOptions', dataOptions)
} else {
this.dataOptions = []
}
},
initLazyLoad() {
this.props.lazyLoad = (node, resolve) => {
console.log(node)
const { level, value, path } = node
const { dataOptions } = this
if (path) {
let childrens = dataOptions
path.forEach((p) => {
if (childrens) {
const childrenItem = childrens.find(c => c[this.props.value] === p)
if (childrenItem) {
childrens = childrenItem.children
} else {
childrens = childrenItem
}
}
})
if (childrens) {
resolve([])
} else {
this.getNodes(level, resolve, value)
}
} else {
this.getNodes(level, resolve, value)
}
}
},
getNodes(level, resolve, value = 0) {
getSysArea({ pid: value, _t: Math.random() }).then((res) => {
const { lists } = res.data
// console.log(this.$refs['address-cascader'])
const nodeArr = lists.map(item => ({
id: item.id,
name: item.name,
leaf: level >= this.level,
}))
resolve(nodeArr)
})
},
getAddress(pid) {
return getSysArea({ pid, _t: Math.random() }).then(res => res.data.lists)
},
cascaderChange(e) {
this.$emit('input', e)
},
},
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,111 @@
<template>
<transition :name="transitionName">
<div v-show="visible" :style="customStyle" class="back-to-ceiling" @click="backToTop">
<svg width="16" height="16" viewBox="0 0 17 17" xmlns="http://www.w3.org/2000/svg" class="Icon Icon--backToTopArrow" aria-hidden="true" style="height:16px;width:16px"><path d="M12.036 15.59a1 1 0 0 1-.997.995H5.032a.996.996 0 0 1-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z" /></svg>
</div>
</transition>
</template>
<script>
export default {
name: 'BackToTop',
props: {
visibilityHeight: {
type: Number,
default: 400
},
backPosition: {
type: Number,
default: 0
},
customStyle: {
type: Object,
default: function() {
return {
right: '50px',
bottom: '50px',
width: '40px',
height: '40px',
'border-radius': '4px',
'line-height': '45px',
background: '#e7eaf1'
}
}
},
transitionName: {
type: String,
default: 'fade'
}
},
data() {
return {
visible: false,
interval: null,
isMoving: false
}
},
mounted() {
window.addEventListener('scroll', this.handleScroll)
},
beforeDestroy() {
window.removeEventListener('scroll', this.handleScroll)
if (this.interval) {
clearInterval(this.interval)
}
},
methods: {
handleScroll() {
this.visible = window.pageYOffset > this.visibilityHeight
},
backToTop() {
if (this.isMoving) return
const start = window.pageYOffset
let i = 0
this.isMoving = true
this.interval = setInterval(() => {
const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500))
if (next <= this.backPosition) {
window.scrollTo(0, this.backPosition)
clearInterval(this.interval)
this.isMoving = false
} else {
window.scrollTo(0, next)
}
i++
}, 16.7)
},
easeInOutQuad(t, b, c, d) {
if ((t /= d / 2) < 1) return c / 2 * t * t + b
return -c / 2 * (--t * (t - 2) - 1) + b
}
}
}
</script>
<style scoped>
.back-to-ceiling {
position: fixed;
display: inline-block;
text-align: center;
cursor: pointer;
}
.back-to-ceiling:hover {
background: #d5dbe7;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity .5s;
}
.fade-enter,
.fade-leave-to {
opacity: 0
}
.back-to-ceiling .Icon {
fill: #9aaabf;
background: none;
}
</style>

View File

@ -0,0 +1,82 @@
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<span v-if="item.redirect==='noRedirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
</template>
<script>
import pathToRegexp from 'path-to-regexp'
export default {
data() {
return {
levelList: null
}
},
watch: {
$route(route) {
// if you go to the redirect page, do not update the breadcrumbs
if (route.path.startsWith('/redirect/')) {
return
}
this.getBreadcrumb()
}
},
created() {
this.getBreadcrumb()
},
methods: {
getBreadcrumb() {
// only show routes with meta.title
let matched = this.$route.matched.filter(item => item.meta && item.meta.title)
const first = matched[0]
if (!this.isDashboard(first)) {
matched = [{ path: '/dashboard', meta: { title: 'Dashboard' }}].concat(matched)
}
this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
},
isDashboard(route) {
const name = route && route.name
if (!name) {
return false
}
return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()
},
pathCompile(path) {
// To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
const { params } = this.$route
var toPath = pathToRegexp.compile(path)
return toPath(params)
},
handleLink(item) {
const { redirect, path } = item
if (redirect) {
this.$router.push(redirect)
return
}
this.$router.push(this.pathCompile(path))
}
}
}
</script>
<style lang="scss" scoped>
.app-breadcrumb.el-breadcrumb {
display: inline-block;
font-size: 14px;
line-height: 50px;
margin-left: 8px;
.no-redirect {
color: #97a8be;
cursor: text;
}
}
</style>

View File

@ -0,0 +1,155 @@
<template>
<div :id="id" :class="className" :style="{height:height,width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
export default {
mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
id: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '200px'
},
height: {
type: String,
default: '200px'
}
},
data() {
return {
chart: null
}
},
mounted() {
this.initChart()
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(document.getElementById(this.id))
const xAxisData = []
const data = []
const data2 = []
for (let i = 0; i < 50; i++) {
xAxisData.push(i)
data.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5)
data2.push((Math.sin(i / 5) * (i / 5 + 10) + i / 6) * 3)
}
this.chart.setOption({
backgroundColor: '#08263a',
grid: {
left: '5%',
right: '5%'
},
xAxis: [{
show: false,
data: xAxisData
}, {
show: false,
data: xAxisData
}],
visualMap: {
show: false,
min: 0,
max: 50,
dimension: 0,
inRange: {
color: ['#4a657a', '#308e92', '#b1cfa5', '#f5d69f', '#f5898b', '#ef5055']
}
},
yAxis: {
axisLine: {
show: false
},
axisLabel: {
textStyle: {
color: '#4a657a'
}
},
splitLine: {
show: true,
lineStyle: {
color: '#08263f'
}
},
axisTick: {
show: false
}
},
series: [{
name: 'back',
type: 'bar',
data: data2,
z: 1,
itemStyle: {
normal: {
opacity: 0.4,
barBorderRadius: 5,
shadowBlur: 3,
shadowColor: '#111'
}
}
}, {
name: 'Simulate Shadow',
type: 'line',
data,
z: 2,
showSymbol: false,
animationDelay: 0,
animationEasing: 'linear',
animationDuration: 1200,
lineStyle: {
normal: {
color: 'transparent'
}
},
areaStyle: {
normal: {
color: '#08263a',
shadowBlur: 50,
shadowColor: '#000'
}
}
}, {
name: 'front',
type: 'bar',
data,
xAxisIndex: 1,
z: 3,
itemStyle: {
normal: {
barBorderRadius: 5
}
}
}],
animationEasing: 'elasticOut',
animationEasingUpdate: 'elasticOut',
animationDelay(idx) {
return idx * 20
},
animationDelayUpdate(idx) {
return idx * 20
}
})
}
}
}
</script>

View File

@ -0,0 +1,227 @@
<template>
<div :id="id" :class="className" :style="{height:height,width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
export default {
mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
id: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '200px'
},
height: {
type: String,
default: '200px'
}
},
data() {
return {
chart: null
}
},
mounted() {
this.initChart()
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(document.getElementById(this.id))
this.chart.setOption({
backgroundColor: '#394056',
title: {
top: 20,
text: 'Requests',
textStyle: {
fontWeight: 'normal',
fontSize: 16,
color: '#F1F1F3'
},
left: '1%'
},
tooltip: {
trigger: 'axis',
axisPointer: {
lineStyle: {
color: '#57617B'
}
}
},
legend: {
top: 20,
icon: 'rect',
itemWidth: 14,
itemHeight: 5,
itemGap: 13,
data: ['CMCC', 'CTCC', 'CUCC'],
right: '4%',
textStyle: {
fontSize: 12,
color: '#F1F1F3'
}
},
grid: {
top: 100,
left: '2%',
right: '2%',
bottom: '2%',
containLabel: true
},
xAxis: [{
type: 'category',
boundaryGap: false,
axisLine: {
lineStyle: {
color: '#57617B'
}
},
data: ['13:00', '13:05', '13:10', '13:15', '13:20', '13:25', '13:30', '13:35', '13:40', '13:45', '13:50', '13:55']
}],
yAxis: [{
type: 'value',
name: '(%)',
axisTick: {
show: false
},
axisLine: {
lineStyle: {
color: '#57617B'
}
},
axisLabel: {
margin: 10,
textStyle: {
fontSize: 14
}
},
splitLine: {
lineStyle: {
color: '#57617B'
}
}
}],
series: [{
name: 'CMCC',
type: 'line',
smooth: true,
symbol: 'circle',
symbolSize: 5,
showSymbol: false,
lineStyle: {
normal: {
width: 1
}
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(137, 189, 27, 0.3)'
}, {
offset: 0.8,
color: 'rgba(137, 189, 27, 0)'
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowBlur: 10
}
},
itemStyle: {
normal: {
color: 'rgb(137,189,27)',
borderColor: 'rgba(137,189,2,0.27)',
borderWidth: 12
}
},
data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122]
}, {
name: 'CTCC',
type: 'line',
smooth: true,
symbol: 'circle',
symbolSize: 5,
showSymbol: false,
lineStyle: {
normal: {
width: 1
}
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(0, 136, 212, 0.3)'
}, {
offset: 0.8,
color: 'rgba(0, 136, 212, 0)'
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowBlur: 10
}
},
itemStyle: {
normal: {
color: 'rgb(0,136,212)',
borderColor: 'rgba(0,136,212,0.2)',
borderWidth: 12
}
},
data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150]
}, {
name: 'CUCC',
type: 'line',
smooth: true,
symbol: 'circle',
symbolSize: 5,
showSymbol: false,
lineStyle: {
normal: {
width: 1
}
},
areaStyle: {
normal: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
offset: 0,
color: 'rgba(219, 50, 51, 0.3)'
}, {
offset: 0.8,
color: 'rgba(219, 50, 51, 0)'
}], false),
shadowColor: 'rgba(0, 0, 0, 0.1)',
shadowBlur: 10
}
},
itemStyle: {
normal: {
color: 'rgb(219,50,51)',
borderColor: 'rgba(219,50,51,0.2)',
borderWidth: 12
}
},
data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122]
}]
})
}
}
}
</script>

View File

@ -0,0 +1,271 @@
<template>
<div :id="id" :class="className" :style="{height:height,width:width}" />
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
export default {
mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
id: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '200px'
},
height: {
type: String,
default: '200px'
}
},
data() {
return {
chart: null
}
},
mounted() {
this.initChart()
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(document.getElementById(this.id))
const xData = (function() {
const data = []
for (let i = 1; i < 13; i++) {
data.push(i + 'month')
}
return data
}())
this.chart.setOption({
backgroundColor: '#344b58',
title: {
text: 'statistics',
x: '20',
top: '20',
textStyle: {
color: '#fff',
fontSize: '22'
},
subtextStyle: {
color: '#90979c',
fontSize: '16'
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
textStyle: {
color: '#fff'
}
}
},
grid: {
left: '5%',
right: '5%',
borderWidth: 0,
top: 150,
bottom: 95,
textStyle: {
color: '#fff'
}
},
legend: {
x: '5%',
top: '10%',
textStyle: {
color: '#90979c'
},
data: ['female', 'male', 'average']
},
calculable: true,
xAxis: [{
type: 'category',
axisLine: {
lineStyle: {
color: '#90979c'
}
},
splitLine: {
show: false
},
axisTick: {
show: false
},
splitArea: {
show: false
},
axisLabel: {
interval: 0
},
data: xData
}],
yAxis: [{
type: 'value',
splitLine: {
show: false
},
axisLine: {
lineStyle: {
color: '#90979c'
}
},
axisTick: {
show: false
},
axisLabel: {
interval: 0
},
splitArea: {
show: false
}
}],
dataZoom: [{
show: true,
height: 30,
xAxisIndex: [
0
],
bottom: 30,
start: 10,
end: 80,
handleIcon: 'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
handleSize: '110%',
handleStyle: {
color: '#d3dee5'
},
textStyle: {
color: '#fff' },
borderColor: '#90979c'
}, {
type: 'inside',
show: true,
height: 15,
start: 1,
end: 35
}],
series: [{
name: 'female',
type: 'bar',
stack: 'total',
barMaxWidth: 35,
barGap: '10%',
itemStyle: {
normal: {
color: 'rgba(255,144,128,1)',
label: {
show: true,
textStyle: {
color: '#fff'
},
position: 'insideTop',
formatter(p) {
return p.value > 0 ? p.value : ''
}
}
}
},
data: [
709,
1917,
2455,
2610,
1719,
1433,
1544,
3285,
5208,
3372,
2484,
4078
]
},
{
name: 'male',
type: 'bar',
stack: 'total',
itemStyle: {
normal: {
color: 'rgba(0,191,183,1)',
barBorderRadius: 0,
label: {
show: true,
position: 'top',
formatter(p) {
return p.value > 0 ? p.value : ''
}
}
}
},
data: [
327,
1776,
507,
1200,
800,
482,
204,
1390,
1001,
951,
381,
220
]
}, {
name: 'average',
type: 'line',
stack: 'total',
symbolSize: 10,
symbol: 'circle',
itemStyle: {
normal: {
color: 'rgba(252,230,48,1)',
barBorderRadius: 0,
label: {
show: true,
position: 'top',
formatter(p) {
return p.value > 0 ? p.value : ''
}
}
}
},
data: [
1036,
3693,
2962,
3810,
2519,
1915,
1748,
4675,
6209,
4323,
2865,
4298
]
}
]
})
}
}
}
</script>

View File

@ -0,0 +1,56 @@
import { debounce } from '@/utils'
export default {
data() {
return {
$_sidebarElm: null,
$_resizeHandler: null
}
},
mounted() {
this.initListener()
},
activated() {
if (!this.$_resizeHandler) {
// avoid duplication init
this.initListener()
}
// when keep-alive chart activated, auto resize
this.resize()
},
beforeDestroy() {
this.destroyListener()
},
deactivated() {
this.destroyListener()
},
methods: {
// use $_ for mixins properties
// https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
$_sidebarResizeHandler(e) {
if (e.propertyName === 'width') {
this.$_resizeHandler()
}
},
initListener() {
this.$_resizeHandler = debounce(() => {
this.resize()
}, 100)
window.addEventListener('resize', this.$_resizeHandler)
this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
},
destroyListener() {
window.removeEventListener('resize', this.$_resizeHandler)
this.$_resizeHandler = null
this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
},
resize() {
const { chart } = this
chart && chart.resize()
}
}
}

View File

@ -0,0 +1,166 @@
<template>
<div class="dndList">
<div :style="{width:width1}" class="dndList-list">
<h3>{{ list1Title }}</h3>
<draggable :set-data="setData" :list="list1" group="article" class="dragArea">
<div v-for="element in list1" :key="element.id" class="list-complete-item">
<div class="list-complete-item-handle">
{{ element.id }}[{{ element.author }}] {{ element.title }}
</div>
<div style="position:absolute;right:0px;">
<span style="float: right ;margin-top: -20px;margin-right:5px;" @click="deleteEle(element)">
<i style="color:#ff4949" class="el-icon-delete" />
</span>
</div>
</div>
</draggable>
</div>
<div :style="{width:width2}" class="dndList-list">
<h3>{{ list2Title }}</h3>
<draggable :list="list2" group="article" class="dragArea">
<div v-for="element in list2" :key="element.id" class="list-complete-item">
<div class="list-complete-item-handle2" @click="pushEle(element)">
{{ element.id }} [{{ element.author }}] {{ element.title }}
</div>
</div>
</draggable>
</div>
</div>
</template>
<script>
import draggable from 'vuedraggable'
export default {
name: 'DndList',
components: { draggable },
props: {
list1: {
type: Array,
default() {
return []
}
},
list2: {
type: Array,
default() {
return []
}
},
list1Title: {
type: String,
default: 'list1'
},
list2Title: {
type: String,
default: 'list2'
},
width1: {
type: String,
default: '48%'
},
width2: {
type: String,
default: '48%'
}
},
methods: {
isNotInList1(v) {
return this.list1.every(k => v.id !== k.id)
},
isNotInList2(v) {
return this.list2.every(k => v.id !== k.id)
},
deleteEle(ele) {
for (const item of this.list1) {
if (item.id === ele.id) {
const index = this.list1.indexOf(item)
this.list1.splice(index, 1)
break
}
}
if (this.isNotInList2(ele)) {
this.list2.unshift(ele)
}
},
pushEle(ele) {
for (const item of this.list2) {
if (item.id === ele.id) {
const index = this.list2.indexOf(item)
this.list2.splice(index, 1)
break
}
}
if (this.isNotInList1(ele)) {
this.list1.push(ele)
}
},
setData(dataTransfer) {
// to avoid Firefox bug
// Detail see : https://github.com/RubaXa/Sortable/issues/1012
dataTransfer.setData('Text', '')
}
}
}
</script>
<style lang="scss" scoped>
.dndList {
background: #fff;
padding-bottom: 40px;
&:after {
content: "";
display: table;
clear: both;
}
.dndList-list {
float: left;
padding-bottom: 30px;
&:first-of-type {
margin-right: 2%;
}
.dragArea {
margin-top: 15px;
min-height: 50px;
padding-bottom: 30px;
}
}
}
.list-complete-item {
cursor: pointer;
position: relative;
font-size: 14px;
padding: 5px 12px;
margin-top: 4px;
border: 1px solid #bfcbd9;
transition: all 1s;
}
.list-complete-item-handle {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 50px;
}
.list-complete-item-handle2 {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-right: 20px;
}
.list-complete-item.sortable-chosen {
background: #4AB7BD;
}
.list-complete-item.sortable-ghost {
background: #30B08F;
}
.list-complete-enter,
.list-complete-leave-active {
opacity: 0;
}
</style>

View File

@ -0,0 +1,65 @@
<template>
<el-select ref="dragSelect" v-model="selectVal" v-bind="$attrs" class="drag-select" multiple v-on="$listeners">
<slot />
</el-select>
</template>
<script>
import Sortable from 'sortablejs'
export default {
name: 'DragSelect',
props: {
value: {
type: Array,
required: true
}
},
computed: {
selectVal: {
get() {
return [...this.value]
},
set(val) {
this.$emit('input', [...val])
}
}
},
mounted() {
this.setSort()
},
methods: {
setSort() {
const el = this.$refs.dragSelect.$el.querySelectorAll('.el-select__tags > span')[0]
this.sortable = Sortable.create(el, {
ghostClass: 'sortable-ghost', // Class name for the drop placeholder,
setData: function(dataTransfer) {
dataTransfer.setData('Text', '')
// to avoid Firefox bug
// Detail see : https://github.com/RubaXa/Sortable/issues/1012
},
onEnd: evt => {
const targetRow = this.value.splice(evt.oldIndex, 1)[0]
this.value.splice(evt.newIndex, 0, targetRow)
}
})
}
}
}
</script>
<style lang="scss" scoped>
.drag-select {
::v-deep {
.sortable-ghost {
opacity: .8;
color: #fff !important;
background: #42b983 !important;
}
.el-tag {
cursor: pointer;
}
}
}
</style>

View File

@ -0,0 +1,297 @@
<template>
<div :id="id" :ref="id" :action="url" class="dropzone">
<input type="file" name="file">
</div>
</template>
<script>
import Dropzone from 'dropzone'
import 'dropzone/dist/dropzone.css'
// import { getToken } from 'api/qiniu';
Dropzone.autoDiscover = false
export default {
props: {
id: {
type: String,
required: true
},
url: {
type: String,
required: true
},
clickable: {
type: Boolean,
default: true
},
defaultMsg: {
type: String,
default: '上传图片'
},
acceptedFiles: {
type: String,
default: ''
},
thumbnailHeight: {
type: Number,
default: 200
},
thumbnailWidth: {
type: Number,
default: 200
},
showRemoveLink: {
type: Boolean,
default: true
},
maxFilesize: {
type: Number,
default: 2
},
maxFiles: {
type: Number,
default: 3
},
autoProcessQueue: {
type: Boolean,
default: true
},
useCustomDropzoneOptions: {
type: Boolean,
default: false
},
defaultImg: {
default: '',
type: [String, Array]
},
couldPaste: {
type: Boolean,
default: false
}
},
data() {
return {
dropzone: '',
initOnce: true
}
},
watch: {
defaultImg(val) {
if (val.length === 0) {
this.initOnce = false
return
}
if (!this.initOnce) return
this.initImages(val)
this.initOnce = false
}
},
mounted() {
const element = document.getElementById(this.id)
const vm = this
this.dropzone = new Dropzone(element, {
clickable: this.clickable,
thumbnailWidth: this.thumbnailWidth,
thumbnailHeight: this.thumbnailHeight,
maxFiles: this.maxFiles,
maxFilesize: this.maxFilesize,
dictRemoveFile: 'Remove',
addRemoveLinks: this.showRemoveLink,
acceptedFiles: this.acceptedFiles,
autoProcessQueue: this.autoProcessQueue,
dictDefaultMessage: '<i style="margin-top: 3em;display: inline-block" class="material-icons">' + this.defaultMsg + '</i><br>Drop files here to upload',
dictMaxFilesExceeded: '只能一个图',
previewTemplate: '<div class="dz-preview dz-file-preview"> <div class="dz-image" style="width:' + this.thumbnailWidth + 'px;height:' + this.thumbnailHeight + 'px" ><img style="width:' + this.thumbnailWidth + 'px;height:' + this.thumbnailHeight + 'px" data-dz-thumbnail /></div> <div class="dz-details"><div class="dz-size"><span data-dz-size></span></div> <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div> <div class="dz-error-message"><span data-dz-errormessage></span></div> <div class="dz-success-mark"> <i class="material-icons">done</i> </div> <div class="dz-error-mark"><i class="material-icons">error</i></div></div>',
init() {
const val = vm.defaultImg
if (!val) return
if (Array.isArray(val)) {
if (val.length === 0) return
val.map((v, i) => {
const mockFile = { name: 'name' + i, size: 12345, url: v }
this.options.addedfile.call(this, mockFile)
this.options.thumbnail.call(this, mockFile, v)
mockFile.previewElement.classList.add('dz-success')
mockFile.previewElement.classList.add('dz-complete')
vm.initOnce = false
return true
})
} else {
const mockFile = { name: 'name', size: 12345, url: val }
this.options.addedfile.call(this, mockFile)
this.options.thumbnail.call(this, mockFile, val)
mockFile.previewElement.classList.add('dz-success')
mockFile.previewElement.classList.add('dz-complete')
vm.initOnce = false
}
},
accept: (file, done) => {
/* 七牛*/
// const token = this.$store.getters.token;
// getToken(token).then(response => {
// file.token = response.data.qiniu_token;
// file.key = response.data.qiniu_key;
// file.url = response.data.qiniu_url;
// done();
// })
done()
},
sending: (file, xhr, formData) => {
// formData.append('token', file.token);
// formData.append('key', file.key);
vm.initOnce = false
}
})
if (this.couldPaste) {
document.addEventListener('paste', this.pasteImg)
}
this.dropzone.on('success', file => {
vm.$emit('dropzone-success', file, vm.dropzone.element)
})
this.dropzone.on('addedfile', file => {
vm.$emit('dropzone-fileAdded', file)
})
this.dropzone.on('removedfile', file => {
vm.$emit('dropzone-removedFile', file)
})
this.dropzone.on('error', (file, error, xhr) => {
vm.$emit('dropzone-error', file, error, xhr)
})
this.dropzone.on('successmultiple', (file, error, xhr) => {
vm.$emit('dropzone-successmultiple', file, error, xhr)
})
},
destroyed() {
document.removeEventListener('paste', this.pasteImg)
this.dropzone.destroy()
},
methods: {
removeAllFiles() {
this.dropzone.removeAllFiles(true)
},
processQueue() {
this.dropzone.processQueue()
},
pasteImg(event) {
const items = (event.clipboardData || event.originalEvent.clipboardData).items
if (items[0].kind === 'file') {
this.dropzone.addFile(items[0].getAsFile())
}
},
initImages(val) {
if (!val) return
if (Array.isArray(val)) {
val.map((v, i) => {
const mockFile = { name: 'name' + i, size: 12345, url: v }
this.dropzone.options.addedfile.call(this.dropzone, mockFile)
this.dropzone.options.thumbnail.call(this.dropzone, mockFile, v)
mockFile.previewElement.classList.add('dz-success')
mockFile.previewElement.classList.add('dz-complete')
return true
})
} else {
const mockFile = { name: 'name', size: 12345, url: val }
this.dropzone.options.addedfile.call(this.dropzone, mockFile)
this.dropzone.options.thumbnail.call(this.dropzone, mockFile, val)
mockFile.previewElement.classList.add('dz-success')
mockFile.previewElement.classList.add('dz-complete')
}
}
}
}
</script>
<style scoped>
.dropzone {
border: 2px solid #E5E5E5;
font-family: 'Roboto', sans-serif;
color: #777;
transition: background-color .2s linear;
padding: 5px;
}
.dropzone:hover {
background-color: #F6F6F6;
}
i {
color: #CCC;
}
.dropzone .dz-image img {
width: 100%;
height: 100%;
}
.dropzone input[name='file'] {
display: none;
}
.dropzone .dz-preview .dz-image {
border-radius: 0px;
}
.dropzone .dz-preview:hover .dz-image img {
transform: none;
filter: none;
width: 100%;
height: 100%;
}
.dropzone .dz-preview .dz-details {
bottom: 0px;
top: 0px;
color: white;
background-color: rgba(33, 150, 243, 0.8);
transition: opacity .2s linear;
text-align: left;
}
.dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {
background-color: transparent;
}
.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
border: none;
}
.dropzone .dz-preview .dz-details .dz-filename:hover span {
background-color: transparent;
border: none;
}
.dropzone .dz-preview .dz-remove {
position: absolute;
z-index: 30;
color: white;
margin-left: 15px;
padding: 10px;
top: inherit;
bottom: 15px;
border: 2px white solid;
text-decoration: none;
text-transform: uppercase;
font-size: 0.8rem;
font-weight: 800;
letter-spacing: 1.1px;
opacity: 0;
}
.dropzone .dz-preview:hover .dz-remove {
opacity: 1;
}
.dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {
margin-left: -40px;
margin-top: -50px;
}
.dropzone .dz-preview .dz-success-mark i, .dropzone .dz-preview .dz-error-mark i {
color: white;
font-size: 5rem;
}
</style>

View File

@ -0,0 +1,78 @@
<template>
<div v-if="errorLogs.length>0">
<el-badge :is-dot="true" style="line-height: 25px;margin-top: -5px;" @click.native="dialogTableVisible=true">
<el-button style="padding: 8px 10px;" size="small" type="danger">
<svg-icon icon-class="bug" />
</el-button>
</el-badge>
<el-dialog :visible.sync="dialogTableVisible" width="80%" append-to-body>
<div slot="title">
<span style="padding-right: 10px;">Error Log</span>
<el-button size="mini" type="primary" icon="el-icon-delete" @click="clearAll">Clear All</el-button>
</div>
<el-table :data="errorLogs" border>
<el-table-column label="Message">
<template slot-scope="{row}">
<div>
<span class="message-title">Msg:</span>
<el-tag type="danger">
{{ row.err.message }}
</el-tag>
</div>
<br>
<div>
<span class="message-title" style="padding-right: 10px;">Info: </span>
<el-tag type="warning">
{{ row.vm.$vnode.tag }} error in {{ row.info }}
</el-tag>
</div>
<br>
<div>
<span class="message-title" style="padding-right: 16px;">Url: </span>
<el-tag type="success">
{{ row.url }}
</el-tag>
</div>
</template>
</el-table-column>
<el-table-column label="Stack">
<template slot-scope="scope">
{{ scope.row.err.stack }}
</template>
</el-table-column>
</el-table>
</el-dialog>
</div>
</template>
<script>
export default {
name: 'ErrorLog',
data() {
return {
dialogTableVisible: false
}
},
computed: {
errorLogs() {
return this.$store.getters.errorLogs
}
},
methods: {
clearAll() {
this.dialogTableVisible = false
this.$store.dispatch('errorLog/clearErrorLog')
}
}
}
</script>
<style scoped>
.message-title {
font-size: 16px;
color: #333;
font-weight: bold;
padding-right: 8px;
}
</style>

View File

@ -0,0 +1,61 @@
<template>
<el-button v-loading="loading" :type="type" :size="size" @click="download">
模板下载
</el-button>
</template>
<script>
import { get_template } from '@/api/import-data'
export default {
props: {
action: {
type: String,
default: ''
},
code: {
type: String,
default: ''
},
type: {
type: String,
default: 'success'
},
size: {
type: String,
default: ''
}
},
data() {
return {
loading: false,
downloadList: []
}
},
mounted() {
this.getData()
},
methods: {
getData() {
get_template().then(res => {
console.log(res)
this.downloadList = res.data.filter(item => item.mark === this.action)
})
},
download() {
this.loading = true
this.downloadList.forEach((item, index) => {
setTimeout(() => {
const aEl = document.createElement('a')
const e = document.createEvent('MouseEvents') //
e.initEvent('click', false, false) //
aEl.href = item.url
// aEl.click()
aEl.dispatchEvent(e)
aEl.remove()
}, index * 500)
})
this.loading = false
},
}
}
</script>

View File

@ -0,0 +1,132 @@
<template>
<div class="filter-container">
<template v-for="(item, index) of inputs">
<!-- <el-input
:key="item.prop || ('i-' + index)"
v-model="info[item.prop]"
:placeholder="item.placeholder"
prefix-icon="el-icon-search"
clearable
@keyup.enter.native="handleClick('enter')"
/> -->
<my-field :key="'i-' + item.prop + index" v-model="info[item.prop]" :field="{...item, clearable: true}" style="width: 240px;" class="filter-item input" @keyup.enter.native="handleClick('search')" />
</template>
<el-button
class="filter-item"
style="margin-left: 10px;"
type="primary"
icon="el-icon-search"
@click="handleClick('search')"
>搜索
</el-button>
<el-button
class="filter-item"
style="margin-left: 10px;"
type="primary"
@click="handleClick('reset')"
>重置
</el-button>
<el-button
v-if="hasExport"
class="filter-item"
style="margin-left: 10px;"
type="primary"
icon="el-icon-download"
@click="handleClick('export')"
>导出
</el-button>
<slot />
<template v-for="(item, index) of handlers">
<el-button
:key="item.name || ('b-' + index)"
class="filter-item"
style="margin-left: 10px;"
:type="item.type || 'primary'"
:icon="item.icon"
@click="handleClick(index)"
>{{ item.title }}
</el-button>
</template>
</div>
</template>
<script>
import MyField from '@/components/MyField'
import { objectFindLikeValue, unfoldObjectKey } from '@/utils'
export default {
components: { MyField },
props: {
inputs: {
type: Array,
default: () => []
},
handlers: {
type: Array,
default: () => []
},
hasExport: {
type: Boolean,
default: false
}
},
data() {
return {
info: {}
}
},
watch: {
inputs() {
this.setData()
}
},
created() {
this.setData()
},
methods: {
setData() {
const { inputs } = this
if (inputs && inputs.length) {
inputs.forEach((item) => {
this.$set(this.info, item.prop, item.defaultValue)
})
}
},
handleClick(type) {
let detail
if (typeof type === 'number') {
detail = this.getInfoObject()
if (this.handlers[type].handler) {
this.handlers[type].handler(detail)
}
type = `handler`
} else if (type === 'reset') {
Object.keys(this.info).forEach(key => {
this.info[key] = undefined
})
detail = this.getInfoObject()
} else {
detail = this.getInfoObject()
}
// const detail = this.getInfoObject()
this.$emit(type, detail)
this.$emit('all', { type, detail })
},
getInfoObject() {
const { info } = this
return unfoldObjectKey(info)
},
getModel(keyString) {
return objectFindLikeValue(this.info, keyString)
}
}
}
</script>
<style scoped>
.filter-item.input{
margin-left: 3px;
}
.filter-container .filter-item.input:first-child{
margin-left: 0px;
}
</style>

View File

@ -0,0 +1,54 @@
<template>
<a href="https://github.com/PanJiaChen/vue-element-admin" target="_blank" class="github-corner" aria-label="View source on Github">
<svg
width="80"
height="80"
viewBox="0 0 250 250"
style="fill:#40c9c6; color:#fff;"
aria-hidden="true"
>
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />
<path
d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
fill="currentColor"
style="transform-origin: 130px 106px;"
class="octo-arm"
/>
<path
d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
fill="currentColor"
class="octo-body"
/>
</svg>
</a>
</template>
<style scoped>
.github-corner:hover .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
@keyframes octocat-wave {
0%,
100% {
transform: rotate(0)
}
20%,
60% {
transform: rotate(-25deg)
}
40%,
80% {
transform: rotate(10deg)
}
}
@media (max-width:500px) {
.github-corner:hover .octo-arm {
animation: none
}
.github-corner .octo-arm {
animation: octocat-wave 560ms ease-in-out
}
}
</style>

View File

@ -0,0 +1,44 @@
<template>
<div style="padding: 0 15px;" @click="toggleClick">
<svg
:class="{'is-active':isActive}"
class="hamburger"
viewBox="0 0 1024 1024"
xmlns="http://www.w3.org/2000/svg"
width="64"
height="64"
>
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
</svg>
</div>
</template>
<script>
export default {
name: 'Hamburger',
props: {
isActive: {
type: Boolean,
default: false
}
},
methods: {
toggleClick() {
this.$emit('toggleClick')
}
}
}
</script>
<style scoped>
.hamburger {
display: inline-block;
vertical-align: middle;
width: 20px;
height: 20px;
}
.hamburger.is-active {
transform: rotate(180deg);
}
</style>

View File

@ -0,0 +1,180 @@
<template>
<div :class="{'show':show}" class="header-search">
<svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
<el-select
ref="headerSearchSelect"
v-model="search"
:remote-method="querySearch"
filterable
default-first-option
remote
placeholder="Search"
class="header-search-select"
@change="change"
>
<el-option v-for="item in options" :key="item.path" :value="item" :label="item.title.join(' > ')" />
</el-select>
</div>
</template>
<script>
// fuse is a lightweight fuzzy-search module
// make search results more in line with expectations
import Fuse from 'fuse.js'
import path from 'path'
export default {
name: 'HeaderSearch',
data() {
return {
search: '',
options: [],
searchPool: [],
show: false,
fuse: undefined
}
},
computed: {
routes() {
return this.$store.getters.permission_routes
}
},
watch: {
routes() {
this.searchPool = this.generateRoutes(this.routes)
},
searchPool(list) {
this.initFuse(list)
},
show(value) {
if (value) {
document.body.addEventListener('click', this.close)
} else {
document.body.removeEventListener('click', this.close)
}
}
},
mounted() {
this.searchPool = this.generateRoutes(this.routes)
},
methods: {
click() {
this.show = !this.show
if (this.show) {
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
}
},
close() {
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
this.options = []
this.show = false
},
change(val) {
this.$router.push(val.path)
this.search = ''
this.options = []
this.$nextTick(() => {
this.show = false
})
},
initFuse(list) {
this.fuse = new Fuse(list, {
shouldSort: true,
threshold: 0.4,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 1,
keys: [{
name: 'title',
weight: 0.7
}, {
name: 'path',
weight: 0.3
}]
})
},
// Filter out the routes that can be displayed in the sidebar
// And generate the internationalized title
generateRoutes(routes, basePath = '/', prefixTitle = []) {
let res = []
for (const router of routes) {
// skip hidden router
if (router.hidden) { continue }
const data = {
path: path.resolve(basePath, router.path),
title: [...prefixTitle]
}
if (router.meta && router.meta.title) {
data.title = [...data.title, router.meta.title]
if (router.redirect !== 'noRedirect') {
// only push the routes with title
// special case: need to exclude parent router without redirect
res.push(data)
}
}
// recursive child routes
if (router.children) {
const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
if (tempRoutes.length >= 1) {
res = [...res, ...tempRoutes]
}
}
}
return res
},
querySearch(query) {
if (query !== '') {
this.options = this.fuse.search(query)
} else {
this.options = []
}
}
}
}
</script>
<style lang="scss" scoped>
.header-search {
font-size: 0 !important;
.search-icon {
cursor: pointer;
font-size: 18px;
vertical-align: middle;
}
.header-search-select {
font-size: 18px;
transition: width 0.2s;
width: 0;
overflow: hidden;
background: transparent;
border-radius: 0;
display: inline-block;
vertical-align: middle;
::v-deep .el-input__inner {
border-radius: 0;
border: 0;
padding-left: 0;
padding-right: 0;
box-shadow: none !important;
border-bottom: 1px solid #d9d9d9;
vertical-align: middle;
}
}
&.show {
.header-search-select {
width: 210px;
margin-left: 10px;
}
}
}
</style>

Some files were not shown because too many files have changed in this diff Show More